<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi everyone,</p>
<p>While I'm starting to focus more on node-level optimisations,
since they benefit more platforms and can produce better
optimisations in some situations due to cross-platform support and
things like register allocation, I'm thinking about refactoring
and improving x86's OptPass1MOV routine for the following main
reasons:</p>
<ul>
<li>It has become a massive, monolithic Frankenstein's monster of
an optmisation routine with lots of different optimisations and
styles of optimisation that are a little difficult to track
sometimes (this is partly a given though since about 25% of all
x86 assembly language consists of a MOV instruction). Some
refactoring will make it more maintainable and potentially
faster and smaller.<br>
</li>
<li>It's not as neat and far-reaching as, say, the equivalent
routine for the AArch64 peephole optimizer, which utilises
GetNextInstructionUsingReg that can produce more long-range
optimisations under -O3.</li>
</ul>
<p>In other news, pure functions are still waiting for some
third-party testing although I've fixed a couple of bugs in the
interim. Currently, the main sticking point are that
floating-point values are not being propagated (pure function
analysis utilises constant propagation, deadstore removal and
in-depth node optimisation to calculate output values). Making a
patch to enable this has revealed some shortcomings, notably how
programs and tests behave when floating-point exceptions are
enabled (operations where deterministic values are divided by zero
are being replaced with constants equalling infinity instead of
raising an exception) and also some inconsistent behaviour across
platforms where the Currency type is concerned. Nevertheless,
things are coming together.</p>
<p>Kit<br>
</p>
</body>
</html>