Mercurial > pub > dyncall > dyncall
annotate doc/disas_examples/x86.fastcall_ms.disas @ 578:87b5f5d7af1f
callback_plain_c++: improved cross-platform robustness of faked thiscall used for testing
author | Tassilo Philipp |
---|---|
date | Thu, 08 Sep 2022 16:15:52 +0200 |
parents | 585dcb68f55d |
children |
rev | line source |
---|---|
469
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
1 ; #include <stdlib.h> |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
2 ; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
3 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
4 ; { |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
5 ; } |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
6 ; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
7 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
8 ; { |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
9 ; /* use some local data */ |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
10 ; *(char*)alloca(220) = 'L'; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
11 ; leaf_call(b, c, d, e, f, g, h); |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
12 ; } |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
13 ; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
14 ; int main() |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
15 ; { |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7); |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
17 ; return 0; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
18 ; } |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
19 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
20 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
21 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
22 ; output from godbolt compiler explorer w/ msvc 19.0 (/Gr for fastcall) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
23 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
24 _b$ = -8 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
25 _c$ = -4 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
26 @leaf_call@28 PROC |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
27 push ebp |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
28 mov ebp, esp |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
29 sub esp, 8 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
30 mov DWORD PTR _c$[ebp], edx |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
31 mov DWORD PTR _b$[ebp], ecx |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
32 mov esp, ebp |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
33 pop ebp |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
34 ret 20 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
35 @leaf_call@28 ENDP |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
36 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
37 _a$ = -8 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
38 _b$ = -4 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
39 _c$ = 8 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
40 _d$ = 12 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
41 _e$ = 16 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
42 _f$ = 20 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
43 _g$ = 24 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
44 _h$ = 28 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
45 @nonleaf_call@32 PROC |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
46 push ebp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
47 mov ebp, esp ; | prolog |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
48 sub esp, 8 ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
49 mov DWORD PTR _b$[ebp], edx ; in arg 1 -> local area on stack |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
50 mov DWORD PTR _a$[ebp], ecx ; in arg 0 -> local area on stack |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
51 mov ecx, 220 ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
52 call @alloca@4 ; | call alloca(220) (ecx = arg) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
53 mov BYTE PTR [eax], 76 ; 'L' -> alloca()'d space (pointed to by alloca's retval in eax) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
54 mov eax, DWORD PTR _h$[ebp] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
55 push eax ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
56 mov ecx, DWORD PTR _g$[ebp] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
57 push ecx ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
58 mov edx, DWORD PTR _f$[ebp] ; | read in args 3-7 from prev frame's param area, and ... |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
59 push edx ; | ... "push" onto stack as arg 2-6 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
60 mov eax, DWORD PTR _e$[ebp] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
61 push eax ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
62 mov ecx, DWORD PTR _d$[ebp] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
63 push ecx ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
64 mov edx, DWORD PTR _c$[ebp] ; arg 1 | read from prev frame's param |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
65 mov ecx, DWORD PTR _b$[ebp] ; arg 0 | area and put in regs |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
66 call @leaf_call@28 ; push return address and call |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
67 mov esp, ebp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
68 pop ebp ; | epilog |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
69 ret 24 ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
70 @nonleaf_call@32 ENDP |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
71 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
72 _main PROC |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
73 push ebp ; | prolog |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
74 mov ebp, esp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
75 push 7 ; arg 7 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
76 push 6 ; arg 6 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
77 push 5 ; arg 5 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
78 push 4 ; arg 4 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
79 push 3 ; arg 3 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
80 push 2 ; arg 2 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
81 mov edx, 1 ; arg 1 (via reg) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
82 xor ecx, ecx ; arg 0 (via reg) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
83 call @nonleaf_call@32 ; push return address and call |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
84 xor eax, eax ; return value |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
85 pop ebp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
86 ret 0 ; | epilog |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
87 _main ENDP |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
88 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
89 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
90 |
470 | 91 ; ---------- structs by value (arg and return value), struct arg not fitting in regs ----------> |
469
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
92 ; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
93 ; struct A { int x; short y; char z; long long t; }; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
94 ; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
95 ; struct A leaf_call(struct A a, short b, long long c, char d, int e, int f, int g, long long h) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
96 ; { |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
97 ; a.x += 1; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
98 ; return a; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
99 ; } |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
100 ; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
101 ; int main() |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
102 ; { |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
103 ; struct A a ={9, 99, 23, 12LL}; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
104 ; leaf_call(a, 1, 2, 3, 4, 5, 6, 7LL); |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
105 ; return 0; |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
106 ; } |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
107 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
108 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
109 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
110 ; output from godbolt compiler explorer w/ msvc 19.0 (/Gr for fastcall) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
111 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
112 _b$ = -8 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
113 _d$ = -4 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
114 $T1 = 8 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
115 _a$ = 12 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
116 _c$ = 28 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
117 _e$ = 36 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
118 _f$ = 40 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
119 _g$ = 44 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
120 _h$ = 48 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
121 @leaf_call@52 PROC |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
122 push ebp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
123 mov ebp, esp ; | prolog |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
124 sub esp, 8 ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
125 mov BYTE PTR _d$[ebp], dl ; in arg 3 -> local area on stack |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
126 mov WORD PTR _b$[ebp], cx ; in arg 1 -> local area on stack |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
127 mov eax, DWORD PTR _a$[ebp] ; \ |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
128 add eax, 1 ; | get struct's x (from stack args), add 1 and write back |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
129 mov DWORD PTR _a$[ebp], eax ; / |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
130 mov ecx, DWORD PTR $T1[ebp] ; get ptr to retval struct passed as hidden arg (+8 to skip retval and saved ebp) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
131 mov edx, DWORD PTR _a$[ebp] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
132 mov DWORD PTR [ecx], edx ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
133 mov eax, DWORD PTR _a$[ebp+4] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
134 mov DWORD PTR [ecx+4], eax ; | copy modified (b/c of x+=1) struct arg to space of retval |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
135 mov edx, DWORD PTR _a$[ebp+8] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
136 mov DWORD PTR [ecx+8], edx ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
137 mov eax, DWORD PTR _a$[ebp+12] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
138 mov DWORD PTR [ecx+12], eax ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
139 mov eax, DWORD PTR $T1[ebp] ; return value (= ptr to struct that was passed-in as hidden arg) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
140 mov esp, ebp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
141 pop ebp ; | epilog |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
142 ret 48 ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
143 @leaf_call@52 ENDP |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
144 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
145 $T1 = -32 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
146 _a$ = -16 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
147 _main PROC |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
148 push ebp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
149 mov ebp, esp ; | prolog |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
150 sub esp, 32 ; / 32 = 16b local area for struct + 16b space used for retval struct |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
151 mov DWORD PTR _a$[ebp], 9 ; \ int x |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
152 mov eax, 99 ; | | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
153 mov WORD PTR _a$[ebp+4], ax ; | struct values (local area) | short y |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
154 mov BYTE PTR _a$[ebp+6], 23 ; | char z |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
155 mov DWORD PTR _a$[ebp+8], 12 ; | | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
156 mov DWORD PTR _a$[ebp+12], 0 ; / | long long t |
470 | 157 push 0 ; \ |
469
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
158 push 7 ; | arg 7 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
159 push 6 ; arg 6 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
160 push 5 ; arg 5 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
161 push 4 ; arg 4 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
162 push 0 ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
163 push 2 ; / arg 2 (via stack b/c not first arg and > 32 bits) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
164 sub esp, 16 ; \ |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
165 mov ecx, esp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
166 mov edx, DWORD PTR _a$[ebp] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
167 mov DWORD PTR [ecx], edx ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
168 mov eax, DWORD PTR _a$[ebp+4] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
169 mov DWORD PTR [ecx+4], eax ; | arg 0 (struct), "pushed" onto stack (fetched from local area) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
170 mov edx, DWORD PTR _a$[ebp+8] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
171 mov DWORD PTR [ecx+8], edx ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
172 mov eax, DWORD PTR _a$[ebp+12] ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
173 mov DWORD PTR [ecx+12], eax ; / |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
174 lea ecx, DWORD PTR $T1[ebp] ; \ ptr to space used for struct retval (pushed as hidden first arg) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
175 push ecx ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
176 mov dl, 3 ; arg 3 (via reg) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
177 mov ecx, 1 ; arg 1 (via reg) |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
178 call @leaf_call@52 ; push return address and call |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
179 xor eax, eax ; return value |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
180 mov esp, ebp ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
181 pop ebp ; | epilog |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
182 ret 0 ; | |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
183 _main ENDP |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
184 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
185 |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
186 |
530
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
187 ; ---------- C++ trivial and non-trivial aggrs passed to C funcs ----------> |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
188 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
189 ; struct Trivial { int a; }; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
190 ; struct NonTrivial { |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
191 ; int a; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
192 ; NonTrivial() : a(0) {} |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
193 ; NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
194 ; }; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
195 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
196 ; extern "C" { |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
197 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
198 ; void f1(struct Trivial s) { } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
199 ; void f2(struct NonTrivial s) { } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
200 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
201 ; void f() |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
202 ; { |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
203 ; struct Trivial t; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
204 ; struct NonTrivial n; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
205 ; int a=1; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
206 ; a += 123; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
207 ; f1(t); |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
208 ; a -= 123; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
209 ; f2(n); |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
210 ; a -= 12; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
211 ; } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
212 ; } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
213 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
214 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
215 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
216 ; output from godbolt compiler explorer w/ msvc 19.31 (/Gr for fastcall) |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
217 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
218 _this$ = -4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
219 NonTrivial::NonTrivial(void) PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
220 push ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
221 mov ebp, esp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
222 push ecx |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
223 mov DWORD PTR _this$[ebp], ecx |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
224 mov eax, DWORD PTR _this$[ebp] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
225 mov DWORD PTR [eax], 0 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
226 mov eax, DWORD PTR _this$[ebp] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
227 mov esp, ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
228 pop ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
229 ret 0 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
230 NonTrivial::NonTrivial(void) ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
231 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
232 _this$ = -4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
233 _rhs$ = 8 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
234 NonTrivial::NonTrivial(NonTrivial const &) PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
235 push ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
236 mov ebp, esp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
237 push ecx |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
238 mov DWORD PTR _this$[ebp], ecx |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
239 mov eax, DWORD PTR _this$[ebp] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
240 mov ecx, DWORD PTR _rhs$[ebp] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
241 mov edx, DWORD PTR [ecx] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
242 mov DWORD PTR [eax], edx |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
243 mov eax, DWORD PTR _this$[ebp] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
244 mov esp, ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
245 pop ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
246 ret 4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
247 NonTrivial::NonTrivial(NonTrivial const &) ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
248 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
249 _s$ = 8 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
250 @f1@4 PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
251 push ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
252 mov ebp, esp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
253 pop ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
254 ret 4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
255 @f1@4 ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
256 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
257 _s$ = 8 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
258 @f2@4 PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
259 push ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
260 mov ebp, esp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
261 pop ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
262 ret 4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
263 @f2@4 ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
264 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
265 _t$ = -12 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
266 _n$ = -8 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
267 _a$ = -4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
268 @f@0 PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
269 push ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
270 mov ebp, esp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
271 sub esp, 12 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
272 lea ecx, DWORD PTR _n$[ebp] ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
273 call NonTrivial::NonTrivial(void) ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
274 mov DWORD PTR _a$[ebp], 1 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
275 mov eax, DWORD PTR _a$[ebp] ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
276 add eax, 123 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
277 mov DWORD PTR _a$[ebp], eax ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
278 mov ecx, DWORD PTR _t$[ebp] ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
279 push ecx ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
280 call @f1@4 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
281 mov edx, DWORD PTR _a$[ebp] ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
282 sub edx, 123 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
283 mov DWORD PTR _a$[ebp], edx ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
284 push ecx ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
285 mov ecx, esp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
286 lea eax, DWORD PTR _n$[ebp] ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
287 push eax ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
288 call NonTrivial::NonTrivial(NonTrivial const &) ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
289 call @f2@4 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
290 mov ecx, DWORD PTR _a$[ebp] ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
291 sub ecx, 12 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
292 mov DWORD PTR _a$[ebp], ecx ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
293 mov esp, ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
294 pop ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
295 ret 0 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
296 @f@0 ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
297 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
298 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
299 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
300 ; ---------- C++ trivial and non-trivial aggrs as return values ----------> |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
301 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
302 ; struct Trivial { int a; }; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
303 ; struct NonTrivial { |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
304 ; int a; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
305 ; NonTrivial() : a(0) {} |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
306 ; NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
307 ; }; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
308 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
309 ; extern "C" { |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
310 ; struct Trivial f1() { return Trivial(); } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
311 ; } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
312 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
313 ; struct NonTrivial f2() { return NonTrivial(); } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
314 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
315 ; extern "C" { |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
316 ; void f() |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
317 ; { |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
318 ; int a=1; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
319 ; a += 123; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
320 ; struct Trivial t = f1(); |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
321 ; a -= 123; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
322 ; struct NonTrivial n = f2(); |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
323 ; a -= 12; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
324 ; } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
325 ; } |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
326 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
327 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
328 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
329 ; output from godbolt compiler explorer w/ msvc 19.31 (/Gr for fastcall) |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
330 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
331 _this$ = -4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
332 NonTrivial::NonTrivial(void) PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
333 push ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
334 mov ebp, esp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
335 push ecx |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
336 mov DWORD PTR _this$[ebp], ecx |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
337 mov eax, DWORD PTR _this$[ebp] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
338 mov DWORD PTR [eax], 0 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
339 mov eax, DWORD PTR _this$[ebp] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
340 mov esp, ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
341 pop ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
342 ret 0 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
343 NonTrivial::NonTrivial(void) ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
344 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
345 $T1 = -4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
346 @f1@0 PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
347 push ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
348 mov ebp, esp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
349 push ecx |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
350 xor eax, eax |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
351 mov DWORD PTR $T1[ebp], eax |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
352 mov eax, DWORD PTR $T1[ebp] |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
353 mov esp, ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
354 pop ebp |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
355 ret 0 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
356 @f1@0 ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
357 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
358 ___$ReturnUdt$ = -4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
359 NonTrivial f2(void) PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
360 push ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
361 mov ebp, esp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
362 push ecx ; ptr to hidden retval space as first arg (fastcall, in ecx) |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
363 mov DWORD PTR ___$ReturnUdt$[ebp], ecx ; | |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
364 mov ecx, DWORD PTR ___$ReturnUdt$[ebp] ; | a bit pointless |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
365 call NonTrivial::NonTrivial(void) ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
366 mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; return passed-in ptr ptr to hidden retval space in eax |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
367 mov esp, ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
368 pop ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
369 ret 0 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
370 NonTrivial f2(void) ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
371 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
372 _n$ = -16 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
373 _t$ = -12 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
374 $T1 = -8 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
375 _a$ = -4 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
376 @f@0 PROC |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
377 push ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
378 mov ebp, esp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
379 sub esp, 16 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
380 mov DWORD PTR _a$[ebp], 1 ; a = 1 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
381 mov eax, DWORD PTR _a$[ebp] ; | |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
382 add eax, 123 ; | a += 123 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
383 mov DWORD PTR _a$[ebp], eax ; | |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
384 call @f1@0 ; call f1() |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
385 mov DWORD PTR $T1[ebp], eax ; retval (trivial struct <= 32bits, returned via eax) |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
386 mov ecx, DWORD PTR $T1[ebp] ; | copy of retval from stack to stack |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
387 mov DWORD PTR _t$[ebp], ecx ; / |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
388 mov edx, DWORD PTR _a$[ebp] ; \ |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
389 sub edx, 123 ; | a -= 123 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
390 mov DWORD PTR _a$[ebp], edx ; | |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
391 lea ecx, DWORD PTR _n$[ebp] ; hidden first arg: ptr to space for (non-trivial) retval |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
392 call NonTrivial f2(void) ; call f2() |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
393 mov eax, DWORD PTR _a$[ebp] ; | |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
394 sub eax, 12 ; | a -= 12 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
395 mov DWORD PTR _a$[ebp], eax ; | |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
396 mov esp, ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
397 pop ebp ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
398 ret 0 ; |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
399 @f@0 ENDP |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
400 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
401 |
585dcb68f55d
- more doc and disas examples for x86 fastcall and non-trivial aggregates
Tassilo Philipp
parents:
470
diff
changeset
|
402 |
469
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
403 ; vim: ft=asm |
984e6652b975
some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff
changeset
|
404 |