Is there a way of pushing a packed doubleword integer from XMM register to the stack? and then later on pop it back when needed?
Ideally I am looking for something like PUSH or POP for general purpose registers, I have checked Intel manuals but I either missed the command or there isn't one...
Or will I have to unpack values to general registers and then push them?
XMM registers, instead, are a completely separate registers set, introduced with SSE and still widely used to this day. They are 128 bit wide, with instructions that can treat them as arrays of 64, 32 (integer and floating point),16 or 8 bit (integer only) values. You have 8 of them in 32 bit mode, 16 in 64 bit.
No, there is no such a asm instruction under x86, but you can do something like:
//Push xmm0
sub esp, 16
movdqu dqword [esp], xmm0
//Pop xmm0
movdqu xmm0, dqword [esp]
add esp, 16
EDIT:
Upper code sample is direct push/pop emulation.
In case that you are using on stack also other local variables, than the ebp
register must be at first properly set, like:
push ebp
mov ebp, esp
sub esp, LocaStackVariablesSize
//... your code
mov esp, ebp
pop ebp
ret
In that case you can also use Daniels solution!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With