Mercurial > pub > dyncall > dyncall
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 |
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 |