annotate doc/disas_examples/arm.armhf.disas @ 497:cb19b2fe2422

- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
author Tassilo Philipp
date Wed, 23 Mar 2022 15:24:31 +0100
parents 0fc22b5feac7
children fc614cb865c6
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>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
2 ;
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 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
6 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
7 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
8 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
9 ; /* use some local data */
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
10 ; *(char*)alloca(220) = 'L';
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
11 ; leaf_call(b, c, d, e, f, g, h);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
12 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
13 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
14 ; int main()
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
15 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
17 ; return 0;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
18 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
19
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
20
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
21
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
22 ; output from raspbian-wheezy_20120715-raspberrypi w/ gcc 4.6.3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
23 ; note: this is arm mode, -mthumb says "sorry, unimplemented: Thumb-1 hard-float VFP ABI" (however, -msoft-float -mthumb is supported)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
24 ; not sure about thumb-2 as there is no flag for it, but I don't think this exists if using the VFP
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
25
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
26 00000000 <leaf_call>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
27 0: e52db004 push {fp} ; (str fp, [sp, #-4]!)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
28 4: e28db000 add fp, sp, #0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
29 8: e24dd014 sub sp, sp, #20
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
30 c: e50b0008 str r0, [fp, #-8]
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
31 10: e50b100c str r1, [fp, #-12]
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
32 14: e50b2010 str r2, [fp, #-16]
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
33 18: e50b3014 str r3, [fp, #-20]
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
34 1c: e28bd000 add sp, fp, #0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
35 20: e8bd0800 pop {fp}
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
36 24: e12fff1e bx lr
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 00000028 <nonleaf_call>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
39 ;spill here, if needed: push {r0, r1, r2, r3} ; | just for ref, if present this would change below offsets
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
40 28: e92d4800 push {fp, lr} ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
41 2c: e28db004 add fp, sp, #4 ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
42 30: e24dd020 sub sp, sp, #32 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
43 34: e50b0008 str r0, [fp, #-8] ; in arg 0 -> temp space in local area
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
44 38: e50b100c str r1, [fp, #-12] ; in arg 1 -> temp space in local area
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
45 3c: e50b2010 str r2, [fp, #-16] ; in arg 2 -> temp space in local area
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
46 40: e50b3014 str r3, [fp, #-20] ; in arg 3 -> temp space in local area
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
47 44: e24dd0e8 sub sp, sp, #232 ; alloca(220) - with padding to guarantee alignment
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
48 48: e28d3010 add r3, sp, #16 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
49 4c: e2833007 add r3, r3, #7 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
50 50: e1a031a3 lsr r3, r3, #3 ; | start of (aligned) alloca()'d memory -> r3, leaving room at top of stack for param area
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
51 54: e1a03183 lsl r3, r3, #3 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
52 58: e3a0204c mov r2, #76 ; 'L' -> r2, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
53 5c: e5c32000 strb r2, [r3] ; ... store in local area (of alloca()'d space)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
54 60: e59b3008 ldr r3, [fp, #8] ; arg 4 (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
55 64: e58d3000 str r3, [sp] ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
56 68: e59b300c ldr r3, [fp, #12] ; arg 5 (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
57 6c: e58d3004 str r3, [sp, #4] ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
58 70: e59b3010 ldr r3, [fp, #16] ; 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
59 74: e58d3008 str r3, [sp, #8] ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
60 78: e51b000c ldr r0, [fp, #-12] ; arg 0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
61 7c: e51b1010 ldr r1, [fp, #-16] ; arg 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
62 80: e51b2014 ldr r2, [fp, #-20] ; arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
63 84: e59b3004 ldr r3, [fp, #4] ; arg 3 (fetched from prev frame's param area)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
64 88: ebfffffe bl 0 <leaf_call> ; return address -> r14/lr, and call
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
65 8c: e24bd004 sub sp, fp, #4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
66 90: e8bd8800 pop {fp, pc} ; | epilog
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 00000094 <main>:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
69 94: e92d4800 push {fp, lr} ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
70 98: e28db004 add fp, sp, #4 ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
71 9c: e24dd010 sub sp, sp, #16 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
72 a0: e3a03004 mov r3, #4 ; arg 4, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
73 a4: e58d3000 str r3, [sp] ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
74 a8: e3a03005 mov r3, #5 ; arg 5, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
75 ac: e58d3004 str r3, [sp, #4] ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
76 b0: e3a03006 mov r3, #6 ; arg 6, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
77 b4: e58d3008 str r3, [sp, #8] ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
78 b8: e3a03007 mov r3, #7 ; arg 7, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
79 bc: e58d300c str r3, [sp, #12] ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
80 c0: e3a00000 mov r0, #0 ; arg 0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
81 c4: e3a01001 mov r1, #1 ; arg 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
82 c8: e3a02002 mov r2, #2 ; arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
83 cc: e3a03003 mov r3, #3 ; arg 3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
84 d0: ebfffffe bl 28 <nonleaf_call> ; return address -> r14/lr, and call
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
85 d4: e3a03000 mov r3, #0 ; return value (0) via r3 ... (a bit unoptimal)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
86 d8: e1a00003 mov r0, r3 ; ... to r0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
87 dc: e24bd004 sub sp, fp, #4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
88 e0: e8bd8800 pop {fp, pc} ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
89
481
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
90
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
91
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
92 ; ---------- passing structs with only fp parts ---------->
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
93 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
94 ; struct A { float a; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
95 ; struct B { float a, b; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
96 ; struct C { float a, b, c; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
97 ; struct D { double a; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
98 ; struct E { double a, b; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
99 ; struct F { double a, b, c; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
100 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
101 ; void leaf_call(struct A a, struct B b, struct C c, struct D d, struct E e, struct F f)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
102 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
103 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
104 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
105 ; int main()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
106 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
107 ; leaf_call((struct A){1.f}, (struct B){2.f,3.f}, (struct C){4.f,5.f,6.f}, (struct D){1.}, (struct E){2.,3.}, (struct F){4.,5.,6.});
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
108 ; return 0;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
109 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
110
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
111
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
112
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
113 ; output from raspbian-11-armelhf w/ gcc 10.2.1
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
114
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
115 00000000 <leaf_call>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
116 0: e52db004 push {fp}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
117 4: e28db000 add fp, sp, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
118 8: e24dd034 sub sp, sp, #52
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
119 c: ed0b0a02 vstr s0, [fp, #-8]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
120 10: ed0b3b09 vstr d3, [fp, #-36]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
121 14: eeb06b44 vmov.f64 d6, d4
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
122 18: eeb07b45 vmov.f64 d7, d5
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
123 1c: ed4b0a04 vstr s1, [fp, #-16]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
124 20: ed0b1a03 vstr s2, [fp, #-12]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
125 24: ed4b1a07 vstr s3, [fp, #-28]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
126 28: ed0b2a06 vstr s4, [fp, #-24]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
127 2c: ed4b2a05 vstr s5, [fp, #-20]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
128 30: ed0b6b0d vstr d6, [fp, #-52]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
129 34: ed0b7b0b vstr d7, [fp, #-44]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
130 38: e1a00000 nop
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
131 3c: e28bd000 add sp, fp, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
132 40: e49db004 pop {fp}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
133 44: e12fff1e bx lr
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
134
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
135 00000048 <main>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
136 48: e92d4800 push {fp, lr} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
137 4c: e28db004 add fp, sp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
138 50: e24dd058 sub sp, sp, #88 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
139 54: ed9f0a29 vldr s0, [pc, #164] ; arg 0 (struct A), fetch from data below: (pc:=0x54+0x8)+164=0x100
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
140 58: e59f20a4 ldr r2, [pc, #164] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
141 5c: e24b300c sub r3, fp, #12 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
142 60: e8920003 ldm r2, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
143 64: e8830003 stm r3, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
144 68: e59f2098 ldr r2, [pc, #152] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
145 6c: e24b3018 sub r3, fp, #24 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
146 70: e8920007 ldm r2, {r0, r1, r2} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
147 74: e8830007 stm r3, {r0, r1, r2} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
148 78: ed9f3b1e vldr d3, [pc, #120] ; arg 3 (struct D), via fregs, fetch from data below: (pc:=0x78+0x8)+120=0xf8
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
149 7c: e59f3088 ldr r3, [pc, #136] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
150 80: e24bc02c sub ip, fp, #44 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
151 84: e893000f ldm r3, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
152 88: e88c000f stm ip, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
153 8c: e59f307c ldr r3, [pc, #124] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
154 90: e24bc044 sub ip, fp, #68 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
155 94: e1a0e003 mov lr, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
156 98: e8be000f ldm lr!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
157 9c: e8ac000f stmia ip!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
158 a0: e89e0003 ldm lr, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
159 a4: e88c0003 stm ip, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
160 a8: ed1b6b0b vldr d6, [fp, #-44] ; \ prep arg 5 (struct E)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
161 ac: ed1b7b09 vldr d7, [fp, #-36] ; / b
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
162 b0: ed5b1a06 vldr s3, [fp, #-24] ; \ a
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
163 b4: ed1b2a05 vldr s4, [fp, #-20] ; | arg 2 (struct C), via fregs b
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
164 b8: ed5b2a04 vldr s5, [fp, #-16] ; / c
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
165 bc: ed5b0a03 vldr s1, [fp, #-12] ; \ a
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
166 c0: ed1b1a02 vldr s2, [fp, #-8] ; / arg 1 (struct B), via fregs b
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
167 c4: e1a0e00d mov lr, sp ; \ write ptr (to stack top)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
168 c8: e24bc044 sub ip, fp, #68 ; | read ptr
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
169 cc: e8bc000f ldm ip!, {r0, r1, r2, r3} ; | arg 6 (struct F), entirely via stack (not split)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
170 d0: e8ae000f stmia lr!, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
171 d4: e89c0003 ldm ip, {r0, r1} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
172 d8: e88e0003 stm lr, {r0, r1} ; /
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
173 dc: eeb04b46 vmov.f64 d4, d6 ; \ arg 5 (struct E), via fregs a
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
174 e0: eeb05b47 vmov.f64 d5, d7 ; / b
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
175 e4: ebfffffe bl 0 <leaf_call> ; return address -> r14/lr, and call
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
176 e8: e3a03000 mov r3, #0 ; return value (0) via r3 ... (a bit unoptimal)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
177 ec: e1a00003 mov r0, r3 ; ... to r0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
178 f0: e24bd004 sub sp, fp, #4 ; | epilog
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
179 f4: e8bd8800 pop {fp, pc} ; /
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
180 f8: 00000000 .word 0x00000000 ; \ |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
181 fc: 3ff00000 .word 0x3ff00000 ; | | 1.0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
182 100: 3f800000 .word 0x3f800000 ; | 1.f
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
183 104: 00000000 .word 0x00000000 ; | data
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
184 108: 00000008 .word 0x00000008 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
185 10c: 00000018 .word 0x00000018 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
186 110: 00000028 .word 0x00000028 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
187
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
188
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
189
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
190 ; ---------- passing structs with mixed fp/int parts ---------->
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
191 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
192 ; struct A { float a; char b; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
193 ; struct B { int a; double b; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
194 ; struct C { double a, b; int c; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
195 ; struct D { double a, b, c; long long d; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
196 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
197 ; void leaf_call(struct A a, struct B b, struct C c, struct D d)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
198 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
199 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
200 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
201 ; int main()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
202 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
203 ; leaf_call((struct A){1.f,2}, (struct B){2,3.}, (struct C){4.,5.,6}, (struct D){7.,8.,9.,10});
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
204 ; return 0;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
205 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
206
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
207
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
208
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
209 ; output from raspbian-11-armelhf w/ gcc 10.2.1
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
210
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
211 00000000 <leaf_call>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
212 0: e24dd008 sub sp, sp, #8 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
213 4: e52db004 push {fp} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
214 8: e28db000 add fp, sp, #0 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
215 c: e24dd00c sub sp, sp, #12 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
216 10: e24bc00c sub ip, fp, #12 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
217 14: e88c0003 stm ip, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
218 18: e28b1004 add r1, fp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
219 1c: e881000c stm r1, {r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
220 20: e1a00000 nop ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
221 24: e28bd000 add sp, fp, #0 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
222 28: e49db004 pop {fp} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
223 2c: e28dd008 add sp, sp, #8 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
224 30: e12fff1e bx lr ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
225
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
226 00000034 <main>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
227 34: e92d4800 push {fp, lr} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
228 38: e28db004 add fp, sp, #4 ; | prolog
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
229 3c: e24dd090 sub sp, sp, #144 ; /
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
230 40: e59f20b4 ldr r2, [pc, #180] ; \ read ptr to data after func
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
231 44: e24b300c sub r3, fp, #12 ; | write ptr to local area
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
232 48: e8920003 ldm r2, {r0, r1} ; | struct A -> local area
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
233 4c: e8830003 stm r3, {r0, r1} ; /
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
234 50: e59f30a8 ldr r3, [pc, #168] ; \ read ptr to data after func
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
235 54: e24bc01c sub ip, fp, #28 ; | write ptr
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
236 58: e893000f ldm r3, {r0, r1, r2, r3} ; | struct B -> local area
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
237 5c: e88c000f stm ip, {r0, r1, r2, r3} ; /
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
238 60: e59f309c ldr r3, [pc, #156] ; \ read ptr to data after func
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
239 64: e24bc034 sub ip, fp, #52 ; | write ptr
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
240 68: e1a0e003 mov lr, r3 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
241 6c: e8be000f ldm lr!, {r0, r1, r2, r3} ; | struct C -> local area
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
242 70: e8ac000f stmia ip!, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
243 74: e89e0003 ldm lr, {r0, r1} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
244 78: e88c0003 stm ip, {r0, r1} ; /
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
245 7c: e59f3084 ldr r3, [pc, #132] ; \ read ptr to data after func
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
246 80: e24bc054 sub ip, fp, #84 ; | write ptr
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
247 84: e1a0e003 mov lr, r3 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
248 88: e8be000f ldm lr!, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
249 8c: e8ac000f stmia ip!, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
250 90: e89e000f ldm lr, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
251 94: e88c000f stm ip, {r0, r1, r2, r3} ; | struct D -> local area
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
252 98: e28de020 add lr, sp, #32 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
253 9c: e24bc054 sub ip, fp, #84 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
254 a0: e8bc000f ldm ip!, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
255 a4: e8ae000f stmia lr!, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
256 a8: e89c000f ldm ip, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
257 ac: e88e000f stm lr, {r0, r1, r2, r3} ; /
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
258 b0: e28de008 add lr, sp, #8 ; \
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
259 b4: e24bc034 sub ip, fp, #52 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
260 b8: e8bc000f ldm ip!, {r0, r1, r2, r3} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
261 bc: e8ae000f stmia lr!, {r0, r1, r2, r3} ; | arg 2 (struct C)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
262 c0: e89c0003 ldm ip, {r0, r1} ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
263 c4: e88e0003 stm lr, {r0, r1} ; /
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
264 c8: e1a0200d mov r2, sp ; \ |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
265 cc: e24b3014 sub r3, fp, #20 ; | | via stack (second half)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
266 d0: e8930003 ldm r3, {r0, r1} ; | |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
267 d4: e8820003 stm r2, {r0, r1} ; | arg 1 (struct B), split via regs and stack as 2 words each
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
268 d8: e24b301c sub r3, fp, #28 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
269 dc: e893000c ldm r3, {r2, r3} ; / via regs (first half)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
270 e0: e24b100c sub r1, fp, #12 ; \
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
271 e4: e8910003 ldm r1, {r0, r1} ; | arg 0 (struct A), via regs as 2 words
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
272 e8: ebfffffe bl 0 <leaf_call> ; return address -> r14/lr, and call
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
273 ec: e3a03000 mov r3, #0 ; return value (0) via r3 ... (a bit unoptimal)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
274 f0: e1a00003 mov r0, r3 ; ... to r0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
275 f4: e24bd004 sub sp, fp, #4 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
276 f8: e8bd8800 pop {fp, pc} ; | epilog
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
277 fc: 00000000 .word 0x00000000 ; 0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
278 100: 00000008 .word 0x00000008 ; 8
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
279 104: 00000018 .word 0x00000018 ; 24
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
280 108: 00000030 .word 0x00000030 ; 48
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
281
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
282
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
283
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
284 ; ---------- passing 3-field fp-only struct (HVA) which is bigger than 16b ---------->
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
285 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
286 ; struct A { double a, b, c; }; /* bigger than 16b */
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
287 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
288 ; void leaf_call(struct A a)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
289 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
290 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
291 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
292 ; int main()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
293 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
294 ; leaf_call((struct A){1.,2.,3.});
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
295 ; return 0;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
296 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
297
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
298
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
299
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
300 ; output from raspbian-11-armelhf w/ gcc 10.2.1
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
301
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
302 00000000 <leaf_call>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
303 0: e52db004 push {fp} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
304 4: e28db000 add fp, sp, #0 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
305 8: e24dd01c sub sp, sp, #28 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
306 c: eeb05b40 vmov.f64 d5, d0 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
307 10: eeb06b41 vmov.f64 d6, d1 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
308 14: eeb07b42 vmov.f64 d7, d2 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
309 18: ed0b5b07 vstr d5, [fp, #-28] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
310 1c: ed0b6b05 vstr d6, [fp, #-20] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
311 20: ed0b7b03 vstr d7, [fp, #-12] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
312 24: e1a00000 nop ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
313 28: e28bd000 add sp, fp, #0 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
314 2c: e49db004 pop {fp} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
315 30: e12fff1e bx lr ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
316
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
317 00000034 <main>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
318 34: e92d4800 push {fp, lr} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
319 38: e28db004 add fp, sp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
320 3c: e24dd018 sub sp, sp, #24 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
321 40: e59f3040 ldr r3, [pc, #64] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
322 44: e24bc01c sub ip, fp, #28 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
323 48: e1a0e003 mov lr, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
324 4c: e8be000f ldm lr!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
325 50: e8ac000f stmia ip!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
326 54: e89e0003 ldm lr, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
327 58: e88c0003 stm ip, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
328 5c: ed1b5b07 vldr d5, [fp, #-28] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
329 60: ed1b6b05 vldr d6, [fp, #-20] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
330 64: ed1b7b03 vldr d7, [fp, #-12] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
331 68: eeb00b45 vmov.f64 d0, d5 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
332 6c: eeb01b46 vmov.f64 d1, d6 ; | arg 0, via fpregs
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
333 70: eeb02b47 vmov.f64 d2, d7 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
334 74: ebfffffe bl 0 <leaf_call> ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
335 78: e3a03000 mov r3, #0 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
336 7c: e1a00003 mov r0, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
337 80: e24bd004 sub sp, fp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
338 84: e8bd8800 pop {fp, pc} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
339 88: 00000000 .word 0x00000000 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
340
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
341
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
342
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
343 ; ---------- passing 5-field fp-only struct (HVA) ---------->
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
344 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
345 ; struct A { double a, b, c, d, e; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
346 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
347 ; void leaf_call(struct A a)
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
348 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
349 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
350 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
351 ; int main()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
352 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
353 ; leaf_call((struct A){1.,2.,3.,4.,5.});
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
354 ; return 0;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
355 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
356
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
357
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
358
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
359 ; output from raspbian-11-armelhf w/ gcc 10.2.1
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
360
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
361 00000000 <leaf_call>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
362 0: e24dd010 sub sp, sp, #16
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
363 4: e52db004 push {fp}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
364 8: e28db000 add fp, sp, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
365 c: e28bc004 add ip, fp, #4
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
366 10: e88c000f stm ip, {r0, r1, r2, r3}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
367 14: e1a00000 nop
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
368 18: e28bd000 add sp, fp, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
369 1c: e49db004 pop {fp}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
370 20: e28dd010 add sp, sp, #16
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
371 24: e12fff1e bx lr
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
372
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
373 00000028 <main>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
374 28: e92d4800 push {fp, lr} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
375 2c: e28db004 add fp, sp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
376 30: e24dd040 sub sp, sp, #64 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
377 34: e59f3050 ldr r3, [pc, #80] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
378 38: e24bc02c sub ip, fp, #44 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
379 3c: e1a0e003 mov lr, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
380 40: e8be000f ldm lr!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
381 44: e8ac000f stmia ip!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
382 48: e8be000f ldm lr!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
383 4c: e8ac000f stmia ip!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
384 50: e89e0003 ldm lr, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
385 54: e88c0003 stm ip, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
386 58: e1a0e00d mov lr, sp ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
387 5c: e24bc01c sub ip, fp, #28 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
388 60: e8bc000f ldm ip!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
389 64: e8ae000f stmia lr!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
390 68: e89c0003 ldm ip, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
391 6c: e88e0003 stm lr, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
392 70: e24b302c sub r3, fp, #44 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
393 74: e893000f ldm r3, {r0, r1, r2, r3} ; arg 0's a and b passed in int regs, as more than 4 fields, and splitting is allowed
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
394 78: ebfffffe bl 0 <leaf_call> ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
395 7c: e3a03000 mov r3, #0 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
396 80: e1a00003 mov r0, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
397 84: e24bd004 sub sp, fp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
398 88: e8bd8800 pop {fp, pc} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
399 8c: 00000000 .word 0x00000000 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
400
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
401
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
402
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
403 ; ---------- returning struct with 4 only-fp fields (HVA) by value ---------->
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
404 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
405 ; struct A { double a, b, c, d; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
406 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
407 ; struct A leaf_call()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
408 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
409 ; return (struct A){1.,2.,3.,4.};
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
410 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
411 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
412 ; int main()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
413 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
414 ; leaf_call();
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
415 ; return 0;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
416 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
417
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
418
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
419
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
420 ; output from raspbian-11-armelhf w/ gcc 10.2.1
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
421
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
422 00000000 <leaf_call>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
423 0: e92d48f0 push {r4, r5, r6, r7, fp, lr} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
424 4: e28db014 add fp, sp, #20 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
425 8: e24dd060 sub sp, sp, #96 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
426 c: e59f304c ldr r3, [pc, #76] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
427 10: e24bc034 sub ip, fp, #52 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
428 14: e1a0e003 mov lr, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
429 18: e8be000f ldm lr!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
430 1c: e8ac000f stmia ip!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
431 20: e89e000f ldm lr, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
432 24: e88c000f stm ip, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
433 28: e14b63d4 ldrd r6, [fp, #-52] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
434 2c: e14b42dc ldrd r4, [fp, #-44] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
435 30: e14b02d4 ldrd r0, [fp, #-36] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
436 34: e14b21dc ldrd r2, [fp, #-28] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
437 38: ec476b14 vmov d4, r6, r7 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
438 3c: ec454b15 vmov d5, r4, r5 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
439 40: ec410b16 vmov d6, r0, r1 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
440 44: ec432b17 vmov d7, r2, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
441 48: eeb00b44 vmov.f64 d0, d4 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
442 4c: eeb01b45 vmov.f64 d1, d5 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
443 50: eeb02b46 vmov.f64 d2, d6 ; | return value via regs
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
444 54: eeb03b47 vmov.f64 d3, d7 ; |
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
445 58: e24bd014 sub sp, fp, #20 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
446 5c: e8bd88f0 pop {r4, r5, r6, r7, fp, pc} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
447 60: 00000000 .word 0x00000000 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
448
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
449 00000064 <main>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
450 64: e92d4800 push {fp, lr}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
451 68: e28db004 add fp, sp, #4
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
452 6c: ebfffffe bl 0 <leaf_call>
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
453 70: e3a03000 mov r3, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
454 74: e1a00003 mov r0, r3
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
455 78: e8bd8800 pop {fp, pc}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
456
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
457
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
458
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
459 ; ---------- returning struct with 5 only-fp fields (HVA) by value, not returned via regs ---------->
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
460 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
461 ; struct A { double a, b, c, d, e; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
462 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
463 ; struct A leaf_call()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
464 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
465 ; return (struct A){1.,2.,3.,4.,5.};
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
466 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
467 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
468 ; int main()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
469 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
470 ; leaf_call();
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
471 ; return 0;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
472 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
473
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
474
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
475
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
476 ; output from raspbian-11-armelhf w/ gcc 10.2.1
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
477
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
478 00000000 <leaf_call>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
479 0: e92d4800 push {fp, lr} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
480 4: e28db004 add fp, sp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
481 8: e24dd030 sub sp, sp, #48 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
482 c: e50b0030 str r0, [fp, #-48] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
483 10: e51b3030 ldr r3, [fp, #-48] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
484 14: e59f2028 ldr r2, [pc, #40] ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
485 18: e1a0c003 mov ip, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
486 1c: e1a0e002 mov lr, r2 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
487 20: e8be000f ldm lr!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
488 24: e8ac000f stmia ip!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
489 28: e8be000f ldm lr!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
490 2c: e8ac000f stmia ip!, {r0, r1, r2, r3} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
491 30: e89e0003 ldm lr, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
492 34: e88c0003 stm ip, {r0, r1} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
493 38: e51b0030 ldr r0, [fp, #-48] ; hidden arg ptr returned in r0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
494 3c: e24bd004 sub sp, fp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
495 40: e8bd8800 pop {fp, pc} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
496 44: 00000000 .word 0x00000000 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
497
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
498 00000048 <main>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
499 48: e92d4800 push {fp, lr} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
500 4c: e28db004 add fp, sp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
501 50: e24dd028 sub sp, sp, #40 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
502 54: e24b302c sub r3, fp, #44 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
503 58: e1a00003 mov r0, r3 ; hidden first arg, ptr to retval struct data
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
504 5c: ebfffffe bl 0 <leaf_call> ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
505 60: e3a03000 mov r3, #0 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
506 64: e1a00003 mov r0, r3 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
507 68: e24bd004 sub sp, fp, #4 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
508 6c: e8bd8800 pop {fp, pc} ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
509
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
510
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
511
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
512 ; ---------- returning struct of 4b via reg ---------->
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
513 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
514 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
515 ; struct A { short a, b; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
516 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
517 ; struct A leaf_call()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
518 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
519 ; return (struct A){1,2};
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
520 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
521 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
522 ; int main()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
523 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
524 ; leaf_call();
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
525 ; return 0;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
526 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
527
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
528
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
529
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
530 ; output from raspbian-11-armelhf w/ gcc 10.2.1
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
531
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
532 00000000 <leaf_call>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
533 0: e52db004 push {fp}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
534 4: e28db000 add fp, sp, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
535 8: e24dd00c sub sp, sp, #12
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
536 c: e59f3040 ldr r3, [pc, #64]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
537 10: e5933000 ldr r3, [r3]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
538 14: e50b3008 str r3, [fp, #-8]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
539 18: e3a03000 mov r3, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
540 1c: e15b20b8 ldrh r2, [fp, #-8]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
541 20: e1a02802 lsl r2, r2, #16
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
542 24: e1a03823 lsr r3, r3, #16
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
543 28: e1833002 orr r3, r3, r2
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
544 2c: e1a03863 ror r3, r3, #16
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
545 30: e15b20b6 ldrh r2, [fp, #-6]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
546 34: e1a02802 lsl r2, r2, #16
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
547 38: e1a03803 lsl r3, r3, #16
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
548 3c: e1a03823 lsr r3, r3, #16
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
549 40: e1833002 orr r3, r3, r2
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
550 44: e1a00003 mov r0, r3
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
551 48: e28bd000 add sp, fp, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
552 4c: e49db004 pop {fp}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
553 50: e12fff1e bx lr
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
554 54: 00000000 .word 0x00000000
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
555
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
556 00000058 <main>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
557 58: e92d4800 push {fp, lr}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
558 5c: e28db004 add fp, sp, #4
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
559 60: ebfffffe bl 0 <leaf_call>
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
560 64: e3a03000 mov r3, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
561 68: e1a00003 mov r0, r3
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
562 6c: e8bd8800 pop {fp, pc}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
563
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
564
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
565
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
566 ; ---------- returning struct of > 4b indirectly via hidden pointer arg ---------->
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
567 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
568 ; struct A { short a, b, c; };
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
569 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
570 ; struct A leaf_call()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
571 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
572 ; return (struct A){1,2,3};
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
573 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
574 ;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
575 ; int main()
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
576 ; {
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
577 ; leaf_call();
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
578 ; return 0;
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
579 ; }
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
580
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
581
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
582
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
583 ; output from raspbian-11-armelhf w/ gcc 10.2.1
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
584
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
585 00000000 <leaf_call>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
586 0: e52db004 push {fp}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
587 4: e28db000 add fp, sp, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
588 8: e24dd014 sub sp, sp, #20
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
589 c: e50b0010 str r0, [fp, #-16]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
590 10: e51b3010 ldr r3, [fp, #-16]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
591 14: e59f201c ldr r2, [pc, #28]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
592 18: e5920000 ldr r0, [r2]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
593 1c: e5830000 str r0, [r3]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
594 20: e1d220b4 ldrh r2, [r2, #4]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
595 24: e1c320b4 strh r2, [r3, #4]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
596 28: e51b0010 ldr r0, [fp, #-16]
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
597 2c: e28bd000 add sp, fp, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
598 30: e49db004 pop {fp}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
599 34: e12fff1e bx lr
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
600 38: 00000000 .word 0x00000000
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
601
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
602 0000003c <main>:
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
603 3c: e92d4800 push {fp, lr}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
604 40: e28db004 add fp, sp, #4
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
605 44: e24dd008 sub sp, sp, #8
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
606 48: e24b300c sub r3, fp, #12
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
607 4c: e1a00003 mov r0, r3
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
608 50: ebfffffe bl 0 <leaf_call>
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
609 54: e3a03000 mov r3, #0
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
610 58: e1a00003 mov r0, r3
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
611 5c: e24bd004 sub sp, fp, #4
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
612 60: e8bd8800 pop {fp, pc}
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
613
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
614
0fc22b5feac7 - arm related doc addition about aggregates
Tassilo Philipp
parents: 327
diff changeset
615
497
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
616 ; ---------- C++ trivial and non-trivial aggrs passed to C funcs ---------->
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
617 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
618 ; struct Trivial { int a; };
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
619 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
620 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
621 ; extern "C" {
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
622 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
623 ; void f1(struct Trivial s) { }
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
624 ; void f2(struct NonTrivial s) { }
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
625 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
626 ; void f()
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
627 ; {
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
628 ; struct Trivial t;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
629 ; struct NonTrivial n;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
630 ; int a=1;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
631 ; a += 123;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
632 ; f1(t);
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
633 ; a -= 123;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
634 ; f2(n);
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
635 ; a -= 12;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
636 ; }
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
637 ; }
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
638
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
639
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
640
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
641 ; output from raspbian-11-armelhf w/ gcc 10.2.1
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
642
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
643 00000000 <f1>:
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
644 0: e52db004 push {fp}
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
645 4: e28db000 add fp, sp, #0
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
646 8: e24dd00c sub sp, sp, #12
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
647 c: e50b0008 str r0, [fp, #-8]
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
648 10: e1a00000 nop
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
649 14: e28bd000 add sp, fp, #0
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
650 18: e49db004 pop {fp}
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
651 1c: e12fff1e bx lr
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
652
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
653 00000020 <f2>:
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
654 20: e52db004 push {fp}
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
655 24: e28db000 add fp, sp, #0
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
656 28: e24dd00c sub sp, sp, #12
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
657 2c: e50b0008 str r0, [fp, #-8]
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
658 30: e1a00000 nop
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
659 34: e28bd000 add sp, fp, #0
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
660 38: e49db004 pop {fp}
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
661 3c: e12fff1e bx lr
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
662
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
663 00000040 <f>:
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
664 40: e92d4800 push {fp, lr} ; |
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
665 44: e28db004 add fp, sp, #4 ; | prolog
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
666 48: e24dd010 sub sp, sp, #16 ; /
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
667 4c: e24b3014 sub r3, fp, #20 ; \
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
668 50: e1a00003 mov r0, r3 ; | this ptr (ptr to n's (NonTrivial) space)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
669 54: ebfffffe bl 0 <_ZN10NonTrivialC1Ev> ; | NonTrivial::NonTrivial() / ctor
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
670 58: e3a03001 mov r3, #1 ; a = 1
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
671 5c: e50b3008 str r3, [fp, #-8] ; |
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
672 60: e51b3008 ldr r3, [fp, #-8] ; | a += 123
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
673 64: e283307b add r3, r3, #123 ; |
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
674 68: e50b3008 str r3, [fp, #-8] ; |
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
675 6c: e51b0010 ldr r0, [fp, #-16] ; f1 arg 0 (struct Trivial), via reg as small struct
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
676 70: ebfffffe bl 0 <f1> ; call f1(struct Trivial)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
677 74: e51b3008 ldr r3, [fp, #-8] ; |
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
678 78: e243307b sub r3, r3, #123 ; | a -= 123
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
679 7c: e50b3008 str r3, [fp, #-8] ; /
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
680 80: e24b2014 sub r2, fp, #20 ; \
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
681 84: e24b300c sub r3, fp, #12 ; |
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
682 88: e1a01002 mov r1, r2 ; | ptr to n
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
683 8c: e1a00003 mov r0, r3 ; | copy n ptr to dest of copy of n
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
684 90: ebfffffe bl 0 <_ZN10NonTrivialC1ERKS_> ; / NonTrivial::NonTrivial(const NonTrivial&) / copy ctor
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
685 94: e24b300c sub r3, fp, #12 ; \
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
686 98: e1a00003 mov r0, r3 ; | f2 arg 0 (ptr to copy of struct NonTrivial), via ptr as non-trivial
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
687 9c: ebfffffe bl 20 <f2> ; call f2(struct NonTrivial)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
688 a0: e51b3008 ldr r3, [fp, #-8] ; |
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
689 a4: e243300c sub r3, r3, #12 ; | a -= 12
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
690 a8: e50b3008 str r3, [fp, #-8] ; /
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
691 ac: e1a00000 nop ; \
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
692 b0: e24bd004 sub sp, fp, #4 ; | epilog
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
693 b4: e8bd8800 pop {fp, pc} ; |
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
694
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
695 ; ... snip, removed code of ctor and copy ctor ...
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
696
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
697
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 481
diff changeset
698
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
699 ; vim: ft=asm68k
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
700