Minimally modified to make it build:option casemap:none
option frame:auto
OPTION WIN64:15
OPTION STACKBASE:RSP
.code
proc1 proc public FRAME uses xmm6 _rcx : qword, _rdx: qword, _r8: qword, _r9 : qword, other: qword
LOCAL lvar1 : ptr
LOCAL lvar2 : XMMWORD
mov eax, 2.0
movd xmm0, eax
shufps xmm0, xmm0,0
movaps XMMWORD ptr lvar2, xmm0
mov rax, other
ret
proc1 endp
start: int 3
invoke proc1, 1, 2, 3, 4, 5
end start
Under the hood:0000000140001000 | 48 83 EC 30 | sub rsp, 30 |
0000000140001004 | C5 F9 7F 34 24 | vmovdqa xmmword ptr ss:[rsp], xmm6 |
0000000140001009 | B8 00 00 00 40 | mov eax, 40000000 |
000000014000100E | 66 0F 6E C0 | movd xmm0, eax |
0000000140001012 | 0F C6 C0 00 | shufps xmm0, xmm0, 0 |
0000000140001016 | 0F 29 44 24 20 | movaps xmmword ptr ss:[rsp+20], xmm0 |
000000014000101B | 48 8B 44 24 58 | mov rax, qword ptr ss:[rsp+58] | rax:BaseThreadInitThunk
0000000140001020 | C5 F9 6F 34 24 | vmovdqa xmm6, xmmword ptr ss:[rsp] |
0000000140001025 | 48 83 C4 30 | add rsp, 30 |
0000000140001029 | C3 | ret |
000000014000102A | CC | int3 |
000000014000102B | 48 C7 C1 01 00 00 00 | mov rcx, 1 |
0000000140001032 | 48 C7 C2 02 00 00 00 | mov rdx, 2 |
0000000140001039 | 49 C7 C0 03 00 00 00 | mov r8, 3 |
0000000140001040 | 49 C7 C1 04 00 00 00 | mov r9, 4 |
0000000140001047 | 48 C7 44 24 20 05 00 00 00 | mov qword ptr ss:[rsp+20], 5 |
0000000140001050 | E8 AB FF FF FF | call 140001000 |
On entry into the proc, the stack is 12FF50h, so it is aligned. Commandline is HJWasm32 /c /Zp8 -win64
Btw is the mov qword ptr ss:[rsp+20], 5 legal? Does the OS already provide shadow memory?