annotate doc/disas_examples/mips.o32.disas @ 498:fd9ba3a6d348

- corrections in tool usage in lastly added disas_examples
author Tassilo Philipp
date Wed, 23 Mar 2022 15:33:09 +0100
parents cb19b2fe2422
children fc614cb865c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1 ; #include <stdlib.h>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
2 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
3 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
4 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
5 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
6 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
7 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
8 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
9 ; /* use some local data */
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
10 ; *(char*)alloca(220) = 'L';
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
11 ; leaf_call(b, c, d, e, f, g, h);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
12 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
13 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
14 ; int main()
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
15 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
17 ; return 0;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
18 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
19
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
20
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
21
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
22 ; output from 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
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
220
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
221
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
222 ; ---------- structs by value ---------->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
223 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
224 ; struct A { int i, j; long long l; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
225 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
226 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
227 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
228 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
229 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
230 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
231 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
232 ; /* use some local data */
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
233 ; char l[100] ={ 'L'};
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
234 ; leaf_call(b, c, d, e, f, g, h);
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
235 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
236 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
237 ; int main()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
238 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
239 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9);
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
240 ; return 0;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
241 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
242
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
243
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
244
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
245 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
246
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
247 00000000 <leaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
248 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
249 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
250 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
251 c: 27bdfff8 addiu sp,sp,-8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
252 10: afbe0000 sw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
253 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
254 18: afc40008 sw a0,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
255 1c: afc5000c sw a1,12(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
256 20: afc60010 sw a2,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
257 24: afc70014 sw a3,20(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
258 28: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
259 2c: 8fbe0000 lw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
260 30: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
261 34: 27bd0008 addiu sp,sp,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
262
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
263 00000038 <nonleaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
264 38: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
265 3c: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
266 40: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
267 44: 27bdff60 addiu sp,sp,-160
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
268 48: afbf009c sw ra,156(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
269 4c: afbe0098 sw s8,152(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
270 50: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
271 54: afbc0028 sw gp,40(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
272 58: afc400a0 sw a0,160(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
273 5c: afc500a4 sw a1,164(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
274 60: afc600a8 sw a2,168(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
275 64: afc700ac sw a3,172(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
276 68: 27c20030 addiu v0,s8,48
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
277 6c: 24030064 li v1,100
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
278 70: 00402021 move a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
279 74: 00002821 move a1,zero
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
280 78: 00603021 move a2,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
281 7c: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
282 80: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
283 84: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
284 88: 8fdc0028 lw gp,40(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
285 8c: 2402004c li v0,76
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
286 90: a3c20030 sb v0,48(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
287 94: 8fc200b8 lw v0,184(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
288 98: 8fc300bc lw v1,188(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
289 9c: 8fc400c0 lw a0,192(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
290 a0: 8fc500c4 lw a1,196(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
291 a4: afa20010 sw v0,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
292 a8: afa30014 sw v1,20(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
293 ac: afa40018 sw a0,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
294 b0: afa5001c sw a1,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
295 b4: 8fc200c8 lw v0,200(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
296 b8: afa20020 sw v0,32(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
297 bc: 8fc200cc lw v0,204(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
298 c0: afa20024 sw v0,36(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
299 c4: 8fc400a4 lw a0,164(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
300 c8: 8fc500a8 lw a1,168(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
301 cc: 8fc600ac lw a2,172(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
302 d0: 8fc700b0 lw a3,176(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
303 d4: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
304 d8: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
305 dc: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
306 e0: 8fdc0028 lw gp,40(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
307 e4: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
308 e8: 8fbf009c lw ra,156(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
309 ec: 8fbe0098 lw s8,152(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
310 f0: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
311 f4: 27bd00a0 addiu sp,sp,160
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
312
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
313 000000f8 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
314 f8: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
315 fc: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
316 100: 0399e021 addu gp,gp,t9 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
317 104: 27bdffb0 addiu sp,sp,-80 ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
318 108: afbf004c sw ra,76(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
319 10c: afbe0048 sw s8,72(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
320 110: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
321 114: afbc0030 sw gp,48(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
322 118: 8f820000 lw v0,0(gp) ; \ \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
323 11c: 24420000 addiu v0,v0,0 ; | | field j -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
324 120: 8c420000 lw v0,0(v0) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
325 124: 8f830000 lw v1,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
326 128: 24630000 addiu v1,v1,0 ; | | field j -> v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
327 12c: 8c630004 lw v1,4(v1) ; | prep local struct A data ... /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
328 130: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
329 134: 24840000 addiu a0,a0,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
330 138: 8c840008 lw a0,8(a0) ; | | field l -> a0 & a1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
331 13c: 8f850000 lw a1,0(gp) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
332 140: 24a50000 addiu a1,a1,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
333 144: 8ca5000c lw a1,12(a1) ; / /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
334 148: afc20038 sw v0,56(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
335 14c: afc3003c sw v1,60(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
336 150: afc40040 sw a0,64(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
337 154: afc50044 sw a1,68(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
338 158: 24020004 li v0,4 ; push arg 4 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
339 15c: afa20010 sw v0,16(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
340 160: 8fc20038 lw v0,56(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
341 164: 8fc3003c lw v1,60(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
342 168: 8fc40040 lw a0,64(s8) ; | prep arg 5 (struct A) ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
343 16c: 8fc50044 lw a1,68(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
344 170: afa20018 sw v0,24(sp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
345 174: afa3001c sw v1,28(sp) ; | ... and push onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
346 178: afa40020 sw a0,32(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
347 17c: afa50024 sw a1,36(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
348 180: 24020008 li v0,8 ; push arg 6 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
349 184: afa20028 sw v0,40(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
350 188: 24020009 li v0,9 ; push arg 7 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
351 18c: afa2002c sw v0,44(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
352 190: 00002021 move a0,zero ; arg 0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
353 194: 24050001 li a1,1 ; arg 1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
354 198: 24060002 li a2,2 ; arg 2
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
355 19c: 24070003 li a3,3 ; arg 3
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
356 1a0: 8f990000 lw t9,0(gp) ; func to call -> t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
357 1a4: 0320f809 jalr t9 ; call and ret addr -> ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
358 1a8: 00000000 nop ; branch delay slot
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
359 1ac: 8fdc0030 lw gp,48(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
360 1b0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
361 1b4: 03c0e821 move sp,s8 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
362 1b8: 8fbf004c lw ra,76(sp) ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
363 1bc: 8fbe0048 lw s8,72(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
364 1c0: 03e00008 jr ra ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
365 1c4: 27bd0050 addiu sp,sp,80 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
366 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
367
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
368
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
369
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
370 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
371
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
372 00000000 <leaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
373 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
374 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
375 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
376 c: 27bdfff8 addiu sp,sp,-8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
377 10: afbe0000 sw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
378 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
379 18: afc40008 sw a0,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
380 1c: afc5000c sw a1,12(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
381 20: afc60010 sw a2,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
382 24: afc70014 sw a3,20(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
383 28: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
384 2c: 8fbe0000 lw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
385 30: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
386 34: 27bd0008 addiu sp,sp,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
387
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
388 00000038 <nonleaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
389 38: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
390 3c: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
391 40: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
392 44: 27bdff60 addiu sp,sp,-160
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
393 48: afbf009c sw ra,156(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
394 4c: afbe0098 sw s8,152(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
395 50: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
396 54: afbc0028 sw gp,40(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
397 58: afc400a0 sw a0,160(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
398 5c: afc500a4 sw a1,164(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
399 60: afc600a8 sw a2,168(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
400 64: afc700ac sw a3,172(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
401 68: 27c20030 addiu v0,s8,48
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
402 6c: 24030064 li v1,100
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
403 70: 00402021 move a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
404 74: 00002821 move a1,zero
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
405 78: 00603021 move a2,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
406 7c: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
407 80: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
408 84: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
409 88: 8fdc0028 lw gp,40(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
410 8c: 2402004c li v0,76
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
411 90: a3c20030 sb v0,48(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
412 94: 8fc200b8 lw v0,184(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
413 98: 8fc300bc lw v1,188(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
414 9c: 8fc400c0 lw a0,192(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
415 a0: 8fc500c4 lw a1,196(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
416 a4: afa20010 sw v0,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
417 a8: afa30014 sw v1,20(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
418 ac: afa40018 sw a0,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
419 b0: afa5001c sw a1,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
420 b4: 8fc200c8 lw v0,200(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
421 b8: afa20020 sw v0,32(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
422 bc: 8fc200cc lw v0,204(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
423 c0: afa20024 sw v0,36(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
424 c4: 8fc400a4 lw a0,164(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
425 c8: 8fc500a8 lw a1,168(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
426 cc: 8fc600ac lw a2,172(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
427 d0: 8fc700b0 lw a3,176(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
428 d4: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
429 d8: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
430 dc: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
431 e0: 8fdc0028 lw gp,40(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
432 e4: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
433 e8: 8fbf009c lw ra,156(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
434 ec: 8fbe0098 lw s8,152(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
435 f0: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
436 f4: 27bd00a0 addiu sp,sp,160
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
437
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
438 000000f8 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
439 f8: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
440 fc: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
441 100: 0399e021 addu gp,gp,t9 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
442 104: 27bdffb0 addiu sp,sp,-80 ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
443 108: afbf004c sw ra,76(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
444 10c: afbe0048 sw s8,72(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
445 110: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
446 114: afbc0030 sw gp,48(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
447 118: 8f820000 lw v0,0(gp) ; \ \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
448 11c: 24420000 addiu v0,v0,0 ; | | field j -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
449 120: 8c420000 lw v0,0(v0) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
450 124: 8f830000 lw v1,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
451 128: 24630000 addiu v1,v1,0 ; | | field j -> v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
452 12c: 8c630004 lw v1,4(v1) ; | prep local struct A data ... /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
453 130: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
454 134: 24840000 addiu a0,a0,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
455 138: 8c840008 lw a0,8(a0) ; | | field l -> a0 & a1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
456 13c: 8f850000 lw a1,0(gp) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
457 140: 24a50000 addiu a1,a1,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
458 144: 8ca5000c lw a1,12(a1) ; / /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
459 148: afc20038 sw v0,56(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
460 14c: afc3003c sw v1,60(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
461 150: afc40040 sw a0,64(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
462 154: afc50044 sw a1,68(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
463 158: 24020004 li v0,4 ; push arg 4 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
464 15c: afa20010 sw v0,16(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
465 160: 8fc20038 lw v0,56(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
466 164: 8fc3003c lw v1,60(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
467 168: 8fc40040 lw a0,64(s8) ; | prep arg 5 (struct A) ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
468 16c: 8fc50044 lw a1,68(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
469 170: afa20018 sw v0,24(sp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
470 174: afa3001c sw v1,28(sp) ; | ... and push onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
471 178: afa40020 sw a0,32(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
472 17c: afa50024 sw a1,36(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
473 180: 24020008 li v0,8 ; push arg 6 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
474 184: afa20028 sw v0,40(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
475 188: 24020009 li v0,9 ; push arg 7 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
476 18c: afa2002c sw v0,44(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
477 190: 00002021 move a0,zero ; arg 0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
478 194: 24050001 li a1,1 ; arg 1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
479 198: 24060002 li a2,2 ; arg 2
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
480 19c: 24070003 li a3,3 ; arg 3
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
481 1a0: 8f990000 lw t9,0(gp) ; func to call -> t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
482 1a4: 0320f809 jalr t9 ; call and ret addr -> ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
483 1a8: 00000000 nop ; branch delay slot
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
484 1ac: 8fdc0030 lw gp,48(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
485 1b0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
486 1b4: 03c0e821 move sp,s8 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
487 1b8: 8fbf004c lw ra,76(sp) ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
488 1bc: 8fbe0048 lw s8,72(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
489 1c0: 03e00008 jr ra ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
490 1c4: 27bd0050 addiu sp,sp,80 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
491 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
492
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
493
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
494
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
495 ; ---------- structs by value, complex example (multiple structs) ---------->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
496 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
497 ; struct A { int i, j; float f; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
498 ; struct B { double d; long long l; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
499 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
501 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
502 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
503 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
505 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
506 ; /* use some local data */
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
507 ; char l[100] ={ 'L'};
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
508 ; leaf_call(b, c, d, e, f, g, h, i, j);
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
509 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
510 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
511 ; int main()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
512 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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);
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
514 ; return 0;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
515 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
516
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
517
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
518
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
519 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
520
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
521 00000000 <leaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
522 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
523 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
524 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
525 c: 27bdfff8 addiu sp,sp,-8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
526 10: afbe0000 sw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
527 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
528 18: afc40008 sw a0,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
529 1c: afc5000c sw a1,12(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
530 20: afc60010 sw a2,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
531 24: afc70014 sw a3,20(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
532 28: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
533 2c: 8fbe0000 lw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
534 30: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
535 34: 27bd0008 addiu sp,sp,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
536
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
537 00000038 <nonleaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
538 38: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
539 3c: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
540 40: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
541 44: 27bdff38 addiu sp,sp,-200
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
542 48: afbf00c4 sw ra,196(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
543 4c: afbe00c0 sw s8,192(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
544 50: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
545 54: afbc0050 sw gp,80(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
546 58: afc400c8 sw a0,200(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
547 5c: afc500cc sw a1,204(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
548 60: afc600d0 sw a2,208(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
549 64: afc700d4 sw a3,212(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
550 68: 27c20058 addiu v0,s8,88
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
551 6c: 24030064 li v1,100
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
552 70: 00402021 move a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
553 74: 00002821 move a1,zero
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
554 78: 00603021 move a2,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
555 7c: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
556 80: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
557 84: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
558 88: 8fdc0050 lw gp,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
559 8c: 2402004c li v0,76
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
560 90: a3c20058 sb v0,88(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
561 94: 8fc200e0 lw v0,224(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
562 98: 8fc300e4 lw v1,228(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
563 9c: 8fc400e8 lw a0,232(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
564 a0: 8fc500ec lw a1,236(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
565 a4: afa20010 sw v0,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
566 a8: afa30014 sw v1,20(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
567 ac: afa40018 sw a0,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
568 b0: afa5001c sw a1,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
569 b4: 8fc200f0 lw v0,240(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
570 b8: afa20020 sw v0,32(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
571 bc: 8fc200f4 lw v0,244(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
572 c0: afa20024 sw v0,36(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
573 c4: 8fc200f8 lw v0,248(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
574 c8: 8fc300fc lw v1,252(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
575 cc: 8fc40100 lw a0,256(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
576 d0: afa20028 sw v0,40(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
577 d4: afa3002c sw v1,44(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
578 d8: afa40030 sw a0,48(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
579 dc: 8fc20108 lw v0,264(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
580 e0: 8fc3010c lw v1,268(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
581 e4: 8fc40110 lw a0,272(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
582 e8: 8fc50114 lw a1,276(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
583 ec: afa20038 sw v0,56(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
584 f0: afa3003c sw v1,60(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
585 f4: afa40040 sw a0,64(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
586 f8: afa50044 sw a1,68(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
587 fc: 8fc20118 lw v0,280(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
588 100: afa20048 sw v0,72(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
589 104: 8fc2011c lw v0,284(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
590 108: afa2004c sw v0,76(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
591 10c: 8fc400cc lw a0,204(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
592 110: 8fc500d0 lw a1,208(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
593 114: 8fc600d4 lw a2,212(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
594 118: 8fc700d8 lw a3,216(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
595 11c: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
596 120: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
597 124: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
598 128: 8fdc0050 lw gp,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
599 12c: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
600 130: 8fbf00c4 lw ra,196(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
601 134: 8fbe00c0 lw s8,192(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
602 138: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
603 13c: 27bd00c8 addiu sp,sp,200
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
604
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
605 00000140 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
606 140: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
607 144: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
608 148: 0399e021 addu gp,gp,t9 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
609 14c: 27bdff58 addiu sp,sp,-168 ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
610 150: afbf00a4 sw ra,164(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
611 154: afbe00a0 sw s8,160(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
612 158: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
613 15c: afbc0058 sw gp,88(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
614 160: 8f820000 lw v0,0(gp) ; \ |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
615 164: 24420030 addiu v0,v0,48 ; | | field j -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
616 168: 8c420000 lw v0,0(v0) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
617 16c: 8f830000 lw v1,0(gp) ; | prep (first) local struct A data ... \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
618 170: 24630030 addiu v1,v1,48 ; | | field j -> v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
619 174: 8c630004 lw v1,4(v1) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
620 178: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
621 17c: 24840030 addiu a0,a0,48 ; | | field f -> a0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
622 180: 8c840008 lw a0,8(a0) ; / |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
623 184: afc20090 sw v0,144(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
624 188: afc30094 sw v1,148(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
625 18c: afc40098 sw a0,152(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
626 190: 8f820000 lw v0,0(gp) ; \ |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
627 194: 24420020 addiu v0,v0,32 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
628 198: 8c420000 lw v0,0(v0) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
629 19c: 8f830000 lw v1,0(gp) ; | | field d -> v0 & v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
630 1a0: 24630020 addiu v1,v1,32 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
631 1a4: 8c630004 lw v1,4(v1) ; | prep (first) local struct B data ... /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
632 1a8: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
633 1ac: 24840020 addiu a0,a0,32 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
634 1b0: 8c840008 lw a0,8(a0) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
635 1b4: 8f850000 lw a1,0(gp) ; | | field l -> a0 & a1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
636 1b8: 24a50020 addiu a1,a1,32 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
637 1bc: 8ca5000c lw a1,12(a1) ; / |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
638 1c0: afc20080 sw v0,128(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
639 1c4: afc30084 sw v1,132(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
640 1c8: afc40088 sw a0,136(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
641 1cc: afc5008c sw a1,140(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
642 1d0: 8f820000 lw v0,0(gp) ; \ |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
643 1d4: 24420010 addiu v0,v0,16 ; | | field j -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
644 1d8: 8c420000 lw v0,0(v0) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
645 1dc: 8f830000 lw v1,0(gp) ; | prep (second) local struct A data ... \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
646 1e0: 24630010 addiu v1,v1,16 ; | | field j -> v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
647 1e4: 8c630004 lw v1,4(v1) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
648 1e8: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
649 1ec: 24840010 addiu a0,a0,16 ; | | field f -> a0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
650 1f0: 8c840008 lw a0,8(a0) ; / |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
651 1f4: afc20070 sw v0,112(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
652 1f8: afc30074 sw v1,116(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
653 1fc: afc40078 sw a0,120(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
654 200: 8f820000 lw v0,0(gp) ; \ |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
655 204: 24420000 addiu v0,v0,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
656 208: 8c420000 lw v0,0(v0) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
657 20c: 8f830000 lw v1,0(gp) ; | | field d -> v0 & v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
658 210: 24630000 addiu v1,v1,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
659 214: 8c630004 lw v1,4(v1) ; | prep (second) local struct B data ... /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
660 218: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
661 21c: 24840000 addiu a0,a0,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
662 220: 8c840008 lw a0,8(a0) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
663 224: 8f850000 lw a1,0(gp) ; | | field l -> a0 & a1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
664 228: 24a50000 addiu a1,a1,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
665 22c: 8ca5000c lw a1,12(a1) ; / |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
666 230: afc20060 sw v0,96(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
667 234: afc30064 sw v1,100(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
668 238: afc40068 sw a0,104(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
669 23c: afc5006c sw a1,108(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
670 240: 8fc20080 lw v0,128(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
671 244: 8fc30084 lw v1,132(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
672 248: 8fc40088 lw a0,136(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
673 24c: 8fc5008c lw a1,140(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
674 250: afa20018 sw v0,24(sp) ; | | d
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
675 254: afa3001c sw v1,28(sp) ; | arg 3 (first struct B) /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
676 258: afa40020 sw a0,32(sp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
677 25c: afa50024 sw a1,36(sp) ; / | l
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
678 260: 24020007 li v0,7 ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
679 264: afa20028 sw v0,40(sp) ; / arg 4
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
680 268: 24020008 li v0,8 ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
681 26c: afa2002c sw v0,44(sp) ; / arg 5
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
682 270: 8fc20070 lw v0,112(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
683 274: 8fc30074 lw v1,116(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
685 27c: afa20030 sw v0,48(sp) ; | i
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
686 280: afa30034 sw v1,52(sp) ; | j
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
687 284: afa40038 sw a0,56(sp) ; / f
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
688 288: 8fc20060 lw v0,96(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
689 28c: 8fc30064 lw v1,100(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
690 290: 8fc40068 lw a0,104(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
691 294: 8fc5006c lw a1,108(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
692 298: afa20040 sw v0,64(sp) ; | | d
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
693 29c: afa30044 sw v1,68(sp) ; | arg 7 (second struct B) /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
694 2a0: afa40048 sw a0,72(sp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
695 2a4: afa5004c sw a1,76(sp) ; | | l
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
696 2a8: 2402000e li v0,14 ; arg 8 pushed ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
697 2ac: afa20050 sw v0,80(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
698 2b0: 2402000f li v0,15 ; arg 9 pushed ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
699 2b4: afa20054 sw v0,84(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
700 2b8: 8fc20098 lw v0,152(s8) ; | | f (via stack, first slot after save area)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
701 2bc: afa20010 sw v0,16(sp) ; | | note that 20(sp) isn't used, so sizeof(struct A) is probably a padded 16
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
702 2c0: 8fc60090 lw a2,144(s8) ; | arg 2 (first struct A) i (via reg)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
703 2c4: 8fc70094 lw a3,148(s8) ; | j (via reg)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
704 2c8: 00002021 move a0,zero ; arg 0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
705 2cc: 24050001 li a1,1 ; arg 1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
706 2d0: 8f990000 lw t9,0(gp) ; func to call -> t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
707 2d4: 0320f809 jalr t9 ; call and ret addr -> ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
708 2d8: 00000000 nop ; branch delay slot
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
709 2dc: 8fdc0058 lw gp,88(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
710 2e0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
711 2e4: 03c0e821 move sp,s8 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
712 2e8: 8fbf00a4 lw ra,164(sp) ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
713 2ec: 8fbe00a0 lw s8,160(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
714 2f0: 03e00008 jr ra ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
715 2f4: 27bd00a8 addiu sp,sp,168 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
716 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
717
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
718
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
719
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
720 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
721
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
722 00000000 <leaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
723 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
724 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
725 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
726 c: 27bdfff8 addiu sp,sp,-8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
727 10: afbe0000 sw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
728 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
729 18: afc40008 sw a0,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
730 1c: afc5000c sw a1,12(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
731 20: afc60010 sw a2,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
732 24: afc70014 sw a3,20(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
733 28: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
734 2c: 8fbe0000 lw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
735 30: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
736 34: 27bd0008 addiu sp,sp,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
737
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
738 00000038 <nonleaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
739 38: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
740 3c: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
741 40: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
742 44: 27bdff38 addiu sp,sp,-200
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
743 48: afbf00c4 sw ra,196(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
744 4c: afbe00c0 sw s8,192(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
745 50: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
746 54: afbc0050 sw gp,80(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
747 58: afc400c8 sw a0,200(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
748 5c: afc500cc sw a1,204(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
749 60: afc600d0 sw a2,208(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
750 64: afc700d4 sw a3,212(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
751 68: 27c20058 addiu v0,s8,88
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
752 6c: 24030064 li v1,100
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
753 70: 00402021 move a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
754 74: 00002821 move a1,zero
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
755 78: 00603021 move a2,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
756 7c: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
757 80: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
758 84: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
759 88: 8fdc0050 lw gp,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
760 8c: 2402004c li v0,76
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
761 90: a3c20058 sb v0,88(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
762 94: 8fc200e0 lw v0,224(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
763 98: 8fc300e4 lw v1,228(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
764 9c: 8fc400e8 lw a0,232(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
765 a0: 8fc500ec lw a1,236(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
766 a4: afa20010 sw v0,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
767 a8: afa30014 sw v1,20(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
768 ac: afa40018 sw a0,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
769 b0: afa5001c sw a1,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
770 b4: 8fc200f0 lw v0,240(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
771 b8: afa20020 sw v0,32(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
772 bc: 8fc200f4 lw v0,244(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
773 c0: afa20024 sw v0,36(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
774 c4: 8fc200f8 lw v0,248(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
775 c8: 8fc300fc lw v1,252(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
776 cc: 8fc40100 lw a0,256(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
777 d0: afa20028 sw v0,40(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
778 d4: afa3002c sw v1,44(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
779 d8: afa40030 sw a0,48(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
780 dc: 8fc20108 lw v0,264(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
781 e0: 8fc3010c lw v1,268(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
782 e4: 8fc40110 lw a0,272(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
783 e8: 8fc50114 lw a1,276(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
784 ec: afa20038 sw v0,56(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
785 f0: afa3003c sw v1,60(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
786 f4: afa40040 sw a0,64(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
787 f8: afa50044 sw a1,68(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
788 fc: 8fc20118 lw v0,280(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
789 100: afa20048 sw v0,72(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
790 104: 8fc2011c lw v0,284(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
791 108: afa2004c sw v0,76(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
792 10c: 8fc400cc lw a0,204(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
793 110: 8fc500d0 lw a1,208(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
794 114: 8fc600d4 lw a2,212(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
795 118: 8fc700d8 lw a3,216(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
796 11c: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
797 120: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
798 124: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
799 128: 8fdc0050 lw gp,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
800 12c: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
801 130: 8fbf00c4 lw ra,196(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
802 134: 8fbe00c0 lw s8,192(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
803 138: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
804 13c: 27bd00c8 addiu sp,sp,200
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
805
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
806 00000140 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
807 140: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
808 144: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
809 148: 0399e021 addu gp,gp,t9 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
810 14c: 27bdff58 addiu sp,sp,-168 ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
811 150: afbf00a4 sw ra,164(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
812 154: afbe00a0 sw s8,160(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
813 158: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
814 15c: afbc0058 sw gp,88(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
815 160: 8f820000 lw v0,0(gp) ; \ |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
816 164: 24420030 addiu v0,v0,48 ; | | field j -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
817 168: 8c420000 lw v0,0(v0) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
818 16c: 8f830000 lw v1,0(gp) ; | prep (first) local struct A data ... \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
819 170: 24630030 addiu v1,v1,48 ; | | field j -> v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
820 174: 8c630004 lw v1,4(v1) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
821 178: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
822 17c: 24840030 addiu a0,a0,48 ; | | field f -> a0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
823 180: 8c840008 lw a0,8(a0) ; / |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
824 184: afc20090 sw v0,144(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
825 188: afc30094 sw v1,148(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
826 18c: afc40098 sw a0,152(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
827 190: 8f820000 lw v0,0(gp) ; \ |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
828 194: 24420020 addiu v0,v0,32 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
829 198: 8c420000 lw v0,0(v0) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
830 19c: 8f830000 lw v1,0(gp) ; | | field d -> v0 & v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
831 1a0: 24630020 addiu v1,v1,32 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
832 1a4: 8c630004 lw v1,4(v1) ; | prep (first) local struct B data ... /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
833 1a8: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
834 1ac: 24840020 addiu a0,a0,32 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
835 1b0: 8c840008 lw a0,8(a0) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
836 1b4: 8f850000 lw a1,0(gp) ; | | field l -> a0 & a1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
837 1b8: 24a50020 addiu a1,a1,32 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
838 1bc: 8ca5000c lw a1,12(a1) ; / |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
839 1c0: afc20080 sw v0,128(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
840 1c4: afc30084 sw v1,132(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
841 1c8: afc40088 sw a0,136(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
842 1cc: afc5008c sw a1,140(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
843 1d0: 8f820000 lw v0,0(gp) ; \ |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
844 1d4: 24420010 addiu v0,v0,16 ; | | field j -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
845 1d8: 8c420000 lw v0,0(v0) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
846 1dc: 8f830000 lw v1,0(gp) ; | prep (second) local struct A data ... \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
847 1e0: 24630010 addiu v1,v1,16 ; | | field j -> v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
848 1e4: 8c630004 lw v1,4(v1) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
849 1e8: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
850 1ec: 24840010 addiu a0,a0,16 ; | | field f -> a0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
851 1f0: 8c840008 lw a0,8(a0) ; / |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
852 1f4: afc20070 sw v0,112(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
853 1f8: afc30074 sw v1,116(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
854 1fc: afc40078 sw a0,120(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
855 200: 8f820000 lw v0,0(gp) ; \ |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
856 204: 24420000 addiu v0,v0,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
857 208: 8c420000 lw v0,0(v0) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
858 20c: 8f830000 lw v1,0(gp) ; | | field d -> v0 & v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
859 210: 24630000 addiu v1,v1,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
860 214: 8c630004 lw v1,4(v1) ; | prep (second) local struct B data ... /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
861 218: 8f840000 lw a0,0(gp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
862 21c: 24840000 addiu a0,a0,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
863 220: 8c840008 lw a0,8(a0) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
864 224: 8f850000 lw a1,0(gp) ; | | field l -> a0 & a1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
865 228: 24a50000 addiu a1,a1,0 ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
866 22c: 8ca5000c lw a1,12(a1) ; / |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
867 230: afc20060 sw v0,96(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
868 234: afc30064 sw v1,100(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
869 238: afc40068 sw a0,104(s8) ; | ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
870 23c: afc5006c sw a1,108(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
871 240: 8fc20080 lw v0,128(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
872 244: 8fc30084 lw v1,132(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
873 248: 8fc40088 lw a0,136(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
874 24c: 8fc5008c lw a1,140(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
875 250: afa20018 sw v0,24(sp) ; | | d
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
876 254: afa3001c sw v1,28(sp) ; | arg 3 (first struct B) /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
877 258: afa40020 sw a0,32(sp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
878 25c: afa50024 sw a1,36(sp) ; / | l
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
879 260: 24020007 li v0,7 ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
880 264: afa20028 sw v0,40(sp) ; / arg 4
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
881 268: 24020008 li v0,8 ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
882 26c: afa2002c sw v0,44(sp) ; / arg 5
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
883 270: 8fc20070 lw v0,112(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
884 274: 8fc30074 lw v1,116(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
886 27c: afa20030 sw v0,48(sp) ; | i
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
887 280: afa30034 sw v1,52(sp) ; | j
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
888 284: afa40038 sw a0,56(sp) ; / f
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
889 288: 8fc20060 lw v0,96(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
890 28c: 8fc30064 lw v1,100(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
891 290: 8fc40068 lw a0,104(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
892 294: 8fc5006c lw a1,108(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
893 298: afa20040 sw v0,64(sp) ; | | d
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
894 29c: afa30044 sw v1,68(sp) ; | arg 7 (second struct B) /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
895 2a0: afa40048 sw a0,72(sp) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
896 2a4: afa5004c sw a1,76(sp) ; | | l
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
897 2a8: 2402000e li v0,14 ; arg 8 pushed ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
898 2ac: afa20050 sw v0,80(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
899 2b0: 2402000f li v0,15 ; arg 9 pushed ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
900 2b4: afa20054 sw v0,84(sp) ; ... onto stack
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
901 2b8: 8fc20098 lw v0,152(s8) ; | | f (via stack, first slot after save area)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
902 2bc: afa20010 sw v0,16(sp) ; | | note that 20(sp) isn't used, so sizeof(struct A) is probably a padded 16
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
903 2c0: 8fc60090 lw a2,144(s8) ; | arg 2 (first struct A) i (via reg)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
904 2c4: 8fc70094 lw a3,148(s8) ; | j (via reg)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
905 2c8: 00002021 move a0,zero ; arg 0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
906 2cc: 24050001 li a1,1 ; arg 1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
907 2d0: 8f990000 lw t9,0(gp) ; func to call -> t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
908 2d4: 0320f809 jalr t9 ; call and ret addr -> ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
909 2d8: 00000000 nop ; branch delay slot
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
910 2dc: 8fdc0058 lw gp,88(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
911 2e0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
912 2e4: 03c0e821 move sp,s8 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
913 2e8: 8fbf00a4 lw ra,164(sp) ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
914 2ec: 8fbe00a0 lw s8,160(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
915 2f0: 03e00008 jr ra ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
916 2f4: 27bd00a8 addiu sp,sp,168 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
917 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
918
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
919
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
920
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
921 ; ---------- returning structs by value ---------->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
922 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
923 ; struct Small { char x; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
924 ; struct Big { long long i,j,k,l; long m; }; /* bigger than 16b */
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
925 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
926 ; struct Small f0()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
927 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
928 ; struct Small s = { 132 };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
929 ; return s;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
930 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
931 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
932 ; struct Big f1()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
933 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
934 ; struct Big b = { 7171LL, 99LL, -99LL, -3102LL, 32 };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
935 ; return b;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
936 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
937 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
938 ; int main()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
939 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
940 ; struct Small s = f0();
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
941 ; struct Big b = f1();
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
942 ; return b.j + b.k + b.m + s.x;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
943 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
944
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
945
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
946
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
947 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
948
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
949 00000000 <f0>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
950 0: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
951 4: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
952 8: 0399e021 addu gp,gp,t9 ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
953 c: 27bdffe8 addiu sp,sp,-24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
954 10: afbe0010 sw s8,16(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
955 14: 03a0f021 move s8,sp ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
956 18: 00801021 move v0,a0 ; hidden first arg (ptr to struct ret) -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
957 1c: 2403ff84 li v1,-124 ; | put together local struct
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
958 20: a3c30008 sb v1,8(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
959 24: 93c30008 lbu v1,8(s8) ; read struct data from local area ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
960 28: a0430000 sb v1,0(v0) ; ... and write to return value area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
961 2c: 03c0e821 move sp,s8 ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
962 30: 8fbe0010 lw s8,16(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
963 34: 03e00008 jr ra ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
964 38: 27bd0018 addiu sp,sp,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
965
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
966 0000003c <f1>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
967 3c: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
968 40: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
969 44: 0399e021 addu gp,gp,t9 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
970 48: 27bdffb0 addiu sp,sp,-80 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
971 4c: afbf0048 sw ra,72(sp) ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
972 50: afbe0044 sw s8,68(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
973 54: afb00040 sw s0,64(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
974 58: 03a0f021 move s8,sp ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
975 5c: afbc0010 sw gp,16(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
976 60: 00808021 move s0,a0 ; hidden first arg (ptr to struct ret) -> s0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
977 64: 27c20018 addiu v0,s8,24 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
978 68: 8f830000 lw v1,0(gp) ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
979 6c: 24630000 addiu v1,v1,0 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
980 70: 24060028 li a2,40 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
981 74: 00402021 move a0,v0 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
982 78: 00602821 move a1,v1 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
983 7c: 8f990000 lw t9,0(gp) ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
984 80: 0320f809 jalr t9 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
985 84: 00000000 nop ; @@@ unsure why those two jumps, but seems to put return value data together
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
986 88: 8fdc0010 lw gp,16(s8) ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
987 8c: 02001021 move v0,s0 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
988 90: 27c30018 addiu v1,s8,24 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
989 94: 24060028 li a2,40 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
990 98: 00402021 move a0,v0 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
991 9c: 00602821 move a1,v1 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
992 a0: 8f990000 lw t9,0(gp) ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
993 a4: 0320f809 jalr t9 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
994 a8: 00000000 nop ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
995 ac: 8fdc0010 lw gp,16(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
996 b0: 02001021 move v0,s0 ; : return value (hidden ptr): not part of epilog, but unordered (branch delay slot style)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
997 b4: 03c0e821 move sp,s8 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
998 b8: 8fbf0048 lw ra,72(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
999 bc: 8fbe0044 lw s8,68(sp) ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1000 c0: 8fb00040 lw s0,64(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1001 c4: 03e00008 jr ra ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1002 c8: 27bd0050 addiu sp,sp,80 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1003
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1004 000000cc <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1005 cc: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1006 d0: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1007 d4: 0399e021 addu gp,gp,t9 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1008 d8: 27bdffb0 addiu sp,sp,-80 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1009 dc: afbf004c sw ra,76(sp) ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1010 e0: afbe0048 sw s8,72(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1011 e4: 03a0f021 move s8,sp ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1012 e8: afbc0010 sw gp,16(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1013 ec: 27c20018 addiu v0,s8,24 ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1014 f0: 00402021 move a0,v0 ; | hidden first arg (ptr to space for ret val)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1015 f4: 8f990000 lw t9,0(gp) ; func to call (f0) -> t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1016 f8: 0320f809 jalr t9 ; call and ret addr -> ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1017 fc: 00000000 nop ; branch delay slot
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1018 100: 8fdc0010 lw gp,16(s8) ; restore gp @@@ unsure why?
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1019 104: 27c20020 addiu v0,s8,32 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1020 108: 00402021 move a0,v0 ; | hidden first arg (ptr to space for ret val)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1021 10c: 8f990000 lw t9,0(gp) ; func to call (f1) -> t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1022 110: 0320f809 jalr t9 ; call and ret addr -> ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1023 114: 00000000 nop ; branch delay slot
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1024 118: 8fdc0010 lw gp,16(s8) ; restore gp @@@ unsure why?
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1025 11c: 8fc3002c lw v1,44(s8) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1026 120: 8fc20028 lw v0,40(s8) ; | | b.j -> v0 & v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1027 124: 00602021 move a0,v1 ; | a0 = (int)b.j
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1028 128: 8fc30034 lw v1,52(s8) ; | |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1029 12c: 8fc20030 lw v0,48(s8) ; | | b.j -> v0 & v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1030 130: 00601021 move v0,v1 ; | return value v0 = (int)b.k
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1031 134: 00821821 addu v1,a0,v0 ; | (int)b.j + (int)b.k -> v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1032 138: 8fc20040 lw v0,64(s8) ; | b.m -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1033 13c: 00621821 addu v1,v1,v0 ; | ((int)b.j + (int)b.k) + b.m -> v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1034 140: 83c20018 lb v0,24(s8) ; | s.x -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1035 144: 00621021 addu v0,v1,v0 ; / (((int)b.j + (int)b.k) + b.m) + s.x -> v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1036 148: 03c0e821 move sp,s8 ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1037 14c: 8fbf004c lw ra,76(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1038 150: 8fbe0048 lw s8,72(sp) ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1039 154: 03e00008 jr ra ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1040 158: 27bd0050 addiu sp,sp,80 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1041 15c: 00000000 nop ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1042
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1043
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1044
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1045 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1046
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1047 00000000 <f0>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1048 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1049 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1050 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1051 c: 27bdffe8 addiu sp,sp,-24
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1052 10: afbe0010 sw s8,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1053 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1054 18: 00801021 move v0,a0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1055 1c: 2403ff84 li v1,-124
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1056 20: a3c30008 sb v1,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1057 24: 93c30008 lbu v1,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1058 28: a0430000 sb v1,0(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1059 2c: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1060 30: 8fbe0010 lw s8,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1061 34: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1062 38: 27bd0018 addiu sp,sp,24
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1063
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1064 0000003c <f1>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1065 3c: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1066 40: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1067 44: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1068 48: 27bdffb0 addiu sp,sp,-80
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1069 4c: afbf0048 sw ra,72(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1070 50: afbe0044 sw s8,68(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1071 54: afb00040 sw s0,64(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1072 58: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1073 5c: afbc0010 sw gp,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1074 60: 00808021 move s0,a0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1075 64: 27c20018 addiu v0,s8,24
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1076 68: 8f830000 lw v1,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1077 6c: 24630000 addiu v1,v1,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1078 70: 24060028 li a2,40
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1079 74: 00402021 move a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1080 78: 00602821 move a1,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1081 7c: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1082 80: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1083 84: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1084 88: 8fdc0010 lw gp,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1085 8c: 02001021 move v0,s0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1086 90: 27c30018 addiu v1,s8,24
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1087 94: 24060028 li a2,40
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1088 98: 00402021 move a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1089 9c: 00602821 move a1,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1090 a0: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1091 a4: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1092 a8: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1093 ac: 8fdc0010 lw gp,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1094 b0: 02001021 move v0,s0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1095 b4: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1096 b8: 8fbf0048 lw ra,72(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1097 bc: 8fbe0044 lw s8,68(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1098 c0: 8fb00040 lw s0,64(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1099 c4: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1100 c8: 27bd0050 addiu sp,sp,80
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1101
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1102 000000cc <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1103 cc: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1104 d0: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1105 d4: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1106 d8: 27bdffb0 addiu sp,sp,-80
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1107 dc: afbf004c sw ra,76(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1108 e0: afbe0048 sw s8,72(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1109 e4: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1110 e8: afbc0010 sw gp,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1111 ec: 27c20018 addiu v0,s8,24
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1112 f0: 00402021 move a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1113 f4: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1114 f8: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1115 fc: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1116 100: 8fdc0010 lw gp,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1117 104: 27c20020 addiu v0,s8,32
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1118 108: 00402021 move a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1119 10c: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1120 110: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1121 114: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1122 118: 8fdc0010 lw gp,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1123 11c: 8fc3002c lw v1,44(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1124 120: 8fc20028 lw v0,40(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1125 124: 00602021 move a0,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1126 128: 8fc30034 lw v1,52(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1127 12c: 8fc20030 lw v0,48(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1128 130: 00601021 move v0,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1129 134: 00821821 addu v1,a0,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1130 138: 8fc20040 lw v0,64(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1131 13c: 00621821 addu v1,v1,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1132 140: 83c20018 lb v0,24(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1133 144: 00621021 addu v0,v1,v0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1134 148: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1135 14c: 8fbf004c lw ra,76(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1136 150: 8fbe0048 lw s8,72(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1137 154: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1138 158: 27bd0050 addiu sp,sp,80
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1139 15c: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1140
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1141
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1142
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1143 ; ---------- returning long long ---------->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1144 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1145 ; long long f()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1146 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1147 ; return 7171LL;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1148 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1149 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1150 ; int main()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1151 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1152 ; return (int)f();
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1153 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1154
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1155
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1156
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1157 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1158
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1159 00000000 <f>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1160 0: 3c1c0000 lui gp,0x0 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1161 4: 279c0000 addiu gp,gp,0 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1162 8: 0399e021 addu gp,gp,t9 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1163 c: 27bdfff8 addiu sp,sp,-8 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1164 10: afbe0000 sw s8,0(sp) ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1165 14: 03a0f021 move s8,sp ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1166 18: 24031c03 li v1,7171 ; | return value
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1167 1c: 00001021 move v0,zero ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1168 20: 03c0e821 move sp,s8 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1169 24: 8fbe0000 lw s8,0(sp) ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1170 28: 03e00008 jr ra ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1171 2c: 27bd0008 addiu sp,sp,8 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1172
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1173 00000030 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1174 30: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1175 34: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1176 38: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1177 3c: 27bdffe0 addiu sp,sp,-32
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1178 40: afbf001c sw ra,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1179 44: afbe0018 sw s8,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1180 48: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1181 4c: afbc0010 sw gp,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1182 50: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1183 54: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1184 58: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1185 5c: 8fdc0010 lw gp,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1186 60: 00601021 move v0,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1187 64: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1188 68: 8fbf001c lw ra,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1189 6c: 8fbe0018 lw s8,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1190 70: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1191 74: 27bd0020 addiu sp,sp,32
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1192 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1193
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1194
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1195
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1196 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1197
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1198 00000000 <f>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1199 0: 3c1c0000 lui gp,0x0 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1200 4: 279c0000 addiu gp,gp,0 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1201 8: 0399e021 addu gp,gp,t9 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1202 c: 27bdfff8 addiu sp,sp,-8 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1203 10: afbe0000 sw s8,0(sp) ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1204 14: 03a0f021 move s8,sp ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1205 18: 24031c03 li v1,7171 ; | return value
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1206 1c: 00001021 move v0,zero ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1207 20: 03c0e821 move sp,s8 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1208 24: 8fbe0000 lw s8,0(sp) ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1209 28: 03e00008 jr ra ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1210 2c: 27bd0008 addiu sp,sp,8 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1211
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1212 00000030 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1213 30: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1214 34: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1215 38: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1216 3c: 27bdffe0 addiu sp,sp,-32
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1217 40: afbf001c sw ra,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1218 44: afbe0018 sw s8,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1219 48: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1220 4c: afbc0010 sw gp,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1221 50: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1222 54: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1223 58: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1224 5c: 8fdc0010 lw gp,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1225 60: 00601021 move v0,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1226 64: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1227 68: 8fbf001c lw ra,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1228 6c: 8fbe0018 lw s8,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1229 70: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1230 74: 27bd0020 addiu sp,sp,32
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1231 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1232
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1233
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1234
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1235 ; ---------- passing structs with only fp parts ---------->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1236 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1237 ; struct A { float a; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1238 ; struct B { float a, b; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1239 ; struct C { float a, b, c; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1240 ; struct D { double a; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1241 ; struct E { double a, b; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1242 ; struct F { double a, b, c; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1243 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1244 ; void leaf_call(struct A a, struct B b, struct C c, struct D d, struct E e, struct F f)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1245 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1246 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1247 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1248 ; int main()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1249 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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.});
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1251 ; return 0;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1252 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1253
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1254
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1255
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1256 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1257
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1258 00000000 <leaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1259 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1260 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1261 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1262 c: 27bdfff8 addiu sp,sp,-8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1263 10: afbe0000 sw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1264 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1265 18: afc40008 sw a0,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1266 1c: afc5000c sw a1,12(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1267 20: afc60010 sw a2,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1268 24: afc70014 sw a3,20(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1269 28: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1270 2c: 8fbe0000 lw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1271 30: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1272 34: 27bd0008 addiu sp,sp,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1273
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1274 00000038 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1275 38: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1276 3c: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1277 40: 0399e021 addu gp,gp,t9 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1278 44: 27bdff60 addiu sp,sp,-160 ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1279 48: afbf009c sw ra,156(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1280 4c: afbe0098 sw s8,152(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1281 50: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1282 54: afbc0048 sw gp,72(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1283 58: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1284 5c: 24420044 addiu v0,v0,68 ; | prep local struct A data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1285 60: 8c420000 lw v0,0(v0) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1286 64: afc20094 sw v0,148(s8) ; ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1287 68: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1288 6c: 2442003c addiu v0,v0,60 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1289 70: 8c420000 lw v0,0(v0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1290 74: 8f830000 lw v1,0(gp) ; | prep local struct B data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1291 78: 2463003c addiu v1,v1,60 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1292 7c: 8c630004 lw v1,4(v1) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1293 80: afc2008c sw v0,140(s8) ; \ ... and write to local area a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1294 84: afc30090 sw v1,144(s8) ; / b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1295 88: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1296 8c: 24420030 addiu v0,v0,48 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1297 90: 8c420000 lw v0,0(v0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1298 94: 8f830000 lw v1,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1299 98: 24630030 addiu v1,v1,48 ; | prep local struct C data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1300 9c: 8c630004 lw v1,4(v1) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1301 a0: 8f840000 lw a0,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1302 a4: 24840030 addiu a0,a0,48 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1303 a8: 8c840008 lw a0,8(a0) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1304 ac: afc20080 sw v0,128(s8) ; \ a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1305 b0: afc30084 sw v1,132(s8) ; | ... and write to local area b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1306 b4: afc40088 sw a0,136(s8) ; / c
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1307 b8: 8f830000 lw v1,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1308 bc: 24630028 addiu v1,v1,40 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1309 c0: 8c630004 lw v1,4(v1) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1310 c4: 8f820000 lw v0,0(gp) ; | prep local struct D data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1311 c8: 24420028 addiu v0,v0,40 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1312 cc: 8c420000 lw v0,0(v0) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1313 d0: afc3007c sw v1,124(s8) ; \ ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1314 d4: afc20078 sw v0,120(s8) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1315 d8: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1316 dc: 24420018 addiu v0,v0,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1317 e0: 8c420000 lw v0,0(v0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1318 e4: 8f830000 lw v1,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1319 e8: 24630018 addiu v1,v1,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1320 ec: 8c630004 lw v1,4(v1) ; | prep local struct E data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1321 f0: 8f840000 lw a0,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1322 f4: 24840018 addiu a0,a0,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1323 f8: 8c840008 lw a0,8(a0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1324 fc: 8f850000 lw a1,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1325 100: 24a50018 addiu a1,a1,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1326 104: 8ca5000c lw a1,12(a1) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1327 108: afc20068 sw v0,104(s8) ; \ | a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1328 10c: afc3006c sw v1,108(s8) ; | ... and write to local area /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1329 110: afc40070 sw a0,112(s8) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1330 114: afc50074 sw a1,116(s8) ; / | b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1331 118: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1332 11c: 24420000 addiu v0,v0,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1333 120: 8c420000 lw v0,0(v0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1334 124: 8f830000 lw v1,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1335 128: 24630000 addiu v1,v1,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1336 12c: 8c630004 lw v1,4(v1) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1337 130: 8f840000 lw a0,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1338 134: 24840000 addiu a0,a0,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1339 138: 8c840008 lw a0,8(a0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1340 13c: 8f850000 lw a1,0(gp) ; | prep local struct F data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1341 140: 24a50000 addiu a1,a1,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1342 144: 8ca5000c lw a1,12(a1) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1343 148: 8f860000 lw a2,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1344 14c: 24c60000 addiu a2,a2,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1345 150: 8cc60010 lw a2,16(a2) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1346 154: 8f870000 lw a3,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1347 158: 24e70000 addiu a3,a3,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1348 15c: 8ce70014 lw a3,20(a3) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1349 160: afc20050 sw v0,80(s8) ; \ | a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1350 164: afc30054 sw v1,84(s8) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1351 168: afc40058 sw a0,88(s8) ; | \ b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1352 16c: afc5005c sw a1,92(s8) ; | ... and write to local area /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1353 170: afc60060 sw a2,96(s8) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1354 174: afc70064 sw a3,100(s8) ; / | c
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1355 178: 8fc3007c lw v1,124(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1356 17c: 8fc20078 lw v0,120(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1357 180: afa3001c sw v1,28(sp) ; | arg 3 (struct D)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1358 184: afa20018 sw v0,24(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1359 188: 8fc20068 lw v0,104(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1360 18c: 8fc3006c lw v1,108(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1361 190: 8fc40070 lw a0,112(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1362 194: 8fc50074 lw a1,116(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1363 198: afa20020 sw v0,32(sp) ; | arg 4 (struct E)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1364 19c: afa30024 sw v1,36(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1365 1a0: afa40028 sw a0,40(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1366 1a4: afa5002c sw a1,44(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1367 1a8: 8fc20050 lw v0,80(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1368 1ac: 8fc30054 lw v1,84(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1369 1b0: 8fc40058 lw a0,88(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1370 1b4: 8fc5005c lw a1,92(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1371 1b8: 8fc60060 lw a2,96(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1372 1bc: 8fc70064 lw a3,100(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1373 1c0: afa20030 sw v0,48(sp) ; | arg 5 (struct F)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1374 1c4: afa30034 sw v1,52(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1375 1c8: afa40038 sw a0,56(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1376 1cc: afa5003c sw a1,60(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1377 1d0: afa60040 sw a2,64(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1378 1d4: afa70044 sw a3,68(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1379 1d8: 8fc20084 lw v0,132(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1380 1dc: 8fc30088 lw v1,136(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1381 1e0: afa20010 sw v0,16(sp) ; | arg 2 (struct C) b (via stack)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1382 1e4: afa30014 sw v1,20(sp) ; | c (via stack)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1383 1e8: 8fc70080 lw a3,128(s8) ; | a (via reg)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1384 1ec: 8fc40094 lw a0,148(s8) ; arg 0 (struct A, via reg)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1385 1f0: 8fc5008c lw a1,140(s8) ; | arg 1 (struct B, via regs) a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1386 1f4: 8fc60090 lw a2,144(s8) ; | b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1387 1f8: 8f990000 lw t9,0(gp) ; func to call -> t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1388 1fc: 0320f809 jalr t9 ; call and ret addr -> ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1389 200: 00000000 nop ; branch delay slot
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1390 204: 8fdc0048 lw gp,72(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1391 208: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1392 20c: 03c0e821 move sp,s8 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1393 210: 8fbf009c lw ra,156(sp) ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1394 214: 8fbe0098 lw s8,152(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1395 218: 03e00008 jr ra ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1396 21c: 27bd00a0 addiu sp,sp,160 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1397
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1398
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1399
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1400 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1401
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1402 00000000 <leaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1403 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1404 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1405 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1406 c: 27bdfff8 addiu sp,sp,-8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1407 10: afbe0000 sw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1408 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1409 18: afc40008 sw a0,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1410 1c: afc5000c sw a1,12(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1411 20: afc60010 sw a2,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1412 24: afc70014 sw a3,20(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1413 28: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1414 2c: 8fbe0000 lw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1415 30: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1416 34: 27bd0008 addiu sp,sp,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1417
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1418 00000038 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1419 38: 3c1c0000 lui gp,0x0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1420 3c: 279c0000 addiu gp,gp,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1421 40: 0399e021 addu gp,gp,t9 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1422 44: 27bdff60 addiu sp,sp,-160 ; | prolog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1423 48: afbf009c sw ra,156(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1424 4c: afbe0098 sw s8,152(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1425 50: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1426 54: afbc0048 sw gp,72(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1427 58: 8f810000 lw at,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1428 5c: 24210044 addiu at,at,68 ; | prep local struct A (single float field) data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1429 60: c4200000 lwc1 $f0,0(at) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1430 64: e7c00094 swc1 $f0,148(s8) ; ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1431 68: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1432 6c: 2442003c addiu v0,v0,60 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1433 70: 8c420000 lw v0,0(v0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1434 74: 8f830000 lw v1,0(gp) ; | prep local struct B data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1435 78: 2463003c addiu v1,v1,60 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1436 7c: 8c630004 lw v1,4(v1) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1437 80: afc2008c sw v0,140(s8) ; \ ... and write to local area a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1438 84: afc30090 sw v1,144(s8) ; / b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1439 88: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1440 8c: 24420030 addiu v0,v0,48 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1441 90: 8c420000 lw v0,0(v0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1442 94: 8f830000 lw v1,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1443 98: 24630030 addiu v1,v1,48 ; | prep local struct C data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1444 9c: 8c630004 lw v1,4(v1) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1445 a0: 8f840000 lw a0,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1446 a4: 24840030 addiu a0,a0,48 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1447 a8: 8c840008 lw a0,8(a0) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1448 ac: afc20080 sw v0,128(s8) ; \ a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1449 b0: afc30084 sw v1,132(s8) ; | ... and write to local area b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1450 b4: afc40088 sw a0,136(s8) ; / c
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1451 b8: 8f810000 lw at,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1452 bc: 24210028 addiu at,at,40 ; | prep local struct D (single double field) data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1453 c0: d4200000 ldc1 $f0,0(at) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1454 c4: f7c00078 sdc1 $f0,120(s8) ; ... and write to local area
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1455 c8: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1456 cc: 24420018 addiu v0,v0,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1457 d0: 8c420000 lw v0,0(v0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1458 d4: 8f830000 lw v1,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1459 d8: 24630018 addiu v1,v1,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1460 dc: 8c630004 lw v1,4(v1) ; | prep local struct E data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1461 e0: 8f840000 lw a0,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1462 e4: 24840018 addiu a0,a0,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1463 e8: 8c840008 lw a0,8(a0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1464 ec: 8f850000 lw a1,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1465 f0: 24a50018 addiu a1,a1,24 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1466 f4: 8ca5000c lw a1,12(a1) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1467 f8: afc20068 sw v0,104(s8) ; \ | a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1468 fc: afc3006c sw v1,108(s8) ; | ... and write to local area /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1469 100: afc40070 sw a0,112(s8) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1470 104: afc50074 sw a1,116(s8) ; / | b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1471 108: 8f820000 lw v0,0(gp) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1472 10c: 24420000 addiu v0,v0,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1473 110: 8c420000 lw v0,0(v0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1474 114: 8f830000 lw v1,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1475 118: 24630000 addiu v1,v1,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1476 11c: 8c630004 lw v1,4(v1) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1477 120: 8f840000 lw a0,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1478 124: 24840000 addiu a0,a0,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1479 128: 8c840008 lw a0,8(a0) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1480 12c: 8f850000 lw a1,0(gp) ; | prep local struct F data ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1481 130: 24a50000 addiu a1,a1,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1482 134: 8ca5000c lw a1,12(a1) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1483 138: 8f860000 lw a2,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1484 13c: 24c60000 addiu a2,a2,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1485 140: 8cc60010 lw a2,16(a2) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1486 144: 8f870000 lw a3,0(gp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1487 148: 24e70000 addiu a3,a3,0 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1488 14c: 8ce70014 lw a3,20(a3) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1489 150: afc20050 sw v0,80(s8) ; \ | a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1490 154: afc30054 sw v1,84(s8) ; | /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1491 158: afc40058 sw a0,88(s8) ; | \ b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1492 15c: afc5005c sw a1,92(s8) ; | ... and write to local area /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1493 160: afc60060 sw a2,96(s8) ; | \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1494 164: afc70064 sw a3,100(s8) ; / | c
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1495 168: d7c00078 ldc1 $f0,120(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1496 16c: f7a00018 sdc1 $f0,24(sp) ; / arg 3 (struct D)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1497 170: 8fc20068 lw v0,104(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1498 174: 8fc3006c lw v1,108(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1499 178: 8fc40070 lw a0,112(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1500 17c: 8fc50074 lw a1,116(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1501 180: afa20020 sw v0,32(sp) ; | arg 4 (struct E)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1502 184: afa30024 sw v1,36(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1503 188: afa40028 sw a0,40(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1504 18c: afa5002c sw a1,44(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1505 190: 8fc20050 lw v0,80(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1506 194: 8fc30054 lw v1,84(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1507 198: 8fc40058 lw a0,88(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1508 19c: 8fc5005c lw a1,92(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1509 1a0: 8fc60060 lw a2,96(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1510 1a4: 8fc70064 lw a3,100(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1511 1a8: afa20030 sw v0,48(sp) ; | arg 5 (struct F)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1512 1ac: afa30034 sw v1,52(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1513 1b0: afa40038 sw a0,56(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1514 1b4: afa5003c sw a1,60(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1515 1b8: afa60040 sw a2,64(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1516 1bc: afa70044 sw a3,68(sp) ; /
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1517 1c0: 8fc20084 lw v0,132(s8) ; \
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1518 1c4: 8fc30088 lw v1,136(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1519 1c8: afa20010 sw v0,16(sp) ; | arg 2 (struct C) b (via stack)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1520 1cc: afa30014 sw v1,20(sp) ; | c (via stack)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1521 1d0: 8fc70080 lw a3,128(s8) ; | a (via reg)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1522 1d4: 8fc40094 lw a0,148(s8) ; arg 0 (struct A, via reg)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1523 1d8: 8fc5008c lw a1,140(s8) ; | arg 1 (struct B, via regs) a
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1524 1dc: 8fc60090 lw a2,144(s8) ; | b
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1525 1e0: 8f990000 lw t9,0(gp) ; func to call -> t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1526 1e4: 0320f809 jalr t9 ; call and ret addr -> ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1527 1e8: 00000000 nop ; branch delay slot
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1528 1ec: 8fdc0048 lw gp,72(s8) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1529 1f0: 00001021 move v0,zero ; : return value: not part of epilog, but unordered (branch delay slot style)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1530 1f4: 03c0e821 move sp,s8 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1531 1f8: 8fbf009c lw ra,156(sp) ; | epilog
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1532 1fc: 8fbe0098 lw s8,152(sp) ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1533 200: 03e00008 jr ra ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1534 204: 27bd00a0 addiu sp,sp,160 ; |
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1535 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1536
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1537
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1538
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1539 ; ---------- single-field structs by values (and small array fields) ---------->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1540 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1541 ; struct C { char c; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1542 ; struct S { short s; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1543 ; struct I { int i; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1544 ; struct F { float f; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1545 ; struct D { double d; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1546 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1547 ; struct C2 { char c[2]; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1548 ; struct C3 { char c[3]; };
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1549 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1551 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1552 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1553 ;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1554 ; int main()
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1555 ; {
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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}});
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1557 ; return 0;
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1558 ; }
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1559
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1560
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1561
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1562 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1563
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1564 00000000 <leaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1565 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1566 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1567 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1568 c: 27bdfff8 addiu sp,sp,-8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1569 10: afbe0000 sw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1570 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1571 18: afc40008 sw a0,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1572 1c: afc5000c sw a1,12(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1573 20: afc60010 sw a2,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1574 24: afc70014 sw a3,20(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1575 28: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1576 2c: 8fbe0000 lw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1577 30: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1578 34: 27bd0008 addiu sp,sp,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1579
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1580 00000038 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1581 38: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1582 3c: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1583 40: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1584 44: 27bdffa0 addiu sp,sp,-96
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1585 48: afbf005c sw ra,92(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1586 4c: afbe0058 sw s8,88(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1587 50: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1588 54: afbc0028 sw gp,40(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1589 58: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1590 5c: 24420010 addiu v0,v0,16
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1591 60: 90420000 lbu v0,0(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1592 64: a3c2004b sb v0,75(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1593 68: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1594 6c: 24420010 addiu v0,v0,16
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1595 70: 90420001 lbu v0,1(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1596 74: a3c2004c sb v0,76(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1597 78: 24020002 li v0,2
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1598 7c: a3c2004a sb v0,74(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1599 80: 24020003 li v0,3
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1600 84: a7c20048 sh v0,72(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1601 88: 24020004 li v0,4
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1602 8c: afc20044 sw v0,68(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1603 90: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1604 94: 24420014 addiu v0,v0,20
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1605 98: 8c420000 lw v0,0(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1606 9c: afc20040 sw v0,64(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1607 a0: 8f830000 lw v1,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1608 a4: 24630008 addiu v1,v1,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1609 a8: 8c630004 lw v1,4(v1)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1610 ac: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1611 b0: 24420008 addiu v0,v0,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1612 b4: 8c420000 lw v0,0(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1613 b8: afc3003c sw v1,60(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1614 bc: afc20038 sw v0,56(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1615 c0: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1616 c4: 24420000 addiu v0,v0,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1617 c8: 94420000 lhu v0,0(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1618 cc: a7c20030 sh v0,48(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1619 d0: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1620 d4: 24420000 addiu v0,v0,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1621 d8: 90420002 lbu v0,2(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1622 dc: a3c20032 sb v0,50(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1623 e0: 8fc20040 lw v0,64(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1624 e4: afa20010 sw v0,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1625 e8: 8fc3003c lw v1,60(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1626 ec: 8fc20038 lw v0,56(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1627 f0: afa3001c sw v1,28(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1628 f4: afa20018 sw v0,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1629 f8: 97c20030 lhu v0,48(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1630 fc: a7a20020 sh v0,32(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1631 100: 93c20032 lbu v0,50(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1632 104: a3a20022 sb v0,34(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1633 108: 93c2004b lbu v0,75(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1634 10c: 00021a00 sll v1,v0,0x8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1635 110: 93c2004c lbu v0,76(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1636 114: 00431025 or v0,v0,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1637 118: afc00050 sw zero,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1638 11c: 00021c00 sll v1,v0,0x10
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1639 120: 8fc40050 lw a0,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1640 124: 3082ffff andi v0,a0,0xffff
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1641 128: 00431025 or v0,v0,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1642 12c: afc20050 sw v0,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1643 130: 8fc40050 lw a0,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1644 134: 93c5004a lbu a1,74(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1645 138: 00052e00 sll a1,a1,0x18
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1646 13c: 97c60048 lhu a2,72(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1647 140: 00063400 sll a2,a2,0x10
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1648 144: 8fc70044 lw a3,68(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1649 148: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1650 14c: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1651 150: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1652 154: 8fdc0028 lw gp,40(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1653 158: 00001021 move v0,zero
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1654 15c: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1655 160: 8fbf005c lw ra,92(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1656 164: 8fbe0058 lw s8,88(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1657 168: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1658 16c: 27bd0060 addiu sp,sp,96
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1659
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1660
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1661
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1662 ; output from freebsd-12.0_r333647-malta_mipsebhf w/ gcc 4.2.1 *and* -mhard-float ----->
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1663
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1664 00000000 <leaf_call>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1665 0: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1666 4: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1667 8: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1668 c: 27bdfff8 addiu sp,sp,-8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1669 10: afbe0000 sw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1670 14: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1671 18: afc40008 sw a0,8(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1672 1c: afc5000c sw a1,12(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1673 20: afc60010 sw a2,16(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1674 24: afc70014 sw a3,20(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1675 28: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1676 2c: 8fbe0000 lw s8,0(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1677 30: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1678 34: 27bd0008 addiu sp,sp,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1679
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1680 00000038 <main>:
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1681 38: 3c1c0000 lui gp,0x0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1682 3c: 279c0000 addiu gp,gp,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1683 40: 0399e021 addu gp,gp,t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1684 44: 27bdffa0 addiu sp,sp,-96
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1685 48: afbf005c sw ra,92(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1686 4c: afbe0058 sw s8,88(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1687 50: 03a0f021 move s8,sp
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1688 54: afbc0028 sw gp,40(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1689 58: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1690 5c: 24420010 addiu v0,v0,16
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1691 60: 90420000 lbu v0,0(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1692 64: a3c2004b sb v0,75(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1693 68: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1694 6c: 24420010 addiu v0,v0,16
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1695 70: 90420001 lbu v0,1(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1696 74: a3c2004c sb v0,76(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1697 78: 24020002 li v0,2
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1698 7c: a3c2004a sb v0,74(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1699 80: 24020003 li v0,3
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1700 84: a7c20048 sh v0,72(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1701 88: 24020004 li v0,4
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1702 8c: afc20044 sw v0,68(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1703 90: 8f810000 lw at,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1704 94: 24210014 addiu at,at,20
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1705 98: c4200000 lwc1 $f0,0(at)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1706 9c: e7c00040 swc1 $f0,64(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1707 a0: 8f810000 lw at,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1708 a4: 24210008 addiu at,at,8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1709 a8: d4200000 ldc1 $f0,0(at)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1710 ac: f7c00038 sdc1 $f0,56(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1711 b0: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1712 b4: 24420000 addiu v0,v0,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1713 b8: 94420000 lhu v0,0(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1714 bc: a7c20030 sh v0,48(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1715 c0: 8f820000 lw v0,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1716 c4: 24420000 addiu v0,v0,0
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1717 c8: 90420002 lbu v0,2(v0)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1718 cc: a3c20032 sb v0,50(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1719 d0: c7c00040 lwc1 $f0,64(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1720 d4: e7a00010 swc1 $f0,16(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1721 d8: d7c00038 ldc1 $f0,56(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1722 dc: f7a00018 sdc1 $f0,24(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1723 e0: 97c20030 lhu v0,48(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1724 e4: a7a20020 sh v0,32(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1725 e8: 93c20032 lbu v0,50(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1726 ec: a3a20022 sb v0,34(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1727 f0: 93c2004b lbu v0,75(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1728 f4: 00021a00 sll v1,v0,0x8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1729 f8: 93c2004c lbu v0,76(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1730 fc: 00431025 or v0,v0,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1731 100: afc00050 sw zero,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1732 104: 00021c00 sll v1,v0,0x10
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1733 108: 8fc40050 lw a0,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1734 10c: 3082ffff andi v0,a0,0xffff
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1735 110: 00431025 or v0,v0,v1
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1736 114: afc20050 sw v0,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1737 118: 8fc40050 lw a0,80(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1738 11c: 93c5004a lbu a1,74(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1739 120: 00052e00 sll a1,a1,0x18
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1740 124: 97c60048 lhu a2,72(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1741 128: 00063400 sll a2,a2,0x10
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1742 12c: 8fc70044 lw a3,68(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1743 130: 8f990000 lw t9,0(gp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1744 134: 0320f809 jalr t9
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1745 138: 00000000 nop
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1746 13c: 8fdc0028 lw gp,40(s8)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1747 140: 00001021 move v0,zero
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1748 144: 03c0e821 move sp,s8
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1749 148: 8fbf005c lw ra,92(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1750 14c: 8fbe0058 lw s8,88(sp)
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1751 150: 03e00008 jr ra
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1752 154: 27bd0060 addiu sp,sp,96
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1753 ...
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1754
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
1755
6c72cb768099 callconv doc:
Tassilo Philipp
parents: 327
diff changeset
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
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1865 ; vim: ft=asm
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1866