; #pragma pack(push, 1)
; struct TTest
; {
; __int32 i1;
; __int32 i2;
; };
; #pragma pack(pop)
;
; TTest __fastcall DoTest()
; {
; TTest t;
; t.i1 = 1;
; t.i2 = 2;
; return t;
; }
;
; ...
; TTest t = DoTest();
; from http://codeverge.com/embarcadero.cppbuilder.cpp/does-fastcall-have-any-bearing-on/1043767
DoTest():
push ebp ; |
mov ebp,esp ; | prolog
add esp,-0x0c ; |
mov [ebp-0x04],eax ; pointer to hidden param in eax -> local area
mov [ebp-0x0c],0x00000001 ; val 1 -> local area
mov [ebp-0x08],0x00000002 ; val 2 -> local area
mov eax,[ebp-0x04] ; refetch eax (pointlessly)
mov edx,[ebp-0x0c] ; get val 1 in edx and ...
mov [eax],edx ; ... store at *eax
mov edx,[ebp-0x08] ; get val 2 in edx and ...
mov [eax+0x04],edx ; ... store at *(eax + 4)
mov eax, [ebp-0x04] ; return value
mov esp,ebp ; |
pop ebp ; | epilog
ret ; |
; vim: ft=asm