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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1 ; #include <stdlib.h>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
2 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
3 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
4 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
5 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
6 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
7 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
8 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
9 ; /* use some local data */
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
10 ; *(char*)alloca(220) = 'L';
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
11 ; leaf_call(b, c, d, e, f, g, h);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
12 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
13 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
14 ; int main()
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
15 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
17 ; return 0;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
18 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
19
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
20
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
21
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
22 ; output from 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