Did some testing with new nasmx.inc (117,979 bytes).
* Above problems seems to be fixed.
But there is something else.
1. Trying to use more registersCode compiled with: "nasm.exe -f win64 test.asm -o test.obj"
bits 64
%include "nasmx.inc"
proc testProc,dword x,dword y
uses r10,r11,r12,r13,r14,r15,rdi,rsi,rbx
locals none
xor rax,rax
endproc
Results in:
test.asm:5: error: parser: instruction expected
2. Macro "invoke" saves arguments in stack, before call is madeI think, this has to be done in procedure context, rather than before call is made with invoke macro.
What if somebody call wsprintfA, this procedure doesn't care,
if
somebody saved those arguments into shadow space before.
The one who designed "wsprintfA" ,that is his responsibility to save registers if he needs to do that.
This has to be procedure issue rather than invoke macro issue.
Yes,
somebody could use FASTCALL_STACK_PRELOAD, but this is not the case.
Of course, backward compatibility does not permits to change something.
.- But
what if somebody build obj library and call it from other languages, like C.
In C, the
somebody will not have access to invoke macro and it will not save
somebody's arguments.
.-
What if somebody need to switch between
somebody's custom procedures and some system procedures, like wsprintfA.
Switching between each call could be full of pain.
What if, what if, what if... endless loop of "
what if's".
Who is this "
somebody", well, no one know's, some mystical person.
3. 2.21: NASMX_PRAGMA: Defining pragmasWas reading NASMX fables, from book "NASM-X.CHM" and found one thing, something...
So i made up a Puzzle Game:
Here is one letter too much, which one? : "FASTCALL_STACK_PRELOAD, [ ENABLED | DISABLE ]"
Yes, you think
left right,
this is how it should be:
".... ENABLE ....".
* One byte removal is required.
And that's it, for now!