Hi, All!
For example, I'm writing inline procedure for fast fixed point multiplication.
PROCEDURE -FPMul(fp1, fp2: LONGINT): LONGINT;
CODE {SYSTEM.i386}
POP EAX
POP EDX
IMUL EDX (* IMUL r/m32 (EDX:EAX <-- EAX * r/m dword) *)
SHRD EAX, EDX, BITS
END FPMul;
How better to get operands inside inline procedures? Seems only
POP works

Non-inline working variant of procedure looks like:
PROCEDURE FPMul(fp1, fp2: LONGINT): LONGINT;
CODE {SYSTEM.i386}
MOV EAX, fp1[ESP]
IMUL fp2[ESP] (* IMUL r/m32 (EDX:EAX <-- EAX * r/m dword) *)
SHRD EAX, EDX, BITS
END FPMul;
But compiler didn't allows such operations
MOV EAX, fp1[ESP] nor
IMUL fp2[ESP] in inline code

Why compiler places all operands in stack in generated code? Is it possible to use registers
EAX,
EBX, and so on, as possible optimization here?
