SoftWire is a run-time x86 assembler. It can be used as a JIT compiler back-end for scripting languages, or for dynamic code generation of optimized inner loops.

This version has two major new features. An SSE emulator allows you to generate SSE assembly code even for processors that don't support it like the Pentium II and Athlon Thunderbird. The CodeGenerator class also automatically performs copy propagation. This is, it eliminates any redundant register copies, which greatly increases performance!

Feedback much appreciated!
Posted on 2003-10-27 02:02:00 by C0D1F1ED
When doing a "push 10", it only pushes one byte on the stack, how do I push a doubleword?

You can use the DWORD specifier like this: "push DWORD 10", which will force SoftWire to use the doubleword version of the push instruction.
There is no such thing as only pushing a byte and all byte size pushes should be optimized to the two byte form verses the five byte instruction (or the really bad four byte instruction).
00402800 > $ 6A 0A          PUSH 0A

00402802 . 66:68 0A00 PUSH 0A
00402806 . 68 0A000000 PUSH 0A
This is a lame reply because I haven't really had time to try it out, sorry.
Posted on 2003-10-27 19:49:15 by bitRAKE

There is no such thing as only pushing a byte and all byte size pushes should be optimized to the two byte form verses the five byte instruction (or the really bad four byte instruction).
00402800 > $ 6A 0A          PUSH 0A

00402802 . 66:68 0A00 PUSH 0A
00402806 . 68 0A000000 PUSH 0A
This is a lame reply because I haven't really had time to try it out, sorry.

You're right, the stack always operates with (d)words. Thanks for reminding me of that. It doesn't matter anyway... ;) Now you can make your program longer! :cool:
Posted on 2003-10-28 16:06:50 by C0D1F1ED