I have fixed one bug and improved saving of xmm registers
before ve had this:
00000000000D1176 mov qword ptr [rsp+8],rcx
00000000000D117B mov qword ptr [rsp+10h],rdx
00000000000D1180 sub rsp,38h ;here we subtract rsp for locals xmm regs
00000000000D1184 movdqa xmmword ptr [rsp],xmm1
00000000000D1189 movdqa xmmword ptr [rsp+10h],xmm2
00000000000D118F movdqa xmmword ptr [aVar],xmm3
00000000000D1195 sub rsp,30h ;here we subtract rsp again for locals and shadows
00000000000D1199 mov eax,dword ptr [val2]
00000000000D119D mov dword ptr [bVar],eax
00000000000D11A1 mov qword ptr [val],21h
00000000000D11AA mov rdx,qword ptr [val]
00000000000D11AF mov rcx,0D4008h
00000000000D11B9 call printf (0D1292h)
00000000000D11BE mov rax,22h
00000000000D11C5 mov qword ptr [aVar],rax
00000000000D11CA mov rdx,qword ptr [aVar]
00000000000D11CF mov rcx,0D400Fh
00000000000D11D9 call printf (0D1292h)
00000000000D11DE call testproc2 (0D11FAh)
00000000000D11E3 movdqa xmm1,xmmword ptr [rsp+40h] ;wrong displacement shpuld be 30h
00000000000D11E9 movdqa xmm2,xmmword ptr [rsp+50h] ;wrong displacement shpuld be 40h
00000000000D11EF movdqa xmm3,xmmword ptr [rsp+60h] ;wrong displacement shpuld be 50h
00000000000D11F5 add rsp,68h
00000000000D11F9 ret
after fix:
0000000000DE1176 mov qword ptr [rsp+8],rcx
0000000000DE117B mov qword ptr [rsp+10h],rdx
0000000000DE1180 sub rsp,68h ;here we subtract at ones space for xmm and locals
0000000000DE1184 movdqa xmmword ptr [rsp+30h],xmm1
0000000000DE118A movdqa xmmword ptr [rsp+40h],xmm2
0000000000DE1190 movdqa xmmword ptr [rsp+50h],xmm3
0000000000DE1196 mov eax,dword ptr [val2]
0000000000DE119A mov dword ptr [bVar],eax
0000000000DE119E mov qword ptr [val],21h
0000000000DE11A7 mov rdx,qword ptr [val]
0000000000DE11AC mov rcx,0DE4008h
0000000000DE11B6 call printf (0DE1292h)
0000000000DE11BB mov rax,22h
0000000000DE11C2 mov qword ptr [aVar],rax
0000000000DE11C7 mov rdx,qword ptr [aVar]
0000000000DE11CC mov rcx,0DE400Fh
0000000000DE11D6 call printf (0DE1292h)
0000000000DE11DB call testproc2 (0DE11F7h)
0000000000DE11E0 movdqa xmm1,xmmword ptr [rsp+30h] ;now location is correct
0000000000DE11E6 movdqa xmm2,xmmword ptr [rsp+40h]
0000000000DE11EC movdqa xmm3,xmmword ptr [rsp+50h]
0000000000DE11F2 add rsp,68h
0000000000DE11F6 ret