annotate doc/disas_examples/x64.sysv.disas @ 457:90b1d927912a

- suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
author Tassilo Philipp
date Fri, 28 Jan 2022 14:11:21 +0100
parents fb51dc714566
children bd65767c0534
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1 ; #include <stdlib.h>
427
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
2 ;
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
3 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
4 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
5 ; }
427
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
6 ;
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
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)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
8 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
9 ; /* use some local data */
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
10 ; *(char*)alloca(10) = 'L';
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
11 ; leaf_call(b, c, d, e, f, g, h);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
12 ; }
427
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
13 ;
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
14 ; int main()
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
15 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
17 ; return 0;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
18 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
19
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
20
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
21
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
22 ; output from freebsd-12.0-x64 w/ clang 6.0.1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
23
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
24 0000000000000000 <leaf_call>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
25 0: 55 push %rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
26 1: 48 89 e5 mov %rsp,%rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
27 4: 8b 45 10 mov 0x10(%rbp),%eax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
28 7: 89 7d fc mov %edi,-0x4(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
29 a: 89 75 f8 mov %esi,-0x8(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
30 d: 89 55 f4 mov %edx,-0xc(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
31 10: 89 4d f0 mov %ecx,-0x10(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
32 13: 44 89 45 ec mov %r8d,-0x14(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
33 17: 44 89 4d e8 mov %r9d,-0x18(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
34 1b: 89 45 e4 mov %eax,-0x1c(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
35 1e: 5d pop %rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
36 1f: c3 retq
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
37
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
38 0000000000000020 <nonleaf_call>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
39 20: 55 push %rbp ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
40 21: 48 89 e5 mov %rsp,%rbp ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
41 24: 48 83 ec 40 sub $0x40,%rsp ; | open frame *with* static alloca() size included
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
42 28: 8b 45 18 mov 0x18(%rbp),%eax ; unsure... get stack param from prev frame into some scratch reg... but why? see below @@@
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
43 2b: 44 8b 55 10 mov 0x10(%rbp),%r10d ; unsure... get stack param from prev frame into some scratch reg... but why? see below @@@
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
44 2f: 89 7d fc mov %edi,-0x4(%rbp) ; in arg 0 -> local area (as temp store)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
45 32: 89 75 f8 mov %esi,-0x8(%rbp) ; in arg 1 -> local area (as temp store)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
46 35: 89 55 f4 mov %edx,-0xc(%rbp) ; in arg 2 -> local area (as temp store)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
47 38: 89 4d f0 mov %ecx,-0x10(%rbp) ; in arg 3 -> local area (as temp store)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
48 3b: 44 89 45 ec mov %r8d,-0x14(%rbp) ; in arg 4 -> local area (as temp store)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
49 3f: 44 89 4d e8 mov %r9d,-0x18(%rbp) ; in arg 5 -> local area (as temp store)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
50 43: c6 45 d0 4c movb $0x4c,-0x30(%rbp) ; 'L' -> local area (of alloca()'d space)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
51 47: 8b 7d f8 mov -0x8(%rbp),%edi ; arg 0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
52 4a: 8b 75 f4 mov -0xc(%rbp),%esi ; arg 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
53 4d: 8b 55 f0 mov -0x10(%rbp),%edx ; arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
54 50: 8b 4d ec mov -0x14(%rbp),%ecx ; arg 3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
55 53: 44 8b 45 e8 mov -0x18(%rbp),%r8d ; arg 4
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
56 57: 44 8b 4d 10 mov 0x10(%rbp),%r9d ; arg 5 (fetched from prev frame's param area - behind return addr on 16b aligned stack)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
57 5b: 44 8b 5d 18 mov 0x18(%rbp),%r11d ; arg 6 (fetched from prev frame's param area), and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
58 5f: 44 89 1c 24 mov %r11d,(%rsp) ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
59 63: 44 89 55 cc mov %r10d,-0x34(%rbp) ; unsure... write something to local area @@@?
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
60 67: 89 45 c8 mov %eax,-0x38(%rbp) ; unsure... write something to local area @@@?
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
61 6a: e8 91 ff ff ff callq 0 <leaf_call> ; push return addr and call
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
62 6f: 48 83 c4 40 add $0x40,%rsp ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
63 73: 5d pop %rbp ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
64 74: c3 retq ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
65 75: 66 66 2e 0f 1f 84 00 nopw %cs:0x0(%rax,%rax,1) ; garbage data
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
66 7c: 00 00 00 00 ; garbage data
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
67
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
68 0000000000000080 <main>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
69 80: 55 push %rbp ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
70 81: 48 89 e5 mov %rsp,%rbp ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
71 84: 48 83 ec 20 sub $0x20,%rsp ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
72 88: 31 ff xor %edi,%edi ; arg 0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
73 8a: be 01 00 00 00 mov $0x1,%esi ; arg 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
74 8f: ba 02 00 00 00 mov $0x2,%edx ; arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
75 94: b9 03 00 00 00 mov $0x3,%ecx ; arg 3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
76 99: 41 b8 04 00 00 00 mov $0x4,%r8d ; arg 4
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
77 9f: 41 b9 05 00 00 00 mov $0x5,%r9d ; arg 5
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
78 a5: b8 06 00 00 00 mov $0x6,%eax ; unsure... see below @@@?
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
79 aa: 41 ba 07 00 00 00 mov $0x7,%r10d ; unsure... see below @@@?
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
80 b0: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp) ; unsure... write 0 to local area @@@?
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
81 b7: c7 04 24 06 00 00 00 movl $0x6,(%rsp) ; "push" arg6 onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
82 be: c7 44 24 08 07 00 00 00 movl $0x7,0x8(%rsp) ; "push" arg7 onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
83 c6: 44 89 55 f8 mov %r10d,-0x8(%rbp) ; unsure... write something to local area @@@?
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
84 ca: 89 45 f4 mov %eax,-0xc(%rbp) ; unsure... write something to local area @@@?
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
85 cd: e8 4e ff ff ff callq 20 <nonleaf_call> ; push return addr and call
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
86 d2: 31 c0 xor %eax,%eax ; return value
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
87 d4: 48 83 c4 20 add $0x20,%rsp ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
88 d8: 5d pop %rbp ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
89 d9: c3 retq ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
90
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
91
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
92
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
93 ; output from arch_linux-2011.08.19-x64 w/ gcc 4.6.1 (w/ alloca(220) instead of 10)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
94
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
95 0000000000000000 <leaf_call>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
96 0: 55 push %rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
97 1: 48 89 e5 mov %rsp,%rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
98 4: 89 7d fc mov %edi,-0x4(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
99 7: 89 75 f8 mov %esi,-0x8(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
100 a: 89 55 f4 mov %edx,-0xc(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
101 d: 89 4d f0 mov %ecx,-0x10(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
102 10: 44 89 45 ec mov %r8d,-0x14(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
103 14: 44 89 4d e8 mov %r9d,-0x18(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
104 18: 5d pop %rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
105 19: c3 retq
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
106
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
107 000000000000001a <nonleaf_call>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
108 1a: 55 push %rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
109 1b: 48 89 e5 mov %rsp,%rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
110 1e: 48 83 ec 30 sub $0x30,%rsp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
111 22: 89 7d fc mov %edi,-0x4(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
112 25: 89 75 f8 mov %esi,-0x8(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
113 28: 89 55 f4 mov %edx,-0xc(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
114 2b: 89 4d f0 mov %ecx,-0x10(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
115 2e: 44 89 45 ec mov %r8d,-0x14(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
116 32: 44 89 4d e8 mov %r9d,-0x18(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
117 36: b8 10 00 00 00 mov $0x10,%eax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
118 3b: 48 83 e8 01 sub $0x1,%rax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
119 3f: 48 05 eb 00 00 00 add $0xeb,%rax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
120 45: 48 c7 45 e0 10 00 00 00 movq $0x10,-0x20(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
121 4d: ba 00 00 00 00 mov $0x0,%edx
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
122 52: 48 f7 75 e0 divq -0x20(%rbp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
123 56: 48 6b c0 10 imul $0x10,%rax,%rax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
124 5a: 48 29 c4 sub %rax,%rsp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
125 5d: 48 8d 44 24 08 lea 0x8(%rsp),%rax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
126 62: 48 83 c0 0f add $0xf,%rax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
127 66: 48 c1 e8 04 shr $0x4,%rax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
128 6a: 48 c1 e0 04 shl $0x4,%rax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
129 6e: c6 00 4c movb $0x4c,(%rax)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
130 71: 44 8b 45 e8 mov -0x18(%rbp),%r8d
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
131 75: 8b 4d ec mov -0x14(%rbp),%ecx
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
132 78: 8b 55 f0 mov -0x10(%rbp),%edx
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
133 7b: 8b 75 f4 mov -0xc(%rbp),%esi
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
134 7e: 8b 45 f8 mov -0x8(%rbp),%eax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
135 81: 8b 7d 18 mov 0x18(%rbp),%edi
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
136 84: 89 3c 24 mov %edi,(%rsp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
137 87: 44 8b 4d 10 mov 0x10(%rbp),%r9d
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
138 8b: 89 c7 mov %eax,%edi
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
139 8d: e8 00 00 00 00 callq 92 <nonleaf_call+0x78>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
140 92: c9 leaveq
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
141 93: c3 retq
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
142
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
143 0000000000000094 <main>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
144 94: 55 push %rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
145 95: 48 89 e5 mov %rsp,%rbp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
146 98: 48 83 ec 10 sub $0x10,%rsp
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
147 9c: c7 44 24 08 07 00 00 00 movl $0x7,0x8(%rsp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
148 a4: c7 04 24 06 00 00 00 movl $0x6,(%rsp)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
149 ab: 41 b9 05 00 00 00 mov $0x5,%r9d
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
150 b1: 41 b8 04 00 00 00 mov $0x4,%r8d
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
151 b7: b9 03 00 00 00 mov $0x3,%ecx
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
152 bc: ba 02 00 00 00 mov $0x2,%edx
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
153 c1: be 01 00 00 00 mov $0x1,%esi
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
154 c6: bf 00 00 00 00 mov $0x0,%edi
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
155 cb: e8 00 00 00 00 callq d0 <main+0x3c>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
156 d0: b8 00 00 00 00 mov $0x0,%eax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
157 d5: c9 leaveq
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
158 d6: c3 retq
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
159
427
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
160
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
161
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
162 ; ---------- structs by value, struct in first call on reg arg boundary ---------->
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
163 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
164 ; #include <stdlib.h>
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
165 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
166 ; struct A { int i, j; long long l; };
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
167 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
168 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
169 ; {
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
170 ; }
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
171 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
172 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
173 ; {
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
174 ; /* use some local data */
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
175 ; *(char*)alloca(220) = 'L';
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
176 ; leaf_call(b, c, d, e, f, g, h);
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
177 ; }
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
178 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
179 ; int main()
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
180 ; {
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
181 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9);
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
182 ; return 0;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
183 ; }
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
184
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
185
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
186
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
187 ; output from freebsd-12.2-x64 w/ clang 10.0.1
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
188
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
189 0000000000201920 <leaf_call>:
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
190 201920: 55 push %rbp
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
191 201921: 48 89 e5 mov %rsp,%rbp
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
192 201924: 8b 45 18 mov 0x18(%rbp),%eax
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
193 201927: 44 8b 55 10 mov 0x10(%rbp),%r10d
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
194 20192b: 4c 89 45 f0 mov %r8,-0x10(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
195 20192f: 4c 89 4d f8 mov %r9,-0x8(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
196 201933: 89 7d ec mov %edi,-0x14(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
197 201936: 89 75 e8 mov %esi,-0x18(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
198 201939: 89 55 e4 mov %edx,-0x1c(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
199 20193c: 89 4d e0 mov %ecx,-0x20(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
200 20193f: 5d pop %rbp
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
201 201940: c3 retq
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
202 201941: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:0x0(%rax,%rax,1)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
203 20194b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
204
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
205 0000000000201950 <nonleaf_call>:
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
206 201950: 55 push %rbp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
207 201951: 48 89 e5 mov %rsp,%rbp ; | prolog
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
208 201954: 53 push %rbx ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
209 201955: 48 81 ec 18 01 00 00 sub $0x118,%rsp ; | open frame *with* static alloca() size included
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
210 20195c: 8b 45 20 mov 0x20(%rbp),%eax ; unsure... stack param from prev frame into some scratch reg... but why? see below @@@
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
211 20195f: 4c 8d 55 10 lea 0x10(%rbp),%r10 ; ptr to struct on stack -> r10
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
212 201963: 89 7d f4 mov %edi,-0xc(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
213 201966: 89 75 f0 mov %esi,-0x10(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
214 201969: 89 55 ec mov %edx,-0x14(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
215 20196c: 89 4d e8 mov %ecx,-0x18(%rbp) ; | in args (regs) -> local area (as temp store, mem order 8,4,3,2,1,0)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
216 20196f: 44 89 45 e4 mov %r8d,-0x1c(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
217 201973: 44 89 4d e0 mov %r9d,-0x20(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
218 201977: c6 85 00 ff ff ff 4c movb $0x4c,-0x100(%rbp) ; 'L' -> local area (of alloca()'d space)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
219 20197e: 8b 7d f0 mov -0x10(%rbp),%edi ; arg 0
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
220 201981: 8b 75 ec mov -0x14(%rbp),%esi ; arg 1
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
221 201984: 8b 55 e8 mov -0x18(%rbp),%edx ; arg 2
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
222 201987: 8b 4d e4 mov -0x1c(%rbp),%ecx ; arg 3
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
223 20198a: 44 8b 45 e0 mov -0x20(%rbp),%r8d ; in arg 6 (local copy) -> r8 pointless, free regs available and using arg reg as temporary, needs freeing below
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
224 20198e: 44 8b 4d 20 mov 0x20(%rbp),%r9d ; in arg 7 (stack) -> r9 pointless, free regs available and using arg reg as temporary, needs freeing below
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
225 201992: 4d 8b 1a mov (%r10),%r11 ; in arg 5 (A.i, A.j) -> hold in scratch reg
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
226 201995: 4d 8b 52 08 mov 0x8(%r10),%r10 ; in arg 5 (A.l) -> hold in scratch reg
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
227 201999: 44 89 85 fc fe ff ff mov %r8d,-0x104(%rbp) ; 'free' r8, temp store content
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
228 2019a0: 4d 89 d8 mov %r11,%r8 ; arg 4 (A.i, A.j)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
229 2019a3: 44 89 8d f8 fe ff ff mov %r9d,-0x108(%rbp) ; 'free' r9, temp store content
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
230 2019aa: 4d 89 d1 mov %r10,%r9 ; arg 4 (A.l)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
231 2019ad: 8b 9d fc fe ff ff mov -0x104(%rbp),%ebx ; \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
232 2019b3: 89 1c 24 mov %ebx,(%rsp) ; / arg 5 (fetch from temp store, pushed) pointless, could've been pushed, directly
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
233 2019b6: 8b 9d f8 fe ff ff mov -0x108(%rbp),%ebx ; \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
234 2019bc: 89 5c 24 08 mov %ebx,0x8(%rsp) ; / arg 6 (fetch from temp store, pushed) pointless, could've been pushed, directly
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
235 2019c0: 89 85 f4 fe ff ff mov %eax,-0x10c(%rbp) ; unsure... write something to local area @@@?
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
236 2019c6: e8 55 ff ff ff callq 201920 <leaf_call> ; push return addr and call
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
237 2019cb: 48 81 c4 18 01 00 00 add $0x118,%rsp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
238 2019d2: 5b pop %rbx ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
239 2019d3: 5d pop %rbp ; | epilog
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
240 2019d4: c3 retq ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
241 2019d5: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:0x0(%rax,%rax,1) ; garbage data
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
242 2019df: 90 nop ; garbage data
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
243
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
244 00000000002019e0 <main>:
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
245 2019e0: 55 push %rbp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
246 2019e1: 48 89 e5 mov %rsp,%rbp ; | prolog
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
247 2019e4: 48 83 ec 30 sub $0x30,%rsp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
248 2019e8: 31 ff xor %edi,%edi ; arg 0
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
249 2019ea: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp) ; unsure... write 0 to local area @@@?
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
250 2019f1: c7 45 e8 05 00 00 00 movl $0x5,-0x18(%rbp) ; | field i
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
251 2019f8: c7 45 ec 06 00 00 00 movl $0x6,-0x14(%rbp) ; | fill struct A (local area) field j
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
252 2019ff: 48 c7 45 f0 07 00 00 00 movq $0x7,-0x10(%rbp) ; | field l
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
253 201a07: be 01 00 00 00 mov $0x1,%esi ; arg 1
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
254 201a0c: ba 02 00 00 00 mov $0x2,%edx ; arg 2
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
255 201a11: b9 03 00 00 00 mov $0x3,%ecx ; arg 3
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
256 201a16: 41 b8 04 00 00 00 mov $0x4,%r8d ; arg 4
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
257 201a1c: 48 8d 45 e8 lea -0x18(%rbp),%rax ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
258 201a20: 4c 8b 08 mov (%rax),%r9 ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
259 201a23: 4c 89 0c 24 mov %r9,(%rsp) ; | arg 5 (struct, pushed onto stack, as not enough regs)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
260 201a27: 48 8b 40 08 mov 0x8(%rax),%rax ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
261 201a2b: 48 89 44 24 08 mov %rax,0x8(%rsp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
262 201a30: 41 b9 08 00 00 00 mov $0x8,%r9d ; arg 6 (in reg)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
263 201a36: c7 44 24 10 09 00 00 00 movl $0x9,0x10(%rsp) ; arg 7 (pushed)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
264 201a3e: e8 0d ff ff ff callq 201950 <nonleaf_call> ; push return addr and call
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
265 201a43: 31 c0 xor %eax,%eax ; return value
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
266 201a45: 48 83 c4 30 add $0x30,%rsp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
267 201a49: 5d pop %rbp ; | epilog
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
268 201a4a: c3 retq ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
269
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
270
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
271 ; ---------- structs by value, complex example (multiple structs, partly passed via regs) ---------->
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
272 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
273 ; #include <stdlib.h>
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
274 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
275 ; struct A { int i, j; float f; };
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
276 ; struct B { double d; long long l; };
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
277 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
278 ; void leaf_call(int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
279 ; {
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
280 ; }
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
281 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
282 ; void nonleaf_call(int a, int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
283 ; {
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
284 ; /* use some local data */
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
285 ; *(char*)alloca(220) = 'L';
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
286 ; leaf_call(b, c, d, e, f, g, h, i, j);
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
287 ; }
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
288 ;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
289 ; int main()
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
290 ; {
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
291 ; nonleaf_call(0, 1, (struct A){2, 3, 4.f}, (struct B){5., 6ll}, 7, 8, (struct A){9, 10, 11.f}, (struct B){12., 13ll}, 14, 15);
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
292 ; return 0;
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
293 ; }
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
294
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
295
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
296
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
297 ; output from freebsd-12.2-x64 w/ clang 10.0.1
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
298
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
299 0000000000201940 <leaf_call>:
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
300 201940: 55 push %rbp
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
301 201941: 48 89 e5 mov %rsp,%rbp
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
302 201944: 8b 45 28 mov 0x28(%rbp),%eax
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
303 201947: 44 8b 55 20 mov 0x20(%rbp),%r10d
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
304 20194b: 48 89 75 e0 mov %rsi,-0x20(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
305 20194f: f3 0f 11 45 e8 movss %xmm0,-0x18(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
306 201954: 48 8b 75 e0 mov -0x20(%rbp),%rsi
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
307 201958: 48 89 75 f0 mov %rsi,-0x10(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
308 20195c: 44 8b 5d e8 mov -0x18(%rbp),%r11d
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
309 201960: 44 89 5d f8 mov %r11d,-0x8(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
310 201964: f2 0f 11 4d d0 movsd %xmm1,-0x30(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
311 201969: 48 89 55 d8 mov %rdx,-0x28(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
312 20196d: 4c 89 4d b0 mov %r9,-0x50(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
313 201971: f3 0f 11 55 b8 movss %xmm2,-0x48(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
314 201976: 48 8b 55 b0 mov -0x50(%rbp),%rdx
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
315 20197a: 48 89 55 c0 mov %rdx,-0x40(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
316 20197e: 44 8b 5d b8 mov -0x48(%rbp),%r11d
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
317 201982: 44 89 5d c8 mov %r11d,-0x38(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
318 201986: 89 7d ac mov %edi,-0x54(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
319 201989: 89 4d a8 mov %ecx,-0x58(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
320 20198c: 44 89 45 a4 mov %r8d,-0x5c(%rbp)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
321 201990: 5d pop %rbp
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
322 201991: c3 retq
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
323 201992: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:0x0(%rax,%rax,1)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
324 20199c: 0f 1f 40 00 nopl 0x0(%rax)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
325
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
326 00000000002019a0 <nonleaf_call>:
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
327 2019a0: 55 push %rbp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
328 2019a1: 48 89 e5 mov %rsp,%rbp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
329 2019a4: 41 57 push %r15 ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
330 2019a6: 41 56 push %r14 ; | prolog
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
331 2019a8: 41 54 push %r12 ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
332 2019aa: 53 push %rbx ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
333 2019ab: 48 81 ec 70 01 00 00 sub $0x170,%rsp ; | open frame *with* static alloca() size included
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
334 2019b2: 8b 45 38 mov 0x38(%rbp),%eax ; unsure... get last (15) stack param from prev frame into some scratch reg... but why? see below @@@
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
335 2019b5: 44 8b 55 30 mov 0x30(%rbp),%r10d ; unsure... get one to last (14) stack param from prev frame into some scratch reg... but why? see below @@@
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
336 2019b9: 4c 8d 5d 20 lea 0x20(%rbp),%r11 ; ptr to struct B on stack -> rbx
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
337 2019bd: 48 8d 5d 10 lea 0x10(%rbp),%rbx ; ptr to struct A on stack -> r11
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
338 2019c1: 48 89 55 c0 mov %rdx,-0x40(%rbp) ; | \ i, j
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
339 2019c5: f3 0f 11 45 c8 movss %xmm0,-0x38(%rbp) ; | / reassemble first struct A in mem (local area) f
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
340 2019ca: 48 8b 55 c0 mov -0x40(%rbp),%rdx ; . \ pointless reload of rdx w/ same val from same addr
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
341 2019ce: 48 89 55 d0 mov %rdx,-0x30(%rbp) ; . |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
342 2019d2: 44 8b 75 c8 mov -0x38(%rbp),%r14d ; . | copy of just reassembled A (local area) @@@ unsure why (@@@ I think we need copies of the structs, all the time)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
343 2019d6: 44 89 75 d8 mov %r14d,-0x28(%rbp) ; . /
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
344 2019da: f2 0f 11 4d b0 movsd %xmm1,-0x50(%rbp) ; | \ d
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
345 2019df: 48 89 4d b8 mov %rcx,-0x48(%rbp) ; | / reassemble first struct B in mem (local area) l
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
346 2019e3: 89 7d ac mov %edi,-0x54(%rbp) ; | (0)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
347 2019e6: 89 75 a8 mov %esi,-0x58(%rbp) ; | in args (regs) -> local area (as temp store, mem order 8,7,1,0,B,A,A') (1)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
348 2019e9: 44 89 45 a4 mov %r8d,-0x5c(%rbp) ; | (7)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
349 2019ed: 44 89 4d a0 mov %r9d,-0x60(%rbp) ; | (8)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
350 2019f1: c6 85 a0 fe ff ff 4c movb $0x4c,-0x160(%rbp) ; 'L' -> local area (of alloca()'d space)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
351 2019f8: 8b 7d a8 mov -0x58(%rbp),%edi ; arg 0
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
352 2019fb: 8b 4d a4 mov -0x5c(%rbp),%ecx ; arg 3
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
353 2019fe: 44 8b 45 a0 mov -0x60(%rbp),%r8d ; arg 4
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
354 201a02: 8b 75 30 mov 0x30(%rbp),%esi ; in arg 9 -> hold in scratch reg
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
355 201a05: 44 8b 4d 38 mov 0x38(%rbp),%r9d ; in arg 8 -> hold in scratch reg
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
356 201a09: 48 8b 55 d0 mov -0x30(%rbp),%rdx ; | again pointless reload of rdx w/ same val from same addr
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
357 201a0d: 48 89 55 90 mov %rdx,-0x70(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
358 201a11: 44 8b 75 d8 mov -0x28(%rbp),%r14d ; | *another* copy of copy of A (local area) @@@ unsure why
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
359 201a15: 44 89 75 98 mov %r14d,-0x68(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
360 201a19: 48 8b 55 90 mov -0x70(%rbp),%rdx ; pointless reload of rdx
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
361 201a1d: f3 0f 10 45 98 movss -0x68(%rbp),%xmm0 ; arg 1 (A.f) @@@ unsure why from copy
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
362 201a22: f2 0f 10 4d b0 movsd -0x50(%rbp),%xmm1 ; arg 2 (B.d)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
363 201a27: 4c 8b 7d b8 mov -0x48(%rbp),%r15 ; in arg arg 3 (B.l) -> hold in scratch reg
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
364 201a2b: 4c 8b 23 mov (%rbx),%r12 ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
365 201a2e: 4c 89 65 80 mov %r12,-0x80(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
366 201a32: 44 8b 73 08 mov 0x8(%rbx),%r14d ; | copy of in arg 6 (struct A on stack) -> local area
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
367 201a36: 44 89 75 88 mov %r14d,-0x78(%rbp) ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
368 201a3a: 48 8b 5d 80 mov -0x80(%rbp),%rbx ; in arg 6 (A.i, A.j) -> rbx
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
369 201a3e: f3 0f 10 55 88 movss -0x78(%rbp),%xmm2 ; arg 5 (A.f)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
370 201a43: 89 b5 9c fe ff ff mov %esi,-0x164(%rbp) ; in arg 9 -> temp (at end of frame, a bit pointless as could be pushed directly)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
371 201a49: 48 89 d6 mov %rdx,%rsi ; arg 1 (A.i, A.j)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
372 201a4c: 4c 89 fa mov %r15,%rdx ; arg 2 (B.l)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
373 201a4f: 44 89 8d 98 fe ff ff mov %r9d,-0x168(%rbp) ; in arg 8 -> temp (at end of frame, a bit pointless as could be pushed directly)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
374 201a56: 49 89 d9 mov %rbx,%r9 ; arg 5 (A.i, A.j)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
375 201a59: 49 8b 1b mov (%r11),%rbx ; \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
376 201a5c: 48 89 1c 24 mov %rbx,(%rsp) ; / arg 6 (B.d) (pushed)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
377 201a60: 4d 8b 5b 08 mov 0x8(%r11),%r11 ; \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
378 201a64: 4c 89 5c 24 08 mov %r11,0x8(%rsp) ; / arg 6 (B.l) (pushed)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
379 201a69: 44 8b b5 9c fe ff ff mov -0x164(%rbp),%r14d ; \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
380 201a70: 44 89 74 24 10 mov %r14d,0x10(%rsp) ; / arg 7 (pushed, aligned)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
381 201a75: 44 8b b5 98 fe ff ff mov -0x168(%rbp),%r14d ; \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
382 201a7c: 44 89 74 24 18 mov %r14d,0x18(%rsp) ; / arg 8 (pushed, aligned)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
383 201a81: 89 85 94 fe ff ff mov %eax,-0x16c(%rbp) ; unsure... write something to local area @@@?
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
384 201a87: 44 89 95 90 fe ff ff mov %r10d,-0x170(%rbp) ; unsure... write something to local area @@@?
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
385 201a8e: e8 ad fe ff ff callq 201940 <leaf_call> ; push return addr and call
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
386 201a93: 48 81 c4 70 01 00 00 add $0x170,%rsp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
387 201a9a: 5b pop %rbx ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
388 201a9b: 41 5c pop %r12 ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
389 201a9d: 41 5e pop %r14 ; | epilog
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
390 201a9f: 41 5f pop %r15 ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
391 201aa1: 5d pop %rbp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
392 201aa2: c3 retq ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
393 201aa3: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:0x0(%rax,%rax,1) ; garbage data
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
394 201aad: 0f 1f 00 nopl (%rax) ; garbage data
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
395
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
396 0000000000201ab0 <main>:
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
397 201ab0: 55 push %rbp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
398 201ab1: 48 89 e5 mov %rsp,%rbp ; | prolog
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
399 201ab4: 48 81 ec 80 00 00 00 sub $0x80,%rsp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
400 201abb: 31 ff xor %edi,%edi ; arg 0
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
401 201abd: f2 0f 10 05 2b ea ff ff movsd -0x15d5(%rip),%xmm0 ; not arg: prep to fill struct B field d (12.0)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
402 201ac5: f3 0f 10 0d 2f ea ff ff movss -0x15d1(%rip),%xmm1 ; not arg: prep to fill struct A field f (11.f)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
403 201acd: f2 0f 10 15 13 ea ff ff movsd -0x15ed(%rip),%xmm2 ; not arg: prep to fill struct B field d (5.0)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
404 201ad5: f3 0f 10 1d 1b ea ff ff movss -0x15e5(%rip),%xmm3 ; not arg: prep to fill struct A field f (4.f)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
405 201add: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp) ; unsure... write 0 to local area @@@?
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
406 201ae4: c7 45 f0 02 00 00 00 movl $0x2,-0x10(%rbp) ; \ field i
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
407 201aeb: c7 45 f4 03 00 00 00 movl $0x3,-0xc(%rbp) ; | fill first struct A (local area) field j
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
408 201af2: f3 0f 11 5d f8 movss %xmm3,-0x8(%rbp) ; / field f
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
409 201af7: f2 0f 11 55 e0 movsd %xmm2,-0x20(%rbp) ; \ field d
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
410 201afc: 48 c7 45 e8 06 00 00 00 movq $0x6,-0x18(%rbp) ; / fill first struct B (local area) field l
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
411 201b04: c7 45 d0 09 00 00 00 movl $0x9,-0x30(%rbp) ; \ field i
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
412 201b0b: c7 45 d4 0a 00 00 00 movl $0xa,-0x2c(%rbp) ; | fill last struct A (local area) field j
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
413 201b12: f3 0f 11 4d d8 movss %xmm1,-0x28(%rbp) ; / field f
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
414 201b17: f2 0f 11 45 c0 movsd %xmm0,-0x40(%rbp) ; \ field d
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
415 201b1c: 48 c7 45 c8 0d 00 00 00 movq $0xd,-0x38(%rbp) ; / fill last struct B (local area) field l
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
416 201b24: 48 8b 45 f0 mov -0x10(%rbp),%rax ; \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
417 201b28: 48 89 45 b0 mov %rax,-0x50(%rbp) ; | unsure ... make copy of first struct A (local area) @@@
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
418 201b2c: 8b 4d f8 mov -0x8(%rbp),%ecx ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
419 201b2f: 89 4d b8 mov %ecx,-0x48(%rbp) ; /
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
420 201b32: 48 8b 55 b0 mov -0x50(%rbp),%rdx ; arg 2 (A.i, A.j) @@@ unsure why from copy made above
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
421 201b36: f3 0f 10 45 b8 movss -0x48(%rbp),%xmm0 ; arg 2 (A.f) @@@ unsure why from copy made above
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
422 201b3b: f2 0f 10 4d e0 movsd -0x20(%rbp),%xmm1 ; arg 3 (B.d)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
423 201b40: 48 8b 4d e8 mov -0x18(%rbp),%rcx ; arg 3 (B.l)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
424 201b44: be 01 00 00 00 mov $0x1,%esi ; arg 1
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
425 201b49: 41 b8 07 00 00 00 mov $0x7,%r8d ; arg 4
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
426 201b4f: 41 b9 08 00 00 00 mov $0x8,%r9d ; arg 5
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
427 201b55: 48 8d 45 d0 lea -0x30(%rbp),%rax ; \ \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
428 201b59: 4c 8b 10 mov (%rax),%r10 ; | | i, j
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
429 201b5c: 4c 89 14 24 mov %r10,(%rsp) ; | arg 6 (last struct A, *pushed* by value) /
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
430 201b60: 44 8b 58 08 mov 0x8(%rax),%r11d ; | \ f
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
431 201b64: 44 89 5c 24 08 mov %r11d,0x8(%rsp) ; / /
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
432 201b69: 48 8d 45 c0 lea -0x40(%rbp),%rax ; \ \
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
433 201b6d: 4c 8b 10 mov (%rax),%r10 ; | | d (aligned)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
434 201b70: 4c 89 54 24 10 mov %r10,0x10(%rsp) ; | arg 7 (last struct B, *pushed* by value) /
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
435 201b75: 48 8b 40 08 mov 0x8(%rax),%rax ; | \ l
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
436 201b79: 48 89 44 24 18 mov %rax,0x18(%rsp) ; / /
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
437 201b7e: c7 44 24 20 0e 00 00 00 movl $0xe,0x20(%rsp) ; arg 8 (pushed, aligned)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
438 201b86: c7 44 24 28 0f 00 00 00 movl $0xf,0x28(%rsp) ; arg 9 (pushed, aligned)
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
439 201b8e: e8 0d fe ff ff callq 2019a0 <nonleaf_call> ; push return addr and call
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
440 201b93: 31 c0 xor %eax,%eax ; return value
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
441 201b95: 48 81 c4 80 00 00 00 add $0x80,%rsp ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
442 201b9c: 5d pop %rbp ; | epilog
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
443 201b9d: c3 retq ; |
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
444
fb51dc714566 - x64 struct by val disas examples
Tassilo Philipp
parents: 327
diff changeset
445
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
446 ; vim: ft=asm
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
447