Mercurial > pub > dyncall > dyncall
annotate doc/disas_examples/mips.o32.disas @ 603:c1208587091c
- missed cmake build line to be removed given last commit
author | Tassilo Philipp |
---|---|
date | Wed, 21 Sep 2022 13:26:31 +0200 |
parents | fc614cb865c6 |
children |
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 freebsd-12.0_r333647-malta_mipselhf w/ gcc 4.2.1 -----> |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
23 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
24 00000000 <leaf_call>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
25 0: 3c1c0000 lui gp,0x0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
26 4: 279c0000 addiu gp,gp,0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
27 8: 0399e021 addu gp,gp,t9 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
28 c: 27bdfff8 addiu sp,sp,-8 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
29 10: afbe0000 sw s8,0(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
30 14: 03a0f021 move s8,sp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
31 18: afc40008 sw a0,8(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
32 1c: afc5000c sw a1,12(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
33 20: afc60010 sw a2,16(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
34 24: afc70014 sw a3,20(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
35 28: 03c0e821 move sp,s8 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
36 2c: 8fbe0000 lw s8,0(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
37 30: 03e00008 jr ra |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
38 34: 27bd0008 addiu sp,sp,8 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
39 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
40 00000038 <nonleaf_call>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
41 38: 3c1c0000 lui gp,0x0 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
42 3c: 279c0000 addiu gp,gp,0 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
43 40: 0399e021 addu gp,gp,t9 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
44 44: 27bdffc8 addiu sp,sp,-56 ; | prolog |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
45 48: afbf0034 sw ra,52(sp) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
46 4c: afbe0030 sw s8,48(sp) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
47 50: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
48 54: afbc0020 sw gp,32(sp) ; / |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
49 58: afc40038 sw a0,56(s8) ; \ |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
50 5c: afc5003c sw a1,60(s8) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
51 60: afc60040 sw a2,64(s8) ; | spill first 4 args into prev frame's reserved spill space in param area (although not actually needing to spill, here but just do a temp copy, but space is reserved for them anyways) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
52 64: afc70044 sw a3,68(s8) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
53 68: 27bdff18 addiu sp,sp,-232 ; alloca(220) - with padding to guarantee alignment |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
54 6c: 27a20020 addiu v0,sp,32 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
55 70: afc20028 sw v0,40(s8) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
56 74: 8fc30028 lw v1,40(s8) ; | start of alloca()'d memory -> v1, by ... |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
57 78: 24620007 addiu v0,v1,7 ; | ... using v0 as helper to align to 8b |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
58 7c: 000210c2 srl v0,v0,0x3 ; | @@@ unsure about use of helper space at 40(s8) in prev frame..? |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
59 80: 000210c0 sll v0,v0,0x3 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
60 84: afc20028 sw v0,40(s8) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
61 88: 8fc30028 lw v1,40(s8) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
62 8c: 2402004c li v0,76 ; 'L' -> v0, and... |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
63 90: a0620000 sb v0,0(v1) ; ... 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
|
64 94: 8fc2004c lw v0,76(s8) ; 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
|
65 98: afa20010 sw v0,16(sp) ; ... "pushed" onto stack |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
66 9c: 8fc20050 lw v0,80(s8) ; 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
|
67 a0: afa20014 sw v0,20(sp) ; ... "pushed" onto stack |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
68 a4: 8fc20054 lw v0,84(s8) ; 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
|
69 a8: afa20018 sw v0,24(sp) ; ... "pushed" onto stack |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
70 ac: 8fc4003c lw a0,60(s8) ; arg 0 (fetched from spill area of prev frame) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
71 b0: 8fc50040 lw a1,64(s8) ; arg 1 (fetched from spill area of prev frame) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
72 b4: 8fc60044 lw a2,68(s8) ; arg 2 (fetched from spill area of prev frame) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
73 b8: 8fc70048 lw a3,72(s8) ; 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
|
74 bc: 8f990000 lw t9,0(gp) ; func to call -> t9 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
75 c0: 0320f809 jalr t9 ; call and ret addr -> ra |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
76 c4: 00000000 nop ; branch delay slot |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
77 c8: 8fdc0020 lw gp,32(s8) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
78 cc: 03c0e821 move sp,s8 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
79 d0: 8fbf0034 lw ra,52(sp) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
80 d4: 8fbe0030 lw s8,48(sp) ; | epilog |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
81 d8: 03e00008 jr ra ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
82 dc: 27bd0038 addiu sp,sp,56 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
83 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
84 000000e0 <main>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
85 e0: 3c1c0000 lui gp,0x0 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
86 e4: 279c0000 addiu gp,gp,0 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
87 e8: 0399e021 addu gp,gp,t9 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
88 ec: 27bdffd0 addiu sp,sp,-48 ; | prolog |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
89 f0: afbf002c sw ra,44(sp) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
90 f4: afbe0028 sw s8,40(sp) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
91 f8: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
92 fc: afbc0020 sw gp,32(sp) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
93 100: 24020004 li v0,4 ; arg 4, and ... |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
94 104: afa20010 sw v0,16(sp) ; ... "pushed" onto stack |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
95 108: 24020005 li v0,5 ; arg 5, and ... |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
96 10c: afa20014 sw v0,20(sp) ; ... "pushed" onto stack |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
97 110: 24020006 li v0,6 ; arg 6, and ... |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
98 114: afa20018 sw v0,24(sp) ; ... "pushed" onto stack |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
99 118: 24020007 li v0,7 ; arg 7, and ... |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
100 11c: afa2001c sw v0,28(sp) ; ... "pushed" onto stack |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
101 120: 00002021 move a0,zero ; arg 0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
102 124: 24050001 li a1,1 ; arg 1 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
103 128: 24060002 li a2,2 ; arg 2 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
104 12c: 24070003 li a3,3 ; arg 3 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
105 130: 8f990000 lw t9,0(gp) ; func to call -> t9 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
106 134: 0320f809 jalr t9 ; call and ret addr -> ra |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
107 138: 00000000 nop ; branch delay slot |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
108 13c: 8fdc0020 lw gp,32(s8) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
109 140: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
110 144: 03c0e821 move sp,s8 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
111 148: 8fbf002c lw ra,44(sp) ; | epilog |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
112 14c: 8fbe0028 lw s8,40(sp) ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
113 150: 03e00008 jr ra ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
114 154: 27bd0030 addiu sp,sp,48 ; | |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
115 |
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 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
118 ; output from netbsd-5.0.2-pmax_mipsel_o32 w/ gcc 4.1.3 -----> |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
119 ; nearly the same, equivalent to above except non-optimal use of branch delay slots and $gp preserving in leaf call |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
120 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
121 00000000 <leaf_call>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
122 0: 27bdfff8 addiu sp,sp,-8 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
123 4: afbe0000 sw s8,0(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
124 8: 03a0f021 move s8,sp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
125 c: afc40008 sw a0,8(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
126 10: afc5000c sw a1,12(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
127 14: afc60010 sw a2,16(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
128 18: afc70014 sw a3,20(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
129 1c: 03c0e821 move sp,s8 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
130 20: 8fbe0000 lw s8,0(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
131 24: 27bd0008 addiu sp,sp,8 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
132 28: 03e00008 jr ra |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
133 2c: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
134 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
135 00000030 <nonleaf_call>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
136 30: 3c1c0000 lui gp,0x0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
137 34: 279c0000 addiu gp,gp,0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
138 38: 0399e021 addu gp,gp,t9 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
139 3c: 27bdffc8 addiu sp,sp,-56 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
140 40: afbf0034 sw ra,52(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
141 44: afbe0030 sw s8,48(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
142 48: 03a0f021 move s8,sp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
143 4c: afbc0020 sw gp,32(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
144 50: afc40038 sw a0,56(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
145 54: afc5003c sw a1,60(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
146 58: afc60040 sw a2,64(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
147 5c: afc70044 sw a3,68(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
148 60: 27bdff18 addiu sp,sp,-232 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
149 64: 27a20020 addiu v0,sp,32 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
150 68: afc20028 sw v0,40(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
151 6c: 8fc30028 lw v1,40(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
152 70: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
153 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
154 74: 24620007 addiu v0,v1,7 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
155 78: 000210c2 srl v0,v0,0x3 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
156 7c: 000210c0 sll v0,v0,0x3 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
157 80: afc20028 sw v0,40(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
158 84: 8fc30028 lw v1,40(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
159 88: 2402004c li v0,76 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
160 8c: a0620000 sb v0,0(v1) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
161 90: 8fc2004c lw v0,76(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
162 94: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
163 98: afa20010 sw v0,16(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
164 9c: 8fc20050 lw v0,80(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
165 a0: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
166 a4: afa20014 sw v0,20(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
167 a8: 8fc20054 lw v0,84(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
168 ac: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
169 b0: afa20018 sw v0,24(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
170 b4: 8fc4003c lw a0,60(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
171 b8: 8fc50040 lw a1,64(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
172 bc: 8fc60044 lw a2,68(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
173 c0: 8fc70048 lw a3,72(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
174 c4: 8f990000 lw t9,0(gp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
175 c8: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
176 cc: 0320f809 jalr t9 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
177 d0: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
178 d4: 8fdc0020 lw gp,32(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
179 d8: 03c0e821 move sp,s8 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
180 dc: 8fbf0034 lw ra,52(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
181 e0: 8fbe0030 lw s8,48(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
182 e4: 27bd0038 addiu sp,sp,56 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
183 e8: 03e00008 jr ra |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
184 ec: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
185 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
186 000000f0 <main>: |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
187 f0: 3c1c0000 lui gp,0x0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
188 f4: 279c0000 addiu gp,gp,0 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
189 f8: 0399e021 addu gp,gp,t9 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
190 fc: 27bdffd0 addiu sp,sp,-48 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
191 100: afbf002c sw ra,44(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
192 104: afbe0028 sw s8,40(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
193 108: 03a0f021 move s8,sp |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
194 10c: afbc0020 sw gp,32(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
195 110: 24020004 li v0,4 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
196 114: afa20010 sw v0,16(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
197 118: 24020005 li v0,5 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
198 11c: afa20014 sw v0,20(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
199 120: 24020006 li v0,6 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
200 124: afa20018 sw v0,24(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
201 128: 24020007 li v0,7 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
202 12c: afa2001c sw v0,28(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
203 130: 00002021 move a0,zero |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
204 134: 24050001 li a1,1 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
205 138: 24060002 li a2,2 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
206 13c: 24070003 li a3,3 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
207 140: 8f990000 lw t9,0(gp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
208 144: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
209 148: 0320f809 jalr t9 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
210 14c: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
211 150: 8fdc0020 lw gp,32(s8) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
212 154: 00001021 move v0,zero |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
213 158: 03c0e821 move sp,s8 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
214 15c: 8fbf002c lw ra,44(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
215 160: 8fbe0028 lw s8,40(sp) |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
216 164: 27bd0030 addiu sp,sp,48 |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
217 168: 03e00008 jr ra |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
218 16c: 00000000 nop |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
219 |
478 | 220 |
221 | |
222 ; ---------- structs by value ----------> | |
223 ; | |
224 ; struct A { int i, j; long long l; }; | |
225 ; | |
226 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h) | |
227 ; { | |
228 ; } | |
229 ; | |
230 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h) | |
231 ; { | |
232 ; /* use some local data */ | |
233 ; char l[100] ={ 'L'}; | |
234 ; leaf_call(b, c, d, e, f, g, h); | |
235 ; } | |
236 ; | |
237 ; int main() | |
238 ; { | |
239 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9); | |
240 ; return 0; | |
241 ; } | |
242 | |
243 | |
244 | |
245 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 -----> | |
246 | |
247 00000000 <leaf_call>: | |
248 0: 3c1c0000 lui gp,0x0 | |
249 4: 279c0000 addiu gp,gp,0 | |
250 8: 0399e021 addu gp,gp,t9 | |
251 c: 27bdfff8 addiu sp,sp,-8 | |
252 10: afbe0000 sw s8,0(sp) | |
253 14: 03a0f021 move s8,sp | |
254 18: afc40008 sw a0,8(s8) | |
255 1c: afc5000c sw a1,12(s8) | |
256 20: afc60010 sw a2,16(s8) | |
257 24: afc70014 sw a3,20(s8) | |
258 28: 03c0e821 move sp,s8 | |
259 2c: 8fbe0000 lw s8,0(sp) | |
260 30: 03e00008 jr ra | |
261 34: 27bd0008 addiu sp,sp,8 | |
262 | |
263 00000038 <nonleaf_call>: | |
264 38: 3c1c0000 lui gp,0x0 | |
265 3c: 279c0000 addiu gp,gp,0 | |
266 40: 0399e021 addu gp,gp,t9 | |
267 44: 27bdff60 addiu sp,sp,-160 | |
268 48: afbf009c sw ra,156(sp) | |
269 4c: afbe0098 sw s8,152(sp) | |
270 50: 03a0f021 move s8,sp | |
271 54: afbc0028 sw gp,40(sp) | |
272 58: afc400a0 sw a0,160(s8) | |
273 5c: afc500a4 sw a1,164(s8) | |
274 60: afc600a8 sw a2,168(s8) | |
275 64: afc700ac sw a3,172(s8) | |
276 68: 27c20030 addiu v0,s8,48 | |
277 6c: 24030064 li v1,100 | |
278 70: 00402021 move a0,v0 | |
279 74: 00002821 move a1,zero | |
280 78: 00603021 move a2,v1 | |
281 7c: 8f990000 lw t9,0(gp) | |
282 80: 0320f809 jalr t9 | |
283 84: 00000000 nop | |
284 88: 8fdc0028 lw gp,40(s8) | |
285 8c: 2402004c li v0,76 | |
286 90: a3c20030 sb v0,48(s8) | |
287 94: 8fc200b8 lw v0,184(s8) | |
288 98: 8fc300bc lw v1,188(s8) | |
289 9c: 8fc400c0 lw a0,192(s8) | |
290 a0: 8fc500c4 lw a1,196(s8) | |
291 a4: afa20010 sw v0,16(sp) | |
292 a8: afa30014 sw v1,20(sp) | |
293 ac: afa40018 sw a0,24(sp) | |
294 b0: afa5001c sw a1,28(sp) | |
295 b4: 8fc200c8 lw v0,200(s8) | |
296 b8: afa20020 sw v0,32(sp) | |
297 bc: 8fc200cc lw v0,204(s8) | |
298 c0: afa20024 sw v0,36(sp) | |
299 c4: 8fc400a4 lw a0,164(s8) | |
300 c8: 8fc500a8 lw a1,168(s8) | |
301 cc: 8fc600ac lw a2,172(s8) | |
302 d0: 8fc700b0 lw a3,176(s8) | |
303 d4: 8f990000 lw t9,0(gp) | |
304 d8: 0320f809 jalr t9 | |
305 dc: 00000000 nop | |
306 e0: 8fdc0028 lw gp,40(s8) | |
307 e4: 03c0e821 move sp,s8 | |
308 e8: 8fbf009c lw ra,156(sp) | |
309 ec: 8fbe0098 lw s8,152(sp) | |
310 f0: 03e00008 jr ra | |
311 f4: 27bd00a0 addiu sp,sp,160 | |
312 | |
313 000000f8 <main>: | |
314 f8: 3c1c0000 lui gp,0x0 ; | | |
315 fc: 279c0000 addiu gp,gp,0 ; | | |
316 100: 0399e021 addu gp,gp,t9 ; | | |
317 104: 27bdffb0 addiu sp,sp,-80 ; | prolog | |
318 108: afbf004c sw ra,76(sp) ; | | |
319 10c: afbe0048 sw s8,72(sp) ; | | |
320 110: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) | |
321 114: afbc0030 sw gp,48(sp) ; / | |
322 118: 8f820000 lw v0,0(gp) ; \ \ | |
323 11c: 24420000 addiu v0,v0,0 ; | | field j -> v0 | |
324 120: 8c420000 lw v0,0(v0) ; | / | |
325 124: 8f830000 lw v1,0(gp) ; | \ | |
326 128: 24630000 addiu v1,v1,0 ; | | field j -> v1 | |
327 12c: 8c630004 lw v1,4(v1) ; | prep local struct A data ... / | |
328 130: 8f840000 lw a0,0(gp) ; | \ | |
329 134: 24840000 addiu a0,a0,0 ; | | | |
330 138: 8c840008 lw a0,8(a0) ; | | field l -> a0 & a1 | |
331 13c: 8f850000 lw a1,0(gp) ; | | | |
332 140: 24a50000 addiu a1,a1,0 ; | | | |
333 144: 8ca5000c lw a1,12(a1) ; / / | |
334 148: afc20038 sw v0,56(s8) ; \ | |
335 14c: afc3003c sw v1,60(s8) ; | ... and write to local area | |
336 150: afc40040 sw a0,64(s8) ; | | |
337 154: afc50044 sw a1,68(s8) ; / | |
338 158: 24020004 li v0,4 ; push arg 4 ... | |
339 15c: afa20010 sw v0,16(sp) ; ... onto stack | |
340 160: 8fc20038 lw v0,56(s8) ; \ | |
341 164: 8fc3003c lw v1,60(s8) ; | | |
342 168: 8fc40040 lw a0,64(s8) ; | prep arg 5 (struct A) ... | |
343 16c: 8fc50044 lw a1,68(s8) ; / | |
344 170: afa20018 sw v0,24(sp) ; \ | |
345 174: afa3001c sw v1,28(sp) ; | ... and push onto stack | |
346 178: afa40020 sw a0,32(sp) ; | | |
347 17c: afa50024 sw a1,36(sp) ; / | |
348 180: 24020008 li v0,8 ; push arg 6 ... | |
349 184: afa20028 sw v0,40(sp) ; ... onto stack | |
350 188: 24020009 li v0,9 ; push arg 7 ... | |
351 18c: afa2002c sw v0,44(sp) ; ... onto stack | |
352 190: 00002021 move a0,zero ; arg 0 | |
353 194: 24050001 li a1,1 ; arg 1 | |
354 198: 24060002 li a2,2 ; arg 2 | |
355 19c: 24070003 li a3,3 ; arg 3 | |
356 1a0: 8f990000 lw t9,0(gp) ; func to call -> t9 | |
357 1a4: 0320f809 jalr t9 ; call and ret addr -> ra | |
358 1a8: 00000000 nop ; branch delay slot | |
359 1ac: 8fdc0030 lw gp,48(s8) ; | | |
360 1b0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style) | |
361 1b4: 03c0e821 move sp,s8 ; | | |
362 1b8: 8fbf004c lw ra,76(sp) ; | epilog | |
363 1bc: 8fbe0048 lw s8,72(sp) ; | | |
364 1c0: 03e00008 jr ra ; | | |
365 1c4: 27bd0050 addiu sp,sp,80 ; | | |
366 ... | |
367 | |
368 | |
369 | |
370 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float -----> | |
371 | |
372 00000000 <leaf_call>: | |
373 0: 3c1c0000 lui gp,0x0 | |
374 4: 279c0000 addiu gp,gp,0 | |
375 8: 0399e021 addu gp,gp,t9 | |
376 c: 27bdfff8 addiu sp,sp,-8 | |
377 10: afbe0000 sw s8,0(sp) | |
378 14: 03a0f021 move s8,sp | |
379 18: afc40008 sw a0,8(s8) | |
380 1c: afc5000c sw a1,12(s8) | |
381 20: afc60010 sw a2,16(s8) | |
382 24: afc70014 sw a3,20(s8) | |
383 28: 03c0e821 move sp,s8 | |
384 2c: 8fbe0000 lw s8,0(sp) | |
385 30: 03e00008 jr ra | |
386 34: 27bd0008 addiu sp,sp,8 | |
387 | |
388 00000038 <nonleaf_call>: | |
389 38: 3c1c0000 lui gp,0x0 | |
390 3c: 279c0000 addiu gp,gp,0 | |
391 40: 0399e021 addu gp,gp,t9 | |
392 44: 27bdff60 addiu sp,sp,-160 | |
393 48: afbf009c sw ra,156(sp) | |
394 4c: afbe0098 sw s8,152(sp) | |
395 50: 03a0f021 move s8,sp | |
396 54: afbc0028 sw gp,40(sp) | |
397 58: afc400a0 sw a0,160(s8) | |
398 5c: afc500a4 sw a1,164(s8) | |
399 60: afc600a8 sw a2,168(s8) | |
400 64: afc700ac sw a3,172(s8) | |
401 68: 27c20030 addiu v0,s8,48 | |
402 6c: 24030064 li v1,100 | |
403 70: 00402021 move a0,v0 | |
404 74: 00002821 move a1,zero | |
405 78: 00603021 move a2,v1 | |
406 7c: 8f990000 lw t9,0(gp) | |
407 80: 0320f809 jalr t9 | |
408 84: 00000000 nop | |
409 88: 8fdc0028 lw gp,40(s8) | |
410 8c: 2402004c li v0,76 | |
411 90: a3c20030 sb v0,48(s8) | |
412 94: 8fc200b8 lw v0,184(s8) | |
413 98: 8fc300bc lw v1,188(s8) | |
414 9c: 8fc400c0 lw a0,192(s8) | |
415 a0: 8fc500c4 lw a1,196(s8) | |
416 a4: afa20010 sw v0,16(sp) | |
417 a8: afa30014 sw v1,20(sp) | |
418 ac: afa40018 sw a0,24(sp) | |
419 b0: afa5001c sw a1,28(sp) | |
420 b4: 8fc200c8 lw v0,200(s8) | |
421 b8: afa20020 sw v0,32(sp) | |
422 bc: 8fc200cc lw v0,204(s8) | |
423 c0: afa20024 sw v0,36(sp) | |
424 c4: 8fc400a4 lw a0,164(s8) | |
425 c8: 8fc500a8 lw a1,168(s8) | |
426 cc: 8fc600ac lw a2,172(s8) | |
427 d0: 8fc700b0 lw a3,176(s8) | |
428 d4: 8f990000 lw t9,0(gp) | |
429 d8: 0320f809 jalr t9 | |
430 dc: 00000000 nop | |
431 e0: 8fdc0028 lw gp,40(s8) | |
432 e4: 03c0e821 move sp,s8 | |
433 e8: 8fbf009c lw ra,156(sp) | |
434 ec: 8fbe0098 lw s8,152(sp) | |
435 f0: 03e00008 jr ra | |
436 f4: 27bd00a0 addiu sp,sp,160 | |
437 | |
438 000000f8 <main>: | |
439 f8: 3c1c0000 lui gp,0x0 ; | | |
440 fc: 279c0000 addiu gp,gp,0 ; | | |
441 100: 0399e021 addu gp,gp,t9 ; | | |
442 104: 27bdffb0 addiu sp,sp,-80 ; | prolog | |
443 108: afbf004c sw ra,76(sp) ; | | |
444 10c: afbe0048 sw s8,72(sp) ; | | |
445 110: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) | |
446 114: afbc0030 sw gp,48(sp) ; / | |
447 118: 8f820000 lw v0,0(gp) ; \ \ | |
448 11c: 24420000 addiu v0,v0,0 ; | | field j -> v0 | |
449 120: 8c420000 lw v0,0(v0) ; | / | |
450 124: 8f830000 lw v1,0(gp) ; | \ | |
451 128: 24630000 addiu v1,v1,0 ; | | field j -> v1 | |
452 12c: 8c630004 lw v1,4(v1) ; | prep local struct A data ... / | |
453 130: 8f840000 lw a0,0(gp) ; | \ | |
454 134: 24840000 addiu a0,a0,0 ; | | | |
455 138: 8c840008 lw a0,8(a0) ; | | field l -> a0 & a1 | |
456 13c: 8f850000 lw a1,0(gp) ; | | | |
457 140: 24a50000 addiu a1,a1,0 ; | | | |
458 144: 8ca5000c lw a1,12(a1) ; / / | |
459 148: afc20038 sw v0,56(s8) ; \ | |
460 14c: afc3003c sw v1,60(s8) ; | ... and write to local area | |
461 150: afc40040 sw a0,64(s8) ; | | |
462 154: afc50044 sw a1,68(s8) ; / | |
463 158: 24020004 li v0,4 ; push arg 4 ... | |
464 15c: afa20010 sw v0,16(sp) ; ... onto stack | |
465 160: 8fc20038 lw v0,56(s8) ; \ | |
466 164: 8fc3003c lw v1,60(s8) ; | | |
467 168: 8fc40040 lw a0,64(s8) ; | prep arg 5 (struct A) ... | |
468 16c: 8fc50044 lw a1,68(s8) ; / | |
469 170: afa20018 sw v0,24(sp) ; \ | |
470 174: afa3001c sw v1,28(sp) ; | ... and push onto stack | |
471 178: afa40020 sw a0,32(sp) ; | | |
472 17c: afa50024 sw a1,36(sp) ; / | |
473 180: 24020008 li v0,8 ; push arg 6 ... | |
474 184: afa20028 sw v0,40(sp) ; ... onto stack | |
475 188: 24020009 li v0,9 ; push arg 7 ... | |
476 18c: afa2002c sw v0,44(sp) ; ... onto stack | |
477 190: 00002021 move a0,zero ; arg 0 | |
478 194: 24050001 li a1,1 ; arg 1 | |
479 198: 24060002 li a2,2 ; arg 2 | |
480 19c: 24070003 li a3,3 ; arg 3 | |
481 1a0: 8f990000 lw t9,0(gp) ; func to call -> t9 | |
482 1a4: 0320f809 jalr t9 ; call and ret addr -> ra | |
483 1a8: 00000000 nop ; branch delay slot | |
484 1ac: 8fdc0030 lw gp,48(s8) ; | | |
485 1b0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style) | |
486 1b4: 03c0e821 move sp,s8 ; | | |
487 1b8: 8fbf004c lw ra,76(sp) ; | epilog | |
488 1bc: 8fbe0048 lw s8,72(sp) ; | | |
489 1c0: 03e00008 jr ra ; | | |
490 1c4: 27bd0050 addiu sp,sp,80 ; | | |
491 ... | |
492 | |
493 | |
494 | |
495 ; ---------- structs by value, complex example (multiple structs) ----------> | |
496 ; | |
497 ; struct A { int i, j; float f; }; | |
498 ; struct B { double d; long long l; }; | |
499 ; | |
500 ; 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) | |
501 ; { | |
502 ; } | |
503 ; | |
504 ; 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) | |
505 ; { | |
506 ; /* use some local data */ | |
507 ; char l[100] ={ 'L'}; | |
508 ; leaf_call(b, c, d, e, f, g, h, i, j); | |
509 ; } | |
510 ; | |
511 ; int main() | |
512 ; { | |
513 ; 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); | |
514 ; return 0; | |
515 ; } | |
516 | |
517 | |
518 | |
519 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 -----> | |
520 | |
521 00000000 <leaf_call>: | |
522 0: 3c1c0000 lui gp,0x0 | |
523 4: 279c0000 addiu gp,gp,0 | |
524 8: 0399e021 addu gp,gp,t9 | |
525 c: 27bdfff8 addiu sp,sp,-8 | |
526 10: afbe0000 sw s8,0(sp) | |
527 14: 03a0f021 move s8,sp | |
528 18: afc40008 sw a0,8(s8) | |
529 1c: afc5000c sw a1,12(s8) | |
530 20: afc60010 sw a2,16(s8) | |
531 24: afc70014 sw a3,20(s8) | |
532 28: 03c0e821 move sp,s8 | |
533 2c: 8fbe0000 lw s8,0(sp) | |
534 30: 03e00008 jr ra | |
535 34: 27bd0008 addiu sp,sp,8 | |
536 | |
537 00000038 <nonleaf_call>: | |
538 38: 3c1c0000 lui gp,0x0 | |
539 3c: 279c0000 addiu gp,gp,0 | |
540 40: 0399e021 addu gp,gp,t9 | |
541 44: 27bdff38 addiu sp,sp,-200 | |
542 48: afbf00c4 sw ra,196(sp) | |
543 4c: afbe00c0 sw s8,192(sp) | |
544 50: 03a0f021 move s8,sp | |
545 54: afbc0050 sw gp,80(sp) | |
546 58: afc400c8 sw a0,200(s8) | |
547 5c: afc500cc sw a1,204(s8) | |
548 60: afc600d0 sw a2,208(s8) | |
549 64: afc700d4 sw a3,212(s8) | |
550 68: 27c20058 addiu v0,s8,88 | |
551 6c: 24030064 li v1,100 | |
552 70: 00402021 move a0,v0 | |
553 74: 00002821 move a1,zero | |
554 78: 00603021 move a2,v1 | |
555 7c: 8f990000 lw t9,0(gp) | |
556 80: 0320f809 jalr t9 | |
557 84: 00000000 nop | |
558 88: 8fdc0050 lw gp,80(s8) | |
559 8c: 2402004c li v0,76 | |
560 90: a3c20058 sb v0,88(s8) | |
561 94: 8fc200e0 lw v0,224(s8) | |
562 98: 8fc300e4 lw v1,228(s8) | |
563 9c: 8fc400e8 lw a0,232(s8) | |
564 a0: 8fc500ec lw a1,236(s8) | |
565 a4: afa20010 sw v0,16(sp) | |
566 a8: afa30014 sw v1,20(sp) | |
567 ac: afa40018 sw a0,24(sp) | |
568 b0: afa5001c sw a1,28(sp) | |
569 b4: 8fc200f0 lw v0,240(s8) | |
570 b8: afa20020 sw v0,32(sp) | |
571 bc: 8fc200f4 lw v0,244(s8) | |
572 c0: afa20024 sw v0,36(sp) | |
573 c4: 8fc200f8 lw v0,248(s8) | |
574 c8: 8fc300fc lw v1,252(s8) | |
575 cc: 8fc40100 lw a0,256(s8) | |
576 d0: afa20028 sw v0,40(sp) | |
577 d4: afa3002c sw v1,44(sp) | |
578 d8: afa40030 sw a0,48(sp) | |
579 dc: 8fc20108 lw v0,264(s8) | |
580 e0: 8fc3010c lw v1,268(s8) | |
581 e4: 8fc40110 lw a0,272(s8) | |
582 e8: 8fc50114 lw a1,276(s8) | |
583 ec: afa20038 sw v0,56(sp) | |
584 f0: afa3003c sw v1,60(sp) | |
585 f4: afa40040 sw a0,64(sp) | |
586 f8: afa50044 sw a1,68(sp) | |
587 fc: 8fc20118 lw v0,280(s8) | |
588 100: afa20048 sw v0,72(sp) | |
589 104: 8fc2011c lw v0,284(s8) | |
590 108: afa2004c sw v0,76(sp) | |
591 10c: 8fc400cc lw a0,204(s8) | |
592 110: 8fc500d0 lw a1,208(s8) | |
593 114: 8fc600d4 lw a2,212(s8) | |
594 118: 8fc700d8 lw a3,216(s8) | |
595 11c: 8f990000 lw t9,0(gp) | |
596 120: 0320f809 jalr t9 | |
597 124: 00000000 nop | |
598 128: 8fdc0050 lw gp,80(s8) | |
599 12c: 03c0e821 move sp,s8 | |
600 130: 8fbf00c4 lw ra,196(sp) | |
601 134: 8fbe00c0 lw s8,192(sp) | |
602 138: 03e00008 jr ra | |
603 13c: 27bd00c8 addiu sp,sp,200 | |
604 | |
605 00000140 <main>: | |
606 140: 3c1c0000 lui gp,0x0 ; | | |
607 144: 279c0000 addiu gp,gp,0 ; | | |
608 148: 0399e021 addu gp,gp,t9 ; | | |
609 14c: 27bdff58 addiu sp,sp,-168 ; | prolog | |
610 150: afbf00a4 sw ra,164(sp) ; | | |
611 154: afbe00a0 sw s8,160(sp) ; | | |
612 158: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) | |
613 15c: afbc0058 sw gp,88(sp) ; / | |
614 160: 8f820000 lw v0,0(gp) ; \ | | |
615 164: 24420030 addiu v0,v0,48 ; | | field j -> v0 | |
616 168: 8c420000 lw v0,0(v0) ; | / | |
617 16c: 8f830000 lw v1,0(gp) ; | prep (first) local struct A data ... \ | |
618 170: 24630030 addiu v1,v1,48 ; | | field j -> v1 | |
619 174: 8c630004 lw v1,4(v1) ; | / | |
620 178: 8f840000 lw a0,0(gp) ; | \ | |
621 17c: 24840030 addiu a0,a0,48 ; | | field f -> a0 | |
622 180: 8c840008 lw a0,8(a0) ; / | | |
623 184: afc20090 sw v0,144(s8) ; \ | |
624 188: afc30094 sw v1,148(s8) ; | ... and write to local area | |
625 18c: afc40098 sw a0,152(s8) ; / | |
626 190: 8f820000 lw v0,0(gp) ; \ | | |
627 194: 24420020 addiu v0,v0,32 ; | | | |
628 198: 8c420000 lw v0,0(v0) ; | | | |
629 19c: 8f830000 lw v1,0(gp) ; | | field d -> v0 & v1 | |
630 1a0: 24630020 addiu v1,v1,32 ; | | | |
631 1a4: 8c630004 lw v1,4(v1) ; | prep (first) local struct B data ... / | |
632 1a8: 8f840000 lw a0,0(gp) ; | \ | |
633 1ac: 24840020 addiu a0,a0,32 ; | | | |
634 1b0: 8c840008 lw a0,8(a0) ; | | | |
635 1b4: 8f850000 lw a1,0(gp) ; | | field l -> a0 & a1 | |
636 1b8: 24a50020 addiu a1,a1,32 ; | | | |
637 1bc: 8ca5000c lw a1,12(a1) ; / | | |
638 1c0: afc20080 sw v0,128(s8) ; \ | |
639 1c4: afc30084 sw v1,132(s8) ; | | |
640 1c8: afc40088 sw a0,136(s8) ; | ... and write to local area | |
641 1cc: afc5008c sw a1,140(s8) ; / | |
642 1d0: 8f820000 lw v0,0(gp) ; \ | | |
643 1d4: 24420010 addiu v0,v0,16 ; | | field j -> v0 | |
644 1d8: 8c420000 lw v0,0(v0) ; | / | |
645 1dc: 8f830000 lw v1,0(gp) ; | prep (second) local struct A data ... \ | |
646 1e0: 24630010 addiu v1,v1,16 ; | | field j -> v1 | |
647 1e4: 8c630004 lw v1,4(v1) ; | / | |
648 1e8: 8f840000 lw a0,0(gp) ; | \ | |
649 1ec: 24840010 addiu a0,a0,16 ; | | field f -> a0 | |
650 1f0: 8c840008 lw a0,8(a0) ; / | | |
651 1f4: afc20070 sw v0,112(s8) ; \ | |
652 1f8: afc30074 sw v1,116(s8) ; | ... and write to local area | |
653 1fc: afc40078 sw a0,120(s8) ; / | |
654 200: 8f820000 lw v0,0(gp) ; \ | | |
655 204: 24420000 addiu v0,v0,0 ; | | | |
656 208: 8c420000 lw v0,0(v0) ; | | | |
657 20c: 8f830000 lw v1,0(gp) ; | | field d -> v0 & v1 | |
658 210: 24630000 addiu v1,v1,0 ; | | | |
659 214: 8c630004 lw v1,4(v1) ; | prep (second) local struct B data ... / | |
660 218: 8f840000 lw a0,0(gp) ; | \ | |
661 21c: 24840000 addiu a0,a0,0 ; | | | |
662 220: 8c840008 lw a0,8(a0) ; | | | |
663 224: 8f850000 lw a1,0(gp) ; | | field l -> a0 & a1 | |
664 228: 24a50000 addiu a1,a1,0 ; | | | |
665 22c: 8ca5000c lw a1,12(a1) ; / | | |
666 230: afc20060 sw v0,96(s8) ; \ | |
667 234: afc30064 sw v1,100(s8) ; | | |
668 238: afc40068 sw a0,104(s8) ; | ... and write to local area | |
669 23c: afc5006c sw a1,108(s8) ; / | |
670 240: 8fc20080 lw v0,128(s8) ; \ | |
671 244: 8fc30084 lw v1,132(s8) ; | | |
672 248: 8fc40088 lw a0,136(s8) ; | | |
673 24c: 8fc5008c lw a1,140(s8) ; | | |
674 250: afa20018 sw v0,24(sp) ; | | d | |
675 254: afa3001c sw v1,28(sp) ; | arg 3 (first struct B) / | |
676 258: afa40020 sw a0,32(sp) ; | \ | |
677 25c: afa50024 sw a1,36(sp) ; / | l | |
678 260: 24020007 li v0,7 ; \ | |
679 264: afa20028 sw v0,40(sp) ; / arg 4 | |
680 268: 24020008 li v0,8 ; \ | |
681 26c: afa2002c sw v0,44(sp) ; / arg 5 | |
682 270: 8fc20070 lw v0,112(s8) ; \ | |
683 274: 8fc30074 lw v1,116(s8) ; | | |
684 278: 8fc40078 lw a0,120(s8) ; | arg 6 (second struct A, note that 60(sp) isn't used, so sizeof(struct A) is probably a padded 16) | |
685 27c: afa20030 sw v0,48(sp) ; | i | |
686 280: afa30034 sw v1,52(sp) ; | j | |
687 284: afa40038 sw a0,56(sp) ; / f | |
688 288: 8fc20060 lw v0,96(s8) ; \ | |
689 28c: 8fc30064 lw v1,100(s8) ; | | |
690 290: 8fc40068 lw a0,104(s8) ; | | |
691 294: 8fc5006c lw a1,108(s8) ; | | |
692 298: afa20040 sw v0,64(sp) ; | | d | |
693 29c: afa30044 sw v1,68(sp) ; | arg 7 (second struct B) / | |
694 2a0: afa40048 sw a0,72(sp) ; | \ | |
695 2a4: afa5004c sw a1,76(sp) ; | | l | |
696 2a8: 2402000e li v0,14 ; arg 8 pushed ... | |
697 2ac: afa20050 sw v0,80(sp) ; ... onto stack | |
698 2b0: 2402000f li v0,15 ; arg 9 pushed ... | |
699 2b4: afa20054 sw v0,84(sp) ; ... onto stack | |
700 2b8: 8fc20098 lw v0,152(s8) ; | | f (via stack, first slot after save area) | |
701 2bc: afa20010 sw v0,16(sp) ; | | note that 20(sp) isn't used, so sizeof(struct A) is probably a padded 16 | |
702 2c0: 8fc60090 lw a2,144(s8) ; | arg 2 (first struct A) i (via reg) | |
703 2c4: 8fc70094 lw a3,148(s8) ; | j (via reg) | |
704 2c8: 00002021 move a0,zero ; arg 0 | |
705 2cc: 24050001 li a1,1 ; arg 1 | |
706 2d0: 8f990000 lw t9,0(gp) ; func to call -> t9 | |
707 2d4: 0320f809 jalr t9 ; call and ret addr -> ra | |
708 2d8: 00000000 nop ; branch delay slot | |
709 2dc: 8fdc0058 lw gp,88(s8) ; | | |
710 2e0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style) | |
711 2e4: 03c0e821 move sp,s8 ; | | |
712 2e8: 8fbf00a4 lw ra,164(sp) ; | epilog | |
713 2ec: 8fbe00a0 lw s8,160(sp) ; | | |
714 2f0: 03e00008 jr ra ; | | |
715 2f4: 27bd00a8 addiu sp,sp,168 ; | | |
716 ... | |
717 | |
718 | |
719 | |
720 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float -----> | |
721 | |
722 00000000 <leaf_call>: | |
723 0: 3c1c0000 lui gp,0x0 | |
724 4: 279c0000 addiu gp,gp,0 | |
725 8: 0399e021 addu gp,gp,t9 | |
726 c: 27bdfff8 addiu sp,sp,-8 | |
727 10: afbe0000 sw s8,0(sp) | |
728 14: 03a0f021 move s8,sp | |
729 18: afc40008 sw a0,8(s8) | |
730 1c: afc5000c sw a1,12(s8) | |
731 20: afc60010 sw a2,16(s8) | |
732 24: afc70014 sw a3,20(s8) | |
733 28: 03c0e821 move sp,s8 | |
734 2c: 8fbe0000 lw s8,0(sp) | |
735 30: 03e00008 jr ra | |
736 34: 27bd0008 addiu sp,sp,8 | |
737 | |
738 00000038 <nonleaf_call>: | |
739 38: 3c1c0000 lui gp,0x0 | |
740 3c: 279c0000 addiu gp,gp,0 | |
741 40: 0399e021 addu gp,gp,t9 | |
742 44: 27bdff38 addiu sp,sp,-200 | |
743 48: afbf00c4 sw ra,196(sp) | |
744 4c: afbe00c0 sw s8,192(sp) | |
745 50: 03a0f021 move s8,sp | |
746 54: afbc0050 sw gp,80(sp) | |
747 58: afc400c8 sw a0,200(s8) | |
748 5c: afc500cc sw a1,204(s8) | |
749 60: afc600d0 sw a2,208(s8) | |
750 64: afc700d4 sw a3,212(s8) | |
751 68: 27c20058 addiu v0,s8,88 | |
752 6c: 24030064 li v1,100 | |
753 70: 00402021 move a0,v0 | |
754 74: 00002821 move a1,zero | |
755 78: 00603021 move a2,v1 | |
756 7c: 8f990000 lw t9,0(gp) | |
757 80: 0320f809 jalr t9 | |
758 84: 00000000 nop | |
759 88: 8fdc0050 lw gp,80(s8) | |
760 8c: 2402004c li v0,76 | |
761 90: a3c20058 sb v0,88(s8) | |
762 94: 8fc200e0 lw v0,224(s8) | |
763 98: 8fc300e4 lw v1,228(s8) | |
764 9c: 8fc400e8 lw a0,232(s8) | |
765 a0: 8fc500ec lw a1,236(s8) | |
766 a4: afa20010 sw v0,16(sp) | |
767 a8: afa30014 sw v1,20(sp) | |
768 ac: afa40018 sw a0,24(sp) | |
769 b0: afa5001c sw a1,28(sp) | |
770 b4: 8fc200f0 lw v0,240(s8) | |
771 b8: afa20020 sw v0,32(sp) | |
772 bc: 8fc200f4 lw v0,244(s8) | |
773 c0: afa20024 sw v0,36(sp) | |
774 c4: 8fc200f8 lw v0,248(s8) | |
775 c8: 8fc300fc lw v1,252(s8) | |
776 cc: 8fc40100 lw a0,256(s8) | |
777 d0: afa20028 sw v0,40(sp) | |
778 d4: afa3002c sw v1,44(sp) | |
779 d8: afa40030 sw a0,48(sp) | |
780 dc: 8fc20108 lw v0,264(s8) | |
781 e0: 8fc3010c lw v1,268(s8) | |
782 e4: 8fc40110 lw a0,272(s8) | |
783 e8: 8fc50114 lw a1,276(s8) | |
784 ec: afa20038 sw v0,56(sp) | |
785 f0: afa3003c sw v1,60(sp) | |
786 f4: afa40040 sw a0,64(sp) | |
787 f8: afa50044 sw a1,68(sp) | |
788 fc: 8fc20118 lw v0,280(s8) | |
789 100: afa20048 sw v0,72(sp) | |
790 104: 8fc2011c lw v0,284(s8) | |
791 108: afa2004c sw v0,76(sp) | |
792 10c: 8fc400cc lw a0,204(s8) | |
793 110: 8fc500d0 lw a1,208(s8) | |
794 114: 8fc600d4 lw a2,212(s8) | |
795 118: 8fc700d8 lw a3,216(s8) | |
796 11c: 8f990000 lw t9,0(gp) | |
797 120: 0320f809 jalr t9 | |
798 124: 00000000 nop | |
799 128: 8fdc0050 lw gp,80(s8) | |
800 12c: 03c0e821 move sp,s8 | |
801 130: 8fbf00c4 lw ra,196(sp) | |
802 134: 8fbe00c0 lw s8,192(sp) | |
803 138: 03e00008 jr ra | |
804 13c: 27bd00c8 addiu sp,sp,200 | |
805 | |
806 00000140 <main>: | |
807 140: 3c1c0000 lui gp,0x0 ; | | |
808 144: 279c0000 addiu gp,gp,0 ; | | |
809 148: 0399e021 addu gp,gp,t9 ; | | |
810 14c: 27bdff58 addiu sp,sp,-168 ; | prolog | |
811 150: afbf00a4 sw ra,164(sp) ; | | |
812 154: afbe00a0 sw s8,160(sp) ; | | |
813 158: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) | |
814 15c: afbc0058 sw gp,88(sp) ; / | |
815 160: 8f820000 lw v0,0(gp) ; \ | | |
816 164: 24420030 addiu v0,v0,48 ; | | field j -> v0 | |
817 168: 8c420000 lw v0,0(v0) ; | / | |
818 16c: 8f830000 lw v1,0(gp) ; | prep (first) local struct A data ... \ | |
819 170: 24630030 addiu v1,v1,48 ; | | field j -> v1 | |
820 174: 8c630004 lw v1,4(v1) ; | / | |
821 178: 8f840000 lw a0,0(gp) ; | \ | |
822 17c: 24840030 addiu a0,a0,48 ; | | field f -> a0 | |
823 180: 8c840008 lw a0,8(a0) ; / | | |
824 184: afc20090 sw v0,144(s8) ; \ | |
825 188: afc30094 sw v1,148(s8) ; | ... and write to local area | |
826 18c: afc40098 sw a0,152(s8) ; / | |
827 190: 8f820000 lw v0,0(gp) ; \ | | |
828 194: 24420020 addiu v0,v0,32 ; | | | |
829 198: 8c420000 lw v0,0(v0) ; | | | |
830 19c: 8f830000 lw v1,0(gp) ; | | field d -> v0 & v1 | |
831 1a0: 24630020 addiu v1,v1,32 ; | | | |
832 1a4: 8c630004 lw v1,4(v1) ; | prep (first) local struct B data ... / | |
833 1a8: 8f840000 lw a0,0(gp) ; | \ | |
834 1ac: 24840020 addiu a0,a0,32 ; | | | |
835 1b0: 8c840008 lw a0,8(a0) ; | | | |
836 1b4: 8f850000 lw a1,0(gp) ; | | field l -> a0 & a1 | |
837 1b8: 24a50020 addiu a1,a1,32 ; | | | |
838 1bc: 8ca5000c lw a1,12(a1) ; / | | |
839 1c0: afc20080 sw v0,128(s8) ; \ | |
840 1c4: afc30084 sw v1,132(s8) ; | | |
841 1c8: afc40088 sw a0,136(s8) ; | ... and write to local area | |
842 1cc: afc5008c sw a1,140(s8) ; / | |
843 1d0: 8f820000 lw v0,0(gp) ; \ | | |
844 1d4: 24420010 addiu v0,v0,16 ; | | field j -> v0 | |
845 1d8: 8c420000 lw v0,0(v0) ; | / | |
846 1dc: 8f830000 lw v1,0(gp) ; | prep (second) local struct A data ... \ | |
847 1e0: 24630010 addiu v1,v1,16 ; | | field j -> v1 | |
848 1e4: 8c630004 lw v1,4(v1) ; | / | |
849 1e8: 8f840000 lw a0,0(gp) ; | \ | |
850 1ec: 24840010 addiu a0,a0,16 ; | | field f -> a0 | |
851 1f0: 8c840008 lw a0,8(a0) ; / | | |
852 1f4: afc20070 sw v0,112(s8) ; \ | |
853 1f8: afc30074 sw v1,116(s8) ; | ... and write to local area | |
854 1fc: afc40078 sw a0,120(s8) ; / | |
855 200: 8f820000 lw v0,0(gp) ; \ | | |
856 204: 24420000 addiu v0,v0,0 ; | | | |
857 208: 8c420000 lw v0,0(v0) ; | | | |
858 20c: 8f830000 lw v1,0(gp) ; | | field d -> v0 & v1 | |
859 210: 24630000 addiu v1,v1,0 ; | | | |
860 214: 8c630004 lw v1,4(v1) ; | prep (second) local struct B data ... / | |
861 218: 8f840000 lw a0,0(gp) ; | \ | |
862 21c: 24840000 addiu a0,a0,0 ; | | | |
863 220: 8c840008 lw a0,8(a0) ; | | | |
864 224: 8f850000 lw a1,0(gp) ; | | field l -> a0 & a1 | |
865 228: 24a50000 addiu a1,a1,0 ; | | | |
866 22c: 8ca5000c lw a1,12(a1) ; / | | |
867 230: afc20060 sw v0,96(s8) ; \ | |
868 234: afc30064 sw v1,100(s8) ; | | |
869 238: afc40068 sw a0,104(s8) ; | ... and write to local area | |
870 23c: afc5006c sw a1,108(s8) ; / | |
871 240: 8fc20080 lw v0,128(s8) ; \ | |
872 244: 8fc30084 lw v1,132(s8) ; | | |
873 248: 8fc40088 lw a0,136(s8) ; | | |
874 24c: 8fc5008c lw a1,140(s8) ; | | |
875 250: afa20018 sw v0,24(sp) ; | | d | |
876 254: afa3001c sw v1,28(sp) ; | arg 3 (first struct B) / | |
877 258: afa40020 sw a0,32(sp) ; | \ | |
878 25c: afa50024 sw a1,36(sp) ; / | l | |
879 260: 24020007 li v0,7 ; \ | |
880 264: afa20028 sw v0,40(sp) ; / arg 4 | |
881 268: 24020008 li v0,8 ; \ | |
882 26c: afa2002c sw v0,44(sp) ; / arg 5 | |
883 270: 8fc20070 lw v0,112(s8) ; \ | |
884 274: 8fc30074 lw v1,116(s8) ; | | |
885 278: 8fc40078 lw a0,120(s8) ; | arg 6 (second struct A, note that 60(sp) isn't used, so sizeof(struct A) is probably a padded 16) | |
886 27c: afa20030 sw v0,48(sp) ; | i | |
887 280: afa30034 sw v1,52(sp) ; | j | |
888 284: afa40038 sw a0,56(sp) ; / f | |
889 288: 8fc20060 lw v0,96(s8) ; \ | |
890 28c: 8fc30064 lw v1,100(s8) ; | | |
891 290: 8fc40068 lw a0,104(s8) ; | | |
892 294: 8fc5006c lw a1,108(s8) ; | | |
893 298: afa20040 sw v0,64(sp) ; | | d | |
894 29c: afa30044 sw v1,68(sp) ; | arg 7 (second struct B) / | |
895 2a0: afa40048 sw a0,72(sp) ; | \ | |
896 2a4: afa5004c sw a1,76(sp) ; | | l | |
897 2a8: 2402000e li v0,14 ; arg 8 pushed ... | |
898 2ac: afa20050 sw v0,80(sp) ; ... onto stack | |
899 2b0: 2402000f li v0,15 ; arg 9 pushed ... | |
900 2b4: afa20054 sw v0,84(sp) ; ... onto stack | |
901 2b8: 8fc20098 lw v0,152(s8) ; | | f (via stack, first slot after save area) | |
902 2bc: afa20010 sw v0,16(sp) ; | | note that 20(sp) isn't used, so sizeof(struct A) is probably a padded 16 | |
903 2c0: 8fc60090 lw a2,144(s8) ; | arg 2 (first struct A) i (via reg) | |
904 2c4: 8fc70094 lw a3,148(s8) ; | j (via reg) | |
905 2c8: 00002021 move a0,zero ; arg 0 | |
906 2cc: 24050001 li a1,1 ; arg 1 | |
907 2d0: 8f990000 lw t9,0(gp) ; func to call -> t9 | |
908 2d4: 0320f809 jalr t9 ; call and ret addr -> ra | |
909 2d8: 00000000 nop ; branch delay slot | |
910 2dc: 8fdc0058 lw gp,88(s8) ; | | |
911 2e0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style) | |
912 2e4: 03c0e821 move sp,s8 ; | | |
913 2e8: 8fbf00a4 lw ra,164(sp) ; | epilog | |
914 2ec: 8fbe00a0 lw s8,160(sp) ; | | |
915 2f0: 03e00008 jr ra ; | | |
916 2f4: 27bd00a8 addiu sp,sp,168 ; | | |
917 ... | |
918 | |
919 | |
920 | |
921 ; ---------- returning structs by value ----------> | |
922 ; | |
923 ; struct Small { char x; }; | |
924 ; struct Big { long long i,j,k,l; long m; }; /* bigger than 16b */ | |
925 ; | |
926 ; struct Small f0() | |
927 ; { | |
928 ; struct Small s = { 132 }; | |
929 ; return s; | |
930 ; } | |
931 ; | |
932 ; struct Big f1() | |
933 ; { | |
934 ; struct Big b = { 7171LL, 99LL, -99LL, -3102LL, 32 }; | |
935 ; return b; | |
936 ; } | |
937 ; | |
938 ; int main() | |
939 ; { | |
940 ; struct Small s = f0(); | |
941 ; struct Big b = f1(); | |
942 ; return b.j + b.k + b.m + s.x; | |
943 ; } | |
944 | |
945 | |
946 | |
947 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 -----> | |
948 | |
949 00000000 <f0>: | |
950 0: 3c1c0000 lui gp,0x0 ; | | |
951 4: 279c0000 addiu gp,gp,0 ; | | |
952 8: 0399e021 addu gp,gp,t9 ; | prolog | |
953 c: 27bdffe8 addiu sp,sp,-24 ; | | |
954 10: afbe0010 sw s8,16(sp) ; | | |
955 14: 03a0f021 move s8,sp ; | | |
956 18: 00801021 move v0,a0 ; hidden first arg (ptr to struct ret) -> v0 | |
957 1c: 2403ff84 li v1,-124 ; | put together local struct | |
958 20: a3c30008 sb v1,8(s8) ; / | |
959 24: 93c30008 lbu v1,8(s8) ; read struct data from local area ... | |
960 28: a0430000 sb v1,0(v0) ; ... and write to return value area | |
961 2c: 03c0e821 move sp,s8 ; \ | |
962 30: 8fbe0010 lw s8,16(sp) ; | | |
963 34: 03e00008 jr ra ; | epilog | |
964 38: 27bd0018 addiu sp,sp,24 ; | | |
965 | |
966 0000003c <f1>: | |
967 3c: 3c1c0000 lui gp,0x0 ; | | |
968 40: 279c0000 addiu gp,gp,0 ; | | |
969 44: 0399e021 addu gp,gp,t9 ; | | |
970 48: 27bdffb0 addiu sp,sp,-80 ; | | |
971 4c: afbf0048 sw ra,72(sp) ; | prolog | |
972 50: afbe0044 sw s8,68(sp) ; | | |
973 54: afb00040 sw s0,64(sp) ; | | |
974 58: 03a0f021 move s8,sp ; | | |
975 5c: afbc0010 sw gp,16(sp) ; | | |
976 60: 00808021 move s0,a0 ; hidden first arg (ptr to struct ret) -> s0 | |
977 64: 27c20018 addiu v0,s8,24 ; | |
978 68: 8f830000 lw v1,0(gp) ; | |
979 6c: 24630000 addiu v1,v1,0 ; | |
980 70: 24060028 li a2,40 ; | |
981 74: 00402021 move a0,v0 ; | |
982 78: 00602821 move a1,v1 ; | |
983 7c: 8f990000 lw t9,0(gp) ; | |
984 80: 0320f809 jalr t9 ; | |
985 84: 00000000 nop ; @@@ unsure why those two jumps, but seems to put return value data together | |
986 88: 8fdc0010 lw gp,16(s8) ; | |
987 8c: 02001021 move v0,s0 ; | |
988 90: 27c30018 addiu v1,s8,24 ; | |
989 94: 24060028 li a2,40 ; | |
990 98: 00402021 move a0,v0 ; | |
991 9c: 00602821 move a1,v1 ; | |
992 a0: 8f990000 lw t9,0(gp) ; | |
993 a4: 0320f809 jalr t9 ; | |
994 a8: 00000000 nop ; | |
995 ac: 8fdc0010 lw gp,16(s8) ; | | |
996 b0: 02001021 move v0,s0 ; : return value (hidden ptr): not part of epilog, but unordered (branch delay slot style) | |
997 b4: 03c0e821 move sp,s8 ; | | |
998 b8: 8fbf0048 lw ra,72(sp) ; | | |
999 bc: 8fbe0044 lw s8,68(sp) ; | epilog | |
1000 c0: 8fb00040 lw s0,64(sp) ; | | |
1001 c4: 03e00008 jr ra ; | | |
1002 c8: 27bd0050 addiu sp,sp,80 ; | | |
1003 | |
1004 000000cc <main>: | |
1005 cc: 3c1c0000 lui gp,0x0 ; | | |
1006 d0: 279c0000 addiu gp,gp,0 ; | | |
1007 d4: 0399e021 addu gp,gp,t9 ; | | |
1008 d8: 27bdffb0 addiu sp,sp,-80 ; | | |
1009 dc: afbf004c sw ra,76(sp) ; | prolog | |
1010 e0: afbe0048 sw s8,72(sp) ; | | |
1011 e4: 03a0f021 move s8,sp ; | | |
1012 e8: afbc0010 sw gp,16(sp) ; / | |
1013 ec: 27c20018 addiu v0,s8,24 ; \ | |
1014 f0: 00402021 move a0,v0 ; | hidden first arg (ptr to space for ret val) | |
1015 f4: 8f990000 lw t9,0(gp) ; func to call (f0) -> t9 | |
1016 f8: 0320f809 jalr t9 ; call and ret addr -> ra | |
1017 fc: 00000000 nop ; branch delay slot | |
1018 100: 8fdc0010 lw gp,16(s8) ; restore gp @@@ unsure why? | |
1019 104: 27c20020 addiu v0,s8,32 ; | | |
1020 108: 00402021 move a0,v0 ; | hidden first arg (ptr to space for ret val) | |
1021 10c: 8f990000 lw t9,0(gp) ; func to call (f1) -> t9 | |
1022 110: 0320f809 jalr t9 ; call and ret addr -> ra | |
1023 114: 00000000 nop ; branch delay slot | |
1024 118: 8fdc0010 lw gp,16(s8) ; restore gp @@@ unsure why? | |
1025 11c: 8fc3002c lw v1,44(s8) ; | | | |
1026 120: 8fc20028 lw v0,40(s8) ; | | b.j -> v0 & v1 | |
1027 124: 00602021 move a0,v1 ; | a0 = (int)b.j | |
1028 128: 8fc30034 lw v1,52(s8) ; | | | |
1029 12c: 8fc20030 lw v0,48(s8) ; | | b.j -> v0 & v1 | |
1030 130: 00601021 move v0,v1 ; | return value v0 = (int)b.k | |
1031 134: 00821821 addu v1,a0,v0 ; | (int)b.j + (int)b.k -> v1 | |
1032 138: 8fc20040 lw v0,64(s8) ; | b.m -> v0 | |
1033 13c: 00621821 addu v1,v1,v0 ; | ((int)b.j + (int)b.k) + b.m -> v1 | |
1034 140: 83c20018 lb v0,24(s8) ; | s.x -> v0 | |
1035 144: 00621021 addu v0,v1,v0 ; / (((int)b.j + (int)b.k) + b.m) + s.x -> v0 | |
1036 148: 03c0e821 move sp,s8 ; \ | |
1037 14c: 8fbf004c lw ra,76(sp) ; | | |
1038 150: 8fbe0048 lw s8,72(sp) ; | epilog | |
1039 154: 03e00008 jr ra ; | | |
1040 158: 27bd0050 addiu sp,sp,80 ; | | |
1041 15c: 00000000 nop ; | | |
1042 | |
1043 | |
1044 | |
1045 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float -----> | |
1046 | |
1047 00000000 <f0>: | |
1048 0: 3c1c0000 lui gp,0x0 | |
1049 4: 279c0000 addiu gp,gp,0 | |
1050 8: 0399e021 addu gp,gp,t9 | |
1051 c: 27bdffe8 addiu sp,sp,-24 | |
1052 10: afbe0010 sw s8,16(sp) | |
1053 14: 03a0f021 move s8,sp | |
1054 18: 00801021 move v0,a0 | |
1055 1c: 2403ff84 li v1,-124 | |
1056 20: a3c30008 sb v1,8(s8) | |
1057 24: 93c30008 lbu v1,8(s8) | |
1058 28: a0430000 sb v1,0(v0) | |
1059 2c: 03c0e821 move sp,s8 | |
1060 30: 8fbe0010 lw s8,16(sp) | |
1061 34: 03e00008 jr ra | |
1062 38: 27bd0018 addiu sp,sp,24 | |
1063 | |
1064 0000003c <f1>: | |
1065 3c: 3c1c0000 lui gp,0x0 | |
1066 40: 279c0000 addiu gp,gp,0 | |
1067 44: 0399e021 addu gp,gp,t9 | |
1068 48: 27bdffb0 addiu sp,sp,-80 | |
1069 4c: afbf0048 sw ra,72(sp) | |
1070 50: afbe0044 sw s8,68(sp) | |
1071 54: afb00040 sw s0,64(sp) | |
1072 58: 03a0f021 move s8,sp | |
1073 5c: afbc0010 sw gp,16(sp) | |
1074 60: 00808021 move s0,a0 | |
1075 64: 27c20018 addiu v0,s8,24 | |
1076 68: 8f830000 lw v1,0(gp) | |
1077 6c: 24630000 addiu v1,v1,0 | |
1078 70: 24060028 li a2,40 | |
1079 74: 00402021 move a0,v0 | |
1080 78: 00602821 move a1,v1 | |
1081 7c: 8f990000 lw t9,0(gp) | |
1082 80: 0320f809 jalr t9 | |
1083 84: 00000000 nop | |
1084 88: 8fdc0010 lw gp,16(s8) | |
1085 8c: 02001021 move v0,s0 | |
1086 90: 27c30018 addiu v1,s8,24 | |
1087 94: 24060028 li a2,40 | |
1088 98: 00402021 move a0,v0 | |
1089 9c: 00602821 move a1,v1 | |
1090 a0: 8f990000 lw t9,0(gp) | |
1091 a4: 0320f809 jalr t9 | |
1092 a8: 00000000 nop | |
1093 ac: 8fdc0010 lw gp,16(s8) | |
1094 b0: 02001021 move v0,s0 | |
1095 b4: 03c0e821 move sp,s8 | |
1096 b8: 8fbf0048 lw ra,72(sp) | |
1097 bc: 8fbe0044 lw s8,68(sp) | |
1098 c0: 8fb00040 lw s0,64(sp) | |
1099 c4: 03e00008 jr ra | |
1100 c8: 27bd0050 addiu sp,sp,80 | |
1101 | |
1102 000000cc <main>: | |
1103 cc: 3c1c0000 lui gp,0x0 | |
1104 d0: 279c0000 addiu gp,gp,0 | |
1105 d4: 0399e021 addu gp,gp,t9 | |
1106 d8: 27bdffb0 addiu sp,sp,-80 | |
1107 dc: afbf004c sw ra,76(sp) | |
1108 e0: afbe0048 sw s8,72(sp) | |
1109 e4: 03a0f021 move s8,sp | |
1110 e8: afbc0010 sw gp,16(sp) | |
1111 ec: 27c20018 addiu v0,s8,24 | |
1112 f0: 00402021 move a0,v0 | |
1113 f4: 8f990000 lw t9,0(gp) | |
1114 f8: 0320f809 jalr t9 | |
1115 fc: 00000000 nop | |
1116 100: 8fdc0010 lw gp,16(s8) | |
1117 104: 27c20020 addiu v0,s8,32 | |
1118 108: 00402021 move a0,v0 | |
1119 10c: 8f990000 lw t9,0(gp) | |
1120 110: 0320f809 jalr t9 | |
1121 114: 00000000 nop | |
1122 118: 8fdc0010 lw gp,16(s8) | |
1123 11c: 8fc3002c lw v1,44(s8) | |
1124 120: 8fc20028 lw v0,40(s8) | |
1125 124: 00602021 move a0,v1 | |
1126 128: 8fc30034 lw v1,52(s8) | |
1127 12c: 8fc20030 lw v0,48(s8) | |
1128 130: 00601021 move v0,v1 | |
1129 134: 00821821 addu v1,a0,v0 | |
1130 138: 8fc20040 lw v0,64(s8) | |
1131 13c: 00621821 addu v1,v1,v0 | |
1132 140: 83c20018 lb v0,24(s8) | |
1133 144: 00621021 addu v0,v1,v0 | |
1134 148: 03c0e821 move sp,s8 | |
1135 14c: 8fbf004c lw ra,76(sp) | |
1136 150: 8fbe0048 lw s8,72(sp) | |
1137 154: 03e00008 jr ra | |
1138 158: 27bd0050 addiu sp,sp,80 | |
1139 15c: 00000000 nop | |
1140 | |
1141 | |
1142 | |
1143 ; ---------- returning long long ----------> | |
1144 ; | |
1145 ; long long f() | |
1146 ; { | |
1147 ; return 7171LL; | |
1148 ; } | |
1149 ; | |
1150 ; int main() | |
1151 ; { | |
1152 ; return (int)f(); | |
1153 ; } | |
1154 | |
1155 | |
1156 | |
1157 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 -----> | |
1158 | |
1159 00000000 <f>: | |
1160 0: 3c1c0000 lui gp,0x0 ; | |
1161 4: 279c0000 addiu gp,gp,0 ; | |
1162 8: 0399e021 addu gp,gp,t9 ; | |
1163 c: 27bdfff8 addiu sp,sp,-8 ; | |
1164 10: afbe0000 sw s8,0(sp) ; | |
1165 14: 03a0f021 move s8,sp ; | |
1166 18: 24031c03 li v1,7171 ; | return value | |
1167 1c: 00001021 move v0,zero ; | | |
1168 20: 03c0e821 move sp,s8 ; | |
1169 24: 8fbe0000 lw s8,0(sp) ; | |
1170 28: 03e00008 jr ra ; | |
1171 2c: 27bd0008 addiu sp,sp,8 ; | |
1172 | |
1173 00000030 <main>: | |
1174 30: 3c1c0000 lui gp,0x0 | |
1175 34: 279c0000 addiu gp,gp,0 | |
1176 38: 0399e021 addu gp,gp,t9 | |
1177 3c: 27bdffe0 addiu sp,sp,-32 | |
1178 40: afbf001c sw ra,28(sp) | |
1179 44: afbe0018 sw s8,24(sp) | |
1180 48: 03a0f021 move s8,sp | |
1181 4c: afbc0010 sw gp,16(sp) | |
1182 50: 8f990000 lw t9,0(gp) | |
1183 54: 0320f809 jalr t9 | |
1184 58: 00000000 nop | |
1185 5c: 8fdc0010 lw gp,16(s8) | |
1186 60: 00601021 move v0,v1 | |
1187 64: 03c0e821 move sp,s8 | |
1188 68: 8fbf001c lw ra,28(sp) | |
1189 6c: 8fbe0018 lw s8,24(sp) | |
1190 70: 03e00008 jr ra | |
1191 74: 27bd0020 addiu sp,sp,32 | |
1192 ... | |
1193 | |
1194 | |
1195 | |
1196 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float -----> | |
1197 | |
1198 00000000 <f>: | |
1199 0: 3c1c0000 lui gp,0x0 ; | |
1200 4: 279c0000 addiu gp,gp,0 ; | |
1201 8: 0399e021 addu gp,gp,t9 ; | |
1202 c: 27bdfff8 addiu sp,sp,-8 ; | |
1203 10: afbe0000 sw s8,0(sp) ; | |
1204 14: 03a0f021 move s8,sp ; | |
1205 18: 24031c03 li v1,7171 ; | return value | |
1206 1c: 00001021 move v0,zero ; | | |
1207 20: 03c0e821 move sp,s8 ; | |
1208 24: 8fbe0000 lw s8,0(sp) ; | |
1209 28: 03e00008 jr ra ; | |
1210 2c: 27bd0008 addiu sp,sp,8 ; | |
1211 | |
1212 00000030 <main>: | |
1213 30: 3c1c0000 lui gp,0x0 | |
1214 34: 279c0000 addiu gp,gp,0 | |
1215 38: 0399e021 addu gp,gp,t9 | |
1216 3c: 27bdffe0 addiu sp,sp,-32 | |
1217 40: afbf001c sw ra,28(sp) | |
1218 44: afbe0018 sw s8,24(sp) | |
1219 48: 03a0f021 move s8,sp | |
1220 4c: afbc0010 sw gp,16(sp) | |
1221 50: 8f990000 lw t9,0(gp) | |
1222 54: 0320f809 jalr t9 | |
1223 58: 00000000 nop | |
1224 5c: 8fdc0010 lw gp,16(s8) | |
1225 60: 00601021 move v0,v1 | |
1226 64: 03c0e821 move sp,s8 | |
1227 68: 8fbf001c lw ra,28(sp) | |
1228 6c: 8fbe0018 lw s8,24(sp) | |
1229 70: 03e00008 jr ra | |
1230 74: 27bd0020 addiu sp,sp,32 | |
1231 ... | |
1232 | |
1233 | |
1234 | |
1235 ; ---------- passing structs with only fp parts ----------> | |
1236 ; | |
1237 ; struct A { float a; }; | |
1238 ; struct B { float a, b; }; | |
1239 ; struct C { float a, b, c; }; | |
1240 ; struct D { double a; }; | |
1241 ; struct E { double a, b; }; | |
1242 ; struct F { double a, b, c; }; | |
1243 ; | |
1244 ; void leaf_call(struct A a, struct B b, struct C c, struct D d, struct E e, struct F f) | |
1245 ; { | |
1246 ; } | |
1247 ; | |
1248 ; int main() | |
1249 ; { | |
1250 ; 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.}); | |
1251 ; return 0; | |
1252 ; } | |
1253 | |
1254 | |
1255 | |
1256 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 -----> | |
1257 | |
1258 00000000 <leaf_call>: | |
1259 0: 3c1c0000 lui gp,0x0 | |
1260 4: 279c0000 addiu gp,gp,0 | |
1261 8: 0399e021 addu gp,gp,t9 | |
1262 c: 27bdfff8 addiu sp,sp,-8 | |
1263 10: afbe0000 sw s8,0(sp) | |
1264 14: 03a0f021 move s8,sp | |
1265 18: afc40008 sw a0,8(s8) | |
1266 1c: afc5000c sw a1,12(s8) | |
1267 20: afc60010 sw a2,16(s8) | |
1268 24: afc70014 sw a3,20(s8) | |
1269 28: 03c0e821 move sp,s8 | |
1270 2c: 8fbe0000 lw s8,0(sp) | |
1271 30: 03e00008 jr ra | |
1272 34: 27bd0008 addiu sp,sp,8 | |
1273 | |
1274 00000038 <main>: | |
1275 38: 3c1c0000 lui gp,0x0 ; | | |
1276 3c: 279c0000 addiu gp,gp,0 ; | | |
1277 40: 0399e021 addu gp,gp,t9 ; | | |
1278 44: 27bdff60 addiu sp,sp,-160 ; | prolog | |
1279 48: afbf009c sw ra,156(sp) ; | | |
1280 4c: afbe0098 sw s8,152(sp) ; | | |
1281 50: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) | |
1282 54: afbc0048 sw gp,72(sp) ; / | |
1283 58: 8f820000 lw v0,0(gp) ; \ | |
1284 5c: 24420044 addiu v0,v0,68 ; | prep local struct A data ... | |
1285 60: 8c420000 lw v0,0(v0) ; / | |
1286 64: afc20094 sw v0,148(s8) ; ... and write to local area | |
1287 68: 8f820000 lw v0,0(gp) ; \ | |
1288 6c: 2442003c addiu v0,v0,60 ; | | |
1289 70: 8c420000 lw v0,0(v0) ; | | |
1290 74: 8f830000 lw v1,0(gp) ; | prep local struct B data ... | |
1291 78: 2463003c addiu v1,v1,60 ; | | |
1292 7c: 8c630004 lw v1,4(v1) ; / | |
1293 80: afc2008c sw v0,140(s8) ; \ ... and write to local area a | |
1294 84: afc30090 sw v1,144(s8) ; / b | |
1295 88: 8f820000 lw v0,0(gp) ; \ | |
1296 8c: 24420030 addiu v0,v0,48 ; | | |
1297 90: 8c420000 lw v0,0(v0) ; | | |
1298 94: 8f830000 lw v1,0(gp) ; | | |
1299 98: 24630030 addiu v1,v1,48 ; | prep local struct C data ... | |
1300 9c: 8c630004 lw v1,4(v1) ; | | |
1301 a0: 8f840000 lw a0,0(gp) ; | | |
1302 a4: 24840030 addiu a0,a0,48 ; | | |
1303 a8: 8c840008 lw a0,8(a0) ; / | |
1304 ac: afc20080 sw v0,128(s8) ; \ a | |
1305 b0: afc30084 sw v1,132(s8) ; | ... and write to local area b | |
1306 b4: afc40088 sw a0,136(s8) ; / c | |
1307 b8: 8f830000 lw v1,0(gp) ; \ | |
1308 bc: 24630028 addiu v1,v1,40 ; | | |
1309 c0: 8c630004 lw v1,4(v1) ; | | |
1310 c4: 8f820000 lw v0,0(gp) ; | prep local struct D data ... | |
1311 c8: 24420028 addiu v0,v0,40 ; | | |
1312 cc: 8c420000 lw v0,0(v0) ; / | |
1313 d0: afc3007c sw v1,124(s8) ; \ ... and write to local area | |
1314 d4: afc20078 sw v0,120(s8) ; / | |
1315 d8: 8f820000 lw v0,0(gp) ; \ | |
1316 dc: 24420018 addiu v0,v0,24 ; | | |
1317 e0: 8c420000 lw v0,0(v0) ; | | |
1318 e4: 8f830000 lw v1,0(gp) ; | | |
1319 e8: 24630018 addiu v1,v1,24 ; | | |
1320 ec: 8c630004 lw v1,4(v1) ; | prep local struct E data ... | |
1321 f0: 8f840000 lw a0,0(gp) ; | | |
1322 f4: 24840018 addiu a0,a0,24 ; | | |
1323 f8: 8c840008 lw a0,8(a0) ; | | |
1324 fc: 8f850000 lw a1,0(gp) ; | | |
1325 100: 24a50018 addiu a1,a1,24 ; | | |
1326 104: 8ca5000c lw a1,12(a1) ; / | |
1327 108: afc20068 sw v0,104(s8) ; \ | a | |
1328 10c: afc3006c sw v1,108(s8) ; | ... and write to local area / | |
1329 110: afc40070 sw a0,112(s8) ; | \ | |
1330 114: afc50074 sw a1,116(s8) ; / | b | |
1331 118: 8f820000 lw v0,0(gp) ; \ | |
1332 11c: 24420000 addiu v0,v0,0 ; | | |
1333 120: 8c420000 lw v0,0(v0) ; | | |
1334 124: 8f830000 lw v1,0(gp) ; | | |
1335 128: 24630000 addiu v1,v1,0 ; | | |
1336 12c: 8c630004 lw v1,4(v1) ; | | |
1337 130: 8f840000 lw a0,0(gp) ; | | |
1338 134: 24840000 addiu a0,a0,0 ; | | |
1339 138: 8c840008 lw a0,8(a0) ; | | |
1340 13c: 8f850000 lw a1,0(gp) ; | prep local struct F data ... | |
1341 140: 24a50000 addiu a1,a1,0 ; | | |
1342 144: 8ca5000c lw a1,12(a1) ; | | |
1343 148: 8f860000 lw a2,0(gp) ; | | |
1344 14c: 24c60000 addiu a2,a2,0 ; | | |
1345 150: 8cc60010 lw a2,16(a2) ; | | |
1346 154: 8f870000 lw a3,0(gp) ; | | |
1347 158: 24e70000 addiu a3,a3,0 ; | | |
1348 15c: 8ce70014 lw a3,20(a3) ; / | |
1349 160: afc20050 sw v0,80(s8) ; \ | a | |
1350 164: afc30054 sw v1,84(s8) ; | / | |
1351 168: afc40058 sw a0,88(s8) ; | \ b | |
1352 16c: afc5005c sw a1,92(s8) ; | ... and write to local area / | |
1353 170: afc60060 sw a2,96(s8) ; | \ | |
1354 174: afc70064 sw a3,100(s8) ; / | c | |
1355 178: 8fc3007c lw v1,124(s8) ; \ | |
1356 17c: 8fc20078 lw v0,120(s8) ; | | |
1357 180: afa3001c sw v1,28(sp) ; | arg 3 (struct D) | |
1358 184: afa20018 sw v0,24(sp) ; / | |
1359 188: 8fc20068 lw v0,104(s8) ; \ | |
1360 18c: 8fc3006c lw v1,108(s8) ; | | |
1361 190: 8fc40070 lw a0,112(s8) ; | | |
1362 194: 8fc50074 lw a1,116(s8) ; | | |
1363 198: afa20020 sw v0,32(sp) ; | arg 4 (struct E) | |
1364 19c: afa30024 sw v1,36(sp) ; | | |
1365 1a0: afa40028 sw a0,40(sp) ; | | |
1366 1a4: afa5002c sw a1,44(sp) ; / | |
1367 1a8: 8fc20050 lw v0,80(s8) ; \ | |
1368 1ac: 8fc30054 lw v1,84(s8) ; | | |
1369 1b0: 8fc40058 lw a0,88(s8) ; | | |
1370 1b4: 8fc5005c lw a1,92(s8) ; | | |
1371 1b8: 8fc60060 lw a2,96(s8) ; | | |
1372 1bc: 8fc70064 lw a3,100(s8) ; | | |
1373 1c0: afa20030 sw v0,48(sp) ; | arg 5 (struct F) | |
1374 1c4: afa30034 sw v1,52(sp) ; | | |
1375 1c8: afa40038 sw a0,56(sp) ; | | |
1376 1cc: afa5003c sw a1,60(sp) ; | | |
1377 1d0: afa60040 sw a2,64(sp) ; | | |
1378 1d4: afa70044 sw a3,68(sp) ; / | |
1379 1d8: 8fc20084 lw v0,132(s8) ; \ | |
1380 1dc: 8fc30088 lw v1,136(s8) ; | | |
1381 1e0: afa20010 sw v0,16(sp) ; | arg 2 (struct C) b (via stack) | |
1382 1e4: afa30014 sw v1,20(sp) ; | c (via stack) | |
1383 1e8: 8fc70080 lw a3,128(s8) ; | a (via reg) | |
1384 1ec: 8fc40094 lw a0,148(s8) ; arg 0 (struct A, via reg) | |
1385 1f0: 8fc5008c lw a1,140(s8) ; | arg 1 (struct B, via regs) a | |
1386 1f4: 8fc60090 lw a2,144(s8) ; | b | |
1387 1f8: 8f990000 lw t9,0(gp) ; func to call -> t9 | |
1388 1fc: 0320f809 jalr t9 ; call and ret addr -> ra | |
1389 200: 00000000 nop ; branch delay slot | |
1390 204: 8fdc0048 lw gp,72(s8) ; | | |
1391 208: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style) | |
1392 20c: 03c0e821 move sp,s8 ; | | |
1393 210: 8fbf009c lw ra,156(sp) ; | epilog | |
1394 214: 8fbe0098 lw s8,152(sp) ; | | |
1395 218: 03e00008 jr ra ; | | |
1396 21c: 27bd00a0 addiu sp,sp,160 ; | | |
1397 | |
1398 | |
1399 | |
1400 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float -----> | |
1401 | |
1402 00000000 <leaf_call>: | |
1403 0: 3c1c0000 lui gp,0x0 | |
1404 4: 279c0000 addiu gp,gp,0 | |
1405 8: 0399e021 addu gp,gp,t9 | |
1406 c: 27bdfff8 addiu sp,sp,-8 | |
1407 10: afbe0000 sw s8,0(sp) | |
1408 14: 03a0f021 move s8,sp | |
1409 18: afc40008 sw a0,8(s8) | |
1410 1c: afc5000c sw a1,12(s8) | |
1411 20: afc60010 sw a2,16(s8) | |
1412 24: afc70014 sw a3,20(s8) | |
1413 28: 03c0e821 move sp,s8 | |
1414 2c: 8fbe0000 lw s8,0(sp) | |
1415 30: 03e00008 jr ra | |
1416 34: 27bd0008 addiu sp,sp,8 | |
1417 | |
1418 00000038 <main>: | |
1419 38: 3c1c0000 lui gp,0x0 ; | | |
1420 3c: 279c0000 addiu gp,gp,0 ; | | |
1421 40: 0399e021 addu gp,gp,t9 ; | | |
1422 44: 27bdff60 addiu sp,sp,-160 ; | prolog | |
1423 48: afbf009c sw ra,156(sp) ; | | |
1424 4c: afbe0098 sw s8,152(sp) ; | | |
1425 50: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) | |
1426 54: afbc0048 sw gp,72(sp) ; / | |
1427 58: 8f810000 lw at,0(gp) ; \ | |
1428 5c: 24210044 addiu at,at,68 ; | prep local struct A (single float field) data ... | |
1429 60: c4200000 lwc1 $f0,0(at) ; / | |
1430 64: e7c00094 swc1 $f0,148(s8) ; ... and write to local area | |
1431 68: 8f820000 lw v0,0(gp) ; \ | |
1432 6c: 2442003c addiu v0,v0,60 ; | | |
1433 70: 8c420000 lw v0,0(v0) ; | | |
1434 74: 8f830000 lw v1,0(gp) ; | prep local struct B data ... | |
1435 78: 2463003c addiu v1,v1,60 ; | | |
1436 7c: 8c630004 lw v1,4(v1) ; / | |
1437 80: afc2008c sw v0,140(s8) ; \ ... and write to local area a | |
1438 84: afc30090 sw v1,144(s8) ; / b | |
1439 88: 8f820000 lw v0,0(gp) ; \ | |
1440 8c: 24420030 addiu v0,v0,48 ; | | |
1441 90: 8c420000 lw v0,0(v0) ; | | |
1442 94: 8f830000 lw v1,0(gp) ; | | |
1443 98: 24630030 addiu v1,v1,48 ; | prep local struct C data ... | |
1444 9c: 8c630004 lw v1,4(v1) ; | | |
1445 a0: 8f840000 lw a0,0(gp) ; | | |
1446 a4: 24840030 addiu a0,a0,48 ; | | |
1447 a8: 8c840008 lw a0,8(a0) ; / | |
1448 ac: afc20080 sw v0,128(s8) ; \ a | |
1449 b0: afc30084 sw v1,132(s8) ; | ... and write to local area b | |
1450 b4: afc40088 sw a0,136(s8) ; / c | |
1451 b8: 8f810000 lw at,0(gp) ; \ | |
1452 bc: 24210028 addiu at,at,40 ; | prep local struct D (single double field) data ... | |
1453 c0: d4200000 ldc1 $f0,0(at) ; / | |
1454 c4: f7c00078 sdc1 $f0,120(s8) ; ... and write to local area | |
1455 c8: 8f820000 lw v0,0(gp) ; \ | |
1456 cc: 24420018 addiu v0,v0,24 ; | | |
1457 d0: 8c420000 lw v0,0(v0) ; | | |
1458 d4: 8f830000 lw v1,0(gp) ; | | |
1459 d8: 24630018 addiu v1,v1,24 ; | | |
1460 dc: 8c630004 lw v1,4(v1) ; | prep local struct E data ... | |
1461 e0: 8f840000 lw a0,0(gp) ; | | |
1462 e4: 24840018 addiu a0,a0,24 ; | | |
1463 e8: 8c840008 lw a0,8(a0) ; | | |
1464 ec: 8f850000 lw a1,0(gp) ; | | |
1465 f0: 24a50018 addiu a1,a1,24 ; | | |
1466 f4: 8ca5000c lw a1,12(a1) ; / | |
1467 f8: afc20068 sw v0,104(s8) ; \ | a | |
1468 fc: afc3006c sw v1,108(s8) ; | ... and write to local area / | |
1469 100: afc40070 sw a0,112(s8) ; | \ | |
1470 104: afc50074 sw a1,116(s8) ; / | b | |
1471 108: 8f820000 lw v0,0(gp) ; \ | |
1472 10c: 24420000 addiu v0,v0,0 ; | | |
1473 110: 8c420000 lw v0,0(v0) ; | | |
1474 114: 8f830000 lw v1,0(gp) ; | | |
1475 118: 24630000 addiu v1,v1,0 ; | | |
1476 11c: 8c630004 lw v1,4(v1) ; | | |
1477 120: 8f840000 lw a0,0(gp) ; | | |
1478 124: 24840000 addiu a0,a0,0 ; | | |
1479 128: 8c840008 lw a0,8(a0) ; | | |
1480 12c: 8f850000 lw a1,0(gp) ; | prep local struct F data ... | |
1481 130: 24a50000 addiu a1,a1,0 ; | | |
1482 134: 8ca5000c lw a1,12(a1) ; | | |
1483 138: 8f860000 lw a2,0(gp) ; | | |
1484 13c: 24c60000 addiu a2,a2,0 ; | | |
1485 140: 8cc60010 lw a2,16(a2) ; | | |
1486 144: 8f870000 lw a3,0(gp) ; | | |
1487 148: 24e70000 addiu a3,a3,0 ; | | |
1488 14c: 8ce70014 lw a3,20(a3) ; / | |
1489 150: afc20050 sw v0,80(s8) ; \ | a | |
1490 154: afc30054 sw v1,84(s8) ; | / | |
1491 158: afc40058 sw a0,88(s8) ; | \ b | |
1492 15c: afc5005c sw a1,92(s8) ; | ... and write to local area / | |
1493 160: afc60060 sw a2,96(s8) ; | \ | |
1494 164: afc70064 sw a3,100(s8) ; / | c | |
1495 168: d7c00078 ldc1 $f0,120(s8) ; \ | |
1496 16c: f7a00018 sdc1 $f0,24(sp) ; / arg 3 (struct D) | |
1497 170: 8fc20068 lw v0,104(s8) ; \ | |
1498 174: 8fc3006c lw v1,108(s8) ; | | |
1499 178: 8fc40070 lw a0,112(s8) ; | | |
1500 17c: 8fc50074 lw a1,116(s8) ; | | |
1501 180: afa20020 sw v0,32(sp) ; | arg 4 (struct E) | |
1502 184: afa30024 sw v1,36(sp) ; | | |
1503 188: afa40028 sw a0,40(sp) ; | | |
1504 18c: afa5002c sw a1,44(sp) ; / | |
1505 190: 8fc20050 lw v0,80(s8) ; \ | |
1506 194: 8fc30054 lw v1,84(s8) ; | | |
1507 198: 8fc40058 lw a0,88(s8) ; | | |
1508 19c: 8fc5005c lw a1,92(s8) ; | | |
1509 1a0: 8fc60060 lw a2,96(s8) ; | | |
1510 1a4: 8fc70064 lw a3,100(s8) ; | | |
1511 1a8: afa20030 sw v0,48(sp) ; | arg 5 (struct F) | |
1512 1ac: afa30034 sw v1,52(sp) ; | | |
1513 1b0: afa40038 sw a0,56(sp) ; | | |
1514 1b4: afa5003c sw a1,60(sp) ; | | |
1515 1b8: afa60040 sw a2,64(sp) ; | | |
1516 1bc: afa70044 sw a3,68(sp) ; / | |
1517 1c0: 8fc20084 lw v0,132(s8) ; \ | |
1518 1c4: 8fc30088 lw v1,136(s8) ; | | |
1519 1c8: afa20010 sw v0,16(sp) ; | arg 2 (struct C) b (via stack) | |
1520 1cc: afa30014 sw v1,20(sp) ; | c (via stack) | |
1521 1d0: 8fc70080 lw a3,128(s8) ; | a (via reg) | |
1522 1d4: 8fc40094 lw a0,148(s8) ; arg 0 (struct A, via reg) | |
1523 1d8: 8fc5008c lw a1,140(s8) ; | arg 1 (struct B, via regs) a | |
1524 1dc: 8fc60090 lw a2,144(s8) ; | b | |
1525 1e0: 8f990000 lw t9,0(gp) ; func to call -> t9 | |
1526 1e4: 0320f809 jalr t9 ; call and ret addr -> ra | |
1527 1e8: 00000000 nop ; branch delay slot | |
1528 1ec: 8fdc0048 lw gp,72(s8) ; | | |
1529 1f0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style) | |
1530 1f4: 03c0e821 move sp,s8 ; | | |
1531 1f8: 8fbf009c lw ra,156(sp) ; | epilog | |
1532 1fc: 8fbe0098 lw s8,152(sp) ; | | |
1533 200: 03e00008 jr ra ; | | |
1534 204: 27bd00a0 addiu sp,sp,160 ; | | |
1535 ... | |
1536 | |
1537 | |
1538 | |
1539 ; ---------- single-field structs by values (and small array fields) ----------> | |
1540 ; | |
1541 ; struct C { char c; }; | |
1542 ; struct S { short s; }; | |
1543 ; struct I { int i; }; | |
1544 ; struct F { float f; }; | |
1545 ; struct D { double d; }; | |
1546 ; | |
1547 ; struct C2 { char c[2]; }; | |
1548 ; struct C3 { char c[3]; }; | |
1549 ; | |
1550 ; void leaf_call(struct C2 a, struct C b, struct S c, struct I d, struct F e, struct D f, struct C3 g) | |
1551 ; { | |
1552 ; } | |
1553 ; | |
1554 ; int main() | |
1555 ; { | |
1556 ; 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}}); | |
1557 ; return 0; | |
1558 ; } | |
1559 | |
1560 | |
1561 | |
1562 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 -----> | |
1563 | |
1564 00000000 <leaf_call>: | |
1565 0: 3c1c0000 lui gp,0x0 | |
1566 4: 279c0000 addiu gp,gp,0 | |
1567 8: 0399e021 addu gp,gp,t9 | |
1568 c: 27bdfff8 addiu sp,sp,-8 | |
1569 10: afbe0000 sw s8,0(sp) | |
1570 14: 03a0f021 move s8,sp | |
1571 18: afc40008 sw a0,8(s8) | |
1572 1c: afc5000c sw a1,12(s8) | |
1573 20: afc60010 sw a2,16(s8) | |
1574 24: afc70014 sw a3,20(s8) | |
1575 28: 03c0e821 move sp,s8 | |
1576 2c: 8fbe0000 lw s8,0(sp) | |
1577 30: 03e00008 jr ra | |
1578 34: 27bd0008 addiu sp,sp,8 | |
1579 | |
1580 00000038 <main>: | |
1581 38: 3c1c0000 lui gp,0x0 | |
1582 3c: 279c0000 addiu gp,gp,0 | |
1583 40: 0399e021 addu gp,gp,t9 | |
1584 44: 27bdffa0 addiu sp,sp,-96 | |
1585 48: afbf005c sw ra,92(sp) | |
1586 4c: afbe0058 sw s8,88(sp) | |
1587 50: 03a0f021 move s8,sp | |
1588 54: afbc0028 sw gp,40(sp) | |
1589 58: 8f820000 lw v0,0(gp) | |
1590 5c: 24420010 addiu v0,v0,16 | |
1591 60: 90420000 lbu v0,0(v0) | |
1592 64: a3c2004b sb v0,75(s8) | |
1593 68: 8f820000 lw v0,0(gp) | |
1594 6c: 24420010 addiu v0,v0,16 | |
1595 70: 90420001 lbu v0,1(v0) | |
1596 74: a3c2004c sb v0,76(s8) | |
1597 78: 24020002 li v0,2 | |
1598 7c: a3c2004a sb v0,74(s8) | |
1599 80: 24020003 li v0,3 | |
1600 84: a7c20048 sh v0,72(s8) | |
1601 88: 24020004 li v0,4 | |
1602 8c: afc20044 sw v0,68(s8) | |
1603 90: 8f820000 lw v0,0(gp) | |
1604 94: 24420014 addiu v0,v0,20 | |
1605 98: 8c420000 lw v0,0(v0) | |
1606 9c: afc20040 sw v0,64(s8) | |
1607 a0: 8f830000 lw v1,0(gp) | |
1608 a4: 24630008 addiu v1,v1,8 | |
1609 a8: 8c630004 lw v1,4(v1) | |
1610 ac: 8f820000 lw v0,0(gp) | |
1611 b0: 24420008 addiu v0,v0,8 | |
1612 b4: 8c420000 lw v0,0(v0) | |
1613 b8: afc3003c sw v1,60(s8) | |
1614 bc: afc20038 sw v0,56(s8) | |
1615 c0: 8f820000 lw v0,0(gp) | |
1616 c4: 24420000 addiu v0,v0,0 | |
1617 c8: 94420000 lhu v0,0(v0) | |
1618 cc: a7c20030 sh v0,48(s8) | |
1619 d0: 8f820000 lw v0,0(gp) | |
1620 d4: 24420000 addiu v0,v0,0 | |
1621 d8: 90420002 lbu v0,2(v0) | |
1622 dc: a3c20032 sb v0,50(s8) | |
1623 e0: 8fc20040 lw v0,64(s8) | |
1624 e4: afa20010 sw v0,16(sp) | |
1625 e8: 8fc3003c lw v1,60(s8) | |
1626 ec: 8fc20038 lw v0,56(s8) | |
1627 f0: afa3001c sw v1,28(sp) | |
1628 f4: afa20018 sw v0,24(sp) | |
1629 f8: 97c20030 lhu v0,48(s8) | |
1630 fc: a7a20020 sh v0,32(sp) | |
1631 100: 93c20032 lbu v0,50(s8) | |
1632 104: a3a20022 sb v0,34(sp) | |
1633 108: 93c2004b lbu v0,75(s8) | |
1634 10c: 00021a00 sll v1,v0,0x8 | |
1635 110: 93c2004c lbu v0,76(s8) | |
1636 114: 00431025 or v0,v0,v1 | |
1637 118: afc00050 sw zero,80(s8) | |
1638 11c: 00021c00 sll v1,v0,0x10 | |
1639 120: 8fc40050 lw a0,80(s8) | |
1640 124: 3082ffff andi v0,a0,0xffff | |
1641 128: 00431025 or v0,v0,v1 | |
1642 12c: afc20050 sw v0,80(s8) | |
1643 130: 8fc40050 lw a0,80(s8) | |
1644 134: 93c5004a lbu a1,74(s8) | |
1645 138: 00052e00 sll a1,a1,0x18 | |
1646 13c: 97c60048 lhu a2,72(s8) | |
1647 140: 00063400 sll a2,a2,0x10 | |
1648 144: 8fc70044 lw a3,68(s8) | |
1649 148: 8f990000 lw t9,0(gp) | |
1650 14c: 0320f809 jalr t9 | |
1651 150: 00000000 nop | |
1652 154: 8fdc0028 lw gp,40(s8) | |
1653 158: 00001021 move v0,zero | |
1654 15c: 03c0e821 move sp,s8 | |
1655 160: 8fbf005c lw ra,92(sp) | |
1656 164: 8fbe0058 lw s8,88(sp) | |
1657 168: 03e00008 jr ra | |
1658 16c: 27bd0060 addiu sp,sp,96 | |
1659 | |
1660 | |
1661 | |
1662 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float -----> | |
1663 | |
1664 00000000 <leaf_call>: | |
1665 0: 3c1c0000 lui gp,0x0 | |
1666 4: 279c0000 addiu gp,gp,0 | |
1667 8: 0399e021 addu gp,gp,t9 | |
1668 c: 27bdfff8 addiu sp,sp,-8 | |
1669 10: afbe0000 sw s8,0(sp) | |
1670 14: 03a0f021 move s8,sp | |
1671 18: afc40008 sw a0,8(s8) | |
1672 1c: afc5000c sw a1,12(s8) | |
1673 20: afc60010 sw a2,16(s8) | |
1674 24: afc70014 sw a3,20(s8) | |
1675 28: 03c0e821 move sp,s8 | |
1676 2c: 8fbe0000 lw s8,0(sp) | |
1677 30: 03e00008 jr ra | |
1678 34: 27bd0008 addiu sp,sp,8 | |
1679 | |
1680 00000038 <main>: | |
1681 38: 3c1c0000 lui gp,0x0 | |
1682 3c: 279c0000 addiu gp,gp,0 | |
1683 40: 0399e021 addu gp,gp,t9 | |
1684 44: 27bdffa0 addiu sp,sp,-96 | |
1685 48: afbf005c sw ra,92(sp) | |
1686 4c: afbe0058 sw s8,88(sp) | |
1687 50: 03a0f021 move s8,sp | |
1688 54: afbc0028 sw gp,40(sp) | |
1689 58: 8f820000 lw v0,0(gp) | |
1690 5c: 24420010 addiu v0,v0,16 | |
1691 60: 90420000 lbu v0,0(v0) | |
1692 64: a3c2004b sb v0,75(s8) | |
1693 68: 8f820000 lw v0,0(gp) | |
1694 6c: 24420010 addiu v0,v0,16 | |
1695 70: 90420001 lbu v0,1(v0) | |
1696 74: a3c2004c sb v0,76(s8) | |
1697 78: 24020002 li v0,2 | |
1698 7c: a3c2004a sb v0,74(s8) | |
1699 80: 24020003 li v0,3 | |
1700 84: a7c20048 sh v0,72(s8) | |
1701 88: 24020004 li v0,4 | |
1702 8c: afc20044 sw v0,68(s8) | |
1703 90: 8f810000 lw at,0(gp) | |
1704 94: 24210014 addiu at,at,20 | |
1705 98: c4200000 lwc1 $f0,0(at) | |
1706 9c: e7c00040 swc1 $f0,64(s8) | |
1707 a0: 8f810000 lw at,0(gp) | |
1708 a4: 24210008 addiu at,at,8 | |
1709 a8: d4200000 ldc1 $f0,0(at) | |
1710 ac: f7c00038 sdc1 $f0,56(s8) | |
1711 b0: 8f820000 lw v0,0(gp) | |
1712 b4: 24420000 addiu v0,v0,0 | |
1713 b8: 94420000 lhu v0,0(v0) | |
1714 bc: a7c20030 sh v0,48(s8) | |
1715 c0: 8f820000 lw v0,0(gp) | |
1716 c4: 24420000 addiu v0,v0,0 | |
1717 c8: 90420002 lbu v0,2(v0) | |
1718 cc: a3c20032 sb v0,50(s8) | |
1719 d0: c7c00040 lwc1 $f0,64(s8) | |
1720 d4: e7a00010 swc1 $f0,16(sp) | |
1721 d8: d7c00038 ldc1 $f0,56(s8) | |
1722 dc: f7a00018 sdc1 $f0,24(sp) | |
1723 e0: 97c20030 lhu v0,48(s8) | |
1724 e4: a7a20020 sh v0,32(sp) | |
1725 e8: 93c20032 lbu v0,50(s8) | |
1726 ec: a3a20022 sb v0,34(sp) | |
1727 f0: 93c2004b lbu v0,75(s8) | |
1728 f4: 00021a00 sll v1,v0,0x8 | |
1729 f8: 93c2004c lbu v0,76(s8) | |
1730 fc: 00431025 or v0,v0,v1 | |
1731 100: afc00050 sw zero,80(s8) | |
1732 104: 00021c00 sll v1,v0,0x10 | |
1733 108: 8fc40050 lw a0,80(s8) | |
1734 10c: 3082ffff andi v0,a0,0xffff | |
1735 110: 00431025 or v0,v0,v1 | |
1736 114: afc20050 sw v0,80(s8) | |
1737 118: 8fc40050 lw a0,80(s8) | |
1738 11c: 93c5004a lbu a1,74(s8) | |
1739 120: 00052e00 sll a1,a1,0x18 | |
1740 124: 97c60048 lhu a2,72(s8) | |
1741 128: 00063400 sll a2,a2,0x10 | |
1742 12c: 8fc70044 lw a3,68(s8) | |
1743 130: 8f990000 lw t9,0(gp) | |
1744 134: 0320f809 jalr t9 | |
1745 138: 00000000 nop | |
1746 13c: 8fdc0028 lw gp,40(s8) | |
1747 140: 00001021 move v0,zero | |
1748 144: 03c0e821 move sp,s8 | |
1749 148: 8fbf005c lw ra,92(sp) | |
1750 14c: 8fbe0058 lw s8,88(sp) | |
1751 150: 03e00008 jr ra | |
1752 154: 27bd0060 addiu sp,sp,96 | |
1753 ... | |
1754 | |
1755 | |
1756 | |
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:
478
diff
changeset
|
1757 ; ---------- 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:
478
diff
changeset
|
1758 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1759 ; 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:
478
diff
changeset
|
1760 ; 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:
478
diff
changeset
|
1761 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1762 ; 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:
478
diff
changeset
|
1763 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1764 ; 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:
478
diff
changeset
|
1765 ; 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:
478
diff
changeset
|
1766 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1767 ; 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:
478
diff
changeset
|
1768 ; { |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1769 ; 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:
478
diff
changeset
|
1770 ; 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:
478
diff
changeset
|
1771 ; 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:
478
diff
changeset
|
1772 ; 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:
478
diff
changeset
|
1773 ; 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:
478
diff
changeset
|
1774 ; 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:
478
diff
changeset
|
1775 ; 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:
478
diff
changeset
|
1776 ; 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:
478
diff
changeset
|
1777 ; } |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1778 ; } |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1779 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1780 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1781 |
498
fd9ba3a6d348
- corrections in tool usage in lastly added disas_examples
Tassilo Philipp
parents:
497
diff
changeset
|
1782 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 |
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:
478
diff
changeset
|
1783 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1784 004008c0 <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:
478
diff
changeset
|
1785 4008c0: 3c1c0002 lui gp,0x2 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1786 4008c4: 279c8330 addiu gp,gp,-31952 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1787 4008c8: 0399e021 addu gp,gp,t9 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1788 4008cc: 27bdfff8 addiu sp,sp,-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:
478
diff
changeset
|
1789 4008d0: afbe0000 sw s8,0(sp) |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1790 4008d4: 03a0f021 move s8,sp |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1791 4008d8: afc40008 sw a0,8(s8) |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1792 4008dc: 03c0e821 move sp,s8 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1793 4008e0: 8fbe0000 lw s8,0(sp) |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1794 4008e4: 03e00008 jr ra |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1795 4008e8: 27bd0008 addiu sp,sp,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:
478
diff
changeset
|
1796 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1797 004008ec <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:
478
diff
changeset
|
1798 4008ec: 3c1c0002 lui gp,0x2 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1799 4008f0: 279c8304 addiu gp,gp,-31996 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1800 4008f4: 0399e021 addu gp,gp,t9 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1801 4008f8: 27bdfff8 addiu sp,sp,-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:
478
diff
changeset
|
1802 4008fc: afbe0000 sw s8,0(sp) |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1803 400900: 03a0f021 move s8,sp |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1804 400904: afc40008 sw a0,8(s8) |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1805 400908: 03c0e821 move sp,s8 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1806 40090c: 8fbe0000 lw s8,0(sp) |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1807 400910: 03e00008 jr ra |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1808 400914: 27bd0008 addiu sp,sp,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:
478
diff
changeset
|
1809 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1810 00400918 <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:
478
diff
changeset
|
1811 400918: 3c1c0002 lui gp,0x2 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1812 40091c: 279c82d8 addiu gp,gp,-32040 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1813 400920: 0399e021 addu gp,gp,t9 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1814 400924: 27bdffd0 addiu sp,sp,-48 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1815 400928: afbf002c sw ra,44(sp) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1816 40092c: afbe0028 sw s8,40(sp) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1817 400930: 03a0f021 move s8,sp ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1818 400934: afbc0010 sw gp,16(sp) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1819 400938: 27c20024 addiu v0,s8,36 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1820 40093c: 00402021 move a0,v0 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1821 400940: 8f998064 lw t9,-32668(gp) ; | |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1822 400944: 0320f809 jalr t9 ; | 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:
478
diff
changeset
|
1823 400948: 00000000 nop ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1824 40094c: 8fdc0010 lw gp,16(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1825 400950: 24020001 li v0,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:
478
diff
changeset
|
1826 400954: afc20018 sw v0,24(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1827 400958: 8fc20018 lw v0,24(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1828 40095c: 2442007b addiu v0,v0,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:
478
diff
changeset
|
1829 400960: afc20018 sw v0,24(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1830 400964: 8fc40020 lw a0,32(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1831 400968: 8f998060 lw t9,-32672(gp) ; | |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1832 40096c: 0320f809 jalr t9 ; | 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:
478
diff
changeset
|
1833 400970: 00000000 nop ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1834 400974: 8fdc0010 lw gp,16(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1835 400978: 8fc20018 lw v0,24(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1836 40097c: 2442ff85 addiu v0,v0,-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:
478
diff
changeset
|
1837 400980: afc20018 sw v0,24(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1838 400984: 27c2001c addiu v0,s8,28 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1839 400988: 27c30024 addiu v1,s8,36 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1840 40098c: 00402021 move a0,v0 ; | 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:
478
diff
changeset
|
1841 400990: 00602821 move a1,v1 ; | 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:
478
diff
changeset
|
1842 400994: 8f998050 lw t9,-32688(gp) ; | copy 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:
478
diff
changeset
|
1843 400998: 0320f809 jalr t9 ; | | 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:
478
diff
changeset
|
1844 40099c: 00000000 nop ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1845 4009a0: 8fdc0010 lw gp,16(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1846 4009a4: 27c2001c addiu v0,s8,28 ; get ptr to copy of n -> v0 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1847 4009a8: 00402021 move a0,v0 ; 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:
478
diff
changeset
|
1848 4009ac: 8f998058 lw t9,-32680(gp) ; | |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1849 4009b0: 0320f809 jalr t9 ; | 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:
478
diff
changeset
|
1850 4009b4: 00000000 nop ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1851 4009b8: 8fdc0010 lw gp,16(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1852 4009bc: 8fc20018 lw v0,24(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1853 4009c0: 2442fff4 addiu v0,v0,-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:
478
diff
changeset
|
1854 4009c4: afc20018 sw v0,24(s8) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1855 4009c8: 03c0e821 move sp,s8 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1856 4009cc: 8fbf002c lw ra,44(sp) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1857 4009d0: 8fbe0028 lw s8,40(sp) ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1858 4009d4: 03e00008 jr ra ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1859 4009d8: 27bd0030 addiu sp,sp,48 ; |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1860 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1861 ; ... 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:
478
diff
changeset
|
1862 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1863 |
cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents:
478
diff
changeset
|
1864 |
499
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1865 ; ---------- C++ trivial and non-trivial aggrs as return values ----------> |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1866 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1867 ; struct Trivial { int a; }; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1868 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } }; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1869 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1870 ; extern "C" { |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1871 ; struct Trivial f1() { return Trivial(); } |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1872 ; } |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1873 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1874 ; struct NonTrivial f2() { return NonTrivial(); } |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1875 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1876 ; extern "C" { |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1877 ; void f() |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1878 ; { |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1879 ; int a=1; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1880 ; a += 123; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1881 ; struct Trivial t = f1(); |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1882 ; a -= 123; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1883 ; struct NonTrivial n = f2(); |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1884 ; a -= 12; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1885 ; } |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1886 ; } |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1887 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1888 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1889 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1890 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1891 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1892 004008b0 <f1>: |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1893 4008b0: 3c1c0002 lui gp,0x2 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1894 4008b4: 279c8310 addiu gp,gp,-31984 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1895 4008b8: 0399e021 addu gp,gp,t9 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1896 4008bc: 27bdfff8 addiu sp,sp,-8 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1897 4008c0: afbe0000 sw s8,0(sp) |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1898 4008c4: 03a0f021 move s8,sp |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1899 4008c8: 00801021 move v0,a0 ; ptr to retval space -> v0 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1900 4008cc: ac400000 sw zero,0(v0) ; return val |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1901 4008d0: 03c0e821 move sp,s8 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1902 4008d4: 8fbe0000 lw s8,0(sp) |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1903 4008d8: 03e00008 jr ra |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1904 4008dc: 27bd0008 addiu sp,sp,8 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1905 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1906 004008e0 <_Z2f2v>: |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1907 4008e0: 3c1c0002 lui gp,0x2 ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1908 4008e4: 279c82e0 addiu gp,gp,-32032 ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1909 4008e8: 0399e021 addu gp,gp,t9 ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1910 4008ec: 27bdffd8 addiu sp,sp,-40 ; | prolog |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1911 4008f0: afbf0020 sw ra,32(sp) ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1912 4008f4: afbe001c sw s8,28(sp) ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1913 4008f8: afb00018 sw s0,24(sp) ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1914 4008fc: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp) |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1915 400900: afbc0010 sw gp,16(sp) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1916 400904: 00808021 move s0,a0 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1917 400908: 02001021 move v0,s0 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1918 40090c: 00402021 move a0,v0 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1919 400910: 8f998060 lw t9,-32672(gp) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1920 400914: 0320f809 jalr t9 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1921 400918: 00000000 nop ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1922 40091c: 8fdc0010 lw gp,16(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1923 400920: 02001021 move v0,s0 ; ptr to retval space -> v0 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1924 400924: 03c0e821 move sp,s8 ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1925 400928: 8fbf0020 lw ra,32(sp) ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1926 40092c: 8fbe001c lw s8,28(sp) ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1927 400930: 8fb00018 lw s0,24(sp) ; | epilog |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1928 400934: 03e00008 jr ra ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1929 400938: 27bd0028 addiu sp,sp,40 ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1930 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1931 0040093c <f>: |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1932 40093c: 3c1c0002 lui gp,0x2 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1933 400940: 279c8284 addiu gp,gp,-32124 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1934 400944: 0399e021 addu gp,gp,t9 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1935 400948: 27bdffd0 addiu sp,sp,-48 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1936 40094c: afbf002c sw ra,44(sp) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1937 400950: afbe0028 sw s8,40(sp) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1938 400954: 03a0f021 move s8,sp ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1939 400958: afbc0010 sw gp,16(sp) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1940 40095c: 24020001 li v0,1 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1941 400960: afc20018 sw v0,24(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1942 400964: 8fc20018 lw v0,24(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1943 400968: 2442007b addiu v0,v0,123 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1944 40096c: afc20018 sw v0,24(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1945 400970: 27c2001c addiu v0,s8,28 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1946 400974: 00402021 move a0,v0 ; hidden first arg (ptr to space for ret val) |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1947 400978: 8f99805c lw t9,-32676(gp) ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1948 40097c: 0320f809 jalr t9 ; | call f1() |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1949 400980: 00000000 nop ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1950 400984: 8fdc0010 lw gp,16(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1951 400988: 8fc20018 lw v0,24(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1952 40098c: 2442ff85 addiu v0,v0,-123 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1953 400990: afc20018 sw v0,24(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1954 400994: 27c20020 addiu v0,s8,32 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1955 400998: 00402021 move a0,v0 ; hidden first arg (ptr to space for ret val) |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1956 40099c: 8f998064 lw t9,-32668(gp) ; | |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1957 4009a0: 0320f809 jalr t9 ; | call f2() |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1958 4009a4: 00000000 nop ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1959 4009a8: 8fdc0010 lw gp,16(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1960 4009ac: 8fc20018 lw v0,24(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1961 4009b0: 2442fff4 addiu v0,v0,-12 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1962 4009b4: afc20018 sw v0,24(s8) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1963 4009b8: 03c0e821 move sp,s8 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1964 4009bc: 8fbf002c lw ra,44(sp) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1965 4009c0: 8fbe0028 lw s8,40(sp) ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1966 4009c4: 03e00008 jr ra ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1967 4009c8: 27bd0030 addiu sp,sp,48 ; |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1968 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1969 |
fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents:
498
diff
changeset
|
1970 |
327
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
1971 ; vim: ft=asm |
c0390dc85a07
- doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff
changeset
|
1972 |