annotate doc/disas_examples/x64.sysv.disas @ 499:fc614cb865c6

- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
author Tassilo Philipp
date Mon, 04 Apr 2022 15:50:52 +0200
parents 75cb8f79d725
children f1810b5dbb3b
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 ; {
468
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 464
diff changeset
9 ; /* use some local data */
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 464
diff changeset
10 ; *(char*)alloca(10) = 'L';
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 464
diff changeset
11 ; leaf_call(b, c, d, e, f, g, h);
327
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 ; {
468
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 464
diff changeset
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 464
diff changeset
17 ; return 0;
327
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
464
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
446
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
447 ; ---------- returning tiny struct by value (passes via regs) ---------->
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
448 ;
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
449 ; struct A { unsigned char a; };
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
450 ;
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
451 ; struct A call(unsigned char c)
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
452 ; {
468
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 464
diff changeset
453 ; return (struct A){c};
464
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
454 ; }
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
455 ;
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
456 ; int main()
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
457 ; {
468
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 464
diff changeset
458 ; struct A a = call(123);
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 464
diff changeset
459 ; return 0;
464
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
460 ; }
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
461
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
462
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
463
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
464 ; output from freebsd-12.2-x64 w/ clang 10.0.1
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
465
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
466 00000000002018f0 <call>:
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
467 2018f0: 55 push %rbp ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
468 2018f1: 48 89 e5 mov %rsp,%rbp ; | prolog
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
469 2018f4: 40 88 7d f7 mov %dil,-0x9(%rbp) ; in arg 0 -> local area, ... | a bit pointless, could've been
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
470 2018f8: 8a 45 f7 mov -0x9(%rbp),%al ; ... from local area -> eax, then ... | moved to -0x8(%rbp) directly
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
471 2018fb: 88 45 f8 mov %al,-0x8(%rbp) ; ... to struct in local area
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
472 2018fe: 8a 45 f8 mov -0x8(%rbp),%al ; return value
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
473 201901: 5d pop %rbp ; | epilog
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
474 201902: c3 retq ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
475 201903: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:0x0(%rax,%rax,1) ; garbage data
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
476 20190d: 0f 1f 00 nopl (%rax) ; garbage data
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
477
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
478 0000000000201910 <main>:
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
479 201910: 55 push %rbp ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
480 201911: 48 89 e5 mov %rsp,%rbp ; | prolog
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
481 201914: 48 83 ec 10 sub $0x10,%rsp ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
482 201918: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp) ; @@@ unsure, clears dword of local area
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
483 20191f: bf 7b 00 00 00 mov $0x7b,%edi ; arg 0 (123)
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
484 201924: e8 c7 ff ff ff callq 2018f0 <call> ; push return addr and call
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
485 201929: 31 c9 xor %ecx,%ecx ; return value prep (a bit pointless)
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
486 20192b: 88 45 f8 mov %al,-0x8(%rbp) ; write struct data to local area (123)
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
487 20192e: 89 c8 mov %ecx,%eax ; return value
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
488 201930: 48 83 c4 10 add $0x10,%rsp ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
489 201934: 5d pop %rbp ; | epilog
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
490 201935: c3 retq ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
491
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
492
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
493
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
494 ; output from freebsd-12.2-x64 w/ gcc 10.3.0
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
495
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
496 00000000004007a5 <call>:
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
497 4007a5: 55 push %rbp ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
498 4007a6: 48 89 e5 mov %rsp,%rbp ; | prolog
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
499 4007a9: 89 f8 mov %edi,%eax ; in arg 0 ...
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
500 4007ab: 88 45 fc mov %al,-0x4(%rbp) ; ... -> struct in local area
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
501 4007ae: 0f b6 45 fc movzbl -0x4(%rbp),%eax ; return value (entire struct in eax)
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
502 4007b2: 5d pop %rbp ; | epilog
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
503 4007b3: c3 retq ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
504
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
505 00000000004007b4 <main>:
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
506 4007b4: 55 push %rbp ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
507 4007b5: 48 89 e5 mov %rsp,%rbp ; | prolog
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
508 4007b8: 48 83 ec 10 sub $0x10,%rsp ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
509 4007bc: bf 7b 00 00 00 mov $0x7b,%edi ; arg 0 (123)
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
510 4007c1: e8 df ff ff ff callq 4007a5 <call> ; push return addr and call
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
511 4007c6: 88 45 ff mov %al,-0x1(%rbp) ; write struct data to local area (123)
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
512 4007c9: b8 00 00 00 00 mov $0x0,%eax ; return value
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
513 4007ce: c9 leaveq ; |
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
514 4007cf: c3 retq ; | epilog
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
515
bd65767c0534 doc: two more disas examples
Tassilo Philipp
parents: 427
diff changeset
516
493
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
517
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
518 ; ---------- C++ trivial and non-trivial aggrs passed to C funcs ---------->
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
519 ;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
520 ; struct Trivial { int a; };
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
521 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
522 ;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
523 ; extern "C" {
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
524 ;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
525 ; void f1(struct Trivial s) { }
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
526 ; void f2(struct NonTrivial s) { }
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
527 ;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
528 ; void f()
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
529 ; {
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
530 ; struct Trivial t;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
531 ; struct NonTrivial n;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
532 ; int a=1;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
533 ; a += 123;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
534 ; f1(t);
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
535 ; a -= 123;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
536 ; f2(n);
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
537 ; a -= 12;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
538 ; }
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
539 ; }
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
540
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
541
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
542
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
543 ; output from freebsd-12.2-x64 w/ clang 10.0.1
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
544
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
545 0000000000000000 <f1>:
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
546 0: 55 push %rbp ; | prolog
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
547 1: 48 89 e5 mov %rsp,%rbp ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
548 4: 89 7d f8 mov %edi,-0x8(%rbp) ; local copy of trivial struct
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
549 7: 5d pop %rbp ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
550 8: c3 retq ; | epilog
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
551
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
552 0000000000000010 <f2>:
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
553 10: 55 push %rbp ; | prolog
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
554 11: 48 89 e5 mov %rsp,%rbp ; /
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
555 14: 5d pop %rbp ; \ note: no local copy as non-trivial
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
556 15: c3 retq ; | epilog
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
557
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
558 0000000000000020 <f>:
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
559 20: 55 push %rbp ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
560 21: 48 89 e5 mov %rsp,%rbp ; | prolog
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
561 24: 48 83 ec 20 sub $0x20,%rsp ; /
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
562 28: 48 8d 7d f0 lea -0x10(%rbp),%rdi ; \ this ptr (NULL)
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
563 2c: e8 00 00 00 00 callq 31 <f+0x11> ; | NonTrivial::NonTrivial() / ctor
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
564 31: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%rbp) ; a = 1
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
565 38: 8b 45 ec mov -0x14(%rbp),%eax ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
566 3b: 83 c0 7b add $0x7b,%eax ; | a += 123
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
567 3e: 89 45 ec mov %eax,-0x14(%rbp) ; /
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
568 41: 8b 45 f8 mov -0x8(%rbp),%eax ; \
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
569 44: 89 45 e8 mov %eax,-0x18(%rbp) ; / local copy of t (struct Trivial)
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
570 47: 8b 7d e8 mov -0x18(%rbp),%edi ; f1 arg 0 (struct Trivial), via reg as small struct
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
571 4a: e8 00 00 00 00 callq 4f <f+0x2f> ; call f1(struct Trivial)
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
572 4f: 8b 45 ec mov -0x14(%rbp),%eax ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
573 52: 83 e8 7b sub $0x7b,%eax ; | a -= 123
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
574 55: 89 45 ec mov %eax,-0x14(%rbp) ; /
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
575 58: 48 8d 7d e0 lea -0x20(%rbp),%rdi ; \ ptr to dest of copy of n
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
576 5c: 48 8d 75 f0 lea -0x10(%rbp),%rsi ; | copy n ptr to n
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
577 60: e8 00 00 00 00 callq 65 <f+0x45> ; / NonTrivial::NonTrivial(const NonTrivial&) / copy ctor
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
578 65: 48 8d 7d e0 lea -0x20(%rbp),%rdi ; f2 arg 0 (ptr to copy of struct NonTrivial), via ptr as non-trivial
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
579 69: e8 00 00 00 00 callq 6e <f+0x4e> ; call f2(struct NonTrivial)
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
580 6e: 8b 45 ec mov -0x14(%rbp),%eax ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
581 71: 83 e8 0c sub $0xc,%eax ; | a -= 12
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
582 74: 89 45 ec mov %eax,-0x14(%rbp) ; /
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
583 77: 48 83 c4 20 add $0x20,%rsp ; \
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
584 7b: 5d pop %rbp ; | epilog
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
585 7c: c3 retq ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
586
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
587 ; ... snip, removed code of ctor and copy ctor ...
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
588
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
589
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
590
499
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
591 ; ---------- C++ trivial and non-trivial aggrs as return values ---------->
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
592 ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
593 ; struct Trivial { int a; };
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
594 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
595 ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
596 ; extern "C" {
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
597 ; struct Trivial f1() { return Trivial(); }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
598 ; }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
599 ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
600 ; struct NonTrivial f2() { return NonTrivial(); }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
601 ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
602 ; extern "C" {
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
603 ; void f()
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
604 ; {
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
605 ; int a=1;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
606 ; a += 123;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
607 ; struct Trivial t = f1();
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
608 ; a -= 123;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
609 ; struct NonTrivial n = f2();
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
610 ; a -= 12;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
611 ; }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
612 ; }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
613
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
614
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
615
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
616 ; output from freebsd-12.2-x64 w/ clang 10.0.1
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
617
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
618 00000000002019c0 <f1>:
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
619 2019c0: 55 push %rbp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
620 2019c1: 48 89 e5 mov %rsp,%rbp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
621 2019c4: 48 83 ec 10 sub $0x10,%rsp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
622 2019c8: 31 f6 xor %esi,%esi
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
623 2019ca: 48 8d 45 f8 lea -0x8(%rbp),%rax
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
624 2019ce: 48 89 c7 mov %rax,%rdi
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
625 2019d1: ba 04 00 00 00 mov $0x4,%edx
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
626 2019d6: e8 75 01 00 00 callq 201b50 <memset@plt>
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
627 2019db: 8b 45 f8 mov -0x8(%rbp),%eax
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
628 2019de: 48 83 c4 10 add $0x10,%rsp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
629 2019e2: 5d pop %rbp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
630 2019e3: c3 retq
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
631
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
632 00000000002019f0 <_Z2f2v>:
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
633 2019f0: 55 push %rbp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
634 2019f1: 48 89 e5 mov %rsp,%rbp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
635 2019f4: 48 83 ec 10 sub $0x10,%rsp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
636 2019f8: 48 89 f8 mov %rdi,%rax
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
637 2019fb: 48 89 f9 mov %rdi,%rcx
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
638 2019fe: 48 89 4d f8 mov %rcx,-0x8(%rbp)
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
639 201a02: 48 89 45 f0 mov %rax,-0x10(%rbp)
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
640 201a06: e8 85 00 00 00 callq 201a90 <_ZN10NonTrivialC2Ev>
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
641 201a0b: 48 8b 45 f0 mov -0x10(%rbp),%rax
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
642 201a0f: 48 83 c4 10 add $0x10,%rsp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
643 201a13: 5d pop %rbp
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
644 201a14: c3 retq
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
645
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
646 0000000000201a20 <f>:
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
647 201a20: 55 push %rbp ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
648 201a21: 48 89 e5 mov %rsp,%rbp ; | prolog
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
649 201a24: 48 83 ec 10 sub $0x10,%rsp ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
650 201a28: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%rbp) ; a = 1
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
651 201a2f: 8b 45 fc mov -0x4(%rbp),%eax ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
652 201a32: 83 c0 7b add $0x7b,%eax ; | a += 123
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
653 201a35: 89 45 fc mov %eax,-0x4(%rbp) ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
654 201a38: e8 83 ff ff ff callq 2019c0 <f1> ; call f1()
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
655 201a3d: 89 45 f8 mov %eax,-0x8(%rbp) ; retval via reg, as small struct
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
656 201a40: 8b 45 fc mov -0x4(%rbp),%eax ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
657 201a43: 83 e8 7b sub $0x7b,%eax ; | a -= 123
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
658 201a46: 89 45 fc mov %eax,-0x4(%rbp) ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
659 201a49: 48 8d 7d f0 lea -0x10(%rbp),%rdi ; ptr to space to hold non-triv retval
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
660 201a4d: e8 9e ff ff ff callq 2019f0 <_Z2f2v> ; call f2()
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
661 201a52: 8b 45 fc mov -0x4(%rbp),%eax ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
662 201a55: 83 e8 0c sub $0xc,%eax ; | a-= 12
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
663 201a58: 89 45 fc mov %eax,-0x4(%rbp) ; /
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
664 201a5b: 48 83 c4 10 add $0x10,%rsp ; \
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
665 201a5f: 5d pop %rbp ; | epilog
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
666 201a60: c3 retq ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
667
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
668
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
669
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
670 ; vim: ft=asm
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
671