Mercurial > pub > dyncall > dyncall
annotate doc/disas_examples/arm.atpcs_arm.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 netbsd-4.0.1-cats w/ gcc 4.1.2 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
23 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
24 00000000 <leaf_call>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
25 0: e1a0c00d mov ip, sp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
26 4: e92dd800 stmdb sp!, {fp, ip, lr, pc} |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
27 8: e24cb004 sub fp, ip, #4 ; 0x4 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
28 c: e24dd010 sub sp, sp, #16 ; 0x10 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
29 10: e50b0010 str r0, [fp, #-16] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
30 14: e50b1014 str r1, [fp, #-20] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
31 18: e50b2018 str r2, [fp, #-24] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
32 1c: e50b301c str r3, [fp, #-28] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
33 20: e24bd00c sub sp, fp, #12 ; 0xc |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
34 24: e89da800 ldmia sp, {fp, sp, pc} |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
35 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
36 00000028 <nonleaf_call>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
37 28: e1a0c00d mov ip, sp ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
38 ;spill here, if needed: stmdb sp!, {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
|
39 2c: e92dd800 stmdb sp!, {fp, ip, lr, pc} ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
40 30: e24cb004 sub fp, ip, #4 ; | prolog |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
41 34: e24dd020 sub sp, sp, #32 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
42 38: e50b0010 str r0, [fp, #-16] ; 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
|
43 3c: e50b1014 str r1, [fp, #-20] ; 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
|
44 40: e50b2018 str r2, [fp, #-24] ; 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
|
45 44: e50b301c str r3, [fp, #-28] ; 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
|
46 48: e24dd0e0 sub sp, sp, #224 ; 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
|
47 4c: e28d200c add r2, sp, #12 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
48 50: e50b2020 str r2, [fp, #-32] ; | @@@ pointless push of r2 to local area to put it back ... |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
49 54: e51b2020 ldr r2, [fp, #-32] ; | @@@ ... into r2 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
50 58: e2823003 add r3, r2, #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 5c: e1a03123 mov r3, r3, lsr #2 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
52 60: e1a03103 mov r3, r3, lsl #2 ; / |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
53 64: e50b3020 str r3, [fp, #-32] ; \ |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
54 68: e51b2020 ldr r2, [fp, #-32] ; | r2 -> r3, to free r2 (kinda pointless as followup code could use r2 and r3 the other way round) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
55 6c: e3a0304c mov r3, #76 ; 'L' -> r3, and ... |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
56 70: e5c23000 strb r3, [r2] ; ... 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
|
57 74: 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
|
58 78: 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
|
59 7c: 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
|
60 80: 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
|
61 84: 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
|
62 88: 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
|
63 8c: e51b0014 ldr r0, [fp, #-20] ; arg 0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
64 90: e51b1018 ldr r1, [fp, #-24] ; arg 1 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
65 94: e51b201c ldr r2, [fp, #-28] ; arg 2 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
66 98: 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
|
67 9c: ebfffffe bl 9c <nonleaf_call+0x74> ; return address -> r14/lr, and call |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
68 a0: e24bd00c sub sp, fp, #12 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
69 a4: e89da800 ldmia sp, {fp, sp, pc} ; | epilog |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
70 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
71 000000a8 <main>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
72 a8: e1a0c00d mov ip, sp ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
73 ac: e92dd800 stmdb sp!, {fp, ip, lr, pc} ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
74 b0: e24cb004 sub fp, ip, #4 ; | prolog |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
75 b4: e24dd010 sub sp, sp, #16 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
76 b8: 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
|
77 bc: 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
|
78 c0: 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
|
79 c4: 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
|
80 c8: 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
|
81 cc: 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
|
82 d0: 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
|
83 d4: 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
|
84 d8: e3a00000 mov r0, #0 ; arg 0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
85 dc: e3a01001 mov r1, #1 ; arg 1 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
86 e0: e3a02002 mov r2, #2 ; arg 2 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
87 e4: e3a03003 mov r3, #3 ; arg 3 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
88 e8: ebfffffe bl e8 <main+0x40> ; return address -> r14/lr, and call |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
89 ec: e3a03000 mov r3, #0 ; return value via r3, ... (a bit unoptimal) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
90 f0: e1a00003 mov r0, r3 ; ... to r0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
91 f4: e24bd00c sub sp, fp, #12 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
92 f8: e89da800 ldmia sp, {fp, sp, pc} ; | epilog |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
93 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
94 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
95 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
96 ; output from freebsd-11.0_r260099-raspberrypi w/ clang 3.3 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
97 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
98 00000000 <leaf_call>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
99 0: e24dd030 sub sp, sp, #48 ; 0x30 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
100 4: e58d002c str r0, [sp, #44] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
101 8: e58d1028 str r1, [sp, #40] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
102 c: e58d2024 str r2, [sp, #36] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
103 10: e58d3020 str r3, [sp, #32] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
104 14: e59dc030 ldr ip, [sp, #48] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
105 18: e58dc01c str ip, [sp, #28] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
106 1c: e59dc034 ldr ip, [sp, #52] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
107 20: e58dc018 str ip, [sp, #24] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
108 24: e59dc038 ldr ip, [sp, #56] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
109 28: e58dc014 str ip, [sp, #20] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
110 2c: e58d1010 str r1, [sp, #16] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
111 30: e58d300c str r3, [sp, #12] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
112 34: e58d2008 str r2, [sp, #8] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
113 38: e58d0004 str r0, [sp, #4] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
114 3c: e28dd030 add sp, sp, #48 ; 0x30 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
115 40: e12fff1e bx lr |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
116 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
117 00000044 <nonleaf_call>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
118 44: e92d4bf0 push {r4, r5, r6, r7, r8, r9, fp, lr} |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
119 48: e28db018 add fp, sp, #24 ; 0x18 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
120 4c: e24ddf4a sub sp, sp, #296 ; 0x128 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
121 50: e50b001c str r0, [fp, #-28] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
122 54: e50b1020 str r1, [fp, #-32] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
123 58: e50b2024 str r2, [fp, #-36] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
124 5c: e50b3028 str r3, [fp, #-40] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
125 60: e59bc008 ldr ip, [fp, #8] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
126 64: e50bc02c str ip, [fp, #-44] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
127 68: e59bc00c ldr ip, [fp, #12] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
128 6c: e50bc030 str ip, [fp, #-48] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
129 70: e59bc010 ldr ip, [fp, #16] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
130 74: e50bc034 str ip, [fp, #-52] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
131 78: e59bc014 ldr ip, [fp, #20] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
132 7c: e50bc038 str ip, [fp, #-56] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
133 80: e3a0c04c mov ip, #76 ; 0x4c |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
134 84: e5cdc02c strb ip, [sp, #44] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
135 88: e51bc020 ldr ip, [fp, #-32] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
136 8c: e51be024 ldr lr, [fp, #-36] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
137 90: e51b4028 ldr r4, [fp, #-40] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
138 94: e51b502c ldr r5, [fp, #-44] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
139 98: e51b6030 ldr r6, [fp, #-48] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
140 9c: e51b7034 ldr r7, [fp, #-52] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
141 a0: e51b8038 ldr r8, [fp, #-56] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
142 a4: e1a0900d mov r9, sp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
143 a8: e5898008 str r8, [r9, #8] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
144 ac: e5897004 str r7, [r9, #4] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
145 b0: e5896000 str r6, [r9] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
146 b4: e58d0028 str r0, [sp, #40] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
147 b8: e1a0000c mov r0, ip |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
148 bc: e58d1024 str r1, [sp, #36] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
149 c0: e1a0100e mov r1, lr |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
150 c4: e58d2020 str r2, [sp, #32] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
151 c8: e1a02004 mov r2, r4 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
152 cc: e58d301c str r3, [sp, #28] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
153 d0: e1a03005 mov r3, r5 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
154 d4: ebfffffe bl 0 <leaf_call> |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
155 d8: e59d001c ldr r0, [sp, #28] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
156 dc: e59d1020 ldr r1, [sp, #32] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
157 e0: e59d2024 ldr r2, [sp, #36] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
158 e4: e59d3028 ldr r3, [sp, #40] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
159 e8: e58d0018 str r0, [sp, #24] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
160 ec: e58d1014 str r1, [sp, #20] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
161 f0: e58d2010 str r2, [sp, #16] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
162 f4: e58d300c str r3, [sp, #12] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
163 f8: e24bd018 sub sp, fp, #24 ; 0x18 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
164 fc: e8bd8bf0 pop {r4, r5, r6, r7, r8, r9, fp, pc} |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
165 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
166 00000100 <main>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
167 100: e92d4800 push {fp, lr} |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
168 104: e1a0b00d mov fp, sp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
169 108: e24dd018 sub sp, sp, #24 ; 0x18 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
170 10c: e3a00000 mov r0, #0 ; 0x0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
171 110: e50b0004 str r0, [fp, #-4] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
172 114: e3a01007 mov r1, #7 ; 0x7 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
173 118: e1a0200d mov r2, sp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
174 11c: e582100c str r1, [r2, #12] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
175 120: e3a01006 mov r1, #6 ; 0x6 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
176 124: e5821008 str r1, [r2, #8] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
177 128: e3a01005 mov r1, #5 ; 0x5 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
178 12c: e5821004 str r1, [r2, #4] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
179 130: e3a01004 mov r1, #4 ; 0x4 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
180 134: e5821000 str r1, [r2] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
181 138: e3a01001 mov r1, #1 ; 0x1 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
182 13c: e3a02002 mov r2, #2 ; 0x2 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
183 140: e3a03003 mov r3, #3 ; 0x3 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
184 144: e50b0008 str r0, [fp, #-8] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
185 148: ebfffffe bl 44 <nonleaf_call> |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
186 14c: e51b0008 ldr r0, [fp, #-8] |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
187 150: e1a0d00b mov sp, fp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
188 154: e8bd8800 pop {fp, pc} |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
189 |
481
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
190 |
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 ; ---------- structs by value ----------> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
193 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
194 ; struct A { int i, j; long long l; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
195 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
196 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
197 ; { |
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 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
201 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
202 ; /* use some local data */ |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
203 ; char l[100] ={ 'L'}; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
204 ; leaf_call(b, c, d, e, f, g, h); |
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 ; int main() |
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 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9); |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
210 ; return 0; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
211 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
212 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
213 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
214 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
215 ; output from debian-6.0.8-armel w/ gcc 4.4.5 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
216 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
217 00000000 <leaf_call>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
218 0: e52db004 push {fp} ; (str fp, [sp, #-4]!) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
219 4: e28db000 add fp, sp, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
220 8: e24dd014 sub sp, sp, #20 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
221 c: e50b0008 str r0, [fp, #-8] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
222 10: e50b100c str r1, [fp, #-12] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
223 14: e50b2010 str r2, [fp, #-16] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
224 18: e50b3014 str r3, [fp, #-20] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
225 1c: e28bd000 add sp, fp, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
226 20: e8bd0800 pop {fp} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
227 24: e12fff1e bx lr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
228 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
229 00000028 <nonleaf_call>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
230 28: e92d4800 push {fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
231 2c: e28db004 add fp, sp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
232 30: e24dd090 sub sp, sp, #144 ; 0x90 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
233 34: e50b0070 str r0, [fp, #-112] ; 0x70 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
234 38: e50b1074 str r1, [fp, #-116] ; 0x74 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
235 3c: e50b2078 str r2, [fp, #-120] ; 0x78 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
236 40: e50b307c str r3, [fp, #-124] ; 0x7c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
237 44: e24b2068 sub r2, fp, #104 ; 0x68 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
238 48: e3a03064 mov r3, #100 ; 0x64 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
239 4c: e1a00002 mov r0, r2 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
240 50: e3a01000 mov r1, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
241 54: e1a02003 mov r2, r3 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
242 58: ebfffffe bl 0 <memset> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
243 5c: e3a0304c mov r3, #76 ; 0x4c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
244 60: e54b3068 strb r3, [fp, #-104] ; 0x68 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
245 64: e1a0c00d mov ip, sp |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
246 68: e28b300c add r3, fp, #12 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
247 6c: e893000f ldm r3, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
248 70: e88c000f stm ip, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
249 74: e59b301c ldr r3, [fp, #28] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
250 78: e58d3010 str r3, [sp, #16] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
251 7c: e59b3020 ldr r3, [fp, #32] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
252 80: e58d3014 str r3, [sp, #20] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
253 84: e51b0074 ldr r0, [fp, #-116] ; 0x74 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
254 88: e51b1078 ldr r1, [fp, #-120] ; 0x78 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
255 8c: e51b207c ldr r2, [fp, #-124] ; 0x7c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
256 90: e59b3004 ldr r3, [fp, #4] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
257 94: ebfffffe bl 0 <leaf_call> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
258 98: e24bd004 sub sp, fp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
259 9c: e8bd4800 pop {fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
260 a0: e12fff1e bx lr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
261 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
262 000000a4 <main>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
263 a4: e92d4800 push {fp, lr} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
264 a8: e28db004 add fp, sp, #4 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
265 ac: e24dd030 sub sp, sp, #48 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
266 b0: e59f3058 ldr r3, [pc, #88] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
267 b4: e24bc014 sub ip, fp, #20 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
268 b8: e893000f ldm r3, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
269 bc: e88c000f stm ip, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
270 c0: e3a03004 mov r3, #4 ; arg 4, ... |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
271 c4: e58d3000 str r3, [sp] ; ... pushed onto stack |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
272 c8: e28dc008 add ip, sp, #8 ; prep arg 5, write ptr ... |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
273 cc: e24b3014 sub r3, fp, #20 ; ... read ptr (local area) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
274 d0: e893000f ldm r3, {r0, r1, r2, r3} ; arg 5 (struct A), ... |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
275 d4: e88c000f stm ip, {r0, r1, r2, r3} ; ... pushed onto stack (as 4 words) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
276 d8: e3a03008 mov r3, #8 ; arg 6, ... |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
277 dc: e58d3018 str r3, [sp, #24] ; ... pushed onto stack |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
278 e0: e3a03009 mov r3, #9 ; arg 6, ... |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
279 e4: e58d301c str r3, [sp, #28] ; ... pushed onto stack |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
280 e8: e3a00000 mov r0, #0 ; arg 0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
281 ec: e3a01001 mov r1, #1 ; arg 1 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
282 f0: e3a02002 mov r2, #2 ; arg 2 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
283 f4: e3a03003 mov r3, #3 ; arg 3 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
284 f8: ebfffffe bl 28 <nonleaf_call> ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
285 fc: e3a03000 mov r3, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
286 100: e1a00003 mov r0, r3 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
287 104: e24bd004 sub sp, fp, #4 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
288 108: e8bd4800 pop {fp, lr} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
289 10c: e12fff1e bx lr ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
290 110: 00000000 .word 0x00000000 |
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 |
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 ; ---------- structs by value, complex example (multiple structs) ----------> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
295 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
296 ; struct A { int i, j; float f; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
297 ; struct B { double d; long long l; }; |
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 ; void leaf_call(int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
300 ; { |
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 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
303 ; void nonleaf_call(int a, int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
304 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
305 ; /* use some local data */ |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
306 ; char l[100] ={ 'L'}; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
307 ; leaf_call(b, c, d, e, f, g, h, i, j); |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
308 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
309 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
310 ; int main() |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
311 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
312 ; nonleaf_call(0, 1, (struct A){2, 3, 4.f}, (struct B){5., 6ll}, 7, 8, (struct A){9, 10, 11.f}, (struct B){12., 13ll}, 14, 15); |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
313 ; return 0; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
314 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
315 |
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 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
318 ; output from debian-6.0.8-armel w/ gcc 4.4.5 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
319 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
320 00000000 <leaf_call>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
321 0: e52db004 push {fp} ; (str fp, [sp, #-4]!) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
322 4: e28db000 add fp, sp, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
323 8: e24dd014 sub sp, sp, #20 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
324 c: e50b0008 str r0, [fp, #-8] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
325 10: e24b0014 sub r0, fp, #20 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
326 14: e880000e stm r0, {r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
327 18: e28bd000 add sp, fp, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
328 1c: e8bd0800 pop {fp} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
329 20: e12fff1e bx lr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
330 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
331 00000024 <nonleaf_call>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
332 24: e24dd008 sub sp, sp, #8 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
333 28: e92d4800 push {fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
334 2c: e28db004 add fp, sp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
335 30: e24dd0b0 sub sp, sp, #176 ; 0xb0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
336 34: e50b0070 str r0, [fp, #-112] ; 0x70 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
337 38: e50b1074 str r1, [fp, #-116] ; 0x74 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
338 3c: e28b1004 add r1, fp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
339 40: e881000c stm r1, {r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
340 44: e24b2068 sub r2, fp, #104 ; 0x68 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
341 48: e3a03064 mov r3, #100 ; 0x64 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
342 4c: e1a00002 mov r0, r2 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
343 50: e3a01000 mov r1, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
344 54: e1a02003 mov r2, r3 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
345 58: ebfffffe bl 0 <memset> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
346 5c: e3a0304c mov r3, #76 ; 0x4c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
347 60: e54b3068 strb r3, [fp, #-104] ; 0x68 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
348 64: e1a0c00d mov ip, sp |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
349 68: e28b3014 add r3, fp, #20 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
350 6c: e893000f ldm r3, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
351 70: e88c000f stm ip, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
352 74: e59b3024 ldr r3, [fp, #36] ; 0x24 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
353 78: e58d3010 str r3, [sp, #16] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
354 7c: e59b3028 ldr r3, [fp, #40] ; 0x28 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
355 80: e58d3014 str r3, [sp, #20] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
356 84: e28dc018 add ip, sp, #24 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
357 88: e28b302c add r3, fp, #44 ; 0x2c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
358 8c: e8930007 ldm r3, {r0, r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
359 90: e88c0007 stm ip, {r0, r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
360 94: e28dc028 add ip, sp, #40 ; 0x28 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
361 98: e28b303c add r3, fp, #60 ; 0x3c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
362 9c: e893000f ldm r3, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
363 a0: e88c000f stm ip, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
364 a4: e59b304c ldr r3, [fp, #76] ; 0x4c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
365 a8: e58d3038 str r3, [sp, #56] ; 0x38 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
366 ac: e59b3050 ldr r3, [fp, #80] ; 0x50 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
367 b0: e58d303c str r3, [sp, #60] ; 0x3c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
368 b4: e51b0074 ldr r0, [fp, #-116] ; 0x74 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
369 b8: e28b3004 add r3, fp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
370 bc: e893000e ldm r3, {r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
371 c0: ebfffffe bl 0 <leaf_call> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
372 c4: e24bd004 sub sp, fp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
373 c8: e8bd4800 pop {fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
374 cc: e28dd008 add sp, sp, #8 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
375 d0: e12fff1e bx lr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
376 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
377 000000d4 <main>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
378 d4: e92d4800 push {fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
379 d8: e28db004 add fp, sp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
380 dc: e24dd088 sub sp, sp, #136 ; 0x88 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
381 e0: e59f20b8 ldr r2, [pc, #184] ; 1a0 <main+0xcc> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
382 e4: e24b3040 sub r3, fp, #64 ; 0x40 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
383 e8: e8920007 ldm r2, {r0, r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
384 ec: e8830007 stm r3, {r0, r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
385 f0: e59f30ac ldr r3, [pc, #172] ; 1a4 <main+0xd0> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
386 f4: e24bc034 sub ip, fp, #52 ; 0x34 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
387 f8: e893000f ldm r3, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
388 fc: e88c000f stm ip, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
389 100: e59f20a0 ldr r2, [pc, #160] ; 1a8 <main+0xd4> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
390 104: e24b3020 sub r3, fp, #32 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
391 108: e8920007 ldm r2, {r0, r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
392 10c: e8830007 stm r3, {r0, r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
393 110: e59f3094 ldr r3, [pc, #148] ; 1ac <main+0xd8> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
394 114: e24bc014 sub ip, fp, #20 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
395 118: e893000f ldm r3, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
396 11c: e88c000f stm ip, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
397 120: e28dc008 add ip, sp, #8 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
398 124: e24b3034 sub r3, fp, #52 ; 0x34 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
399 128: e893000f ldm r3, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
400 12c: e88c000f stm ip, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
401 130: e3a03007 mov r3, #7 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
402 134: e58d3018 str r3, [sp, #24] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
403 138: e3a03008 mov r3, #8 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
404 13c: e58d301c str r3, [sp, #28] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
405 140: e28dc020 add ip, sp, #32 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
406 144: e24b3020 sub r3, fp, #32 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
407 148: e8930007 ldm r3, {r0, r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
408 14c: e88c0007 stm ip, {r0, r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
409 150: e28dc030 add ip, sp, #48 ; 0x30 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
410 154: e24b3014 sub r3, fp, #20 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
411 158: e893000f ldm r3, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
412 15c: e88c000f stm ip, {r0, r1, r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
413 160: e3a0300e mov r3, #14 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
414 164: e58d3040 str r3, [sp, #64] ; 0x40 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
415 168: e3a0300f mov r3, #15 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
416 16c: e58d3044 str r3, [sp, #68] ; 0x44 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
417 170: e51b3038 ldr r3, [fp, #-56] ; 0x38 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
418 174: e58d3000 str r3, [sp] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
419 178: e24b3040 sub r3, fp, #64 ; 0x40 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
420 17c: e893000c ldm r3, {r2, r3} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
421 180: e3a00000 mov r0, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
422 184: e3a01001 mov r1, #1 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
423 188: ebfffffe bl 24 <nonleaf_call> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
424 18c: e3a03000 mov r3, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
425 190: e1a00003 mov r0, r3 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
426 194: e24bd004 sub sp, fp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
427 198: e8bd4800 pop {fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
428 19c: e12fff1e bx lr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
429 1a0: 00000000 .word 0x00000000 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
430 1a4: 00000010 .word 0x00000010 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
431 1a8: 00000020 .word 0x00000020 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
432 1ac: 00000030 .word 0x00000030 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
433 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
434 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
435 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
436 ; ---------- returning long long ----------> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
437 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
438 ; long long f() |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
439 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
440 ; return 7171LL; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
441 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
442 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
443 ; int main() |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
444 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
445 ; return (int)f(); |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
446 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
447 |
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 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
450 ; output from debian-6.0.8-armel w/ gcc 4.4.5 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
451 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
452 00000000 <f>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
453 0: e92d0810 push {r4, fp} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
454 4: e28db004 add fp, sp, #4 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
455 8: e3a03b07 mov r3, #7168 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
456 c: e2833003 add r3, r3, #3 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
457 10: e3a04000 mov r4, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
458 14: e1a00003 mov r0, r3 ; | retval in two regs |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
459 18: e1a01004 mov r1, r4 ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
460 1c: e24bd004 sub sp, fp, #4 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
461 20: e8bd0810 pop {r4, fp} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
462 24: e12fff1e bx lr ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
463 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
464 00000028 <main>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
465 28: e92d4830 push {r4, r5, fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
466 2c: e28db00c add fp, sp, #12 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
467 30: ebfffffe bl 0 <f> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
468 34: e1a03000 mov r3, r0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
469 38: e1a04001 mov r4, r1 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
470 3c: e1a00003 mov r0, r3 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
471 40: e24bd00c sub sp, fp, #12 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
472 44: e8bd4830 pop {r4, r5, fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
473 48: e12fff1e bx lr |
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 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
477 ; ---------- passing structs with only fp parts ----------> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
478 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
479 ; struct A { float a; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
480 ; struct B { float a, b; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
481 ; struct C { float a, b, c; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
482 ; struct D { double a; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
483 ; struct E { double a, b; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
484 ; struct F { double a, b, c; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
485 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
486 ; 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
|
487 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
488 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
489 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
490 ; int main() |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
491 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
492 ; 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
|
493 ; return 0; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
494 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
495 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
496 |
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 ; output from debian-6.0.8-armel w/ gcc 4.4.5 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
499 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
500 00000000 <leaf_call>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
501 0: e24dd008 sub sp, sp, #8 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
502 4: e52db004 push {fp} ; (str fp, [sp, #-4]!) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
503 8: e28db000 add fp, sp, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
504 c: e24dd014 sub sp, sp, #20 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
505 10: e50b0008 str r0, [fp, #-8] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
506 14: e24b0010 sub r0, fp, #16 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
507 18: e8800006 stm r0, {r1, r2} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
508 1c: e58b3008 str r3, [fp, #8] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
509 20: e28bd000 add sp, fp, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
510 24: e8bd0800 pop {fp} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
511 28: e28dd008 add sp, sp, #8 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
512 2c: e12fff1e bx lr |
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 00000030 <main>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
515 30: e92d4810 push {r4, fp, lr} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
516 34: e28db008 add fp, sp, #8 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
517 38: e24dd084 sub sp, sp, #132 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
518 3c: e59f30d0 ldr r3, [pc, #208] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
519 40: e50b3054 str r3, [fp, #-84] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
520 44: e59f20cc ldr r2, [pc, #204] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
521 48: e24b3050 sub r3, fp, #80 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
522 4c: e8920003 ldm r2, {r0, r1} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
523 50: e8830003 stm r3, {r0, r1} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
524 54: e59f20c0 ldr r2, [pc, #192] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
525 58: e24b3048 sub r3, fp, #72 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
526 5c: e8920007 ldm r2, {r0, r1, r2} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
527 60: e8830007 stm r3, {r0, r1, r2} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
528 64: e3a03000 mov r3, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
529 68: e3a045ff mov r4, #1069547520 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
530 6c: e2844603 add r4, r4, #3145728 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
531 70: e50b303c str r3, [fp, #-60] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
532 74: e50b4038 str r4, [fp, #-56] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
533 78: e59f30a0 ldr r3, [pc, #160] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
534 7c: e24bc034 sub ip, fp, #52 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
535 80: e893000f ldm r3, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
536 84: e88c000f stm ip, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
537 88: e59f3094 ldr r3, [pc, #148] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
538 8c: e24bc024 sub ip, fp, #36 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
539 90: e1a0e003 mov lr, r3 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
540 94: e8be000f ldm lr!, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
541 98: e8ac000f stmia ip!, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
542 9c: e89e0003 ldm lr, {r0, r1} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
543 a0: e88c0003 stm ip, {r0, r1} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
544 a4: e24b403c sub r4, fp, #60 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
545 a8: e8940018 ldm r4, {r3, r4} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
546 ac: e58d3008 str r3, [sp, #8] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
547 b0: e58d400c str r4, [sp, #12] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
548 b4: e28dc010 add ip, sp, #16 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
549 b8: e24b3034 sub r3, fp, #52 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
550 bc: e893000f ldm r3, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
551 c0: e88c000f stm ip, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
552 c4: e28de020 add lr, sp, #32 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
553 c8: e24bc024 sub ip, fp, #36 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
554 cc: e8bc000f ldm ip!, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
555 d0: e8ae000f stmia lr!, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
556 d4: e89c0003 ldm ip, {r0, r1} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
557 d8: e88e0003 stm lr, {r0, r1} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
558 dc: e1a0300d mov r3, sp ; | write ptr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
559 e0: e24b2044 sub r2, fp, #68 ; | read ptr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
560 e4: e8920003 ldm r2, {r0, r1} ; | arg 3 (struct C), split via | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
561 e8: e8830003 stm r3, {r0, r1} ; | | stack b & c |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
562 ec: e51b3048 ldr r3, [fp, #-72] ; | reg a |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
563 f0: e51b0054 ldr r0, [fp, #-84] ; arg 0 (struct A), via reg as word a |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
564 f4: e24b2050 sub r2, fp, #80 ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
565 f8: e8920006 ldm r2, {r1, r2} ; | arg 1 (struct B), via reg as 2 words a & b |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
566 fc: ebfffffe bl 0 <leaf_call> ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
567 100: e3a03000 mov r3, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
568 104: e1a00003 mov r0, r3 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
569 108: e24bd008 sub sp, fp, #8 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
570 10c: e8bd4810 pop {r4, fp, lr} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
571 110: e12fff1e bx lr ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
572 114: 3f800000 .word 0x3f800000 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
573 118: 00000000 .word 0x00000000 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
574 11c: 00000008 .word 0x00000008 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
575 120: 00000018 .word 0x00000018 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
576 124: 00000028 .word 0x00000028 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
577 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
578 |
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 ; ---------- returning structs by value ----------> |
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 ; struct Small { char x; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
583 ; struct Big { long long i; long j; }; /* bigger than a word */ |
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 ; struct Small f0() |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
586 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
587 ; struct Small s = { 132 }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
588 ; return s; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
589 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
590 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
591 ; struct Big f1() |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
592 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
593 ; struct Big b = { 7171LL, 232 }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
594 ; return b; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
595 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
596 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
597 ; int main() |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
598 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
599 ; struct Small s = f0(); |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
600 ; struct Big b = f1(); |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
601 ; return b.j + s.x; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
602 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
603 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
604 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
605 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
606 ; output from debian-6.0.8-armel w/ gcc 4.4.5 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
607 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
608 00000000 <f0>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
609 0: e52db004 push {fp} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
610 4: e28db000 add fp, sp, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
611 8: e24dd00c sub sp, sp, #12 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
612 c: e3e0307b mvn r3, #123 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
613 10: e54b3008 strb r3, [fp, #-8] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
614 14: e55b3008 ldrb r3, [fp, #-8] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
615 18: e1a00003 mov r0, r3 ; return value (via reg as <= 4b) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
616 1c: e28bd000 add sp, fp, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
617 20: e8bd0800 pop {fp} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
618 24: e12fff1e bx lr ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
619 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
620 00000028 <f1>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
621 28: e92d0810 push {r4, fp} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
622 2c: e28db004 add fp, sp, #4 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
623 30: e24dd010 sub sp, sp, #16 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
624 34: e1a0c000 mov ip, r0 ; ptr to retval space, tmp copy |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
625 38: e59f3028 ldr r3, [pc, #40] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
626 3c: e24b4014 sub r4, fp, #20 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
627 40: e893000f ldm r3, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
628 44: e884000f stm r4, {r0, r1, r2, r3} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
629 48: e1a0400c mov r4, ip ; write ptr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
630 4c: e24b3014 sub r3, fp, #20 ; read ptr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
631 50: e893000f ldm r3, {r0, r1, r2, r3} ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
632 54: e884000f stm r4, {r0, r1, r2, r3} ; | copy struct from local area to retval space |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
633 58: e1a0000c mov r0, ip ; return value: ptr to retval space |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
634 5c: e24bd004 sub sp, fp, #4 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
635 60: e8bd0810 pop {r4, fp} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
636 64: e12fff1e bx lr ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
637 68: 00000000 .word 0x00000000 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
638 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
639 0000006c <main>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
640 6c: e92d4800 push {fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
641 70: e28db004 add fp, sp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
642 74: e24dd018 sub sp, sp, #24 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
643 78: ebfffffe bl 0 <f0> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
644 7c: e1a03000 mov r3, r0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
645 80: e54b3008 strb r3, [fp, #-8] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
646 84: e24b301c sub r3, fp, #28 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
647 88: e1a00003 mov r0, r3 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
648 8c: ebfffffe bl 28 <f1> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
649 90: e51b2014 ldr r2, [fp, #-20] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
650 94: e55b3008 ldrb r3, [fp, #-8] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
651 98: e0823003 add r3, r2, r3 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
652 9c: e1a00003 mov r0, r3 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
653 a0: e24bd004 sub sp, fp, #4 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
654 a4: e8bd4800 pop {fp, lr} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
655 a8: e12fff1e bx lr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
656 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
657 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
658 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
659 ; ---------- single-field structs by values (and small array fields) ----------> |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
660 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
661 ; struct C { char c; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
662 ; struct S { short s; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
663 ; struct I { int i; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
664 ; struct F { float f; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
665 ; struct D { double d; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
666 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
667 ; struct C2 { char c[2]; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
668 ; struct C3 { char c[3]; }; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
669 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
670 ; void leaf_call(struct C2 a, struct C b, struct S c, struct I d, struct F e, struct D f, struct C3 g) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
671 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
672 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
673 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
674 ; int main() |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
675 ; { |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
676 ; leaf_call((struct C2){{0,1}}, (struct C){2}, (struct S){3}, (struct I){4}, (struct F){5.f}, (struct D){6.}, (struct C3){{7,8,9}}); |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
677 ; return 0; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
678 ; } |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
679 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
680 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
681 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
682 ; output from debian-6.0.8-armel w/ gcc 4.4.5 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
683 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
684 00000000 <leaf_call>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
685 0: e52db004 push {fp} ; (str fp, [sp, #-4]!) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
686 4: e28db000 add fp, sp, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
687 8: e24dd014 sub sp, sp, #20 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
688 c: e14b00b8 strh r0, [fp, #-8] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
689 10: e54b100c strb r1, [fp, #-12] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
690 14: e14b21b0 strh r2, [fp, #-16] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
691 18: e50b3014 str r3, [fp, #-20] |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
692 1c: e28bd000 add sp, fp, #0 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
693 20: e8bd0800 pop {fp} |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
694 24: e12fff1e bx lr |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
695 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
696 00000028 <main>: |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
697 28: e92d4810 push {r4, fp, lr} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
698 2c: e28db008 add fp, sp, #8 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
699 30: e24dd044 sub sp, sp, #68 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
700 34: e3a03000 mov r3, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
701 38: e54b3030 strb r3, [fp, #-48] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
702 3c: e3a03001 mov r3, #1 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
703 40: e54b302f strb r3, [fp, #-47] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
704 44: e3a03002 mov r3, #2 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
705 48: e54b302c strb r3, [fp, #-44] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
706 4c: e3a03003 mov r3, #3 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
707 50: e14b32b8 strh r3, [fp, #-40] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
708 54: e3a03004 mov r3, #4 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
709 58: e50b3024 str r3, [fp, #-36] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
710 5c: e59f308c ldr r3, [pc, #140] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
711 60: e50b3020 str r3, [fp, #-32] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
712 64: e3a03000 mov r3, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
713 68: e3a04101 mov r4, #1073741824 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
714 6c: e2844706 add r4, r4, #1572864 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
715 70: e50b301c str r3, [fp, #-28] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
716 74: e50b4018 str r4, [fp, #-24] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
717 78: e59f2074 ldr r2, [pc, #116] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
718 7c: e24b3010 sub r3, fp, #16 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
719 80: e5922000 ldr r2, [r2] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
720 84: e1c320b0 strh r2, [r3] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
721 88: e2833002 add r3, r3, #2 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
722 8c: e1a02822 lsr r2, r2, #16 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
723 90: e5c32000 strb r2, [r3] ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
724 94: e51b3020 ldr r3, [fp, #-32] ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
725 98: e58d3000 str r3, [sp] ; | arg 4 (struct F), via stack as word |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
726 9c: e24b401c sub r4, fp, #28 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
727 a0: e8940018 ldm r4, {r3, r4} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
728 a4: e58d3008 str r3, [sp, #8] ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
729 a8: e58d400c str r4, [sp, #12] ; | arg 5 (struct D), via stack as 2 words (aligned to 8, b/c double?) |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
730 ac: e28d3010 add r3, sp, #16 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
731 b0: e24b2010 sub r2, fp, #16 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
732 b4: e5922000 ldr r2, [r2] ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
733 b8: e1c320b0 strh r2, [r3] ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
734 bc: e2833002 add r3, r3, #2 ; | arg 6 (struct C3), via stack as 3 bytes in word slot |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
735 c0: e1a02822 lsr r2, r2, #16 ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
736 c4: e5c32000 strb r2, [r3] ; | |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
737 c8: e51b0030 ldr r0, [fp, #-48] ; arg 0 (struct C2), via reg as word |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
738 cc: e55b102c ldrb r1, [fp, #-44] ; arg 1 (struct C), via reg as word |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
739 d0: e15b22b8 ldrh r2, [fp, #-40] ; arg 2 (struct S), via reg as word |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
740 d4: e51b3024 ldr r3, [fp, #-36] ; arg 3 (struct I), via reg as word |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
741 d8: ebfffffe bl 0 <leaf_call> ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
742 dc: e3a03000 mov r3, #0 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
743 e0: e1a00003 mov r0, r3 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
744 e4: e24bd008 sub sp, fp, #8 ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
745 e8: e8bd4810 pop {r4, fp, lr} ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
746 ec: e12fff1e bx lr ; |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
747 f0: 40a00000 .word 0x40a00000 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
748 f4: 00000000 .word 0x00000000 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
749 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
750 |
0fc22b5feac7
- arm related doc addition about aggregates
Tassilo Philipp
parents:
327
diff
changeset
|
751 |
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
|
752 ; ---------- 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
|
753 ; |
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
|
754 ; 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
|
755 ; 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
|
756 ; |
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
|
757 ; 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
|
758 ; |
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
|
759 ; 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
|
760 ; 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
|
761 ; |
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
|
762 ; 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
|
763 ; { |
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
|
764 ; 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
|
765 ; 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
|
766 ; 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
|
767 ; 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
|
768 ; 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
|
769 ; 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
|
770 ; 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
|
771 ; 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
|
772 ; } |
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
|
773 ; } |
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
|
774 |
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
|
775 |
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
|
776 |
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
|
777 ; output from debian-6.0.8-armel w/ gcc 4.4.5 |
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
|
778 |
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
|
779 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
|
780 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
|
781 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
|
782 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
|
783 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
|
784 10: 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
|
785 14: e8bd0800 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
|
786 18: 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
|
787 |
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
|
788 0000001c <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
|
789 1c: 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
|
790 20: 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
|
791 24: 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
|
792 28: 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
|
793 2c: 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
|
794 30: e8bd0800 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
|
795 34: 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
|
796 |
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
|
797 00000038 <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
|
798 38: 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
|
799 3c: 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
|
800 40: 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
|
801 44: 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
|
802 48: 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
|
803 4c: 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
|
804 50: 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
|
805 54: 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
|
806 58: 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
|
807 5c: 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
|
808 60: 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
|
809 64: 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
|
810 68: 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
|
811 6c: 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
|
812 70: 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
|
813 74: 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
|
814 78: e24b200c sub r2, 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
|
815 7c: 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
|
816 80: e1a00002 mov r0, r2 ; | 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
|
817 84: e1a01003 mov r1, r3 ; | copy n 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
|
818 88: 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
|
819 8c: 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
|
820 90: 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
|
821 94: ebfffffe bl 1c <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
|
822 98: 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
|
823 9c: 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
|
824 a0: 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
|
825 a4: e24bd004 sub sp, fp, #4 ; \ |
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
|
826 a8: e8bd4800 pop {fp, lr} ; | 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
|
827 ac: 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
|
828 |
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
|
829 ; ... 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
|
830 |
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
|
831 |
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
|
832 |
327
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
833 ; vim: ft=asm68k |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
834 |