view release on metacpan or search on metacpan
dyncall/doc/disas_examples/arm.armhf.disas view on Meta::CPAN
10404: e51b0008 ldr r0, [fp, #-8] ; ptr to retval space -> r0
10408: e24bd004 sub sp, fp, #4
1040c: e8bd8800 pop {fp, pc}
00010410 <f>:
10410: e92d4800 push {fp, lr} ; |
10414: e28db004 add fp, sp, #4 ; | prolog
10418: e24dd010 sub sp, sp, #16 ; /
1041c: e3a03001 mov r3, #1 ; \ a = 1
10420: e50b3008 str r3, [fp, #-8] ; /
10424: e51b3008 ldr r3, [fp, #-8] ; \
10428: e283307b add r3, r3, #123 ; | a += 123
1042c: e50b3008 str r3, [fp, #-8] ; |
10430: ebffffe6 bl 103d0 <f1> ; call f1()
10434: e1a03000 mov r3, r0 ; | retval via r0, as small struct
10438: e50b300c str r3, [fp, #-12] ; /
1043c: e51b3008 ldr r3, [fp, #-8] ; \
10440: e243307b sub r3, r3, #123 ; | a -= 123
10444: e50b3008 str r3, [fp, #-8] ; |
10448: e24b3010 sub r3, fp, #16 ; space to hold non-triv retval -> eax ...
1044c: e1a00003 mov r0, r3 ; ... as hidden first arg (r0)
dyncall/doc/disas_examples/arm.atpcs_arm.disas view on Meta::CPAN
0: e52db004 push {fp} ; (str fp, [sp, #-4]!)
4: e28db000 add fp, sp, #0
8: e24dd014 sub sp, sp, #20
c: e50b0008 str r0, [fp, #-8]
10: e24b0014 sub r0, fp, #20
14: e880000e stm r0, {r1, r2, r3}
18: e28bd000 add sp, fp, #0
1c: e8bd0800 pop {fp}
20: e12fff1e bx lr
00000024 <nonleaf_call>:
24: e24dd008 sub sp, sp, #8
28: e92d4800 push {fp, lr}
2c: e28db004 add fp, sp, #4
30: e24dd0b0 sub sp, sp, #176 ; 0xb0
34: e50b0070 str r0, [fp, #-112] ; 0x70
38: e50b1074 str r1, [fp, #-116] ; 0x74
3c: e28b1004 add r1, fp, #4
40: e881000c stm r1, {r2, r3}
44: e24b2068 sub r2, fp, #104 ; 0x68
48: e3a03064 mov r3, #100 ; 0x64
4c: e1a00002 mov r0, r2
50: e3a01000 mov r1, #0
54: e1a02003 mov r2, r3
58: ebfffffe bl 0 <memset>
5c: e3a0304c mov r3, #76 ; 0x4c
60: e54b3068 strb r3, [fp, #-104] ; 0x68
64: e1a0c00d mov ip, sp
68: e28b3014 add r3, fp, #20
6c: e893000f ldm r3, {r0, r1, r2, r3}
70: e88c000f stm ip, {r0, r1, r2, r3}
74: e59b3024 ldr r3, [fp, #36] ; 0x24
78: e58d3010 str r3, [sp, #16]
7c: e59b3028 ldr r3, [fp, #40] ; 0x28
80: e58d3014 str r3, [sp, #20]
84: e28dc018 add ip, sp, #24
88: e28b302c add r3, fp, #44 ; 0x2c
8c: e8930007 ldm r3, {r0, r1, r2}
90: e88c0007 stm ip, {r0, r1, r2}
94: e28dc028 add ip, sp, #40 ; 0x28
98: e28b303c add r3, fp, #60 ; 0x3c
9c: e893000f ldm r3, {r0, r1, r2, r3}
dyncall/doc/disas_examples/arm64.aapcs.disas view on Meta::CPAN
23c: 6a 4a 40 f9 ldr x10, [x19, #144]
240: 49 01 00 b9 str w9, [x10]
244: 29 01 00 71 subs w9, w9, #0
248: 69 8a 00 b9 str w9, [x19, #136]
24c: ec 00 00 54 b.gt #28 <nonleaf_call+0x234>
250: 01 00 00 14 b #4 <nonleaf_call+0x220>
254: a8 03 5b f8 ldur x8, [x29, #-80]
258: 69 8e 40 b9 ldr w9, [x19, #140]
25c: 08 c1 29 8b add x8, x8, w9, sxtw
260: 68 42 00 f9 str x8, [x19, #128]
264: 06 00 00 14 b #24 <nonleaf_call+0x248>
268: a8 83 5a f8 ldur x8, [x29, #-88]
26c: 09 21 00 91 add x9, x8, #8
270: a9 83 1a f8 stur x9, [x29, #-88]
274: 68 42 00 f9 str x8, [x19, #128]
278: 01 00 00 14 b #4 <nonleaf_call+0x248>
27c: 68 42 40 f9 ldr x8, [x19, #128]
280: 09 01 40 b9 ldr w9, [x8]
284: a9 c3 1d b8 stur w9, [x29, #-36]
288: a8 63 01 d1 sub x8, x29, #88
28c: 08 61 00 91 add x8, x8, #24
290: a9 03 5c b8 ldur w9, [x29, #-64]
294: ea 03 09 2a mov w10, w9
298: 68 3e 00 f9 str x8, [x19, #120]
29c: 6a 76 00 b9 str w10, [x19, #116]
2a0: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x2a8>
dyncall/doc/disas_examples/arm64.aapcs.disas view on Meta::CPAN
238: 6a 4a 40 f9 ldr x10, [x19, #144]
23c: 49 01 00 b9 str w9, [x10]
240: 29 01 00 71 subs w9, w9, #0
244: 69 8a 00 b9 str w9, [x19, #136]
248: ec 00 00 54 b.gt #28 <nonleaf_call+0x234>
24c: 01 00 00 14 b #4 <nonleaf_call+0x220>
250: a8 03 5b f8 ldur x8, [x29, #-80]
254: 69 8e 40 b9 ldr w9, [x19, #140]
258: 08 c1 29 8b add x8, x8, w9, sxtw
25c: 68 42 00 f9 str x8, [x19, #128]
260: 06 00 00 14 b #24 <nonleaf_call+0x248>
264: a8 83 5a f8 ldur x8, [x29, #-88]
268: 09 21 00 91 add x9, x8, #8
26c: a9 83 1a f8 stur x9, [x29, #-88]
270: 68 42 00 f9 str x8, [x19, #128]
274: 01 00 00 14 b #4 <nonleaf_call+0x248>
278: 68 42 40 f9 ldr x8, [x19, #128]
27c: 09 01 40 b9 ldr w9, [x8]
280: a9 c3 1d b8 stur w9, [x29, #-36]
284: a8 63 01 d1 sub x8, x29, #88
288: 08 71 00 91 add x8, x8, #28
28c: a9 43 5c b8 ldur w9, [x29, #-60]
290: ea 03 09 2a mov w10, w9
294: 68 3e 00 f9 str x8, [x19, #120]
298: 6a 76 00 b9 str w10, [x19, #116]
29c: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x2a8>
dyncall/doc/disas_examples/arm64.aapcs.disas view on Meta::CPAN
0000000000000000 f0:
0: ff 83 00 d1 sub sp, sp, #32 ; |
4: fe 0b 00 f9 str x30, [sp, #16] ; | prolog
8: 08 00 00 90 adrp x8, #0 ; compute addr to storage map (probably to #132)
c: 08 01 00 91 add x8, x8, #0 ; addr offset (pointless)
10: e2 03 40 b2 orr x2, xzr, #0x1 ; @@@ unsure, #1 -> x2
14: e9 3f 00 91 add x9, sp, #15 ; addr to #132 -> x9 @@@?
18: e0 03 09 aa mov x0, x9 ; @@@ unsure
1c: e1 03 08 aa mov x1, x8 ; @@@ unsure
20: e9 03 00 f9 str x9, [sp] ; store addr to #132 to top of stack
24: 00 00 00 94 bl #0 <f0+0x24> ; @@@unsure
28: e8 03 40 f9 ldr x8, [sp] ; *sp -> x8
2c: 0a 01 40 39 ldrb w10, [x8] ; *x8 -> w10
30: e9 03 0a 2a mov w9, w10 ; w10 -> w9
34: 20 1d 40 d3 ubfx x0, x9, #0, #8 ; return value ("Unsigned Bit Field Extract", copy 8 bits from x9's LSBits starting at bit 0 to x0, and zero extend; = struct in reg)
38: fe 0b 40 f9 ldr x30, [sp, #16] ; |
3c: ff 83 00 91 add sp, sp, #32 ; | epilog
40: c0 03 5f d6 ret ; |
0000000000000044 f1:
44: ff 03 01 d1 sub sp, sp, #64 ; |
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
; return 0;
; }
; output from psptoolchain-20111215-psp w/ gcc 4.9.3
00000000 <leaf_call>:
0: 27bdffd8 addiu sp,sp,-40
4: afbe0024 sw s8,36(sp)
8: 03a0f021 move s8,sp
c: afc40000 sw a0,0(s8)
10: afc50004 sw a1,4(s8)
14: afc60008 sw a2,8(s8)
18: afc7000c sw a3,12(s8)
1c: afc80010 sw t0,16(s8)
20: afc90014 sw t1,20(s8)
24: afca0018 sw t2,24(s8)
28: 03c0e821 move sp,s8
2c: 8fbe0024 lw s8,36(sp)
30: 27bd0028 addiu sp,sp,40
34: 03e00008 jr ra
38: 00000000 nop
0000003c <nonleaf_call>:
3c: 27bdffd8 addiu sp,sp,-40 ; |
40: afbf0024 sw ra,36(sp) ; |
44: afbe0020 sw s8,32(sp) ; | prolog
48: 03a0f021 move s8,sp ; / frame pointer (note: with offset to frame start, but static compared to sp)
4c: afc40000 sw a0,0(s8) ; \
50: afc50004 sw a1,4(s8) ; |
54: afc60008 sw a2,8(s8) ; |
58: afc7000c sw a3,12(s8) ; |
5c: afc80010 sw t0,16(s8) ; | in args 0,1,2,3,4,5,6,7 -> temp space in local area
60: afc90014 sw t1,20(s8) ; |
64: afca0018 sw t2,24(s8) ; |
68: afcb001c sw t3,28(s8) ; |
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
8c: 8fc40004 lw a0,4(s8) ; |
90: 8fc50008 lw a1,8(s8) ; |
94: 8fc6000c lw a2,12(s8) ; |
98: 8fc70010 lw a3,16(s8) ; | arg 0,1,2,3,4,5,6 (fetched from local area stored to above)
9c: 8fc80014 lw t0,20(s8) ; | (t0 = a4)
a0: 8fc90018 lw t1,24(s8) ; | (t1 = a5)
a4: 8fca001c lw t2,28(s8) ; | (t2 = a6)
a8: 0c000000 jal 0 <leaf_call> ; call and ret addr -> ra
ac: 00000000 nop ; branch delay slot
b0: 03c0e821 move sp,s8 ; |
b4: 8fbf0024 lw ra,36(sp) ; |
b8: 8fbe0020 lw s8,32(sp) ; |
bc: 27bd0028 addiu sp,sp,40 ; | epilog
c0: 03e00008 jr ra ; |
c4: 00000000 nop ; | branch delay slot
000000c8 <main>:
c8: 27bdfff8 addiu sp,sp,-8 ; |
cc: afbf0004 sw ra,4(sp) ; |
d0: afbe0000 sw s8,0(sp) ; | prolog
d4: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
; return 0;
; }
; output from psptoolchain-20111215-psp w/ gcc 4.9.3
00000000 <leaf_call>:
0: 27bdffd8 addiu sp,sp,-40
4: afbe0024 sw s8,36(sp)
8: 03a0f021 move s8,sp
c: afc40000 sw a0,0(s8)
10: afc50004 sw a1,4(s8)
14: afc60008 sw a2,8(s8)
18: afc7000c sw a3,12(s8)
1c: afc80010 sw t0,16(s8)
20: afc90014 sw t1,20(s8)
24: afca0018 sw t2,24(s8)
28: afcb001c sw t3,28(s8)
2c: 03c0e821 move sp,s8
30: 8fbe0024 lw s8,36(sp)
34: 27bd0028 addiu sp,sp,40
38: 03e00008 jr ra
3c: 00000000 nop
00000040 <nonleaf_call>:
40: 27bdffd0 addiu sp,sp,-48 ; |
44: afbf002c sw ra,44(sp) ; |
48: afbe0028 sw s8,40(sp) ; | prolog
4c: 03a0f021 move s8,sp ; / frame pointer (note: with offset to frame start, but static compared to sp)
50: afc40008 sw a0,8(s8) ; \
54: afc5000c sw a1,12(s8) ; |
58: afc60010 sw a2,16(s8) ; |
5c: afc70014 sw a3,20(s8) ; |
60: afc80018 sw t0,24(s8) ; | in args 0,1,2,3,4,5,6,7 -> temp space in local area
64: afc9001c sw t1,28(s8) ; |
68: afca0020 sw t2,32(s8) ; |
6c: afcb0024 sw t3,36(s8) ; |
70: 27bdff18 addiu sp,sp,-232 ; alloca(220) - with padding to guarantee alignment
74: 27a20008 addiu v0,sp,8 ; |
78: 24420007 addiu v0,v0,7 ; |
7c: 000210c2 srl v0,v0,0x3 ; | start of alloca()'d memory -> v1, by ...
80: 000210c0 sll v0,v0,0x3 ; | ... using v0 as helper to align to 8b
84: 00401821 move v1,v0 ; |
88: 2402004c li v0,76 ; 'L' -> v0, and...
8c: a0620000 sb v0,0(v1) ; ... store in local area (of alloca()'d space)
90: 8fc20034 lw v0,52(s8) ; arg 8 (fetched from prev frame's param area), and ...
94: afa20000 sw v0,0(sp) ; ... "pushed" onto stack
98: 8fc4000c lw a0,12(s8) ; |
9c: 8fc50010 lw a1,16(s8) ; |
a0: 8fc60014 lw a2,20(s8) ; |
a4: 8fc70018 lw a3,24(s8) ; | arg 0,1,2,3,4,5,6 (fetched from local area stored to above)
a8: 8fc8001c lw t0,28(s8) ; | (t0 = a4)
ac: 8fc90020 lw t1,32(s8) ; | (t1 = a5)
b0: 8fca0024 lw t2,36(s8) ; | (t2 = a6)
b4: 8fcb0030 lw t3,48(s8) ; | (t3 = a7)
b8: 0c000000 jal 0 <leaf_call> ; call and ret addr -> ra
bc: 00000000 nop ; branch delay slot
c0: 03c0e821 move sp,s8 ; |
c4: 8fbf002c lw ra,44(sp) ; |
c8: 8fbe0028 lw s8,40(sp) ; |
cc: 27bd0030 addiu sp,sp,48 ; | epilog
d0: 03e00008 jr ra ; |
d4: 00000000 nop ; | branch delay slot
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
; return 0;
; }
; output from psptoolchain-20111215-psp w/ gcc 4.9.3
00000000 <leaf_call>:
0: 27bdffd8 addiu sp,sp,-40
4: afbe0024 sw s8,36(sp)
8: 03a0f021 move s8,sp
c: afc40000 sw a0,0(s8)
10: afc50004 sw a1,4(s8)
14: afc60008 sw a2,8(s8)
18: afc7000c sw a3,12(s8)
1c: afc80010 sw t0,16(s8)
20: afc90014 sw t1,20(s8)
24: afca0018 sw t2,24(s8)
28: afcb001c sw t3,28(s8)
2c: 03c0e821 move sp,s8
30: 8fbe0024 lw s8,36(sp)
34: 27bd0028 addiu sp,sp,40
38: 03e00008 jr ra
3c: 00000000 nop
00000040 <nonleaf_call>:
40: 27bdffa0 addiu sp,sp,-96 ; | leaving 32b extra space adjacent to prev frame's param area for spilling
44: afbf003c sw ra,60(sp) ; |
48: afbe0038 sw s8,56(sp) ; | prolog
4c: 03a0f021 move s8,sp ; / frame pointer (note: with offset to frame start, but static compared to sp)
50: afc50044 sw a1,68(s8) ; \
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
b4: afc20010 sw v0,16(s8) ; /
b8: 8fc2002c lw v0,44(s8) ; \
bc: 24430004 addiu v1,v0,4 ; |
c0: afc3002c sw v1,44(s8) ; | in arg 4
c4: 8c420000 lw v0,0(v0) ; |
c8: afc20014 sw v0,20(s8) ; /
cc: 8fc2002c lw v0,44(s8) ; \
d0: 24430004 addiu v1,v0,4 ; |
d4: afc3002c sw v1,44(s8) ; | in arg 5
d8: 8c420000 lw v0,0(v0) ; |
dc: afc20018 sw v0,24(s8) ; /
e0: 8fc2002c lw v0,44(s8) ; \
e4: 24430004 addiu v1,v0,4 ; |
e8: afc3002c sw v1,44(s8) ; | in arg 6
ec: 8c420000 lw v0,0(v0) ; |
f0: afc2001c sw v0,28(s8) ; /
f4: 8fc2002c lw v0,44(s8) ; \
f8: 24430004 addiu v1,v0,4 ; |
fc: afc3002c sw v1,44(s8) ; | in arg 7
100: 8c420000 lw v0,0(v0) ; |
104: afc20020 sw v0,32(s8) ; /
108: 8fc2002c lw v0,44(s8) ; \
10c: 24430004 addiu v1,v0,4 ; |
110: afc3002c sw v1,44(s8) ; | in arg 8
114: 8c420000 lw v0,0(v0) ; |
118: afc20024 sw v0,36(s8) ; /
11c: 8fc2002c lw v0,44(s8) ; \
120: 24430004 addiu v1,v0,4 ; |
124: afc3002c sw v1,44(s8) ; | in arg 9
128: 8c420000 lw v0,0(v0) ; |
12c: afc20028 sw v0,40(s8) ; /
130: 27bdff18 addiu sp,sp,-232 ; alloca(220) - with padding to guarantee alignment
134: 27a20008 addiu v0,sp,8 ; |
138: 24420007 addiu v0,v0,7 ; |
13c: 000210c2 srl v0,v0,0x3 ; | start of alloca()'d memory -> v1, by ...
140: 000210c0 sll v0,v0,0x3 ; | ... using v0 as helper to align to 8b
144: 00401821 move v1,v0 ; |
148: 2402004c li v0,76 ; 'L' -> v0, and...
14c: a0620000 sb v0,0(v1) ; ... store in local area (of alloca()'d space)
150: 8fc20028 lw v0,40(s8) ; arg 8 (fetched from local area stored to above) and ...
154: afa20000 sw v0,0(sp) ; ... "pushed" onto stack
158: 8fc40008 lw a0,8(s8) ; |
15c: 8fc5000c lw a1,12(s8) ; |
160: 8fc60010 lw a2,16(s8) ; |
164: 8fc70014 lw a3,20(s8) ; | arg 0,1,2,3,4,5,6 (fetched from local area stored to above)
168: 8fc80018 lw t0,24(s8) ; | (t0 = a4)
16c: 8fc9001c lw t1,28(s8) ; | (t1 = a5)
170: 8fca0020 lw t2,32(s8) ; | (t2 = a6)
174: 8fcb0024 lw t3,36(s8) ; | (t3 = a7)
178: 0c000000 jal 0 <leaf_call> ; call and ret addr -> ra
17c: 00000000 nop ; branch delay slot
180: 03c0e821 move sp,s8 ; |
184: 8fbf003c lw ra,60(sp) ; |
188: 8fbe0038 lw s8,56(sp) ; |
18c: 27bd0060 addiu sp,sp,96 ; | epilog
190: 03e00008 jr ra ; |
194: 00000000 nop | branch delay slot
00000198 <main>:
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
00000000 <leaf_call>:
0: 27bdffd0 addiu sp,sp,-48
4: afbe002c sw s8,44(sp)
8: 03a0f021 move s8,sp
c: afc40000 sw a0,0(s8)
10: afc50004 sw a1,4(s8)
14: afc60008 sw a2,8(s8)
18: afc7000c sw a3,12(s8)
1c: e7cc0010 swc1 $f12,16(s8)
20: e7cd0014 swc1 $f13,20(s8)
24: afc80018 sw t0,24(s8)
28: afc9001c sw t1,28(s8)
2c: e7ce0020 swc1 $f14,32(s8)
30: 03c0e821 move sp,s8
34: 8fbe002c lw s8,44(sp)
38: 27bd0030 addiu sp,sp,48
3c: 03e00008 jr ra
40: 00000000 nop
00000044 <nonleaf_call>:
44: 27bdffa8 addiu sp,sp,-88 ; | leaving 32b extra space adjacent to prev frame's param area for spilling
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
54: afc5003c sw a1,60(s8) ; \
58: afc60040 sw a2,64(s8) ; |
5c: afc70044 sw a3,68(s8) ; |
60: afc80048 sw t0,72(s8) ; | in args 1,2,3,4,5 (spread out over 7 param regs) -> spill area in current frame (adjacent to prev frame's param area)
64: afc9004c sw t1,76(s8) ; | this one is just padding
68: afca0050 sw t2,80(s8) ; | |
6c: afcb0054 sw t3,84(s8) ; | | this is arg 5, passed as a double, spilled like integers
70: afc40028 sw a0,40(s8) ; in arg 0 -> temp space in local area
74: 27c20058 addiu v0,s8,88 ; v0 initialized to point ...
78: 2442ffe4 addiu v0,v0,-28 ; ... to start of spill area (88 - 28 = 60, where we spilled a1)
7c: afc20024 sw v0,36(s8) ; store read ptr in local area
80: 8fc20024 lw v0,36(s8) ; | get read pointer in v0 (pointless here, but part of following pattern) ...
84: 24430004 addiu v1,v0,4 ; | ... advance ...
88: afc30024 sw v1,36(s8) ; | in arg 1 ... store again ...
8c: 8c420000 lw v0,0(v0) ; | ... arg -> v0 (using pre-inc read location), then ...
90: afc20000 sw v0,0(s8) ; / ... write to local area on stack for later
94: 8fc20024 lw v0,36(s8) ; \
98: 24430004 addiu v1,v0,4 ; |
9c: afc30024 sw v1,36(s8) ; | in arg 2
a0: 8c420000 lw v0,0(v0) ; |
a4: afc20004 sw v0,4(s8) ; /
a8: 8fc20024 lw v0,36(s8) ; \
ac: 24430004 addiu v1,v0,4 ; |
b0: afc30024 sw v1,36(s8) ; | in arg 3
b4: 8c420000 lw v0,0(v0) ; |
b8: afc20008 sw v0,8(s8) ; /
bc: 8fc20024 lw v0,36(s8) ; \
c0: 24430004 addiu v1,v0,4 ; |
c4: afc30024 sw v1,36(s8) ; | in arg 4
c8: 8c420000 lw v0,0(v0) ; |
cc: afc2000c sw v0,12(s8) ; /
d0: 8fc20024 lw v0,36(s8) ; \ get read ptr in v0
d4: 24430007 addiu v1,v0,7 ; | |
d8: 2402fff8 li v0,-8 ; | | align
dc: 00621024 and v0,v1,v0 ; | |
e0: 24430008 addiu v1,v0,8 ; | advance read ptr to point to double
e4: afc30024 sw v1,36(s8) ; | restore read ptr
e8: 8c430004 lw v1,4(v0) ; | in arg 5 |
ec: 8c420000 lw v0,0(v0) ; | | load both parts of double ...
f0: 00402021 move a0,v0 ; | | ... and store in a{0,1} pair (used to pass doubles, used in next call)
f4: 00602821 move a1,v1 ; | /
f8: 0c000000 jal 0 <leaf_call> ; | \ call to cast double to float, returned in f0
fc: 00000000 nop ; | | NOTE: not a call to leaf_call() (objdump done from .o file, not finally linked executable)
100: e7c00010 swc1 $f0,16(s8) ; / write float to local area on stack for later
104: 8fc20024 lw v0,36(s8) ; \
108: 24430007 addiu v1,v0,7 ; |
10c: 2402fff8 li v0,-8 ; |
110: 00621024 and v0,v1,v0 ; |
114: 24430008 addiu v1,v0,8 ; |
118: afc30024 sw v1,36(s8) ; |
11c: 8c430004 lw v1,4(v0) ; | in arg 6
120: 8c420000 lw v0,0(v0) ; |
124: 00402021 move a0,v0 ; |
128: 00602821 move a1,v1 ; |
12c: 0c000000 jal 0 <leaf_call> ; |
130: 00000000 nop ; |
134: e7c00014 swc1 $f0,20(s8) ; /
138: 8fc20024 lw v0,36(s8) ; \
13c: 24430004 addiu v1,v0,4 ; |
140: afc30024 sw v1,36(s8) ; | in arg 7
144: 8c420000 lw v0,0(v0) ; |
148: afc20018 sw v0,24(s8) ; /
14c: 8fc20024 lw v0,36(s8) ; \
150: 24430004 addiu v1,v0,4 ; |
154: afc30024 sw v1,36(s8) ; | in arg 8
158: 8c420000 lw v0,0(v0) ; |
15c: afc2001c sw v0,28(s8) ; /
160: 8fc20024 lw v0,36(s8) ; \
164: 24430007 addiu v1,v0,7 ; |
168: 2402fff8 li v0,-8 ; |
16c: 00621024 and v0,v1,v0 ; |
170: 24430008 addiu v1,v0,8 ; |
174: afc30024 sw v1,36(s8) ; |
178: 8c430004 lw v1,4(v0) ; | in arg 9
17c: 8c420000 lw v0,0(v0) ; |
180: 00402021 move a0,v0 ; |
184: 00602821 move a1,v1 ; |
188: 0c000000 jal 0 <leaf_call> ; |
18c: 00000000 nop ; |
190: e7c00020 swc1 $f0,32(s8) ; /
194: 27bdff18 addiu sp,sp,-232 ; alloca(220) - with padding to guarantee alignment
198: 03a01021 move v0,sp ; |
19c: 24420007 addiu v0,v0,7 ; |
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
1a4: 000210c0 sll v0,v0,0x3 ; | ... using v0 as helper to align to 8b
1a8: 00401821 move v1,v0 ; |
1ac: 2402004c li v0,76 ; 'L' -> v0, and...
1b0: a0620000 sb v0,0(v1) ; ... store in local area (of alloca()'d space)
1b4: 8fc40000 lw a0,0(s8) ; |
1b8: 8fc50004 lw a1,4(s8) ; |
1bc: 8fc60008 lw a2,8(s8) ; | arg 0,1,2,3 (int args, fetched from local area stored to above)
1c0: 8fc7000c lw a3,12(s8) ; |
1c4: c7cc0010 lwc1 $f12,16(s8) ; arg 4 (float, fetched from local area stored to above)
1c8: c7cd0014 lwc1 $f13,20(s8) ; arg 5 (float, fetched from local area stored to above)
1cc: 8fc80018 lw t0,24(s8) ; arg 6 (int, fetched from local area stored to above, t0 = a4)
1d0: 8fc9001c lw t1,28(s8) ; arg 7 (int, fetched from local area stored to above, t1 = a5)
1d4: c7ce0020 lwc1 $f14,32(s8) ; arg 9 (float, fetched from local area stored to above)
1d8: 0c000000 jal 0 <leaf_call> ; call and ret addr -> ra
1dc: 00000000 nop ; branch delay slot
1e0: 03c0e821 move sp,s8 ; |
1e4: 8fbf0034 lw ra,52(sp) ; |
1e8: 8fbe0030 lw s8,48(sp) ; |
1ec: 27bd0058 addiu sp,sp,88 ; | epilog
1f0: 03e00008 jr ra ; |
1f4: 00000000 nop ; | branch delay slot
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
0: 27bdffd0 addiu sp,sp,-48
4: afbe002c sw s8,44(sp)
8: afb00028 sw s0,40(sp)
c: 03a0f021 move s8,sp
10: afc40010 sw a0,16(s8)
14: afc50014 sw a1,20(s8)
18: afc60018 sw a2,24(s8)
1c: afc7001c sw a3,28(s8)
20: 01008021 move s0,t0
24: afc90020 sw t1,32(s8)
28: afca0024 sw t2,36(s8)
2c: 8e050000 lw a1,0(s0)
30: 8e040004 lw a0,4(s0)
34: 8e030008 lw v1,8(s0)
38: 8e02000c lw v0,12(s0)
3c: afc50000 sw a1,0(s8)
40: afc40004 sw a0,4(s8)
44: afc30008 sw v1,8(s8)
48: afc2000c sw v0,12(s8)
4c: 03c0e821 move sp,s8
50: 8fbe002c lw s8,44(sp)
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
40: 8e630004 lw v1,4(s3)
44: 8e620008 lw v0,8(s3)
48: afc40030 sw a0,48(s8)
4c: afc30034 sw v1,52(s8)
50: afc20038 sw v0,56(s8)
54: 8e250000 lw a1,0(s1)
58: 8e240004 lw a0,4(s1)
5c: 8e230008 lw v1,8(s1)
60: 8e22000c lw v0,12(s1)
64: afc50020 sw a1,32(s8)
68: afc40024 sw a0,36(s8)
6c: afc30028 sw v1,40(s8)
70: afc2002c sw v0,44(s8)
74: 8e440000 lw a0,0(s2)
78: 8e430004 lw v1,4(s2)
7c: 8e420008 lw v0,8(s2)
80: afc40010 sw a0,16(s8)
84: afc30014 sw v1,20(s8)
88: afc20018 sw v0,24(s8)
8c: 8e050000 lw a1,0(s0)
90: 8e040004 lw a0,4(s0)
94: 8e030008 lw v1,8(s0)
98: 8e02000c lw v0,12(s0)
9c: afc50000 sw a1,0(s8)
a0: afc40004 sw a0,4(s8)
a4: afc30008 sw v1,8(s8)
a8: afc2000c sw v0,12(s8)
ac: 03c0e821 move sp,s8
b0: 8fbe0064 lw s8,100(sp)
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
12c: 8e240004 lw a0,4(s1)
130: 8e230008 lw v1,8(s1)
134: 8e22000c lw v0,12(s1)
138: afc50028 sw a1,40(s8)
13c: afc4002c sw a0,44(s8)
140: afc30030 sw v1,48(s8)
144: afc20034 sw v0,52(s8)
148: 8e440000 lw a0,0(s2)
14c: 8e430004 lw v1,4(s2)
150: 8e420008 lw v0,8(s2)
154: afc40018 sw a0,24(s8)
158: afc3001c sw v1,28(s8)
15c: afc20020 sw v0,32(s8)
160: 8e050000 lw a1,0(s0)
164: 8e040004 lw a0,4(s0)
168: 8e030008 lw v1,8(s0)
16c: 8e02000c lw v0,12(s0)
170: afc50008 sw a1,8(s8)
174: afc4000c sw a0,12(s8)
178: afc30010 sw v1,16(s8)
17c: afc20014 sw v0,20(s8)
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
228: afc20040 sw v0,64(s8)
22c: 8f820008 lw v0,8(gp)
230: 8f83000c lw v1,12(gp)
234: afc20028 sw v0,40(s8)
238: afc3002c sw v1,44(s8)
23c: 24020006 li v0,6
240: 00001821 move v1,zero
244: afc20030 sw v0,48(s8)
248: afc30034 sw v1,52(s8)
24c: 24020009 li v0,9
250: afc20018 sw v0,24(s8)
254: 2402000a li v0,10
258: afc2001c sw v0,28(s8)
25c: 8f820010 lw v0,16(gp)
260: afc20020 sw v0,32(s8)
264: 8f820018 lw v0,24(gp)
268: 8f83001c lw v1,28(gp)
26c: afc20008 sw v0,8(s8)
270: afc3000c sw v1,12(s8)
274: 2402000d li v0,13
278: 00001821 move v1,zero
27c: afc20010 sw v0,16(s8)
280: afc30014 sw v1,20(s8)
284: 27c60038 addiu a2,s8,56
288: 27c70028 addiu a3,s8,40
28c: 27c30018 addiu v1,s8,24
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
ac: 0c000000 jal 0 <f0>
b0: 00000000 nop
b4: a3c20000 sb v0,0(s8)
b8: 27c20008 addiu v0,s8,8
bc: 00402021 move a0,v0
c0: 0c000000 jal 0 <f0>
c4: 00000000 nop
c8: 8fc20010 lw v0,16(s8)
cc: 8fc30014 lw v1,20(s8)
d0: 00402021 move a0,v0
d4: 8fc20018 lw v0,24(s8)
d8: 8fc3001c lw v1,28(s8)
dc: 00821021 addu v0,a0,v0
e0: 8fc30028 lw v1,40(s8)
e4: 00431021 addu v0,v0,v1
e8: 83c30000 lb v1,0(s8)
ec: 00431021 addu v0,v0,v1
f0: 03c0e821 move sp,s8
f4: 8fbf0034 lw ra,52(sp)
f8: 8fbe0030 lw s8,48(sp)
fc: 27bd0038 addiu sp,sp,56
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
54: afc40028 sw a0,40(s8)
58: afc3002c sw v1,44(s8)
5c: afc20030 sw v0,48(s8)
60: 8e250000 lw a1,0(s1)
64: 8e240004 lw a0,4(s1)
68: 8e230008 lw v1,8(s1)
6c: 8e22000c lw v0,12(s1)
70: afc50018 sw a1,24(s8)
74: afc4001c sw a0,28(s8)
78: afc30020 sw v1,32(s8)
7c: afc20024 sw v0,36(s8)
80: 8e070000 lw a3,0(s0)
84: 8e060004 lw a2,4(s0)
88: 8e050008 lw a1,8(s0)
8c: 8e04000c lw a0,12(s0)
90: 8e030010 lw v1,16(s0)
94: 8e020014 lw v0,20(s0)
98: afc70000 sw a3,0(s8)
9c: afc60004 sw a2,4(s8)
a0: afc50008 sw a1,8(s8)
a4: afc4000c sw a0,12(s8)
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
ec: 8f820004 lw v0,4(gp)
f0: afc2003c sw v0,60(s8)
f4: 8f820008 lw v0,8(gp)
f8: afc20040 sw v0,64(s8)
fc: 8f82000c lw v0,12(gp)
100: afc20030 sw v0,48(s8)
104: 8f820010 lw v0,16(gp)
108: afc20034 sw v0,52(s8)
10c: 8f820014 lw v0,20(gp)
110: afc20038 sw v0,56(s8)
114: 8f820018 lw v0,24(gp)
118: 8f83001c lw v1,28(gp)
11c: afc20028 sw v0,40(s8)
120: afc3002c sw v1,44(s8)
124: 8f820020 lw v0,32(gp)
128: 8f830024 lw v1,36(gp)
12c: afc20018 sw v0,24(s8)
130: afc3001c sw v1,28(s8)
134: 8f820028 lw v0,40(gp)
138: 8f83002c lw v1,44(gp)
13c: afc20020 sw v0,32(s8)
140: afc30024 sw v1,36(s8)
144: 8f820030 lw v0,48(gp)
148: 8f830034 lw v1,52(gp)
14c: afc20000 sw v0,0(s8)
150: afc30004 sw v1,4(s8)
154: 8f820038 lw v0,56(gp)
158: 8f83003c lw v1,60(gp)
15c: afc20008 sw v0,8(s8)
160: afc3000c sw v1,12(s8)
164: 8f820040 lw v0,64(gp)
168: 8f830044 lw v1,68(gp)
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
; 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}});
; return 0;
; }
; output from psptoolchain-20111215-psp w/ gcc 4.9.3
00000000 <leaf_call>:
0: 27bdffd8 addiu sp,sp,-40
4: afbe0024 sw s8,36(sp)
8: 03a0f021 move s8,sp
c: a7c40000 sh a0,0(s8)
10: a3c50004 sb a1,4(s8)
14: a7c60008 sh a2,8(s8)
18: afc7000c sw a3,12(s8)
1c: e7cc0010 swc1 $f12,16(s8)
20: afc80018 sw t0,24(s8)
24: afc9001c sw t1,28(s8)
28: afca0014 sw t2,20(s8)
2c: 03c0e821 move sp,s8
30: 8fbe0024 lw s8,36(sp)
34: 27bd0028 addiu sp,sp,40
38: 03e00008 jr ra
3c: 00000000 nop
00000040 <main>:
40: 27bdffd0 addiu sp,sp,-48
44: afbf002c sw ra,44(sp)
48: afbe0028 sw s8,40(sp)
4c: 03a0f021 move s8,sp
50: a3c00020 sb zero,32(s8)
54: 24020001 li v0,1
58: a3c20021 sb v0,33(s8)
5c: 24020002 li v0,2
60: a3c2001c sb v0,28(s8)
64: 24020003 li v0,3
68: a7c20018 sh v0,24(s8)
6c: 24020004 li v0,4
70: afc20014 sw v0,20(s8)
74: 8f820000 lw v0,0(gp)
78: afc20010 sw v0,16(s8)
7c: 8f820008 lw v0,8(gp)
80: 8f83000c lw v1,12(gp)
84: afc20008 sw v0,8(s8)
88: afc3000c sw v1,12(s8)
8c: 24020007 li v0,7
90: a3c20000 sb v0,0(s8)
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
0: 27bdfff0 addiu sp,sp,-16
4: afbe000c sw s8,12(sp)
8: 03a0f021 move s8,sp
c: afc40000 sw a0,0(s8)
10: 03c0e821 move sp,s8
14: 8fbe000c lw s8,12(sp)
18: 27bd0010 addiu sp,sp,16
1c: 03e00008 jr ra
20: 00000000 nop
00000024 <f2>:
24: 27bdfff0 addiu sp,sp,-16
28: afbe000c sw s8,12(sp)
2c: 03a0f021 move s8,sp
30: afc40000 sw a0,0(s8)
34: 03c0e821 move sp,s8
38: 8fbe000c lw s8,12(sp)
3c: 27bd0010 addiu sp,sp,16
40: 03e00008 jr ra
44: 00000000 nop
dyncall/doc/disas_examples/mips.eabi.disas view on Meta::CPAN
0: 27bdfff8 addiu sp,sp,-8
4: afbe0004 sw s8,4(sp)
8: 03a0f021 move s8,sp
c: 00001021 move v0,zero
10: 03c0e821 move sp,s8
14: 8fbe0004 lw s8,4(sp)
18: 27bd0008 addiu sp,sp,8
1c: 03e00008 jr ra
20: 00000000 nop
00000024 <_Z2f2v>:
24: 27bdfff0 addiu sp,sp,-16 ;
28: afbf000c sw ra,12(sp) ;
2c: afbe0008 sw s8,8(sp) ;
30: 03a0f021 move s8,sp ;
34: afc40000 sw a0,0(s8) ;
38: 8fc40000 lw a0,0(s8) ;
3c: 0c000000 jal 0 <f1> ;
40: 00000000 nop ;
44: 8fc20000 lw v0,0(s8) ; retval, return (hidden) passed-in ptr to space for retval
48: 03c0e821 move sp,s8 ;
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
80: 000210c0 sll v0,v0,0x3 ; |
84: afc20028 sw v0,40(s8) ; |
88: 8fc30028 lw v1,40(s8) ; |
8c: 2402004c li v0,76 ; 'L' -> v0, and...
90: a0620000 sb v0,0(v1) ; ... store in local area (of alloca()'d space)
94: 8fc2004c lw v0,76(s8) ; arg 4 (fetched from prev frame's param area), and ...
98: afa20010 sw v0,16(sp) ; ... "pushed" onto stack
9c: 8fc20050 lw v0,80(s8) ; arg 5 (fetched from prev frame's param area), and ...
a0: afa20014 sw v0,20(sp) ; ... "pushed" onto stack
a4: 8fc20054 lw v0,84(s8) ; arg 6 (fetched from prev frame's param area), and ...
a8: afa20018 sw v0,24(sp) ; ... "pushed" onto stack
ac: 8fc4003c lw a0,60(s8) ; arg 0 (fetched from spill area of prev frame)
b0: 8fc50040 lw a1,64(s8) ; arg 1 (fetched from spill area of prev frame)
b4: 8fc60044 lw a2,68(s8) ; arg 2 (fetched from spill area of prev frame)
b8: 8fc70048 lw a3,72(s8) ; arg 3 (fetched from prev frame's param area)
bc: 8f990000 lw t9,0(gp) ; func to call -> t9
c0: 0320f809 jalr t9 ; call and ret addr -> ra
c4: 00000000 nop ; branch delay slot
c8: 8fdc0020 lw gp,32(s8) ; |
cc: 03c0e821 move sp,s8 ; |
d0: 8fbf0034 lw ra,52(sp) ; |
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
ec: 27bdffd0 addiu sp,sp,-48 ; | prolog
f0: afbf002c sw ra,44(sp) ; |
f4: afbe0028 sw s8,40(sp) ; |
f8: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
fc: afbc0020 sw gp,32(sp) ; |
100: 24020004 li v0,4 ; arg 4, and ...
104: afa20010 sw v0,16(sp) ; ... "pushed" onto stack
108: 24020005 li v0,5 ; arg 5, and ...
10c: afa20014 sw v0,20(sp) ; ... "pushed" onto stack
110: 24020006 li v0,6 ; arg 6, and ...
114: afa20018 sw v0,24(sp) ; ... "pushed" onto stack
118: 24020007 li v0,7 ; arg 7, and ...
11c: afa2001c sw v0,28(sp) ; ... "pushed" onto stack
120: 00002021 move a0,zero ; arg 0
124: 24050001 li a1,1 ; arg 1
128: 24060002 li a2,2 ; arg 2
12c: 24070003 li a3,3 ; arg 3
130: 8f990000 lw t9,0(gp) ; func to call -> t9
134: 0320f809 jalr t9 ; call and ret addr -> ra
138: 00000000 nop ; branch delay slot
13c: 8fdc0020 lw gp,32(s8) ; |
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
88: 2402004c li v0,76
8c: a0620000 sb v0,0(v1)
90: 8fc2004c lw v0,76(s8)
94: 00000000 nop
98: afa20010 sw v0,16(sp)
9c: 8fc20050 lw v0,80(s8)
a0: 00000000 nop
a4: afa20014 sw v0,20(sp)
a8: 8fc20054 lw v0,84(s8)
ac: 00000000 nop
b0: afa20018 sw v0,24(sp)
b4: 8fc4003c lw a0,60(s8)
b8: 8fc50040 lw a1,64(s8)
bc: 8fc60044 lw a2,68(s8)
c0: 8fc70048 lw a3,72(s8)
c4: 8f990000 lw t9,0(gp)
c8: 00000000 nop
cc: 0320f809 jalr t9
d0: 00000000 nop
d4: 8fdc0020 lw gp,32(s8)
d8: 03c0e821 move sp,s8
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
fc: 27bdffd0 addiu sp,sp,-48
100: afbf002c sw ra,44(sp)
104: afbe0028 sw s8,40(sp)
108: 03a0f021 move s8,sp
10c: afbc0020 sw gp,32(sp)
110: 24020004 li v0,4
114: afa20010 sw v0,16(sp)
118: 24020005 li v0,5
11c: afa20014 sw v0,20(sp)
120: 24020006 li v0,6
124: afa20018 sw v0,24(sp)
128: 24020007 li v0,7
12c: afa2001c sw v0,28(sp)
130: 00002021 move a0,zero
134: 24050001 li a1,1
138: 24060002 li a2,2
13c: 24070003 li a3,3
140: 8f990000 lw t9,0(gp)
144: 00000000 nop
148: 0320f809 jalr t9
14c: 00000000 nop
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
84: 00000000 nop
88: 8fdc0028 lw gp,40(s8)
8c: 2402004c li v0,76
90: a3c20030 sb v0,48(s8)
94: 8fc200b8 lw v0,184(s8)
98: 8fc300bc lw v1,188(s8)
9c: 8fc400c0 lw a0,192(s8)
a0: 8fc500c4 lw a1,196(s8)
a4: afa20010 sw v0,16(sp)
a8: afa30014 sw v1,20(sp)
ac: afa40018 sw a0,24(sp)
b0: afa5001c sw a1,28(sp)
b4: 8fc200c8 lw v0,200(s8)
b8: afa20020 sw v0,32(sp)
bc: 8fc200cc lw v0,204(s8)
c0: afa20024 sw v0,36(sp)
c4: 8fc400a4 lw a0,164(s8)
c8: 8fc500a8 lw a1,168(s8)
cc: 8fc600ac lw a2,172(s8)
d0: 8fc700b0 lw a3,176(s8)
d4: 8f990000 lw t9,0(gp)
d8: 0320f809 jalr t9
dc: 00000000 nop
e0: 8fdc0028 lw gp,40(s8)
e4: 03c0e821 move sp,s8
e8: 8fbf009c lw ra,156(sp)
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
148: afc20038 sw v0,56(s8) ; \
14c: afc3003c sw v1,60(s8) ; | ... and write to local area
150: afc40040 sw a0,64(s8) ; |
154: afc50044 sw a1,68(s8) ; /
158: 24020004 li v0,4 ; push arg 4 ...
15c: afa20010 sw v0,16(sp) ; ... onto stack
160: 8fc20038 lw v0,56(s8) ; \
164: 8fc3003c lw v1,60(s8) ; |
168: 8fc40040 lw a0,64(s8) ; | prep arg 5 (struct A) ...
16c: 8fc50044 lw a1,68(s8) ; /
170: afa20018 sw v0,24(sp) ; \
174: afa3001c sw v1,28(sp) ; | ... and push onto stack
178: afa40020 sw a0,32(sp) ; |
17c: afa50024 sw a1,36(sp) ; /
180: 24020008 li v0,8 ; push arg 6 ...
184: afa20028 sw v0,40(sp) ; ... onto stack
188: 24020009 li v0,9 ; push arg 7 ...
18c: afa2002c sw v0,44(sp) ; ... onto stack
190: 00002021 move a0,zero ; arg 0
194: 24050001 li a1,1 ; arg 1
198: 24060002 li a2,2 ; arg 2
19c: 24070003 li a3,3 ; arg 3
1a0: 8f990000 lw t9,0(gp) ; func to call -> t9
1a4: 0320f809 jalr t9 ; call and ret addr -> ra
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
84: 00000000 nop
88: 8fdc0028 lw gp,40(s8)
8c: 2402004c li v0,76
90: a3c20030 sb v0,48(s8)
94: 8fc200b8 lw v0,184(s8)
98: 8fc300bc lw v1,188(s8)
9c: 8fc400c0 lw a0,192(s8)
a0: 8fc500c4 lw a1,196(s8)
a4: afa20010 sw v0,16(sp)
a8: afa30014 sw v1,20(sp)
ac: afa40018 sw a0,24(sp)
b0: afa5001c sw a1,28(sp)
b4: 8fc200c8 lw v0,200(s8)
b8: afa20020 sw v0,32(sp)
bc: 8fc200cc lw v0,204(s8)
c0: afa20024 sw v0,36(sp)
c4: 8fc400a4 lw a0,164(s8)
c8: 8fc500a8 lw a1,168(s8)
cc: 8fc600ac lw a2,172(s8)
d0: 8fc700b0 lw a3,176(s8)
d4: 8f990000 lw t9,0(gp)
d8: 0320f809 jalr t9
dc: 00000000 nop
e0: 8fdc0028 lw gp,40(s8)
e4: 03c0e821 move sp,s8
e8: 8fbf009c lw ra,156(sp)
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
148: afc20038 sw v0,56(s8) ; \
14c: afc3003c sw v1,60(s8) ; | ... and write to local area
150: afc40040 sw a0,64(s8) ; |
154: afc50044 sw a1,68(s8) ; /
158: 24020004 li v0,4 ; push arg 4 ...
15c: afa20010 sw v0,16(sp) ; ... onto stack
160: 8fc20038 lw v0,56(s8) ; \
164: 8fc3003c lw v1,60(s8) ; |
168: 8fc40040 lw a0,64(s8) ; | prep arg 5 (struct A) ...
16c: 8fc50044 lw a1,68(s8) ; /
170: afa20018 sw v0,24(sp) ; \
174: afa3001c sw v1,28(sp) ; | ... and push onto stack
178: afa40020 sw a0,32(sp) ; |
17c: afa50024 sw a1,36(sp) ; /
180: 24020008 li v0,8 ; push arg 6 ...
184: afa20028 sw v0,40(sp) ; ... onto stack
188: 24020009 li v0,9 ; push arg 7 ...
18c: afa2002c sw v0,44(sp) ; ... onto stack
190: 00002021 move a0,zero ; arg 0
194: 24050001 li a1,1 ; arg 1
198: 24060002 li a2,2 ; arg 2
19c: 24070003 li a3,3 ; arg 3
1a0: 8f990000 lw t9,0(gp) ; func to call -> t9
1a4: 0320f809 jalr t9 ; call and ret addr -> ra
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
84: 00000000 nop
88: 8fdc0050 lw gp,80(s8)
8c: 2402004c li v0,76
90: a3c20058 sb v0,88(s8)
94: 8fc200e0 lw v0,224(s8)
98: 8fc300e4 lw v1,228(s8)
9c: 8fc400e8 lw a0,232(s8)
a0: 8fc500ec lw a1,236(s8)
a4: afa20010 sw v0,16(sp)
a8: afa30014 sw v1,20(sp)
ac: afa40018 sw a0,24(sp)
b0: afa5001c sw a1,28(sp)
b4: 8fc200f0 lw v0,240(s8)
b8: afa20020 sw v0,32(sp)
bc: 8fc200f4 lw v0,244(s8)
c0: afa20024 sw v0,36(sp)
c4: 8fc200f8 lw v0,248(s8)
c8: 8fc300fc lw v1,252(s8)
cc: 8fc40100 lw a0,256(s8)
d0: afa20028 sw v0,40(sp)
d4: afa3002c sw v1,44(sp)
d8: afa40030 sw a0,48(sp)
dc: 8fc20108 lw v0,264(s8)
e0: 8fc3010c lw v1,268(s8)
e4: 8fc40110 lw a0,272(s8)
e8: 8fc50114 lw a1,276(s8)
ec: afa20038 sw v0,56(sp)
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
228: 24a50000 addiu a1,a1,0 ; | |
22c: 8ca5000c lw a1,12(a1) ; / |
230: afc20060 sw v0,96(s8) ; \
234: afc30064 sw v1,100(s8) ; |
238: afc40068 sw a0,104(s8) ; | ... and write to local area
23c: afc5006c sw a1,108(s8) ; /
240: 8fc20080 lw v0,128(s8) ; \
244: 8fc30084 lw v1,132(s8) ; |
248: 8fc40088 lw a0,136(s8) ; |
24c: 8fc5008c lw a1,140(s8) ; |
250: afa20018 sw v0,24(sp) ; | | d
254: afa3001c sw v1,28(sp) ; | arg 3 (first struct B) /
258: afa40020 sw a0,32(sp) ; | \
25c: afa50024 sw a1,36(sp) ; / | l
260: 24020007 li v0,7 ; \
264: afa20028 sw v0,40(sp) ; / arg 4
268: 24020008 li v0,8 ; \
26c: afa2002c sw v0,44(sp) ; / arg 5
270: 8fc20070 lw v0,112(s8) ; \
274: 8fc30074 lw v1,116(s8) ; |
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)
27c: afa20030 sw v0,48(sp) ; | i
280: afa30034 sw v1,52(sp) ; | j
284: afa40038 sw a0,56(sp) ; / f
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
84: 00000000 nop
88: 8fdc0050 lw gp,80(s8)
8c: 2402004c li v0,76
90: a3c20058 sb v0,88(s8)
94: 8fc200e0 lw v0,224(s8)
98: 8fc300e4 lw v1,228(s8)
9c: 8fc400e8 lw a0,232(s8)
a0: 8fc500ec lw a1,236(s8)
a4: afa20010 sw v0,16(sp)
a8: afa30014 sw v1,20(sp)
ac: afa40018 sw a0,24(sp)
b0: afa5001c sw a1,28(sp)
b4: 8fc200f0 lw v0,240(s8)
b8: afa20020 sw v0,32(sp)
bc: 8fc200f4 lw v0,244(s8)
c0: afa20024 sw v0,36(sp)
c4: 8fc200f8 lw v0,248(s8)
c8: 8fc300fc lw v1,252(s8)
cc: 8fc40100 lw a0,256(s8)
d0: afa20028 sw v0,40(sp)
d4: afa3002c sw v1,44(sp)
d8: afa40030 sw a0,48(sp)
dc: 8fc20108 lw v0,264(s8)
e0: 8fc3010c lw v1,268(s8)
e4: 8fc40110 lw a0,272(s8)
e8: 8fc50114 lw a1,276(s8)
ec: afa20038 sw v0,56(sp)
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
228: 24a50000 addiu a1,a1,0 ; | |
22c: 8ca5000c lw a1,12(a1) ; / |
230: afc20060 sw v0,96(s8) ; \
234: afc30064 sw v1,100(s8) ; |
238: afc40068 sw a0,104(s8) ; | ... and write to local area
23c: afc5006c sw a1,108(s8) ; /
240: 8fc20080 lw v0,128(s8) ; \
244: 8fc30084 lw v1,132(s8) ; |
248: 8fc40088 lw a0,136(s8) ; |
24c: 8fc5008c lw a1,140(s8) ; |
250: afa20018 sw v0,24(sp) ; | | d
254: afa3001c sw v1,28(sp) ; | arg 3 (first struct B) /
258: afa40020 sw a0,32(sp) ; | \
25c: afa50024 sw a1,36(sp) ; / | l
260: 24020007 li v0,7 ; \
264: afa20028 sw v0,40(sp) ; / arg 4
268: 24020008 li v0,8 ; \
26c: afa2002c sw v0,44(sp) ; / arg 5
270: 8fc20070 lw v0,112(s8) ; \
274: 8fc30074 lw v1,116(s8) ; |
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)
27c: afa20030 sw v0,48(sp) ; | i
280: afa30034 sw v1,52(sp) ; | j
284: afa40038 sw a0,56(sp) ; / f
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
118: 8fdc0010 lw gp,16(s8) ; restore gp @@@ unsure why?
11c: 8fc3002c lw v1,44(s8) ; | |
120: 8fc20028 lw v0,40(s8) ; | | b.j -> v0 & v1
124: 00602021 move a0,v1 ; | a0 = (int)b.j
128: 8fc30034 lw v1,52(s8) ; | |
12c: 8fc20030 lw v0,48(s8) ; | | b.j -> v0 & v1
130: 00601021 move v0,v1 ; | return value v0 = (int)b.k
134: 00821821 addu v1,a0,v0 ; | (int)b.j + (int)b.k -> v1
138: 8fc20040 lw v0,64(s8) ; | b.m -> v0
13c: 00621821 addu v1,v1,v0 ; | ((int)b.j + (int)b.k) + b.m -> v1
140: 83c20018 lb v0,24(s8) ; | s.x -> v0
144: 00621021 addu v0,v1,v0 ; / (((int)b.j + (int)b.k) + b.m) + s.x -> v0
148: 03c0e821 move sp,s8 ; \
14c: 8fbf004c lw ra,76(sp) ; |
150: 8fbe0048 lw s8,72(sp) ; | epilog
154: 03e00008 jr ra ; |
158: 27bd0050 addiu sp,sp,80 ; |
15c: 00000000 nop ; |
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
118: 8fdc0010 lw gp,16(s8)
11c: 8fc3002c lw v1,44(s8)
120: 8fc20028 lw v0,40(s8)
124: 00602021 move a0,v1
128: 8fc30034 lw v1,52(s8)
12c: 8fc20030 lw v0,48(s8)
130: 00601021 move v0,v1
134: 00821821 addu v1,a0,v0
138: 8fc20040 lw v0,64(s8)
13c: 00621821 addu v1,v1,v0
140: 83c20018 lb v0,24(s8)
144: 00621021 addu v0,v1,v0
148: 03c0e821 move sp,s8
14c: 8fbf004c lw ra,76(sp)
150: 8fbe0048 lw s8,72(sp)
154: 03e00008 jr ra
158: 27bd0050 addiu sp,sp,80
15c: 00000000 nop
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
b4: afc40088 sw a0,136(s8) ; / c
b8: 8f830000 lw v1,0(gp) ; \
bc: 24630028 addiu v1,v1,40 ; |
c0: 8c630004 lw v1,4(v1) ; |
c4: 8f820000 lw v0,0(gp) ; | prep local struct D data ...
c8: 24420028 addiu v0,v0,40 ; |
cc: 8c420000 lw v0,0(v0) ; /
d0: afc3007c sw v1,124(s8) ; \ ... and write to local area
d4: afc20078 sw v0,120(s8) ; /
d8: 8f820000 lw v0,0(gp) ; \
dc: 24420018 addiu v0,v0,24 ; |
e0: 8c420000 lw v0,0(v0) ; |
e4: 8f830000 lw v1,0(gp) ; |
e8: 24630018 addiu v1,v1,24 ; |
ec: 8c630004 lw v1,4(v1) ; | prep local struct E data ...
f0: 8f840000 lw a0,0(gp) ; |
f4: 24840018 addiu a0,a0,24 ; |
f8: 8c840008 lw a0,8(a0) ; |
fc: 8f850000 lw a1,0(gp) ; |
100: 24a50018 addiu a1,a1,24 ; |
104: 8ca5000c lw a1,12(a1) ; /
108: afc20068 sw v0,104(s8) ; \ | a
10c: afc3006c sw v1,108(s8) ; | ... and write to local area /
110: afc40070 sw a0,112(s8) ; | \
114: afc50074 sw a1,116(s8) ; / | b
118: 8f820000 lw v0,0(gp) ; \
11c: 24420000 addiu v0,v0,0 ; |
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
15c: 8ce70014 lw a3,20(a3) ; /
160: afc20050 sw v0,80(s8) ; \ | a
164: afc30054 sw v1,84(s8) ; | /
168: afc40058 sw a0,88(s8) ; | \ b
16c: afc5005c sw a1,92(s8) ; | ... and write to local area /
170: afc60060 sw a2,96(s8) ; | \
174: afc70064 sw a3,100(s8) ; / | c
178: 8fc3007c lw v1,124(s8) ; \
17c: 8fc20078 lw v0,120(s8) ; |
180: afa3001c sw v1,28(sp) ; | arg 3 (struct D)
184: afa20018 sw v0,24(sp) ; /
188: 8fc20068 lw v0,104(s8) ; \
18c: 8fc3006c lw v1,108(s8) ; |
190: 8fc40070 lw a0,112(s8) ; |
194: 8fc50074 lw a1,116(s8) ; |
198: afa20020 sw v0,32(sp) ; | arg 4 (struct E)
19c: afa30024 sw v1,36(sp) ; |
1a0: afa40028 sw a0,40(sp) ; |
1a4: afa5002c sw a1,44(sp) ; /
1a8: 8fc20050 lw v0,80(s8) ; \
1ac: 8fc30054 lw v1,84(s8) ; |
1b0: 8fc40058 lw a0,88(s8) ; |
1b4: 8fc5005c lw a1,92(s8) ; |
1b8: 8fc60060 lw a2,96(s8) ; |
1bc: 8fc70064 lw a3,100(s8) ; |
1c0: afa20030 sw v0,48(sp) ; | arg 5 (struct F)
1c4: afa30034 sw v1,52(sp) ; |
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
a4: 24840030 addiu a0,a0,48 ; |
a8: 8c840008 lw a0,8(a0) ; /
ac: afc20080 sw v0,128(s8) ; \ a
b0: afc30084 sw v1,132(s8) ; | ... and write to local area b
b4: afc40088 sw a0,136(s8) ; / c
b8: 8f810000 lw at,0(gp) ; \
bc: 24210028 addiu at,at,40 ; | prep local struct D (single double field) data ...
c0: d4200000 ldc1 $f0,0(at) ; /
c4: f7c00078 sdc1 $f0,120(s8) ; ... and write to local area
c8: 8f820000 lw v0,0(gp) ; \
cc: 24420018 addiu v0,v0,24 ; |
d0: 8c420000 lw v0,0(v0) ; |
d4: 8f830000 lw v1,0(gp) ; |
d8: 24630018 addiu v1,v1,24 ; |
dc: 8c630004 lw v1,4(v1) ; | prep local struct E data ...
e0: 8f840000 lw a0,0(gp) ; |
e4: 24840018 addiu a0,a0,24 ; |
e8: 8c840008 lw a0,8(a0) ; |
ec: 8f850000 lw a1,0(gp) ; |
f0: 24a50018 addiu a1,a1,24 ; |
f4: 8ca5000c lw a1,12(a1) ; /
f8: afc20068 sw v0,104(s8) ; \ | a
fc: afc3006c sw v1,108(s8) ; | ... and write to local area /
100: afc40070 sw a0,112(s8) ; | \
104: afc50074 sw a1,116(s8) ; / | b
108: 8f820000 lw v0,0(gp) ; \
10c: 24420000 addiu v0,v0,0 ; |
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
144: 8f870000 lw a3,0(gp) ; |
148: 24e70000 addiu a3,a3,0 ; |
14c: 8ce70014 lw a3,20(a3) ; /
150: afc20050 sw v0,80(s8) ; \ | a
154: afc30054 sw v1,84(s8) ; | /
158: afc40058 sw a0,88(s8) ; | \ b
15c: afc5005c sw a1,92(s8) ; | ... and write to local area /
160: afc60060 sw a2,96(s8) ; | \
164: afc70064 sw a3,100(s8) ; / | c
168: d7c00078 ldc1 $f0,120(s8) ; \
16c: f7a00018 sdc1 $f0,24(sp) ; / arg 3 (struct D)
170: 8fc20068 lw v0,104(s8) ; \
174: 8fc3006c lw v1,108(s8) ; |
178: 8fc40070 lw a0,112(s8) ; |
17c: 8fc50074 lw a1,116(s8) ; |
180: afa20020 sw v0,32(sp) ; | arg 4 (struct E)
184: afa30024 sw v1,36(sp) ; |
188: afa40028 sw a0,40(sp) ; |
18c: afa5002c sw a1,44(sp) ; /
190: 8fc20050 lw v0,80(s8) ; \
194: 8fc30054 lw v1,84(s8) ; |
198: 8fc40058 lw a0,88(s8) ; |
19c: 8fc5005c lw a1,92(s8) ; |
1a0: 8fc60060 lw a2,96(s8) ; |
1a4: 8fc70064 lw a3,100(s8) ; |
1a8: afa20030 sw v0,48(sp) ; | arg 5 (struct F)
1ac: afa30034 sw v1,52(sp) ; |
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
cc: a7c20030 sh v0,48(s8)
d0: 8f820000 lw v0,0(gp)
d4: 24420000 addiu v0,v0,0
d8: 90420002 lbu v0,2(v0)
dc: a3c20032 sb v0,50(s8)
e0: 8fc20040 lw v0,64(s8)
e4: afa20010 sw v0,16(sp)
e8: 8fc3003c lw v1,60(s8)
ec: 8fc20038 lw v0,56(s8)
f0: afa3001c sw v1,28(sp)
f4: afa20018 sw v0,24(sp)
f8: 97c20030 lhu v0,48(s8)
fc: a7a20020 sh v0,32(sp)
100: 93c20032 lbu v0,50(s8)
104: a3a20022 sb v0,34(sp)
108: 93c2004b lbu v0,75(s8)
10c: 00021a00 sll v1,v0,0x8
110: 93c2004c lbu v0,76(s8)
114: 00431025 or v0,v0,v1
118: afc00050 sw zero,80(s8)
11c: 00021c00 sll v1,v0,0x10
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
b4: 24420000 addiu v0,v0,0
b8: 94420000 lhu v0,0(v0)
bc: a7c20030 sh v0,48(s8)
c0: 8f820000 lw v0,0(gp)
c4: 24420000 addiu v0,v0,0
c8: 90420002 lbu v0,2(v0)
cc: a3c20032 sb v0,50(s8)
d0: c7c00040 lwc1 $f0,64(s8)
d4: e7a00010 swc1 $f0,16(sp)
d8: d7c00038 ldc1 $f0,56(s8)
dc: f7a00018 sdc1 $f0,24(sp)
e0: 97c20030 lhu v0,48(s8)
e4: a7a20020 sh v0,32(sp)
e8: 93c20032 lbu v0,50(s8)
ec: a3a20022 sb v0,34(sp)
f0: 93c2004b lbu v0,75(s8)
f4: 00021a00 sll v1,v0,0x8
f8: 93c2004c lbu v0,76(s8)
fc: 00431025 or v0,v0,v1
100: afc00050 sw zero,80(s8)
104: 00021c00 sll v1,v0,0x10
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
400904: afc40008 sw a0,8(s8)
400908: 03c0e821 move sp,s8
40090c: 8fbe0000 lw s8,0(sp)
400910: 03e00008 jr ra
400914: 27bd0008 addiu sp,sp,8
00400918 <f>:
400918: 3c1c0002 lui gp,0x2 ;
40091c: 279c82d8 addiu gp,gp,-32040 ;
400920: 0399e021 addu gp,gp,t9 ;
400924: 27bdffd0 addiu sp,sp,-48 ;
400928: afbf002c sw ra,44(sp) ;
40092c: afbe0028 sw s8,40(sp) ;
400930: 03a0f021 move s8,sp ;
400934: afbc0010 sw gp,16(sp) ;
400938: 27c20024 addiu v0,s8,36 ;
40093c: 00402021 move a0,v0 ;
400940: 8f998064 lw t9,-32668(gp) ; |
400944: 0320f809 jalr t9 ; | NonTrivial::NonTrivial() / ctor
400948: 00000000 nop ;
40094c: 8fdc0010 lw gp,16(s8) ;
400950: 24020001 li v0,1 ;
400954: afc20018 sw v0,24(s8) ;
400958: 8fc20018 lw v0,24(s8) ;
40095c: 2442007b addiu v0,v0,123 ;
400960: afc20018 sw v0,24(s8) ;
400964: 8fc40020 lw a0,32(s8) ;
400968: 8f998060 lw t9,-32672(gp) ; |
40096c: 0320f809 jalr t9 ; | call f1(struct Trivial)
400970: 00000000 nop ;
400974: 8fdc0010 lw gp,16(s8) ;
400978: 8fc20018 lw v0,24(s8) ;
40097c: 2442ff85 addiu v0,v0,-123 ;
400980: afc20018 sw v0,24(s8) ;
400984: 27c2001c addiu v0,s8,28 ;
400988: 27c30024 addiu v1,s8,36 ;
40098c: 00402021 move a0,v0 ; | ptr to dest of copy of n
400990: 00602821 move a1,v1 ; | ptr to n
400994: 8f998050 lw t9,-32688(gp) ; | copy n |
400998: 0320f809 jalr t9 ; | | NonTrivial::NonTrivial(const NonTrivial&) / copy ctor
40099c: 00000000 nop ;
4009a0: 8fdc0010 lw gp,16(s8) ;
4009a4: 27c2001c addiu v0,s8,28 ; get ptr to copy of n -> v0
4009a8: 00402021 move a0,v0 ; f2 arg 0 (ptr to copy of struct NonTrivial), via ptr as non-trivial
4009ac: 8f998058 lw t9,-32680(gp) ; |
4009b0: 0320f809 jalr t9 ; | call f2(struct NonTrivial)
4009b4: 00000000 nop ;
4009b8: 8fdc0010 lw gp,16(s8) ;
4009bc: 8fc20018 lw v0,24(s8) ;
4009c0: 2442fff4 addiu v0,v0,-12 ;
4009c4: afc20018 sw v0,24(s8) ;
4009c8: 03c0e821 move sp,s8 ;
4009cc: 8fbf002c lw ra,44(sp) ;
4009d0: 8fbe0028 lw s8,40(sp) ;
4009d4: 03e00008 jr ra ;
4009d8: 27bd0030 addiu sp,sp,48 ;
; ... snip, removed code of ctor and copy ctor ...
dyncall/doc/disas_examples/mips.o32.disas view on Meta::CPAN
4008d8: 03e00008 jr ra
4008dc: 27bd0008 addiu sp,sp,8
004008e0 <_Z2f2v>:
4008e0: 3c1c0002 lui gp,0x2 ; |
4008e4: 279c82e0 addiu gp,gp,-32032 ; |
4008e8: 0399e021 addu gp,gp,t9 ; |
4008ec: 27bdffd8 addiu sp,sp,-40 ; | prolog
4008f0: afbf0020 sw ra,32(sp) ; |
4008f4: afbe001c sw s8,28(sp) ; |
4008f8: afb00018 sw s0,24(sp) ; |
4008fc: 03a0f021 move s8,sp ; | frame pointer (note: with offset to frame start, but static compared to sp)
400900: afbc0010 sw gp,16(sp) ;
400904: 00808021 move s0,a0 ;
400908: 02001021 move v0,s0 ;
40090c: 00402021 move a0,v0 ;
400910: 8f998060 lw t9,-32672(gp) ;
400914: 0320f809 jalr t9 ;
400918: 00000000 nop ;
40091c: 8fdc0010 lw gp,16(s8) ;
400920: 02001021 move v0,s0 ; ptr to retval space -> v0
400924: 03c0e821 move sp,s8 ; |
400928: 8fbf0020 lw ra,32(sp) ; |
40092c: 8fbe001c lw s8,28(sp) ; |
400930: 8fb00018 lw s0,24(sp) ; | epilog
400934: 03e00008 jr ra ; |
400938: 27bd0028 addiu sp,sp,40 ; |
0040093c <f>:
40093c: 3c1c0002 lui gp,0x2 ;
400940: 279c8284 addiu gp,gp,-32124 ;
400944: 0399e021 addu gp,gp,t9 ;
400948: 27bdffd0 addiu sp,sp,-48 ;
40094c: afbf002c sw ra,44(sp) ;
400950: afbe0028 sw s8,40(sp) ;
400954: 03a0f021 move s8,sp ;
400958: afbc0010 sw gp,16(sp) ;
40095c: 24020001 li v0,1 ;
400960: afc20018 sw v0,24(s8) ;
400964: 8fc20018 lw v0,24(s8) ;
400968: 2442007b addiu v0,v0,123 ;
40096c: afc20018 sw v0,24(s8) ;
400970: 27c2001c addiu v0,s8,28 ;
400974: 00402021 move a0,v0 ; hidden first arg (ptr to space for ret val)
400978: 8f99805c lw t9,-32676(gp) ; |
40097c: 0320f809 jalr t9 ; | call f1()
400980: 00000000 nop ;
400984: 8fdc0010 lw gp,16(s8) ;
400988: 8fc20018 lw v0,24(s8) ;
40098c: 2442ff85 addiu v0,v0,-123 ;
400990: afc20018 sw v0,24(s8) ;
400994: 27c20020 addiu v0,s8,32 ;
400998: 00402021 move a0,v0 ; hidden first arg (ptr to space for ret val)
40099c: 8f998064 lw t9,-32668(gp) ; |
4009a0: 0320f809 jalr t9 ; | call f2()
4009a4: 00000000 nop ;
4009a8: 8fdc0010 lw gp,16(s8) ;
4009ac: 8fc20018 lw v0,24(s8) ;
4009b0: 2442fff4 addiu v0,v0,-12 ;
4009b4: afc20018 sw v0,24(s8) ;
4009b8: 03c0e821 move sp,s8 ;
4009bc: 8fbf002c lw ra,44(sp) ;
4009c0: 8fbe0028 lw s8,40(sp) ;
4009c4: 03e00008 jr ra ;
4009c8: 27bd0030 addiu sp,sp,48 ;
; vim: ft=asm
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
44: afc20004 sw v0,4(s8)
48: 00041000 sll v0,a0,0x0
4c: afc20008 sw v0,8(s8)
50: 00051000 sll v0,a1,0x0
54: afc2000c sw v0,12(s8)
58: 00061000 sll v0,a2,0x0
5c: afc20010 sw v0,16(s8)
60: 00071000 sll v0,a3,0x0
64: afc20014 sw v0,20(s8)
68: 00081000 sll v0,a4,0x0
6c: afc20018 sw v0,24(s8)
70: 03c0e82d move sp,s8
74: dfbe0028 ld s8,40(sp)
78: dfbc0020 ld gp,32(sp)
7c: 03e00008 jr ra
80: 67bd0030 daddiu sp,sp,48
84: 00000000 nop
0000000000000088 <nonleaf_call>:
88: 67bdff90 daddiu sp,sp,-112 ; |
8c: ffbf0060 sd ra,96(sp) ; |
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
d4: afc20004 sw v0,4(s8) ; |
d8: 00041000 sll v0,a0,0x0 ; |
dc: afc20008 sw v0,8(s8) ; |
e0: 00051000 sll v0,a1,0x0 ; |
e4: afc2000c sw v0,12(s8) ; | storing all register in args in local area on stack
e8: 00061000 sll v0,a2,0x0 ; | (using the set of pointlessly moved-to regs, above)
ec: afc20010 sw v0,16(s8) ; |
f0: 00071000 sll v0,a3,0x0 ; |
f4: afc20014 sw v0,20(s8) ; |
f8: 00081000 sll v0,a4,0x0 ; |
fc: afc20018 sw v0,24(s8) ; |
100: 00091000 sll v0,a5,0x0 ; |
104: afc2001c sw v0,28(s8) ; |
108: 67bdff10 daddiu sp,sp,-240 ; alloca(220) - with padding to guarantee alignment
10c: ffdd0020 sd sp,32(s8) ; |
110: dfc30020 ld v1,32(s8) ; | start of alloca()'d memory -> v1, by ...
114: 64620007 daddiu v0,v1,7 ; | ... using v0 as helper to align to 8b, and some unnecessary stores/reloads instead of a move
118: 000210fa dsrl v0,v0,0x3 ; |
11c: 000210f8 dsll v0,v0,0x3 ; |
120: ffc20020 sd v0,32(s8) ; move addr in v0 via local area ...
124: dfc30020 ld v1,32(s8) ; ... to v1
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
30: afc70004 sw a3,4(s8)
34: 00063000 sll a2,a2,0x0
38: afc60008 sw a2,8(s8)
3c: 00052800 sll a1,a1,0x0
40: afc5000c sw a1,12(s8)
44: 00042000 sll a0,a0,0x0
48: afc40010 sw a0,16(s8)
4c: 00031800 sll v1,v1,0x0
50: afc30014 sw v1,20(s8)
54: 00021000 sll v0,v0,0x0
58: afc20018 sw v0,24(s8)
5c: 03c0e82d move sp,s8
60: dfbe0028 ld s8,40(sp)
64: 67bd0030 daddiu sp,sp,48
68: 03e00008 jr ra
6c: 00200825 move at,at
0000000000000070 <nonleaf_call>:
70: 67bdffc0 daddiu sp,sp,-64 ; |
74: ffbf0038 sd ra,56(sp) ; |
78: ffbe0030 sd s8,48(sp) ; | prolog
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
38: 0160382d move a3,a7
3c: 00021000 sll v0,v0,0x0
40: afc20000 sw v0,0(s8)
44: 00031000 sll v0,v1,0x0
48: afc20004 sw v0,4(s8)
4c: 00041000 sll v0,a0,0x0
50: afc20008 sw v0,8(s8)
54: 00061000 sll v0,a2,0x0
58: afc2000c sw v0,12(s8)
5c: 00051000 sll v0,a1,0x0
60: afc20018 sw v0,24(s8)
64: 00071000 sll v0,a3,0x0
68: afc2001c sw v0,28(s8)
6c: 03c0e82d move sp,s8
70: dfbe0028 ld s8,40(sp)
74: dfbc0020 ld gp,32(sp)
78: 03e00008 jr ra
7c: 67bd0030 daddiu sp,sp,48
0000000000000080 <nonleaf_call>:
80: 67bdff50 daddiu sp,sp,-176
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
108: 64620008 daddiu v0,v1,8
10c: ffc20038 sd v0,56(s8)
110: 0060102d move v0,v1
114: 8c420000 lw v0,0(v0)
118: afc20028 sw v0,40(s8)
11c: dfc30038 ld v1,56(s8)
120: 64620008 daddiu v0,v1,8
124: ffc20038 sd v0,56(s8)
128: 0060102d move v0,v1
12c: 8c420000 lw v0,0(v0)
130: afc20024 sw v0,36(s8)
134: dfc30038 ld v1,56(s8)
138: 64620008 daddiu v0,v1,8
13c: ffc20038 sd v0,56(s8)
140: 0060102d move v0,v1
144: dc420000 ld v0,0(v0)
148: 0040202d move a0,v0
14c: df990000 ld t9,0(gp)
150: 0320f809 jalr t9
154: 00000000 nop
158: afc20018 sw v0,24(s8)
15c: dfc30038 ld v1,56(s8)
160: 64620008 daddiu v0,v1,8
164: ffc20038 sd v0,56(s8)
168: 0060102d move v0,v1
16c: dc420000 ld v0,0(v0)
170: 0040202d move a0,v0
174: df990000 ld t9,0(gp)
178: 0320f809 jalr t9
17c: 00000000 nop
180: afc20014 sw v0,20(s8)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
1ec: 64620007 daddiu v0,v1,7
1f0: 000210fa dsrl v0,v0,0x3
1f4: 000210f8 dsll v0,v0,0x3
1f8: ffc20048 sd v0,72(s8)
1fc: dfc30048 ld v1,72(s8)
200: 2402004c li v0,76
204: a0620000 sb v0,0(v1)
208: 8fc30030 lw v1,48(s8)
20c: 8fc5002c lw a1,44(s8)
210: 8fc60028 lw a2,40(s8)
214: 8fc70024 lw a3,36(s8)
218: 8fca0020 lw a6,32(s8)
21c: 8fcb001c lw a7,28(s8)
220: 8fc20010 lw v0,16(s8)
224: afa20000 sw v0,0(sp)
228: 0060202d move a0,v1
22c: 8fc80018 lw a4,24(s8)
230: 8fc90014 lw a5,20(s8)
234: df990000 ld t9,0(gp)
238: 0320f809 jalr t9
23c: 00000000 nop
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
d4: afc20010 sw v0,16(s8) ; |
d8: dfc20038 ld v0,56(s8) ; |
dc: 64430008 daddiu v1,v0,8 ; |
e0: ffc30038 sd v1,56(s8) ; |
e4: 8c420000 lw v0,0(v0) ; |
e8: afc20014 sw v0,20(s8) ; |
ec: dfc20038 ld v0,56(s8) ; |
f0: 64430008 daddiu v1,v0,8 ; |
f4: ffc30038 sd v1,56(s8) ; |
f8: 8c420000 lw v0,0(v0) ; |
fc: afc20018 sw v0,24(s8) ; |
100: dfc20038 ld v0,56(s8) ; |
104: 64430008 daddiu v1,v0,8 ; |
108: ffc30038 sd v1,56(s8) ; |
10c: 8c420000 lw v0,0(v0) ; |
110: afc2001c sw v0,28(s8) ; |
114: dfc20038 ld v0,56(s8) ; |
118: 64430008 daddiu v1,v0,8 ; |
11c: ffc30038 sd v1,56(s8) ; |
120: dc420000 ld v0,0(v0) ; |
124: 44a20000 dmtc1 v0,$f0 ; | vararg stuff: pointer to beginning of spill area (constantly
128: 46200020 cvt.s.d $f0,$f0 ; | stored and reloaded) to iterate over all params which are stored
12c: 44020000 mfc1 v0,$f0 ; | to a local space on stack, which they are refetched from, below
130: afc20020 sw v0,32(s8) ; | (see similar mips32 examples for detailed analysis)
134: dfc20038 ld v0,56(s8) ; |
138: 64430008 daddiu v1,v0,8 ; |
13c: ffc30038 sd v1,56(s8) ; |
140: dc420000 ld v0,0(v0) ; |
144: 44a20000 dmtc1 v0,$f0 ; |
148: 46200020 cvt.s.d $f0,$f0 ; |
14c: 44020000 mfc1 v0,$f0 ; |
150: afc20024 sw v0,36(s8) ; |
154: dfc20038 ld v0,56(s8) ; |
158: 64430008 daddiu v1,v0,8 ; |
15c: ffc30038 sd v1,56(s8) ; |
160: 8c420000 lw v0,0(v0) ; |
164: afc20028 sw v0,40(s8) ; |
168: dfc20038 ld v0,56(s8) ; |
16c: 64430008 daddiu v1,v0,8 ; |
170: ffc30038 sd v1,56(s8) ; |
174: 8c420000 lw v0,0(v0) ; |
178: afc2002c sw v0,44(s8) ; |
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
1b8: a0620000 sb v0,0(v1) ; ... store in local area (of alloca()'d space)
1bc: 8fc40010 lw a0,16(s8) ; arg 0
1c0: 8fc50014 lw a1,20(s8) ; arg 1
1c4: 8fc60018 lw a2,24(s8) ; arg 2
1c8: 8fc7001c lw a3,28(s8) ; arg 3
1cc: 8fc80028 lw a4,40(s8) ; prepare arg 6 (using a4 only as temp reg), to move to a6 below
1d0: 8fc3002c lw v1,44(s8) ; prepare arg 7 (pointlessly) to move to a7 below
1d4: 8fc20030 lw v0,48(s8) ; arg 8, and ...
1d8: afa20000 sw v0,0(sp) ; ... "pushed" onto stack
1dc: c7d00020 lwc1 $f16,32(s8) ; arg 4 (so skipping f12-f15)
1e0: c7d10024 lwc1 $f17,36(s8) ; arg 5 (so skipping f12-f15)
1e4: 0100502d move a6,a4 ; arg 6 (from a4 used as temp reg, pointlessly)
1e8: 0060582d move a7,v1 ; arg 7
1ec: df820000 ld v0,0(gp) ; address of callee, to ...
1f0: 0040c82d move t9,v0 ; ... t9
1f4: 0320f809 jalr t9 ; return address -> ra, and call
1f8: 00200825 move at,at ; branch delay slot (effectively nop)
1fc: 03c0e82d move sp,s8 ; |
200: dfbf0068 ld ra,104(sp) ; |
204: dfbe0060 ld s8,96(sp) ; |
208: dfbc0058 ld gp,88(sp) ; | epilog
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
30: afc60000 sw a2,0(s8)
34: 000c3000 sll a2,t0,0x0
38: afc60004 sw a2,4(s8)
3c: 00052800 sll a1,a1,0x0
40: afc50008 sw a1,8(s8)
44: 00042000 sll a0,a0,0x0
48: afc4000c sw a0,12(s8)
4c: 00031800 sll v1,v1,0x0
50: afc30020 sw v1,32(s8)
54: 00021000 sll v0,v0,0x0
58: afc20024 sw v0,36(s8)
5c: 03c0e82d move sp,s8
60: dfbe0038 ld s8,56(sp)
64: 67bd0040 daddiu sp,sp,64
68: 03e00008 jr ra
6c: 00200825 move at,at
0000000000000070 <nonleaf_call>:
70: 67bdff40 daddiu sp,sp,-192
74: ffbf00b8 sd ra,184(sp)
78: ffbe00b0 sd s8,176(sp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
17c: ffbc0028 sd gp,40(sp)
180: 03a0f02d move s8,sp
184: 3c1c0000 lui gp,0x0
188: 0399e02d daddu gp,gp,t9
18c: 679c0000 daddiu gp,gp,0
190: 24020005 li v0,5
194: afc20010 sw v0,16(s8)
198: 24020006 li v0,6
19c: afc20014 sw v0,20(s8)
1a0: 24020007 li v0,7
1a4: ffc20018 sd v0,24(s8)
1a8: 24020009 li v0,9
1ac: ffa20000 sd v0,0(sp)
1b0: 0000202d move a0,zero
1b4: 24050001 li a1,1
1b8: 24060002 li a2,2
1bc: 24070003 li a3,3
1c0: 24080004 li a4,4
1c4: dfc90010 ld a5,16(s8)
1c8: dfca0018 ld a6,24(s8)
1cc: 240b0008 li a7,8
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
40: afc20000 sw v0,0(s8)
44: 00031000 sll v0,v1,0x0
48: afc20004 sw v0,4(s8)
4c: 00041000 sll v0,a0,0x0
50: afc20008 sw v0,8(s8)
54: 00061000 sll v0,a2,0x0
58: afc2000c sw v0,12(s8)
5c: 00051000 sll v0,a1,0x0
60: afc20020 sw v0,32(s8)
64: 00071000 sll v0,a3,0x0
68: afc20024 sw v0,36(s8)
6c: 03c0e82d move sp,s8
70: dfbe0038 ld s8,56(sp)
74: dfbc0030 ld gp,48(sp)
78: 03e00008 jr ra
7c: 67bd0040 daddiu sp,sp,64
0000000000000080 <nonleaf_call>:
80: 67bdff40 daddiu sp,sp,-192
84: ffbf00b0 sd ra,176(sp)
88: ffbe00a8 sd s8,168(sp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
c: 0080382d move a3,a0
10: ffc50008 sd a1,8(s8)
14: ffc60010 sd a2,16(s8)
18: 46207806 mov.d $f0,$f15
1c: 0100202d move a0,a4
20: 0120182d move v1,a5
24: 0140102d move v0,a6
28: ffcb0048 sd a7,72(s8)
2c: 00072800 sll a1,a3,0x0
30: afc50000 sw a1,0(s8)
34: f7c00018 sdc1 $f0,24(s8)
38: ffc40020 sd a0,32(s8)
3c: 00031800 sll v1,v1,0x0
40: afc30004 sw v1,4(s8)
44: 00021000 sll v0,v0,0x0
48: afc20028 sw v0,40(s8)
4c: 03c0e82d move sp,s8
50: dfbe0038 ld s8,56(sp)
54: 67bd0050 daddiu sp,sp,80
58: 03e00008 jr ra
5c: 00200825 move at,at
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
100: 8fc400a4 lw a0,164(s8)
104: d7c000b8 ldc1 $f0,184(s8)
108: dfc800c0 ld a4,192(s8)
10c: 8fc900c8 lw a5,200(s8)
110: 8fc700cc lw a3,204(s8)
114: dfc30100 ld v1,256(s8)
118: dfc20108 ld v0,264(s8)
11c: ffa30008 sd v1,8(sp)
120: ffa20010 sd v0,16(sp)
124: 8fc20110 lw v0,272(s8)
128: ffa20018 sd v0,24(sp)
12c: 8fc20118 lw v0,280(s8)
130: ffa20020 sd v0,32(sp)
134: 8fc200f8 lw v0,248(s8)
138: afa20000 sw v0,0(sp)
13c: dfcb00f0 ld a7,240(s8)
140: dfc500a8 ld a1,168(s8)
144: dfc600b0 ld a2,176(s8)
148: 462003c6 mov.d $f15,$f0
14c: 00e0502d move a6,a3
150: df820000 ld v0,0(gp)
154: 0040c82d move t9,v0
158: 0320f809 jalr t9
15c: 00200825 move at,at
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
200: ffc20038 sd v0,56(s8)
204: d7c00050 ldc1 $f0,80(s8)
208: dfc80058 ld a4,88(s8)
20c: dfc20040 ld v0,64(s8)
210: ffa20000 sd v0,0(sp)
214: 8fc20048 lw v0,72(s8)
218: afa20008 sw v0,8(sp)
21c: dfc30030 ld v1,48(s8)
220: dfc20038 ld v0,56(s8)
224: ffa30010 sd v1,16(sp)
228: ffa20018 sd v0,24(sp)
22c: 2402000e li v0,14
230: ffa20020 sd v0,32(sp)
234: 2402000f li v0,15
238: ffa20028 sd v0,40(sp)
23c: 0000202d move a0,zero
240: 24050001 li a1,1
244: dfc60060 ld a2,96(s8)
248: dfc70068 ld a3,104(s8)
24c: 46200406 mov.d $f16,$f0
250: 0100482d move a5,a4
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
114: 8fc400a4 lw a0,164(s8)
118: dfc700b8 ld a3,184(s8)
11c: dfc800c0 ld a4,192(s8)
120: 8fc900c8 lw a5,200(s8)
124: 8fca00cc lw a6,204(s8)
128: dfc20110 ld v0,272(s8)
12c: dfc30118 ld v1,280(s8)
130: ffa20008 sd v0,8(sp)
134: ffa30010 sd v1,16(sp)
138: 8fc20120 lw v0,288(s8)
13c: ffa20018 sd v0,24(sp)
140: 8fc20128 lw v0,296(s8)
144: ffa20020 sd v0,32(sp)
148: dfc500a8 ld a1,168(s8)
14c: 9fc300b0 lwu v1,176(s8)
150: ffc000d0 sd zero,208(s8)
154: 24020001 li v0,1
158: 0002103c dsll32 v0,v0,0x0
15c: 6442ffff daddiu v0,v0,-1
160: 00621824 and v1,v1,v0
164: 2402ffff li v0,-1
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
d4: dc420000 ld v0,0(v0)
d8: ffc20028 sd v0,40(s8)
dc: df820000 ld v0,0(gp)
e0: dc420000 ld v0,0(v0)
e4: ffc20030 sd v0,48(s8)
e8: df820000 ld v0,0(gp)
ec: dc420000 ld v0,0(v0)
f0: ffc20010 sd v0,16(s8)
f4: df820000 ld v0,0(gp)
f8: dc420000 ld v0,0(v0)
fc: ffc20018 sd v0,24(s8)
100: df820000 ld v0,0(gp)
104: dc420000 ld v0,0(v0)
108: ffc20020 sd v0,32(s8)
10c: d7c30038 ldc1 $f3,56(s8)
110: d7c20028 ldc1 $f2,40(s8)
114: d7c10030 ldc1 $f1,48(s8)
118: dfc30018 ld v1,24(s8)
11c: dfc20020 ld v0,32(s8)
120: ffa30000 sd v1,0(sp)
124: ffa20008 sd v0,8(sp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
120: 24020001 li v0,1
124: 0002103c dsll32 v0,v0,0x0
128: 6442ffff daddiu v0,v0,-1
12c: 00621824 and v1,v1,v0
130: 2402ffff li v0,-1
134: 0002103c dsll32 v0,v0,0x0
138: dfc40060 ld a0,96(s8)
13c: 00821024 and v0,a0,v0
140: 00431025 or v0,v0,v1
144: ffc20060 sd v0,96(s8)
148: dfc20018 ld v0,24(s8)
14c: dfc30020 ld v1,32(s8)
150: ffa20000 sd v0,0(sp)
154: ffa30008 sd v1,8(sp)
158: dfc20010 ld v0,16(s8)
15c: 8fc40054 lw a0,84(s8)
160: dfc70060 ld a3,96(s8)
164: 0040582d move a7,v0
168: df990000 ld t9,0(gp)
16c: 0320f809 jalr t9
170: 00000000 nop
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
11c: 0002103e dsrl32 v0,v0,0x0
120: ffc00060 sd zero,96(s8)
124: 0002183c dsll32 v1,v0,0x0
128: 24020001 li v0,1
12c: 0002103c dsll32 v0,v0,0x0
130: 6442ffff daddiu v0,v0,-1
134: dfc40060 ld a0,96(s8)
138: 00821024 and v0,a0,v0
13c: 00431025 or v0,v0,v1
140: ffc20060 sd v0,96(s8)
144: dfc20018 ld v0,24(s8)
148: dfc30020 ld v1,32(s8)
14c: ffa20000 sd v0,0(sp)
150: ffa30008 sd v1,8(sp)
154: d7c00010 ldc1 $f0,16(s8)
158: 8fc40054 lw a0,84(s8)
15c: 0004203c dsll32 a0,a0,0x0
160: dfc70060 ld a3,96(s8)
164: 46200c06 mov.d $f16,$f1
168: 46201446 mov.d $f17,$f2
16c: 46201c86 mov.d $f18,$f3
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
30: ffbe0048 sd s8,72(sp)
34: 03a0f02d move s8,sp
38: ffc40030 sd a0,48(s8)
3c: 24021c03 li v0,7171
40: ffc20000 sd v0,0(s8)
44: 24020063 li v0,99
48: ffc20008 sd v0,8(s8)
4c: 2402ff9d li v0,-99
50: ffc20010 sd v0,16(s8)
54: 2402f3e2 li v0,-3102
58: ffc20018 sd v0,24(s8)
5c: 24020020 li v0,32
60: ffc20020 sd v0,32(s8)
64: dfc20030 ld v0,48(s8)
68: dfc70000 ld a3,0(s8)
6c: dfc60008 ld a2,8(s8)
70: dfc50010 ld a1,16(s8)
74: dfc40018 ld a0,24(s8)
78: dfc30020 ld v1,32(s8)
7c: fc470000 sd a3,0(v0)
80: fc460008 sd a2,8(v0)
84: fc450010 sd a1,16(v0)
88: fc440018 sd a0,24(v0)
8c: fc430020 sd v1,32(v0)
90: dfc20030 ld v0,48(s8)
94: 03c0e82d move sp,s8
98: dfbe0048 ld s8,72(sp)
9c: 67bd0050 daddiu sp,sp,80
a0: 03e00008 jr ra
a4: 00200825 move at,at
00000000000000a8 <main>:
a8: 67bdffb0 daddiu sp,sp,-80
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
d0: 0320f809 jalr t9
d4: 00200825 move at,at
d8: a3c20000 sb v0,0(s8)
dc: 67c20008 daddiu v0,s8,8
e0: 0040202d move a0,v0
e4: df820000 ld v0,0(gp)
e8: 0040c82d move t9,v0
ec: 0320f809 jalr t9
f0: 00200825 move at,at
f4: dfc30010 ld v1,16(s8)
f8: dfc20018 ld v0,24(s8)
fc: 0062182d daddu v1,v1,v0
100: dfc20028 ld v0,40(s8)
104: 0062102d daddu v0,v1,v0
108: 00021000 sll v0,v0,0x0
10c: 0040182d move v1,v0
110: 83c20000 lb v0,0(s8)
114: 00621021 addu v0,v1,v0
118: 03c0e82d move sp,s8
11c: dfbf0048 ld ra,72(sp)
120: dfbe0040 ld s8,64(sp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
f8: df990000 ld t9,0(gp)
fc: 0320f809 jalr t9
100: 00000000 nop
104: a3c20000 sb v0,0(s8)
108: 67c20008 daddiu v0,s8,8
10c: 0040202d move a0,v0
110: df990000 ld t9,0(gp)
114: 0320f809 jalr t9
118: 00000000 nop
11c: dfc30010 ld v1,16(s8)
120: dfc20018 ld v0,24(s8)
124: 0062182d daddu v1,v1,v0
128: dfc20028 ld v0,40(s8)
12c: 0062102d daddu v0,v1,v0
130: 00021000 sll v0,v0,0x0
134: 0040182d move v1,v0
138: 83c20000 lb v0,0(s8)
13c: 00621021 addu v0,v1,v0
140: 03c0e82d move sp,s8
144: dfbf0040 ld ra,64(sp)
148: dfbe0038 ld s8,56(sp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
6c: 0399e02d daddu gp,gp,t9
70: 679c0000 daddiu gp,gp,0
74: a3c00030 sb zero,48(s8)
78: 24020001 li v0,1
7c: a3c20031 sb v0,49(s8)
80: 24020002 li v0,2
84: a3c20028 sb v0,40(s8)
88: 24020003 li v0,3
8c: a7c20020 sh v0,32(s8)
90: 24020004 li v0,4
94: afc20018 sw v0,24(s8)
98: df820000 ld v0,0(gp)
9c: 8c420000 lw v0,0(v0)
a0: afc20010 sw v0,16(s8)
a4: df820000 ld v0,0(gp)
a8: dc420000 ld v0,0(v0)
ac: ffc20008 sd v0,8(s8)
b0: 24020007 li v0,7
b4: a3c20000 sb v0,0(s8)
b8: 24020008 li v0,8
bc: a3c20001 sb v0,1(s8)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
10: 3c1c0000 lui gp,0x0
14: 0399e02d daddu gp,gp,t9
18: 679c0000 daddiu gp,gp,0
1c: a7c40000 sh a0,0(s8)
20: a3c50008 sb a1,8(s8)
24: a7c6000a sh a2,10(s8)
28: afc7000c sw a3,12(s8)
2c: afc80010 sw a4,16(s8)
30: 0120102d move v0,a5
34: ffca0020 sd a6,32(s8)
38: ffc20018 sd v0,24(s8)
3c: 03c0e82d move sp,s8
40: dfbe0038 ld s8,56(sp)
44: dfbc0030 ld gp,48(sp)
48: 03e00008 jr ra
4c: 67bd0040 daddiu sp,sp,64
0000000000000050 <main>:
50: 67bdffb0 daddiu sp,sp,-80
54: ffbf0040 sd ra,64(sp)
58: ffbe0038 sd s8,56(sp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
6c: 679c0000 daddiu gp,gp,0
70: df820000 ld v0,0(gp)
74: 90420000 lbu v0,0(v0)
78: a3c2001b sb v0,27(s8)
7c: df820000 ld v0,0(gp)
80: 90420000 lbu v0,0(v0)
84: a3c2001c sb v0,28(s8)
88: 24020002 li v0,2
8c: a3c2001a sb v0,26(s8)
90: 24020003 li v0,3
94: a7c20018 sh v0,24(s8)
98: 24020004 li v0,4
9c: afc20014 sw v0,20(s8)
a0: df820000 ld v0,0(gp)
a4: 8c420000 lw v0,0(v0)
a8: afc20010 sw v0,16(s8)
ac: df820000 ld v0,0(gp)
b0: dc420000 ld v0,0(v0)
b4: ffc20008 sd v0,8(s8)
b8: df820000 ld v0,0(gp)
bc: 94420000 lhu v0,0(v0)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
29c: f7c00008 sdc1 $f0,8(s8)
2a0: df820000 ld v0,0(gp)
2a4: 0040c82d move t9,v0
2a8: 0320f809 jalr t9
2ac: 00200825 move at,at
2b0: ffc20010 sd v0,16(s8)
2b4: df820000 ld v0,0(gp)
2b8: 0040c82d move t9,v0
2bc: 0320f809 jalr t9
2c0: 00200825 move at,at
2c4: ffc20018 sd v0,24(s8)
2c8: ffc30020 sd v1,32(s8)
2cc: df820000 ld v0,0(gp)
2d0: 0040c82d move t9,v0
2d4: 0320f809 jalr t9
2d8: 00200825 move at,at
2dc: 46000046 mov.s $f1,$f0
2e0: 46001006 mov.s $f0,$f2
2e4: e7c10028 swc1 $f1,40(s8)
2e8: e7c0002c swc1 $f0,44(s8)
2ec: df820000 ld v0,0(gp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
384: ffc20050 sd v0,80(s8)
388: dfc20050 ld v0,80(s8)
38c: ffc20010 sd v0,16(s8)
390: df990000 ld t9,0(gp)
394: 0320f809 jalr t9
398: 00000000 nop
39c: ffc20058 sd v0,88(s8)
3a0: ffc30060 sd v1,96(s8)
3a4: dfc20058 ld v0,88(s8)
3a8: dfc30060 ld v1,96(s8)
3ac: ffc20018 sd v0,24(s8)
3b0: ffc30020 sd v1,32(s8)
3b4: df990000 ld t9,0(gp)
3b8: 0320f809 jalr t9
3bc: 00000000 nop
3c0: 0080182d move v1,a0
3c4: afc20050 sw v0,80(s8)
3c8: afc30054 sw v1,84(s8)
3cc: dfc20050 ld v0,80(s8)
3d0: ffc20028 sd v0,40(s8)
3d4: df990000 ld t9,0(gp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
394: ffc20050 sd v0,80(s8)
398: dfc20050 ld v0,80(s8)
39c: ffc20010 sd v0,16(s8)
3a0: df990000 ld t9,0(gp)
3a4: 0320f809 jalr t9
3a8: 00000000 nop
3ac: ffc20058 sd v0,88(s8)
3b0: ffc30060 sd v1,96(s8)
3b4: dfc20058 ld v0,88(s8)
3b8: dfc30060 ld v1,96(s8)
3bc: ffc20018 sd v0,24(s8)
3c0: ffc30020 sd v1,32(s8)
3c4: df990000 ld t9,0(gp)
3c8: 0320f809 jalr t9
3cc: 00000000 nop
3d0: 46001046 mov.s $f1,$f2
3d4: e7c00050 swc1 $f0,80(s8)
3d8: e7c10054 swc1 $f1,84(s8)
3dc: dfc20050 ld v0,80(s8)
3e0: ffc20028 sd v0,40(s8)
3e4: df990000 ld t9,0(gp)
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
120000bfc: 679c8470 daddiu gp,gp,-31632 ;
120000c00: 67c2000c daddiu v0,s8,12 ;
120000c04: 0040202d move a0,v0 ;
120000c08: df9980e8 ld t9,-32536(gp) ;
120000c0c: 0320f809 jalr t9 ;
120000c10: 00000000 nop ;
120000c14: 24020001 li v0,1 ;
120000c18: afc20000 sw v0,0(s8) ;
120000c1c: 8fc20000 lw v0,0(s8) ;
120000c20: 2442007b addiu v0,v0,123 ;
120000c24: afc20000 sw v0,0(s8) ;
120000c28: 8fc40008 lw a0,8(s8) ;
120000c2c: 0004203c dsll32 a0,a0,0x0 ;
120000c30: df9980e0 ld t9,-32544(gp) ;
120000c34: 0320f809 jalr t9 ;
120000c38: 00000000 nop ;
120000c3c: 8fc20000 lw v0,0(s8) ;
120000c40: 2442ff85 addiu v0,v0,-123 ;
120000c44: afc20000 sw v0,0(s8) ;
120000c48: 67c20004 daddiu v0,s8,4 ;
120000c4c: 67c3000c daddiu v1,s8,12 ;
dyncall/doc/disas_examples/mips64.n64.disas view on Meta::CPAN
120000bfc: ffbf0020 sd ra,32(sp) ;
120000c00: ffbe0018 sd s8,24(sp) ;
120000c04: ffbc0010 sd gp,16(sp) ;
120000c08: 03a0f02d move s8,sp ;
120000c0c: 3c1c0002 lui gp,0x2 ;
120000c10: 0399e02d daddu gp,gp,t9 ;
120000c14: 679c8288 daddiu gp,gp,-32120 ;
120000c18: 24020001 li v0,1 ;
120000c1c: afc20000 sw v0,0(s8) ;
120000c20: 8fc20000 lw v0,0(s8) ;
120000c24: 2442007b addiu v0,v0,123 ;
120000c28: afc20000 sw v0,0(s8) ;
120000c2c: df9980d8 ld t9,-32552(gp) ; | call f1()
120000c30: 0320f809 jalr t9 ; |
120000c34: 00000000 nop ;
120000c38: 0002103f dsra32 v0,v0,0x0 ; | returned via reg v0, as small and trivial
120000c3c: afc20004 sw v0,4(s8) ; |
120000c40: 8fc20000 lw v0,0(s8) ;
120000c44: 2442ff85 addiu v0,v0,-123 ;
120000c48: afc20000 sw v0,0(s8) ;
120000c4c: 67c20008 daddiu v0,s8,8 ;
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
_leaf_call:
00000000 stmw r30,0xfff8(r1)
00000004 stwu r1,0xffd0(r1)
00000008 or r30,r1,r1
0000000c stw r3,0x48(r30)
00000010 stw r4,0x4c(r30)
00000014 stw r5,0x50(r30)
00000018 stw r6,0x54(r30)
0000001c stw r7,0x58(r30)
00000020 stw r8,0x5c(r30)
00000024 stw r9,0x60(r30)
00000028 stw r10,0x64(r30)
0000002c lwz r1,0x0(r1)
00000030 lmw r30,0xfff8(r1)
00000034 blr
_nonleaf_call:
00000038 mfspr r0,lr
0000003c stmw r30,0xfff8(r1)
00000040 stw r0,0x8(r1)
00000044 stwu r1,0xff30(r1)
00000048 or r30,r1,r1
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
000000fc addi r2,r2,0x108 ;
00000100 lwz r0,0x0(r2) ;
00000104 lwz r9,0x4(r2) ;
00000108 lwz r11,0x8(r2) ;
0000010c lwz r2,0xc(r2) ;
00000110 stw r0,0x50(r30) ;
00000114 stw r9,0x54(r30) ;
00000118 stw r11,0x58(r30) ;
0000011c stw r2,0x5c(r30) ;
00000120 li r0,0x8 ; arg 6, ...
00000124 stw r0,0x3c(r1) ; ... "pushed" onto stack
00000128 li r0,0x9 ; arg 7, ...
0000012c stw r0,0x40(r1) ; ... "pushed" onto stack
00000130 lwz r0,0x5c(r30) ; | | last word of struct "pushed" onto stack
00000134 stw r0,0x38(r1) ; | /
00000138 lwz r8,0x50(r30) ; | arg 5 (struct, passed as 4 words) \
0000013c lwz r9,0x54(r30) ; | | first 3 words of struct passed in remaining regs
00000140 lwz r10,0x58(r30) ; | |
00000144 li r3,0x0 ; arg 0
00000148 li r4,0x1 ; arg 1
0000014c li r5,0x2 ; arg 2
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
_leaf_call:
00000000 stmw r30,0xfff8(r1)
00000004 stwu r1,0xffc0(r1)
00000008 or r30,r1,r1
0000000c sth r3,0x58(r30)
00000010 stb r4,0x5c(r30)
00000014 sth r5,0x60(r30)
00000018 stw r6,0x64(r30)
0000001c stfs f1,0x68(r30)
00000020 stfd f2,0x20(r30)
00000024 lwz r1,0x0(r1)
00000028 lmw r30,0xfff8(r1)
0000002c blr
_main:
00000030 mfspr r0,lr ; |
00000034 stmw r30,0xfff8(r1) ; |
00000038 stw r0,0x8(r1) ; | prolog
0000003c stwu r1,0xff80(r1) ; |
00000040 or r30,r1,r1 ; |
00000044 bcl 20,31,0x48 ; ppc way to get PC in ...
00000048 mfspr r31,lr ; ... gpr31
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
_leaf_call:
00000000 stmw r30,0xfff8(r1)
00000004 stwu r1,0xffd0(r1)
00000008 or r30,r1,r1
0000000c stw r3,0x48(r30)
00000010 stw r4,0x4c(r30)
00000014 stw r5,0x50(r30)
00000018 stw r6,0x54(r30)
0000001c stw r7,0x58(r30)
00000020 stw r8,0x5c(r30)
00000024 stw r9,0x60(r30)
00000028 stw r10,0x64(r30)
0000002c lwz r1,0x0(r1)
00000030 lmw r30,0xfff8(r1)
00000034 blr
_nonleaf_call:
00000038 mfspr r0,lr
0000003c stmw r30,0xfff8(r1)
00000040 stw r0,0x8(r1)
00000044 stwu r1,0xff10(r1)
00000048 or r30,r1,r1
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
00000050 mfspr r31,lr
00000054 stw r3,0x108(r30)
00000058 stw r4,0x10c(r30)
0000005c stw r5,0x110(r30)
00000060 stw r6,0x114(r30)
00000064 stw r7,0x118(r30)
00000068 stw r8,0x11c(r30)
0000006c stw r9,0x120(r30)
00000070 stw r10,0x124(r30)
00000074 addis r2,r31,0x0
00000078 addi r2,r2,0x240
0000007c addi r0,r30,0x70
00000080 li r9,0x64
00000084 or r3,r0,r0
00000088 or r4,r2,r2
0000008c or r5,r9,r9
00000090 bl 0x270
00000094 lwz r0,0x12c(r30)
00000098 stw r0,0x38(r1)
0000009c lwz r0,0x130(r30)
000000a0 stw r0,0x3c(r1)
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
00000100 lwz r8,0x120(r30)
00000104 lwz r9,0x124(r30)
00000108 lwz r10,0x128(r30)
0000010c bl 0x0
00000110 lwz r1,0x0(r1)
00000114 lwz r0,0x8(r1)
00000118 mtspr lr,r0
0000011c lmw r30,0xfff8(r1)
00000120 blr
_main:
00000124 mfspr r0,lr
00000128 stmw r30,0xfff8(r1)
0000012c stw r0,0x8(r1)
00000130 stwu r1,0xff40(r1)
00000134 or r30,r1,r1
00000138 bcl 20,31,0x13c
0000013c mfspr r31,lr
00000140 addis r2,r31,0x0
00000144 addi r2,r2,0x1b8
00000148 lwz r0,0x0(r2)
0000014c lwz r9,0x4(r2)
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
000001fc lwz r2,0xa4(r30)
00000200 lwz r9,0xa8(r30)
00000204 lwz r11,0xac(r30)
00000208 stw r0,0x50(r1)
0000020c stw r2,0x54(r1)
00000210 stw r9,0x58(r1)
00000214 stw r11,0x5c(r1)
00000218 li r0,0xe
0000021c stw r0,0x60(r1)
00000220 li r0,0xf
00000224 stw r0,0x64(r1)
00000228 lwz r0,0x8c(r30)
0000022c stw r0,0x38(r1)
00000230 lwz r8,0x80(r30)
00000234 lwz r9,0x84(r30)
00000238 lwz r10,0x88(r30)
0000023c li r3,0x0
00000240 li r4,0x1
00000244 lwz r5,0x70(r30)
00000248 lwz r6,0x74(r30)
0000024c lwz r7,0x78(r30)
00000250 bl 0x38
00000254 li r0,0x0
00000258 or r3,r0,r0
0000025c lwz r1,0x0(r1)
00000260 lwz r0,0x8(r1)
00000264 mtspr lr,r0
00000268 lmw r30,0xfff8(r1)
0000026c blr
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
_f:
00000000 stmw r30,0xfff8(r1)
00000004 stwu r1,0xffd0(r1)
00000008 or r30,r1,r1
0000000c li r2,0x0
00000010 li r3,0x1c03
00000014 or r4,r3,r3
00000018 or r3,r2,r2
0000001c lwz r1,0x0(r1)
00000020 lmw r30,0xfff8(r1)
00000024 blr
_main:
00000028 mfspr r0,lr
0000002c stmw r30,0xfff8(r1)
00000030 stw r0,0x8(r1)
00000034 stwu r1,0xffb0(r1)
00000038 or r30,r1,r1
0000003c bl 0x0
00000040 or r2,r3,r3
00000044 or r3,r4,r4
00000048 or r0,r3,r3
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
_f0:
00000000 stmw r30,0xfff8(r1)
00000004 stwu r1,0xffc0(r1)
00000008 or r30,r1,r1
0000000c or r2,r3,r3
00000010 li r0,0xff84
00000014 stb r0,0x20(r30)
00000018 lbz r0,0x20(r30)
0000001c stb r0,0x0(r2)
00000020 or r3,r2,r2
00000024 lwz r1,0x0(r1)
00000028 lmw r30,0xfff8(r1)
0000002c blr
_f1:
00000030 stmw r30,0xfff8(r1)
00000034 stwu r1,0xffc0(r1)
00000038 or r30,r1,r1
0000003c mfspr r0,lr
00000040 bcl 20,31,0x44
00000044 mfspr r8,lr
00000048 mtspr lr,r0
0000004c or r9,r3,r3
00000050 addis r2,r8,0x0
00000054 addi r2,r2,0xb4
00000058 lwz r0,0x0(r2)
0000005c lwz r11,0x4(r2)
00000060 lwz r10,0x8(r2)
00000064 lwz r2,0xc(r2)
00000068 stw r0,0x20(r30)
0000006c stw r11,0x24(r30)
00000070 stw r10,0x28(r30)
00000074 stw r2,0x2c(r30)
00000078 lwz r0,0x20(r30)
0000007c lwz r2,0x24(r30)
00000080 lwz r11,0x28(r30)
00000084 lwz r10,0x2c(r30)
00000088 stw r0,0x0(r9)
0000008c stw r2,0x4(r9)
00000090 stw r11,0x8(r9)
00000094 stw r10,0xc(r9)
00000098 or r3,r9,r9
0000009c lwz r1,0x0(r1)
000000a0 lmw r30,0xfff8(r1)
000000a4 blr
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
00000000 stmw r30,0xfff8(r1)
00000004 stwu r1,0xffd0(r1)
00000008 or r30,r1,r1
0000000c stw r3,0x48(r30)
00000010 lwz r1,_f1(r1)
00000014 lmw r30,0xfff8(r1)
00000018 blr
_f2:
0000001c stmw r30,0xfff8(r1)
00000020 stwu r1,0xffd0(r1)
00000024 or r30,r1,r1
00000028 lwz r1,_f1(r1)
0000002c lmw r30,0xfff8(r1)
00000030 blr
_f:
00000034 mfspr r0,lr ;
00000038 stmw r30,0xfff8(r1) ;
0000003c stw r0,0x8(r1) ;
00000040 stwu r1,0xff70(r1) ;
00000044 or r30,r1,r1 ;
00000048 addi r0,r30,0x50 ;
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
40: 93 e1 00 3c stw r31,60(r1) ; | prolog store gpr31
44: 90 01 00 44 stw r0,68(r1) ; | store lr
48: 7c 3f 0b 78 mr r31,r1 ; / sp -> gpr31, latter used for some fixed addressing below
4c: 90 7f 00 08 stw r3,8(r31) ; \
50: 90 9f 00 0c stw r4,12(r31) ; |
54: 90 bf 00 10 stw r5,16(r31) ; |
58: 90 df 00 14 stw r6,20(r31) ; |
5c: 90 ff 00 18 stw r7,24(r31) ; | all in args -> temp space in local area
60: 91 1f 00 1c stw r8,28(r31) ; |
64: 91 3f 00 20 stw r9,32(r31) ; |
68: 91 5f 00 24 stw r10,36(r31) ; |
6c: 80 01 00 00 lwz r0,0(r1) ; fetch sp saved on stack of top by prolog -> gpr0, and ...
70: 94 01 ff 10 stwu r0,-240(r1) ; ... update it further up the stack for alloca(220) - with padding to guarantee alignment
74: 39 21 00 08 addi r9,r1,8 ; |
78: 91 3f 00 28 stw r9,40(r31) ; |
7c: 81 3f 00 28 lwz r9,40(r31) ; |
80: 38 09 00 0f addi r0,r9,15 ; | start of alloca()'d memory -> gpr9, by ...
84: 54 00 e1 3e rlwinm r0,r0,28,4,31 ; | ... using gpr0 as helper to align to 16b, leaving at least 8b at top of stock
88: 54 00 20 36 rlwinm r0,r0,4,0,27 ; |
8c: 90 1f 00 28 stw r0,40(r31) ; |
90: 81 3f 00 28 lwz r9,40(r31) ; |
94: 38 00 00 4c li r0,76 ; 'L' -> gpr0, and ...
98: 98 09 00 00 stb r0,0(r9) ; ... store in local area (of alloca()'d space)
9c: 80 7f 00 0c lwz r3,12(r31) ; arg 0
a0: 80 9f 00 10 lwz r4,16(r31) ; arg 1
a4: 80 bf 00 14 lwz r5,20(r31) ; arg 2
a8: 80 df 00 18 lwz r6,24(r31) ; arg 3
ac: 80 ff 00 1c lwz r7,28(r31) ; arg 4
b0: 81 1f 00 20 lwz r8,32(r31) ; arg 5
b4: 81 3f 00 24 lwz r9,36(r31) ; arg 6
b8: 48 00 00 01 bl b8 <nonleaf_call+0x80> ; call and put return address -> lr
bc: 81 61 00 00 lwz r11,0(r1) ; |
c0: 80 0b 00 04 lwz r0,4(r11) ; |
c4: 7c 08 03 a6 mtlr r0 ; |
c8: 83 eb ff fc lwz r31,-4(r11) ; | epilog
cc: 7d 61 5b 78 mr r1,r11 ; |
d0: 4e 80 00 20 blr ; |
000000d4 <main>:
d4: 94 21 ff f0 stwu r1,-16(r1) ; |
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
40: 93 e1 00 3c stw r31,60(r1)
44: 90 01 00 44 stw r0,68(r1)
48: 7c 3f 0b 78 mr r31,r1
4c: 90 7f 00 08 stw r3,8(r31)
50: 90 9f 00 0c stw r4,12(r31)
54: 90 bf 00 10 stw r5,16(r31)
58: 90 df 00 14 stw r6,20(r31)
5c: 90 ff 00 18 stw r7,24(r31)
60: 91 1f 00 1c stw r8,28(r31)
64: 91 3f 00 20 stw r9,32(r31)
68: 91 5f 00 24 stw r10,36(r31)
6c: 80 01 00 00 lwz r0,0(r1)
70: 94 01 ff 10 stwu r0,-240(r1)
74: 39 21 00 08 addi r9,r1,8
78: 91 3f 00 28 stw r9,40(r31)
7c: 81 3f 00 28 lwz r9,40(r31)
80: 38 09 00 0f addi r0,r9,15
84: 54 00 e1 3e rlwinm r0,r0,28,4,31
88: 54 00 20 36 rlwinm r0,r0,4,0,27
8c: 90 1f 00 28 stw r0,40(r31)
90: 81 3f 00 28 lwz r9,40(r31)
94: 38 00 00 4c li r0,76
98: 98 09 00 00 stb r0,0(r9)
9c: 80 7f 00 0c lwz r3,12(r31)
a0: 80 9f 00 10 lwz r4,16(r31)
a4: 80 bf 00 14 lwz r5,20(r31)
a8: 80 df 00 18 lwz r6,24(r31)
ac: 80 ff 00 1c lwz r7,28(r31)
b0: 81 1f 00 20 lwz r8,32(r31)
b4: 81 3f 00 24 lwz r9,36(r31)
b8: 48 00 00 01 bl b8 <nonleaf_call+0x80>
bc: 81 61 00 00 lwz r11,0(r1)
c0: 80 0b 00 04 lwz r0,4(r11)
c4: 7c 08 03 a6 mtlr r0
c8: 83 eb ff fc lwz r31,-4(r11)
cc: 7d 61 5b 78 mr r1,r11
d0: 4e 80 00 20 blr
000000d4 <main>:
d4: 94 21 ff e0 stwu r1,-32(r1)
d8: 7c 08 02 a6 mflr r0
dc: 93 e1 00 1c stw r31,28(r1)
e0: 90 01 00 24 stw r0,36(r1)
e4: 7c 3f 0b 78 mr r31,r1
e8: 38 60 00 00 li r3,0
ec: 38 80 00 01 li r4,1
f0: 38 a0 00 02 li r5,2
f4: 38 c0 00 03 li r6,3
f8: 38 e0 00 04 li r7,4
fc: 39 00 00 05 li r8,5
100: 39 20 00 06 li r9,6
104: 39 40 00 07 li r10,7
108: 48 00 00 01 bl 108 <main+0x34>
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
00000000 <call>:
0: 94 21 ff d0 stwu r1,-48(r1)
4: 93 e1 00 2c stw r31,44(r1)
8: 7c 3f 0b 78 mr r31,r1
c: 90 7f 00 08 stw r3,8(r31)
10: 90 bf 00 10 stw r5,16(r31)
14: 90 df 00 14 stw r6,20(r31)
18: 90 ff 00 18 stw r7,24(r31)
1c: 91 1f 00 1c stw r8,28(r31)
20: 91 3f 00 20 stw r9,32(r31)
24: 91 5f 00 24 stw r10,36(r31)
28: 81 61 00 00 lwz r11,0(r1)
2c: 83 eb ff fc lwz r31,-4(r11)
30: 7d 61 5b 78 mr r1,r11
34: 4e 80 00 20 blr
00000038 <main>:
38: 94 21 ff e0 stwu r1,-32(r1) ; |
3c: 7c 08 02 a6 mflr r0 ; |
40: 93 e1 00 1c stw r31,28(r1) ; | prolog
44: 90 01 00 24 stw r0,36(r1) ; |
48: 7c 3f 0b 78 mr r31,r1 ; /
4c: 39 20 00 00 li r9,0 ; \
50: 39 40 00 05 li r10,5 ; |
54: 91 21 00 08 stw r9,8(r1) ; | arg 5 via stack
58: 91 41 00 0c stw r10,12(r1) ; |
5c: 38 60 00 00 li r3,0 ; arg 0
60: 38 a0 00 00 li r5,0 ; |
64: 38 c0 00 01 li r6,1 ; | arg 1 (note that r4 is skipped)
68: 38 e0 00 02 li r7,2 ; arg 2
6c: 39 00 00 03 li r8,3 ; arg 3
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
0: 94 21 ff c0 stwu r1,-64(r1)
4: 93 e1 00 3c stw r31,60(r1)
8: 7c 3f 0b 78 mr r31,r1
c: 90 7f 00 08 stw r3,8(r31)
10: 90 9f 00 0c stw r4,12(r31)
14: 90 bf 00 10 stw r5,16(r31)
18: 90 df 00 14 stw r6,20(r31)
1c: d0 3f 00 18 stfs f1,24(r31)
20: d0 5f 00 1c stfs f2,28(r31)
24: 90 ff 00 20 stw r7,32(r31)
28: 91 1f 00 24 stw r8,36(r31)
2c: d0 7f 00 28 stfs f3,40(r31)
30: 81 61 00 00 lwz r11,0(r1)
34: 83 eb ff fc lwz r31,-4(r11)
38: 7d 61 5b 78 mr r1,r11
3c: 4e 80 00 20 blr
00000040 <nonleaf_call>:
40: 94 21 ff 30 stwu r1,-208(r1)
44: 7c 08 02 a6 mflr r0
48: 93 e1 00 cc stw r31,204(r1)
4c: 90 01 00 d4 stw r0,212(r1)
50: 7c 3f 0b 78 mr r31,r1
54: 90 9f 00 3c stw r4,60(r31)
58: 90 bf 00 40 stw r5,64(r31)
5c: 90 df 00 44 stw r6,68(r31)
60: 90 ff 00 48 stw r7,72(r31)
64: 91 1f 00 4c stw r8,76(r31)
68: 91 3f 00 50 stw r9,80(r31)
6c: 91 5f 00 54 stw r10,84(r31)
70: 40 86 00 24 bne- cr1,94 <nonleaf_call+0x54>
74: d8 3f 00 58 stfd f1,88(r31)
78: d8 5f 00 60 stfd f2,96(r31)
7c: d8 7f 00 68 stfd f3,104(r31)
80: d8 9f 00 70 stfd f4,112(r31)
84: d8 bf 00 78 stfd f5,120(r31)
88: d8 df 00 80 stfd f6,128(r31)
8c: d8 ff 00 88 stfd f7,136(r31)
90: d9 1f 00 90 stfd f8,144(r31)
94: 90 7f 00 98 stw r3,152(r31)
98: 38 00 00 01 li r0,1
9c: 98 1f 00 2c stb r0,44(r31)
a0: 38 00 00 00 li r0,0
a4: 98 1f 00 2d stb r0,45(r31)
a8: 38 1f 00 d8 addi r0,r31,216 ; make r0 point to start of prev frame's param area (would make sense as no spill area to define param area start for iteration)
ac: 90 1f 00 30 stw r0,48(r31)
b0: 38 1f 00 38 addi r0,r31,56 ; make r0 point to end of prev frame's param area (would make sense as no spill area to define param area end for iteration)
b4: 90 1f 00 34 stw r0,52(r31)
b8: 88 1f 00 2c lbz r0,44(r31)
bc: 54 00 06 3e clrlwi r0,r0,24
c0: 2b 80 00 08 cmplwi cr7,r0,8
c4: 40 9c 00 30 bge- cr7,f4 <nonleaf_call+0xb4>
c8: 81 7f 00 34 lwz r11,52(r31)
cc: 88 1f 00 2c lbz r0,44(r31)
d0: 54 09 06 3e clrlwi r9,r0,24
d4: 7d 20 4b 78 mr r0,r9
d8: 54 00 10 3a rlwinm r0,r0,2,0,29
dc: 7d 6b 02 14 add r11,r11,r0
e0: 91 7f 00 c0 stw r11,192(r31)
e4: 38 09 00 01 addi r0,r9,1
e8: 54 00 06 3e clrlwi r0,r0,24
ec: 98 1f 00 2c stb r0,44(r31)
f0: 48 00 00 14 b 104 <nonleaf_call+0xc4>
f4: 81 3f 00 30 lwz r9,48(r31)
f8: 91 3f 00 c0 stw r9,192(r31)
fc: 38 09 00 04 addi r0,r9,4
100: 90 1f 00 30 stw r0,48(r31)
104: 81 3f 00 c0 lwz r9,192(r31)
108: 80 09 00 00 lwz r0,0(r9)
10c: 90 1f 00 28 stw r0,40(r31)
110: 88 1f 00 2c lbz r0,44(r31)
114: 54 00 06 3e clrlwi r0,r0,24
118: 2b 80 00 08 cmplwi cr7,r0,8
11c: 40 9c 00 30 bge- cr7,14c <nonleaf_call+0x10c>
120: 81 7f 00 34 lwz r11,52(r31)
124: 88 1f 00 2c lbz r0,44(r31)
128: 54 09 06 3e clrlwi r9,r0,24
12c: 7d 20 4b 78 mr r0,r9
130: 54 00 10 3a rlwinm r0,r0,2,0,29
134: 7d 6b 02 14 add r11,r11,r0
138: 91 7f 00 bc stw r11,188(r31)
13c: 38 09 00 01 addi r0,r9,1
140: 54 00 06 3e clrlwi r0,r0,24
144: 98 1f 00 2c stb r0,44(r31)
148: 48 00 00 14 b 15c <nonleaf_call+0x11c>
14c: 81 3f 00 30 lwz r9,48(r31)
150: 91 3f 00 bc stw r9,188(r31)
154: 38 09 00 04 addi r0,r9,4
158: 90 1f 00 30 stw r0,48(r31)
15c: 81 3f 00 bc lwz r9,188(r31)
160: 80 09 00 00 lwz r0,0(r9)
164: 90 1f 00 24 stw r0,36(r31)
168: 88 1f 00 2c lbz r0,44(r31)
16c: 54 00 06 3e clrlwi r0,r0,24
170: 2b 80 00 08 cmplwi cr7,r0,8
174: 40 9c 00 30 bge- cr7,1a4 <nonleaf_call+0x164>
178: 81 7f 00 34 lwz r11,52(r31)
17c: 88 1f 00 2c lbz r0,44(r31)
180: 54 09 06 3e clrlwi r9,r0,24
184: 7d 20 4b 78 mr r0,r9
188: 54 00 10 3a rlwinm r0,r0,2,0,29
18c: 7d 6b 02 14 add r11,r11,r0
190: 91 7f 00 b8 stw r11,184(r31)
194: 38 09 00 01 addi r0,r9,1
198: 54 00 06 3e clrlwi r0,r0,24
19c: 98 1f 00 2c stb r0,44(r31)
1a0: 48 00 00 14 b 1b4 <nonleaf_call+0x174>
1a4: 81 3f 00 30 lwz r9,48(r31)
1a8: 91 3f 00 b8 stw r9,184(r31)
1ac: 38 09 00 04 addi r0,r9,4
1b0: 90 1f 00 30 stw r0,48(r31)
1b4: 81 3f 00 b8 lwz r9,184(r31)
1b8: 80 09 00 00 lwz r0,0(r9)
1bc: 90 1f 00 20 stw r0,32(r31)
1c0: 88 1f 00 2c lbz r0,44(r31)
1c4: 54 00 06 3e clrlwi r0,r0,24
1c8: 2b 80 00 08 cmplwi cr7,r0,8
1cc: 40 9c 00 30 bge- cr7,1fc <nonleaf_call+0x1bc>
1d0: 81 7f 00 34 lwz r11,52(r31)
1d4: 88 1f 00 2c lbz r0,44(r31)
1d8: 54 09 06 3e clrlwi r9,r0,24
1dc: 7d 20 4b 78 mr r0,r9
1e0: 54 00 10 3a rlwinm r0,r0,2,0,29
1e4: 7d 6b 02 14 add r11,r11,r0
1e8: 91 7f 00 b4 stw r11,180(r31)
1ec: 38 09 00 01 addi r0,r9,1
1f0: 54 00 06 3e clrlwi r0,r0,24
1f4: 98 1f 00 2c stb r0,44(r31)
1f8: 48 00 00 14 b 20c <nonleaf_call+0x1cc>
1fc: 81 3f 00 30 lwz r9,48(r31)
200: 91 3f 00 b4 stw r9,180(r31)
204: 38 09 00 04 addi r0,r9,4
208: 90 1f 00 30 stw r0,48(r31)
20c: 81 3f 00 b4 lwz r9,180(r31)
210: 80 09 00 00 lwz r0,0(r9)
214: 90 1f 00 1c stw r0,28(r31)
218: 88 1f 00 2d lbz r0,45(r31)
21c: 54 00 06 3e clrlwi r0,r0,24
220: 2b 80 00 08 cmplwi cr7,r0,8
224: 40 9c 00 34 bge- cr7,258 <nonleaf_call+0x218>
228: 81 3f 00 34 lwz r9,52(r31)
22c: 39 69 00 20 addi r11,r9,32
230: 88 1f 00 2d lbz r0,45(r31)
234: 54 09 06 3e clrlwi r9,r0,24
238: 7d 20 4b 78 mr r0,r9
23c: 54 00 18 38 rlwinm r0,r0,3,0,28
240: 7d 6b 02 14 add r11,r11,r0
244: 91 7f 00 b0 stw r11,176(r31)
248: 38 09 00 01 addi r0,r9,1
24c: 54 00 06 3e clrlwi r0,r0,24
250: 98 1f 00 2d stb r0,45(r31)
254: 48 00 00 1c b 270 <nonleaf_call+0x230>
258: 81 3f 00 30 lwz r9,48(r31)
25c: 38 09 00 07 addi r0,r9,7
260: 54 09 00 38 rlwinm r9,r0,0,0,28
264: 91 3f 00 b0 stw r9,176(r31)
268: 38 09 00 08 addi r0,r9,8
26c: 90 1f 00 30 stw r0,48(r31)
270: 81 3f 00 b0 lwz r9,176(r31)
274: c8 09 00 00 lfd f0,0(r9)
278: fc 00 00 18 frsp f0,f0
27c: d0 1f 00 10 stfs f0,16(r31)
280: 88 1f 00 2d lbz r0,45(r31)
284: 54 00 06 3e clrlwi r0,r0,24
288: 2b 80 00 08 cmplwi cr7,r0,8
28c: 40 9c 00 34 bge- cr7,2c0 <nonleaf_call+0x280>
290: 81 3f 00 34 lwz r9,52(r31)
294: 39 69 00 20 addi r11,r9,32
298: 88 1f 00 2d lbz r0,45(r31)
29c: 54 09 06 3e clrlwi r9,r0,24
2a0: 7d 20 4b 78 mr r0,r9
2a4: 54 00 18 38 rlwinm r0,r0,3,0,28
2a8: 7d 6b 02 14 add r11,r11,r0
2ac: 91 7f 00 ac stw r11,172(r31)
2b0: 38 09 00 01 addi r0,r9,1
2b4: 54 00 06 3e clrlwi r0,r0,24
2b8: 98 1f 00 2d stb r0,45(r31)
2bc: 48 00 00 1c b 2d8 <nonleaf_call+0x298>
2c0: 81 3f 00 30 lwz r9,48(r31)
2c4: 38 09 00 07 addi r0,r9,7
2c8: 54 09 00 38 rlwinm r9,r0,0,0,28
2cc: 91 3f 00 ac stw r9,172(r31)
2d0: 38 09 00 08 addi r0,r9,8
2d4: 90 1f 00 30 stw r0,48(r31)
2d8: 81 3f 00 ac lwz r9,172(r31)
2dc: c8 09 00 00 lfd f0,0(r9)
2e0: fc 00 00 18 frsp f0,f0
2e4: d0 1f 00 0c stfs f0,12(r31)
2e8: 88 1f 00 2c lbz r0,44(r31)
2ec: 54 00 06 3e clrlwi r0,r0,24
2f0: 2b 80 00 08 cmplwi cr7,r0,8
2f4: 40 9c 00 30 bge- cr7,324 <nonleaf_call+0x2e4>
2f8: 81 7f 00 34 lwz r11,52(r31)
2fc: 88 1f 00 2c lbz r0,44(r31)
300: 54 09 06 3e clrlwi r9,r0,24
304: 7d 20 4b 78 mr r0,r9
308: 54 00 10 3a rlwinm r0,r0,2,0,29
30c: 7d 6b 02 14 add r11,r11,r0
310: 91 7f 00 a8 stw r11,168(r31)
314: 38 09 00 01 addi r0,r9,1
318: 54 00 06 3e clrlwi r0,r0,24
31c: 98 1f 00 2c stb r0,44(r31)
320: 48 00 00 14 b 334 <nonleaf_call+0x2f4>
324: 81 3f 00 30 lwz r9,48(r31)
328: 91 3f 00 a8 stw r9,168(r31)
32c: 38 09 00 04 addi r0,r9,4
330: 90 1f 00 30 stw r0,48(r31)
334: 81 3f 00 a8 lwz r9,168(r31)
338: 80 09 00 00 lwz r0,0(r9)
33c: 90 1f 00 18 stw r0,24(r31)
340: 88 1f 00 2c lbz r0,44(r31)
344: 54 00 06 3e clrlwi r0,r0,24
348: 2b 80 00 08 cmplwi cr7,r0,8
34c: 40 9c 00 30 bge- cr7,37c <nonleaf_call+0x33c>
350: 81 7f 00 34 lwz r11,52(r31)
354: 88 1f 00 2c lbz r0,44(r31)
358: 54 09 06 3e clrlwi r9,r0,24
35c: 7d 20 4b 78 mr r0,r9
360: 54 00 10 3a rlwinm r0,r0,2,0,29
364: 7d 6b 02 14 add r11,r11,r0
368: 91 7f 00 a4 stw r11,164(r31)
36c: 38 09 00 01 addi r0,r9,1
370: 54 00 06 3e clrlwi r0,r0,24
374: 98 1f 00 2c stb r0,44(r31)
378: 48 00 00 14 b 38c <nonleaf_call+0x34c>
37c: 81 3f 00 30 lwz r9,48(r31)
380: 91 3f 00 a4 stw r9,164(r31)
384: 38 09 00 04 addi r0,r9,4
388: 90 1f 00 30 stw r0,48(r31)
38c: 81 3f 00 a4 lwz r9,164(r31)
390: 80 09 00 00 lwz r0,0(r9)
394: 90 1f 00 14 stw r0,20(r31)
398: 88 1f 00 2d lbz r0,45(r31)
39c: 54 00 06 3e clrlwi r0,r0,24
3a0: 2b 80 00 08 cmplwi cr7,r0,8
3a4: 40 9c 00 34 bge- cr7,3d8 <nonleaf_call+0x398>
3a8: 81 3f 00 34 lwz r9,52(r31)
3ac: 39 69 00 20 addi r11,r9,32
3b0: 88 1f 00 2d lbz r0,45(r31)
3b4: 54 09 06 3e clrlwi r9,r0,24
3b8: 7d 20 4b 78 mr r0,r9
3bc: 54 00 18 38 rlwinm r0,r0,3,0,28
3c0: 7d 6b 02 14 add r11,r11,r0
3c4: 91 7f 00 a0 stw r11,160(r31)
3c8: 38 09 00 01 addi r0,r9,1
3cc: 54 00 06 3e clrlwi r0,r0,24
3d0: 98 1f 00 2d stb r0,45(r31)
3d4: 48 00 00 1c b 3f0 <nonleaf_call+0x3b0>
3d8: 81 3f 00 30 lwz r9,48(r31)
3dc: 38 09 00 07 addi r0,r9,7
3e0: 54 09 00 38 rlwinm r9,r0,0,0,28
3e4: 91 3f 00 a0 stw r9,160(r31)
3e8: 38 09 00 08 addi r0,r9,8
3ec: 90 1f 00 30 stw r0,48(r31)
3f0: 81 3f 00 a0 lwz r9,160(r31)
3f4: c8 09 00 00 lfd f0,0(r9)
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
40c: 91 3f 00 9c stw r9,156(r31)
410: 81 3f 00 9c lwz r9,156(r31)
414: 38 09 00 0f addi r0,r9,15
418: 54 00 e1 3e rlwinm r0,r0,28,4,31
41c: 54 00 20 36 rlwinm r0,r0,4,0,27
420: 90 1f 00 9c stw r0,156(r31)
424: 81 3f 00 9c lwz r9,156(r31)
428: 38 00 00 4c li r0,76
42c: 98 09 00 00 stb r0,0(r9)
430: 80 7f 00 28 lwz r3,40(r31)
434: 80 9f 00 24 lwz r4,36(r31)
438: 80 bf 00 20 lwz r5,32(r31)
43c: 80 df 00 1c lwz r6,28(r31)
440: c0 3f 00 10 lfs f1,16(r31)
444: c0 5f 00 0c lfs f2,12(r31)
448: 80 ff 00 18 lwz r7,24(r31)
44c: 81 1f 00 14 lwz r8,20(r31)
450: c0 7f 00 08 lfs f3,8(r31)
454: 48 00 00 01 bl 454 <nonleaf_call+0x414>
458: 81 61 00 00 lwz r11,0(r1)
45c: 80 0b 00 04 lwz r0,4(r11)
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
114: 81 29 00 0c lwz r9,12(r9) ;
118: 90 1f 00 08 stw r0,8(r31) ;
11c: 91 7f 00 0c stw r11,12(r31) ;
120: 91 5f 00 10 stw r10,16(r31) ;
124: 91 3f 00 14 stw r9,20(r31) ;
128: 80 1f 00 08 lwz r0,8(r31) ;
12c: 81 3f 00 0c lwz r9,12(r31) ;
130: 81 7f 00 10 lwz r11,16(r31) ;
134: 81 5f 00 14 lwz r10,20(r31) ;
138: 90 1f 00 20 stw r0,32(r31) ;
13c: 91 3f 00 24 stw r9,36(r31) ;
140: 91 7f 00 28 stw r11,40(r31) ;
144: 91 5f 00 2c stw r10,44(r31) ;
148: 38 1f 00 20 addi r0,r31,32 ;
14c: 38 60 00 00 li r3,0 ; arg 0
150: 38 80 00 01 li r4,1 ; arg 1
154: 38 a0 00 02 li r5,2 ; arg 2
158: 38 c0 00 03 li r6,3 ; arg 3
15c: 38 e0 00 04 li r7,4 ; arg 4
160: 7c 08 03 78 mr r8,r0 ; arg 5 (struct, passed as pointer to local copy)
164: 39 20 00 08 li r9,8 ; arg 6
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
1b4: 90 1f 00 30 stw r0,48(r31)
1b8: 91 7f 00 34 stw r11,52(r31)
1bc: 91 5f 00 38 stw r10,56(r31)
1c0: 91 3f 00 3c stw r9,60(r31)
1c4: 3d 20 00 00 lis r9,0
1c8: 39 29 00 10 addi r9,r9,16
1cc: 80 09 00 00 lwz r0,0(r9)
1d0: 81 69 00 04 lwz r11,4(r9)
1d4: 81 29 00 08 lwz r9,8(r9)
1d8: 90 1f 00 20 stw r0,32(r31)
1dc: 91 7f 00 24 stw r11,36(r31)
1e0: 91 3f 00 28 stw r9,40(r31)
1e4: 3d 20 00 00 lis r9,0
1e8: 39 29 00 00 addi r9,r9,0
1ec: 80 09 00 00 lwz r0,0(r9)
1f0: 81 69 00 04 lwz r11,4(r9)
1f4: 81 49 00 08 lwz r10,8(r9)
1f8: 81 29 00 0c lwz r9,12(r9)
1fc: 90 1f 00 10 stw r0,16(r31)
200: 91 7f 00 14 stw r11,20(r31)
204: 91 5f 00 18 stw r10,24(r31)
208: 91 3f 00 1c stw r9,28(r31)
20c: 80 1f 00 40 lwz r0,64(r31)
210: 81 3f 00 44 lwz r9,68(r31)
214: 81 7f 00 48 lwz r11,72(r31)
218: 90 1f 00 58 stw r0,88(r31)
21c: 91 3f 00 5c stw r9,92(r31)
220: 91 7f 00 60 stw r11,96(r31)
224: 80 1f 00 30 lwz r0,48(r31)
228: 81 3f 00 34 lwz r9,52(r31)
22c: 81 7f 00 38 lwz r11,56(r31)
230: 81 5f 00 3c lwz r10,60(r31)
234: 90 1f 00 68 stw r0,104(r31)
238: 91 3f 00 6c stw r9,108(r31)
23c: 91 7f 00 70 stw r11,112(r31)
240: 91 5f 00 74 stw r10,116(r31)
244: 80 1f 00 20 lwz r0,32(r31)
248: 81 3f 00 24 lwz r9,36(r31)
24c: 81 7f 00 28 lwz r11,40(r31)
250: 90 1f 00 78 stw r0,120(r31)
254: 91 3f 00 7c stw r9,124(r31)
258: 91 7f 00 80 stw r11,128(r31)
25c: 80 1f 00 10 lwz r0,16(r31)
260: 81 3f 00 14 lwz r9,20(r31)
264: 81 7f 00 18 lwz r11,24(r31)
268: 81 5f 00 1c lwz r10,28(r31)
26c: 90 1f 00 88 stw r0,136(r31)
270: 91 3f 00 8c stw r9,140(r31)
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
bc: 4c c6 31 82 crclr 4*cr1+eq ; :
c0: 48 00 00 01 bl c0 <main+0x20> ; call f0()
c4: 88 1f 00 28 lbz r0,40(r31) ;
c8: 98 1f 00 08 stb r0,8(r31) ;
cc: 38 1f 00 10 addi r0,r31,16 ; |
d0: 7c 03 03 78 mr r3,r0 ; | space to retval -> gpr3 (hidden arg)
d4: 4c c6 31 82 crclr 4*cr1+eq ; :
d8: 48 00 00 01 bl d8 <main+0x38> ; call f1()
dc: 81 3f 00 18 lwz r9,24(r31) ;
e0: 88 1f 00 08 lbz r0,8(r31) ;
e4: 54 00 06 3e clrlwi r0,r0,24 ;
e8: 7c 09 02 14 add r0,r9,r0 ;
ec: 7c 03 03 78 mr r3,r0 ;
f0: 81 61 00 00 lwz r11,0(r1) ; |
f4: 80 0b 00 04 lwz r0,4(r11) ; |
f8: 7c 08 03 a6 mtlr r0 ; |
fc: 83 eb ff fc lwz r31,-4(r11) ; | epilog
100: 7d 61 5b 78 mr r1,r11 ; |
104: 4e 80 00 20 blr ; |
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
18007fc: 91 1f 00 10 stw r8,16(r31)
1800800: 91 3f 00 14 stw r9,20(r31)
1800804: 80 1f 00 08 lwz r0,8(r31)
1800808: 81 3f 00 0c lwz r9,12(r31)
180080c: 81 5f 00 10 lwz r10,16(r31)
1800810: 81 1f 00 14 lwz r8,20(r31)
1800814: 90 0b 00 00 stw r0,0(r11)
1800818: 91 2b 00 04 stw r9,4(r11)
180081c: 91 4b 00 08 stw r10,8(r11)
1800820: 91 0b 00 0c stw r8,12(r11)
1800824: 7d 63 5b 78 mr r3,r11
1800828: 81 61 00 00 lwz r11,0(r1)
180082c: 83 eb ff fc lwz r31,-4(r11)
1800830: 7d 61 5b 78 mr r1,r11
1800834: 4e 80 00 20 blr
01800838 <main>:
1800838: 94 21 ff c0 stwu r1,-64(r1) ; | open frame and store sp at top of stack
180083c: 7c 08 02 a6 mflr r0 ; | lr -> gpr0
1800840: 93 e1 00 3c stw r31,60(r1) ; | prolog store gpr31
1800844: 90 01 00 44 stw r0,68(r1) ; | store lr
1800848: 7c 3f 0b 78 mr r31,r1 ; | sp -> gpr31, latter used for some fixed addressing below
180084c: 4b ff ff 55 bl 18007a0 <f0> ; call f0()
1800850: 7c 60 1b 78 mr r0,r3 ; | NOTE: ret val is returned via gpr3
1800854: 98 1f 00 08 stb r0,8(r31) ; / ret val
1800858: 38 1f 00 10 addi r0,r31,16 ; \
180085c: 7c 03 03 78 mr r3,r0 ; | space to retval -> gpr3 (hidden arg)
1800860: 4c c6 31 82 crclr 4*cr1+eq ; :
1800864: 4b ff ff 69 bl 18007cc <f1> ; call f0()
1800868: 81 3f 00 18 lwz r9,24(r31) ;
180086c: 88 1f 00 08 lbz r0,8(r31) ;
1800870: 54 00 06 3e clrlwi r0,r0,24 ;
1800874: 7c 09 02 14 add r0,r9,r0 ;
1800878: 7c 03 03 78 mr r3,r0 ;
180087c: 81 61 00 00 lwz r11,0(r1) ;
1800880: 80 0b 00 04 lwz r0,4(r11) ;
1800884: 7c 08 03 a6 mtlr r0 ;
1800888: 83 eb ff fc lwz r31,-4(r11) ;
180088c: 7d 61 5b 78 mr r1,r11 ;
1800890: 4e 80 00 20 blr ;
1800894: 00 01 81 48 .long 0x18148 ;
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
10000404: 7c 3f 0b 78 mr r31,r1
10000408: 90 7f 00 08 stw r3,8(r31)
1000040c: 81 61 00 00 lwz r11,0(r1)
10000410: 83 eb ff fc lwz r31,-4(r11)
10000414: 7d 61 5b 78 mr r1,r11
10000418: 4e 80 00 20 blr
1000041c <f>:
1000041c: 94 21 ff d0 stwu r1,-48(r1) ;
10000420: 7c 08 02 a6 mflr r0 ;
10000424: 93 e1 00 2c stw r31,44(r1) ;
10000428: 90 01 00 34 stw r0,52(r1) ;
1000042c: 7c 3f 0b 78 mr r31,r1 ;
10000430: 38 1f 00 14 addi r0,r31,20 ;
10000434: 7c 03 03 78 mr r3,r0 ;
10000438: 48 00 00 a1 bl 100004d8 <_ZN10NonTrivialC1Ev> ; NonTrivial::NonTrivial() / ctor
1000043c: 38 00 00 01 li r0,1 ;
10000440: 90 1f 00 08 stw r0,8(r31) ;
10000444: 81 3f 00 08 lwz r9,8(r31) ;
10000448: 38 09 00 7b addi r0,r9,123 ;
1000044c: 90 1f 00 08 stw r0,8(r31) ;
10000450: 80 1f 00 10 lwz r0,16(r31) ;
10000454: 90 1f 00 18 stw r0,24(r31) ;
10000458: 38 1f 00 18 addi r0,r31,24 ;
1000045c: 7c 03 03 78 mr r3,r0 ;
10000460: 4b ff ff 81 bl 100003e0 <f1> ; call f1(struct Trivial)
10000464: 81 3f 00 08 lwz r9,8(r31) ;
10000468: 38 09 ff 85 addi r0,r9,-123 ;
1000046c: 90 1f 00 08 stw r0,8(r31) ;
10000470: 38 1f 00 0c addi r0,r31,12 ;
10000474: 39 3f 00 14 addi r9,r31,20 ;
10000478: 7c 03 03 78 mr r3,r0 ; | ptr to dest of copy of n
1000047c: 7d 24 4b 78 mr r4,r9 ; | copy n ptr to n
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
100003fc: 81 61 00 00 lwz r11,0(r1)
10000400: 83 eb ff fc lwz r31,-4(r11)
10000404: 7d 61 5b 78 mr r1,r11
10000408: 4e 80 00 20 blr
1000040c <_Z2f2v>:
1000040c: 94 21 ff e0 stwu r1,-32(r1)
10000410: 7c 08 02 a6 mflr r0
10000414: 93 a1 00 14 stw r29,20(r1)
10000418: 93 e1 00 1c stw r31,28(r1)
1000041c: 90 01 00 24 stw r0,36(r1)
10000420: 7c 3f 0b 78 mr r31,r1
10000424: 7c 7d 1b 78 mr r29,r3
10000428: 7f a0 eb 78 mr r0,r29
1000042c: 7c 03 03 78 mr r3,r0
10000430: 48 00 00 d5 bl 10000504 <_ZN10NonTrivialC1Ev>
10000434: 7f a3 eb 78 mr r3,r29
10000438: 81 61 00 00 lwz r11,0(r1)
1000043c: 80 0b 00 04 lwz r0,4(r11)
10000440: 7c 08 03 a6 mtlr r0
10000444: 83 ab ff f4 lwz r29,-12(r11)
10000448: 83 eb ff fc lwz r31,-4(r11)
1000044c: 7d 61 5b 78 mr r1,r11
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
10000460: 90 01 00 34 stw r0,52(r1) ; | store lr
10000464: 7c 3f 0b 78 mr r31,r1 ; / sp -> gpr31, latter used for some fixed addressing below
10000468: 38 00 00 01 li r0,1 ; \ a = 1
1000046c: 90 1f 00 08 stw r0,8(r31) ; /
10000470: 81 3f 00 08 lwz r9,8(r31) ; \
10000474: 38 09 00 7b addi r0,r9,123 ; | a += 123
10000478: 90 1f 00 08 stw r0,8(r31) ; /
1000047c: 38 1f 00 18 addi r0,r31,24 ; \
10000480: 7c 03 03 78 mr r3,r0 ; | space to retval -> gpr3 (hidden arg); NOTE: this follows the LSB definition
10000484: 4b ff ff 5d bl 100003e0 <f1> ; call f1()
10000488: 80 1f 00 18 lwz r0,24(r31) ;
1000048c: 90 1f 00 0c stw r0,12(r31) ;
10000490: 81 3f 00 08 lwz r9,8(r31) ;
10000494: 38 09 ff 85 addi r0,r9,-123 ;
10000498: 90 1f 00 08 stw r0,8(r31) ;
1000049c: 38 1f 00 10 addi r0,r31,16 ; |
100004a0: 7c 03 03 78 mr r3,r0 ; | hidden first arg (ptr to space to hold NonTrivial retval), via ptr as non-trivial
100004a4: 4b ff ff 69 bl 1000040c <_Z2f2v> ; call f2()
100004a8: 81 3f 00 08 lwz r9,8(r31) ;
100004ac: 38 09 ff f4 addi r0,r9,-12 ;
100004b0: 90 1f 00 08 stw r0,8(r31) ;
dyncall/doc/disas_examples/ppc.sysv.disas view on Meta::CPAN
1800854: 81 61 00 00 lwz r11,0(r1)
1800858: 83 eb ff fc lwz r31,-4(r11)
180085c: 7d 61 5b 78 mr r1,r11
1800860: 4e 80 00 20 blr
01800864 <_Z2f2v>:
1800864: 94 21 ff e0 stwu r1,-32(r1)
1800868: 7c 08 02 a6 mflr r0
180086c: 93 a1 00 14 stw r29,20(r1)
1800870: 93 e1 00 1c stw r31,28(r1)
1800874: 90 01 00 24 stw r0,36(r1)
1800878: 7c 3f 0b 78 mr r31,r1
180087c: 7c 7d 1b 78 mr r29,r3
1800880: 7f a0 eb 78 mr r0,r29
1800884: 7c 03 03 78 mr r3,r0
1800888: 48 00 00 cd bl 1800954 <_ZN10NonTrivialC1Ev>
180088c: 7f a3 eb 78 mr r3,r29
1800890: 81 61 00 00 lwz r11,0(r1)
1800894: 80 0b 00 04 lwz r0,4(r11)
1800898: 7c 08 03 a6 mtlr r0
180089c: 83 ab ff f4 lwz r29,-12(r11)
dyncall/doc/disas_examples/ppc64.elfabi.disas view on Meta::CPAN
5c: 7c 3f 0b 78 mr r31,r1 ; use gpr31 as sort of frame pointer, below
60: 7c 60 1b 78 mr r0,r3 ; in arg 0 -> gpr0
64: 7c 8b 23 78 mr r11,r4 ; in arg 1 -> gpr11
68: 90 1f 00 c0 stw r0,192(r31) ; |
6c: 91 7f 00 c8 stw r11,200(r31) ; |
70: 90 bf 00 d0 stw r5,208(r31) ; |
74: 90 df 00 d8 stw r6,216(r31) ; |
78: 90 ff 00 e0 stw r7,224(r31) ; | all in args -> spill area in prev frame (jump over own frame (144) + linkage area of prev frame (48) = 192)
7c: 91 1f 00 e8 stw r8,232(r31) ; |
80: 91 3f 00 f0 stw r9,240(r31) ; |
84: 91 5f 00 f8 stw r10,248(r31) ; |
88: e8 01 00 00 ld r0,0(r1) ; fetch back-chain ptr (parent frame's sp) from stack of top by prolog -> gpr0, and ...
8c: f8 01 ff 11 stdu r0,-240(r1) ; ... update it further up the stack for alloca(220) - with padding to guarantee alignment
90: 39 21 00 70 addi r9,r1,112 ; |
94: f9 3f 00 70 std r9,112(r31) ; |
98: e9 3f 00 70 ld r9,112(r31) ; |
9c: 38 09 00 0f addi r0,r9,15 ; | start of alloca()'d memory -> gpr9, by ...
a0: 78 00 e1 02 rldicl r0,r0,60,4 ; | ... using gpr0 as helper to align to 16b, leaving at least 112b at top of stack
a4: 78 00 26 e4 rldicr r0,r0,4,59 ; |
a8: f8 1f 00 70 std r0,112(r31) ; |
ac: e9 3f 00 70 ld r9,112(r31) ; |
dyncall/doc/disas_examples/ppc64.elfabi.disas view on Meta::CPAN
b8: 80 1f 00 c8 lwz r0,200(r31) ; prep arg 0 (from prev frame's spill area), ...
bc: 7c 08 07 b4 extsw r8,r0 ; ... -> gpr8 (w/ sign extension b/c int param in 64bit reg)
c0: 80 1f 00 d0 lwz r0,208(r31) ; prep arg 1 (from prev frame's spill area), ...
c4: 7c 07 07 b4 extsw r7,r0 ; ... -> gpr7
c8: 80 1f 00 d8 lwz r0,216(r31) ; prep arg 2 (from prev frame's spill area), ...
cc: 7c 06 07 b4 extsw r6,r0 ; ... -> gpr6
d0: 80 1f 00 e0 lwz r0,224(r31) ; prep arg 3 (from prev frame's spill area), ...
d4: 7c 09 07 b4 extsw r9,r0 ; ... -> gpr9
d8: 80 1f 00 e8 lwz r0,232(r31) ; prep arg 4 (from prev frame's spill area), ...
dc: 7c 0b 07 b4 extsw r11,r0 ; ... -> gpr11
e0: 80 1f 00 f0 lwz r0,240(r31) ; prep arg 5 (from prev frame's spill area), ...
e4: 7c 0a 07 b4 extsw r10,r0 ; ... -> gpr10
e8: 80 1f 00 f8 lwz r0,248(r31) ; prep arg 6 (from prev frame's spill area), ...
ec: 7c 00 07 b4 extsw r0,r0 ; ... -> gpr0
f0: 7d 03 43 78 mr r3,r8 ; arg 0
f4: 7c e4 3b 78 mr r4,r7 ; arg 1
f8: 7c c5 33 78 mr r5,r6 ; arg 2
fc: 7d 26 4b 78 mr r6,r9 ; arg 3
100: 7d 67 5b 78 mr r7,r11 ; arg 4
104: 7d 48 53 78 mr r8,r10 ; arg 5
108: 7c 09 03 78 mr r9,r0 ; arg 6
10c: 48 00 00 01 bl 10c <.nonleaf_call+0xc0> ; call and put return address -> lr
110: e8 21 00 00 ld r1,0(r1) ; |
dyncall/doc/disas_examples/sparc.sparc.disas view on Meta::CPAN
0: 9d e3 bf 98 save %sp, -104, %sp
4: f0 27 a0 44 st %i0, [ %fp + 0x44 ]
8: f2 27 a0 48 st %i1, [ %fp + 0x48 ]
c: f4 27 a0 4c st %i2, [ %fp + 0x4c ]
10: f6 27 a0 50 st %i3, [ %fp + 0x50 ]
14: fa 27 a0 58 st %i5, [ %fp + 0x58 ]
18: 81 e8 00 00 restore
1c: 81 c3 e0 08 retl
20: 01 00 00 00 nop
00000024 <nonleaf_call>:
24: 9d e3 bf 18 save %sp, -232, %sp
28: f0 27 a0 44 st %i0, [ %fp + 0x44 ]
2c: f2 27 a0 48 st %i1, [ %fp + 0x48 ]
30: f4 27 a0 4c st %i2, [ %fp + 0x4c ]
34: f6 27 a0 50 st %i3, [ %fp + 0x50 ]
38: f8 27 a0 54 st %i4, [ %fp + 0x54 ]
3c: a0 10 00 1d mov %i5, %l0
40: 82 07 bf 94 add %fp, -108, %g1
44: 84 10 20 64 mov 0x64, %g2
48: 90 10 00 01 mov %g1, %o0
dyncall/doc/disas_examples/sparc.sparc.disas view on Meta::CPAN
0: 9d e3 bf 98 save %sp, -104, %sp
4: 84 10 20 00 clr %g2
8: 07 00 00 07 sethi %hi(0x1c00), %g3
c: 86 10 e0 03 or %g3, 3, %g3 ! 1c03 <main+0x1bdf>
10: b0 10 00 02 mov %g2, %i0
14: b2 10 00 03 mov %g3, %i1
18: 81 e8 00 00 restore
1c: 81 c3 e0 08 retl
20: 01 00 00 00 nop
00000024 <main>:
24: 9d e3 bf 98 save %sp, -104, %sp
28: 40 00 00 00 call 28 <main+0x4>
2c: 01 00 00 00 nop
30: 84 10 00 08 mov %o0, %g2
34: 86 10 00 09 mov %o1, %g3
38: 82 10 00 03 mov %g3, %g1
3c: b0 10 00 01 mov %g1, %i0
40: 81 e8 00 00 restore
44: 81 c3 e0 08 retl
48: 01 00 00 00 nop
dyncall/doc/disas_examples/sparc.sparc.disas view on Meta::CPAN
104fc: 90 10 00 01 mov %g1, %o0 ; | ptr to dest of copy of n
10500: 92 10 00 02 mov %g2, %o1 ; | copy n ptr to n
10504: 40 00 00 19 call 10568 <_ZN10NonTrivialC1ERKS_> ; | NonTrivial::NonTrivial(const NonTrivial&) / copy ctor
10508: 01 00 00 00 nop ;
1050c: 82 07 bf f0 add %fp, -16, %g1 ; |
10510: 90 10 00 01 mov %g1, %o0 ; | f2 arg 0 (ptr to copy of struct NonTrivial), via ptr as non-trivial
10514: 7f ff ff e0 call 10494 <f2> ; call f2(struct NonTrivial)
10518: 01 00 00 00 nop ;
1051c: c2 07 bf f4 ld [ %fp + -12 ], %g1 ;
10520: 82 00 7f f4 add %g1, -12, %g1 ;
10524: c2 27 bf f4 st %g1, [ %fp + -12 ] ;
10528: 81 e8 00 00 restore ;
1052c: 81 c3 e0 08 retl ;
10530: 01 00 00 00 nop ;
; ... snip, removed code of ctor and copy ctor ...
; ---------- C++ trivial and non-trivial aggrs as return values ---------->
;
dyncall/doc/disas_examples/sparc.sparc.disas view on Meta::CPAN
10504: 9d e3 bf 98 save %sp, -104, %sp
10508: c2 07 a0 40 ld [ %fp + 0x40 ], %g1
1050c: c0 20 40 00 clr [ %g1 ]
10510: b0 10 00 01 mov %g1, %i0
10514: 81 e8 00 00 restore
10518: 81 c3 e0 0c jmp %o7 + 0xc
1051c: 01 00 00 00 nop
00010520 <_Z2f2v>:
10520: 9d e3 bf 98 save %sp, -104, %sp
10524: e0 07 a0 40 ld [ %fp + 0x40 ], %l0
10528: 82 10 00 10 mov %l0, %g1
1052c: 90 10 00 01 mov %g1, %o0
10530: 40 00 00 29 call 105d4 <_ZN10NonTrivialC1Ev>
10534: 01 00 00 00 nop
10538: b0 10 00 10 mov %l0, %i0
1053c: 81 e8 00 00 restore
10540: 81 c3 e0 0c jmp %o7 + 0xc
10544: 01 00 00 00 nop
00010548 <f>:
dyncall/doc/disas_examples/sparc64.sparc64.disas view on Meta::CPAN
; }
; output from openbsd-6.0-sparc64 w/ gcc 4.2.1
0000000000000000 <leaf_call>:
0: 9d e3 bf 30 save %sp, -208, %sp
4: 82 10 00 18 mov %i0, %g1
8: 84 10 00 19 mov %i1, %g2
c: 91 a0 00 24 fmovs %f4, %f8
10: 95 a0 00 46 fmovd %f6, %f10
14: 86 10 00 1c mov %i4, %g3
18: 88 10 00 1d mov %i5, %g4
1c: 93 a0 00 30 fmovs %f16, %f9
20: 99 a0 00 52 fmovd %f18, %f12
24: c2 27 a8 7f st %g1, [ %fp + 0x87f ]
28: c4 77 a8 87 stx %g2, [ %fp + 0x887 ]
2c: d1 27 a8 8f st %f8, [ %fp + 0x88f ]
30: d5 3f a8 97 std %f10, [ %fp + 0x897 ]
34: c6 77 a8 9f stx %g3, [ %fp + 0x89f ]
dyncall/doc/disas_examples/sparc64.sparc64.disas view on Meta::CPAN
; output from openbsd-6.0-sparc64 w/ gcc 4.2.1
0000000000000000 <leaf_call>:
0: 9d e3 bf 30 save %sp, -208, %sp
4: 82 10 00 18 mov %i0, %g1
8: 91 a0 00 21 fmovs %f1, %f8
c: 93 a0 00 22 fmovs %f2, %f9
10: 84 10 00 19 mov %i1, %g2
14: 95 a0 00 24 fmovs %f4, %f10
18: 86 10 00 1a mov %i2, %g3
1c: 88 10 00 1b mov %i3, %g4
20: 97 a0 00 27 fmovs %f7, %f11
24: c2 77 a8 7f stx %g1, [ %fp + 0x87f ]
28: d1 27 a8 83 st %f8, [ %fp + 0x883 ]
2c: d3 27 a8 87 st %f9, [ %fp + 0x887 ]
30: c4 27 a8 8b st %g2, [ %fp + 0x88b ]
34: d5 27 a8 8f st %f10, [ %fp + 0x88f ]
38: c6 27 a8 93 st %g3, [ %fp + 0x893 ]
3c: c8 77 a8 97 stx %g4, [ %fp + 0x897 ]
dyncall/doc/disas_examples/sparc64.sparc64.disas view on Meta::CPAN
; output from openbsd-6.0-sparc64 w/ gcc 4.2.1
0000000000000000 <leaf_call>:
0: 9d e3 bf 30 save %sp, -208, %sp
4: c1 27 a8 7f st %f0, [ %fp + 0x87f ]
8: 9d a0 00 22 fmovs %f2, %f14
c: 9f a0 00 23 fmovs %f3, %f15
10: a1 a0 00 24 fmovs %f4, %f16
14: a3 a0 00 25 fmovs %f5, %f17
18: a5 a0 00 26 fmovs %f6, %f18
1c: d1 3f a8 9f std %f8, [ %fp + 0x89f ]
20: 91 a0 00 4a fmovd %f10, %f8
24: 95 a0 00 4c fmovd %f12, %f10
28: d1 3f a8 a7 std %f8, [ %fp + 0x8a7 ]
2c: d5 3f a8 af std %f10, [ %fp + 0x8af ]
30: dd 27 a8 87 st %f14, [ %fp + 0x887 ]
34: df 27 a8 8b st %f15, [ %fp + 0x88b ]
38: e1 27 a8 8f st %f16, [ %fp + 0x88f ]
dyncall/doc/disas_examples/sparc64.sparc64.disas view on Meta::CPAN
0: 9d e3 bf 30 save %sp, -208, %sp
4: 82 10 3f 84 mov -124, %g1
8: c2 2f a7 e6 stb %g1, [ %fp + 0x7e6 ]
c: c2 0f a7 e6 ldub [ %fp + 0x7e6 ], %g1
10: 82 08 60 ff and %g1, 0xff, %g1
14: 83 28 70 38 sllx %g1, 0x38, %g1
18: b0 10 00 01 mov %g1, %i0
1c: 81 cf e0 08 rett %i7 + 8
20: 01 00 00 00 nop
0000000000000024 <f1>:
24: 9d e3 bf 10 save %sp, -240, %sp
28: 84 10 00 18 mov %i0, %g2
2c: 03 00 1c 03 sethi %hi(0x700c00), %g1
30: 83 30 70 0a srlx %g1, 0xa, %g1
34: c2 77 a7 bf stx %g1, [ %fp + 0x7bf ]
38: 82 10 20 63 mov 0x63, %g1
3c: c2 77 a7 c7 stx %g1, [ %fp + 0x7c7 ]
40: 82 10 3f 9d mov -99, %g1
44: c2 77 a7 cf stx %g1, [ %fp + 0x7cf ]
48: 82 10 33 e2 mov -3102, %g1
dyncall/doc/disas_examples/sparc64.sparc64.disas view on Meta::CPAN
d98: 81 cf e0 08 rett %i7 + 8
d9c: 01 00 00 00 nop
da0: ae 03 c0 17 add %o7, %l7, %l7
da4: 81 c3 e0 08 retl
da8: 01 00 00 00 nop
0000000000000dac <f>:
dac: 9d e3 bf 10 save %sp, -240, %sp ;
db0: 2f 00 0c 00 sethi %hi(0x300000), %l7 ;
db4: ae 05 e2 a0 add %l7, 0x2a0, %l7 ;
db8: 7f ff ff fa call da0 <_Z2f2v+0x24> ;
dbc: 01 00 00 00 nop ;
dc0: 03 00 00 00 sethi %hi(0), %g1 ;
dc4: 82 10 60 48 or %g1, 0x48, %g1 ;
dc8: c2 5d c0 01 ldx [ %l7 + %g1 ], %g1 ;
dcc: c4 58 40 00 ldx [ %g1 ], %g2 ;
dd0: c4 77 a7 e7 stx %g2, [ %fp + 0x7e7 ] ;
dd4: 84 10 20 00 clr %g2 ;
dd8: 82 10 20 01 mov 1, %g1 ;
ddc: c2 27 a7 e3 st %g1, [ %fp + 0x7e3 ] ;
de0: c2 07 a7 e3 ld [ %fp + 0x7e3 ], %g1 ;
dyncall/doc/disas_examples/x64.sysv.disas view on Meta::CPAN
360: 48 89 8d e0 fd ff ff mov %rcx,-0x220(%rbp) ;
367: e9 20 00 00 00 jmpq 38c <nonleaf_call+0x36c> ;
36c: 48 8b 85 f0 fd ff ff mov -0x210(%rbp),%rax ;
373: 48 8b 48 08 mov 0x8(%rax),%rcx ;
377: 48 89 ca mov %rcx,%rdx ;
37a: 48 81 c1 08 00 00 00 add $0x8,%rcx ;
381: 48 89 48 08 mov %rcx,0x8(%rax) ;
385: 48 89 95 e0 fd ff ff mov %rdx,-0x220(%rbp) ;
38c: 48 8b 85 e0 fd ff ff mov -0x220(%rbp),%rax ;
393: 8b 08 mov (%rax),%ecx ;
395: 89 4d dc mov %ecx,-0x24(%rbp) ;
398: 48 89 e0 mov %rsp,%rax ;
39b: 48 89 c2 mov %rax,%rdx ;
39e: 48 81 c2 20 ff ff ff add $0xffffffffffffff20,%rdx ;
3a5: 48 89 d4 mov %rdx,%rsp ;
3a8: c6 80 20 ff ff ff 4c movb $0x4c,-0xe0(%rax) ; 'L' -> local area (of alloca()'d space)
3af: 8b 7d f0 mov -0x10(%rbp),%edi ; arg 0
3b2: 8b 75 ec mov -0x14(%rbp),%esi ; arg 1
3b5: 8b 55 e8 mov -0x18(%rbp),%edx ; arg 2
3b8: 8b 4d e4 mov -0x1c(%rbp),%ecx ; arg 3
3bb: 44 8b 45 e0 mov -0x20(%rbp),%r8d ; in arg 5 (local copy) -> r8 pointless, free regs available and using arg reg as temporary, needs freeing below
3bf: 44 8b 4d dc mov -0x24(%rbp),%r9d ; in arg 6 (stack) -> r9 pointless, free regs available and using arg reg as temporary, needs freeing below
3c3: 48 8b 45 c8 mov -0x38(%rbp),%rax ; in arg 4 (A.i, A.j) -> hold in scratch reg
3c7: 4c 8b 55 d0 mov -0x30(%rbp),%r10 ; in arg 4 (A.l) -> hold in scratch reg
3cb: 48 83 ec 10 sub $0x10,%rsp ; | stack space to pass arg 5 and 6, access ptr in r11
3cf: 49 89 e3 mov %rsp,%r11 ; |
3d2: 45 89 4b 08 mov %r9d,0x8(%r11) ; 'push' arg 5, 'frees' r9 implicitly
3d6: 45 89 03 mov %r8d,(%r11) ; 'push' arg 6, 'frees' r8 implicitly
3d9: 45 31 c0 xor %r8d,%r8d ; |
3dc: 44 88 85 df fd ff ff mov %r8b,-0x221(%rbp) ; | number of used xmm registers (0) -> temp store (see below)
3e3: 49 89 c0 mov %rax,%r8 ; arg 4 (A.i, A.j) |
3e6: 4d 89 d1 mov %r10,%r9 ; arg 4 (A.l) | struct passed in regs, regardless of it being a vararg
dyncall/doc/disas_examples/x86.cdecl.disas view on Meta::CPAN
18: c7 45 f4 10 00 00 00 movl $0x10,-0xc(%ebp) ; | size comp wtf? \
1f: ba 00 00 00 00 mov $0x0,%edx ; | |
24: f7 75 f4 divl -0xc(%ebp) ; | | obviously fastest way to round to multiple of 16
27: 6b c0 10 imul $0x10,%eax,%eax ; | |
2a: 29 c4 sub %eax,%esp ; alloca(220) with size containing some padding computed above
2c: 8d 44 24 1c lea 0x1c(%esp),%eax ; |
30: 83 c0 0f add $0xf,%eax ; | start of alloca()'d memory -> eax, by ...
33: c1 e8 04 shr $0x4,%eax ; | ... using ebx and 2 pointless store/reads in local space as helper to align to 16b
36: c1 e0 04 shl $0x4,%eax ; |
39: c6 00 4c movb $0x4c,(%eax) ; 'L' -> alloca()'d space
3c: 8b 45 24 mov 0x24(%ebp),%eax ; |
3f: 89 44 24 18 mov %eax,0x18(%esp) ; |
43: 8b 45 20 mov 0x20(%ebp),%eax ; |
46: 89 44 24 14 mov %eax,0x14(%esp) ; |
4a: 8b 45 1c mov 0x1c(%ebp),%eax ; |
4d: 89 44 24 10 mov %eax,0x10(%esp) ; |
51: 8b 45 18 mov 0x18(%ebp),%eax ; | read in args 1-7 from prev frame's param area, and ...
54: 89 44 24 0c mov %eax,0xc(%esp) ; | ... "push" onto stack as arg 0-6
58: 8b 45 14 mov 0x14(%ebp),%eax ; |
5b: 89 44 24 08 mov %eax,0x8(%esp) ; |
5f: 8b 45 10 mov 0x10(%ebp),%eax ; |
dyncall/doc/disas_examples/x86.cdecl.disas view on Meta::CPAN
16: 81 ec f0 00 00 00 sub $0xf0,%esp ; alloca(220) - with padding for 16b alignment
1c: 8d 44 24 1c lea 0x1c(%esp),%eax ; |
20: 89 45 fc mov %eax,-0x4(%ebp) ; |
23: 8b 45 fc mov -0x4(%ebp),%eax ; |
26: 83 c0 0f add $0xf,%eax ; | start of alloca()'d memory -> eax, by ...
29: c1 e8 04 shr $0x4,%eax ; | ... using ebx and 2 pointless store/reads in local space as helper to align to 16b
2c: c1 e0 04 shl $0x4,%eax ; |
2f: 89 45 fc mov %eax,-0x4(%ebp) ; |
32: 8b 45 fc mov -0x4(%ebp),%eax ; |
35: c6 00 4c movb $0x4c,(%eax) ; 'L' -> alloca()'d space
38: 8b 45 24 mov 0x24(%ebp),%eax ; |
3b: 89 44 24 18 mov %eax,0x18(%esp) ; |
3f: 8b 45 20 mov 0x20(%ebp),%eax ; |
42: 89 44 24 14 mov %eax,0x14(%esp) ; |
46: 8b 45 1c mov 0x1c(%ebp),%eax ; |
49: 89 44 24 10 mov %eax,0x10(%esp) ; |
4d: 8b 45 18 mov 0x18(%ebp),%eax ; | read in args 1-7 from prev frame's param area, and ...
50: 89 44 24 0c mov %eax,0xc(%esp) ; | ... "push" onto stack as arg 0-6
54: 8b 45 14 mov 0x14(%ebp),%eax ; |
57: 89 44 24 08 mov %eax,0x8(%esp) ; |
5b: 8b 45 10 mov 0x10(%ebp),%eax ; |
dyncall/doc/disas_examples/x86.cdecl.disas view on Meta::CPAN
6e: c3 ret ; | epilog
6f: 90 nop ;
00000070 <main>:
70: 8d 4c 24 04 lea 0x4(%esp),%ecx ; |
74: 83 e4 f0 and $0xfffffff0,%esp ; |
77: ff 71 fc pushl -0x4(%ecx) ; |
7a: 55 push %ebp ; | prolog
7b: 89 e5 mov %esp,%ebp ; |
7d: 51 push %ecx ; |
7e: 83 ec 24 sub $0x24,%esp ; |
81: c7 44 24 1c 07 00 00 00 movl $0x7,0x1c(%esp) ; arg 7 -> stack
89: c7 44 24 18 06 00 00 00 movl $0x6,0x18(%esp) ; arg 6 -> stack
91: c7 44 24 14 05 00 00 00 movl $0x5,0x14(%esp) ; arg 5 -> stack
99: c7 44 24 10 04 00 00 00 movl $0x4,0x10(%esp) ; arg 4 -> stack
a1: c7 44 24 0c 03 00 00 00 movl $0x3,0xc(%esp) ; arg 3 -> stack
a9: c7 44 24 08 02 00 00 00 movl $0x2,0x8(%esp) ; arg 2 -> stack
b1: c7 44 24 04 01 00 00 00 movl $0x1,0x4(%esp) ; arg 1 -> stack
b9: c7 04 24 00 00 00 00 movl $0x0,(%esp) ; arg 0 -> stack
c0: e8 fc ff ff ff call c1 <main+0x51> ; push return address and call leaf_call (objdump not from final link but .o)
c5: b8 00 00 00 00 mov $0x0,%eax ; return value
ca: 83 c4 24 add $0x24,%esp ; |
cd: 59 pop %ecx ; |
ce: 5d pop %ebp ; | epilog
cf: 8d 61 fc lea -0x4(%ecx),%esp ; |
d2: c3 ret ; |
; output from gentoo_linux-20191029-x86 w/ gcc 8.3.0
00000000 <leaf_call>:
dyncall/doc/disas_examples/x86.cdecl.disas view on Meta::CPAN
3b: ba 00 00 00 00 mov $0x0,%edx
40: f7 f1 div %ecx
42: 6b c0 10 imul $0x10,%eax,%eax
45: 29 c4 sub %eax,%esp
47: 89 e0 mov %esp,%eax
49: 83 c0 0f add $0xf,%eax
4c: c1 e8 04 shr $0x4,%eax
4f: c1 e0 04 shl $0x4,%eax
52: c6 00 4c movb $0x4c,(%eax)
55: 83 ec 04 sub $0x4,%esp
58: ff 75 24 pushl 0x24(%ebp)
5b: ff 75 20 pushl 0x20(%ebp)
5e: ff 75 1c pushl 0x1c(%ebp)
61: ff 75 18 pushl 0x18(%ebp)
64: ff 75 14 pushl 0x14(%ebp)
67: ff 75 10 pushl 0x10(%ebp)
6a: ff 75 0c pushl 0xc(%ebp)
6d: e8 fc ff ff ff call 6e <nonleaf_call+0x5e>
72: 83 c4 20 add $0x20,%esp
75: 90 nop
76: 8b 45 f4 mov -0xc(%ebp),%eax
dyncall/doc/disas_examples/x86.cdecl.disas view on Meta::CPAN
c: e8 00 00 00 00 call 11 <nonleaf_call+0xc>
11: 5b pop %ebx
12: 81 c3 03 00 00 00 add $0x3,%ebx
18: 81 ec f0 00 00 00 sub $0xf0,%esp
1e: 89 e0 mov %esp,%eax
20: 83 c0 0f add $0xf,%eax
23: c1 e8 04 shr $0x4,%eax
26: c1 e0 04 shl $0x4,%eax
29: c6 00 4c movb $0x4c,(%eax)
2c: 83 ec 04 sub $0x4,%esp
2f: ff 75 24 pushl 0x24(%ebp)
32: ff 75 20 pushl 0x20(%ebp)
35: ff 75 1c pushl 0x1c(%ebp)
38: ff 75 18 pushl 0x18(%ebp)
3b: ff 75 14 pushl 0x14(%ebp)
3e: ff 75 10 pushl 0x10(%ebp)
41: ff 75 0c pushl 0xc(%ebp)
44: e8 fc ff ff ff call 45 <nonleaf_call+0x40>
49: 83 c4 20 add $0x20,%esp
4c: 8b 5d fc mov -0x4(%ebp),%ebx
4f: c9 leave
dyncall/doc/disas_examples/x86.cdecl.disas view on Meta::CPAN
8: 83 ec 08 sub $0x8,%esp
b: 81 ec f0 00 00 00 sub $0xf0,%esp
11: 89 65 fc mov %esp,0xfffffffc(%ebp)
14: 8b 45 fc mov 0xfffffffc(%ebp),%eax
17: 83 c0 0f add $0xf,%eax
1a: c1 e8 04 shr $0x4,%eax
1d: c1 e0 04 shl $0x4,%eax
20: 89 45 fc mov %eax,0xfffffffc(%ebp)
23: 8b 45 fc mov 0xfffffffc(%ebp),%eax
26: c6 00 4c movb $0x4c,(%eax)
29: ff 75 24 pushl 0x24(%ebp)
2c: ff 75 20 pushl 0x20(%ebp)
2f: ff 75 1c pushl 0x1c(%ebp)
32: ff 75 18 pushl 0x18(%ebp)
35: ff 75 14 pushl 0x14(%ebp)
38: ff 75 10 pushl 0x10(%ebp)
3b: ff 75 0c pushl 0xc(%ebp)
3e: e8 fc ff ff ff call 3f <nonleaf_call+0x3a>
43: 83 c4 1c add $0x1c,%esp
46: c9 leave
47: c3 ret
dyncall/doc/disas_examples/x86.cdecl.disas view on Meta::CPAN
00000005 <nonleaf_call>:
5: 55 push %ebp
6: 89 e5 mov %esp,%ebp
8: 83 ec 18 sub $0x18,%esp
b: a1 00 00 00 00 mov 0x0,%eax
10: 89 45 e8 mov %eax,0xffffffe8(%ebp)
13: 81 ec e0 00 00 00 sub $0xe0,%esp
19: 89 e0 mov %esp,%eax
1b: c6 00 4c movb $0x4c,(%eax)
1e: 83 ec 04 sub $0x4,%esp
21: ff 75 24 pushl 0x24(%ebp)
24: ff 75 20 pushl 0x20(%ebp)
27: ff 75 1c pushl 0x1c(%ebp)
2a: ff 75 18 pushl 0x18(%ebp)
2d: ff 75 14 pushl 0x14(%ebp)
30: ff 75 10 pushl 0x10(%ebp)
33: ff 75 0c pushl 0xc(%ebp)
36: e8 fc ff ff ff call 37 <nonleaf_call+0x32>
3b: 83 c4 20 add $0x20,%esp
3e: 8b 45 e8 mov 0xffffffe8(%ebp),%eax
41: 3b 05 00 00 00 00 cmp 0x0,%eax
dyncall/doc/disas_examples/x86.fastcall_gnu.disas view on Meta::CPAN
120e: 6a 00 push $0x0
1210: 6a 07 push $0x7
1212: 6a 06 push $0x6
1214: 6a 05 push $0x5
1216: 6a 04 push $0x4
1218: 6a 03 push $0x3
121a: 6a 02 push $0x2
121c: 6a 01 push $0x1
121e: 6a 00 push $0x0
1220: e8 e0 ff ff ff call 1205 <leaf_call>
1225: 83 c4 24 add $0x24,%esp
1228: b8 00 00 00 00 mov $0x0,%eax
122d: c9 leave
122e: c3 ret
; ---------- structs by value (arg and return value), struct arg not fitting in regs ---------->
; struct A { int x; short y; char z; long long t; };
;
dyncall/doc/disas_examples/x86.fastcall_gnu.disas view on Meta::CPAN
; output from alpine_linux-3.11.3-x86 w/ gcc 9.2.0 (w/ flags to simplify: -fno-stack-protector -fno-pic)
00001205 <leaf_call>:
1205: 55 push %ebp ; |
1206: 89 e5 mov %esp,%ebp ; | prolog
1208: 83 ec 20 sub $0x20,%esp ; |
120b: 89 4d fc mov %ecx,-0x4(%ebp) ; ptr to retval space for struct (hidden first arg) -> local area
120e: 8b 45 18 mov 0x18(%ebp),%eax ;
1211: 8b 55 24 mov 0x24(%ebp),%edx ;
1214: 66 89 45 f8 mov %ax,-0x8(%ebp) ;
1218: 8b 45 1c mov 0x1c(%ebp),%eax ;
121b: 89 45 f0 mov %eax,-0x10(%ebp) ;
121e: 8b 45 20 mov 0x20(%ebp),%eax ;
1221: 89 45 f4 mov %eax,-0xc(%ebp) ;
1224: 89 d0 mov %edx,%eax ;
1226: 88 45 ec mov %al,-0x14(%ebp) ;
1229: 8b 45 34 mov 0x34(%ebp),%eax ;
122c: 89 45 e0 mov %eax,-0x20(%ebp) ;
122f: 8b 45 38 mov 0x38(%ebp),%eax ;
dyncall/doc/disas_examples/x86.fastcall_gnu.disas view on Meta::CPAN
125b: c9 leave ; |
125c: c2 34 00 ret $0x34 ; | epilog
0000125f <main>:
125f: 8d 4c 24 04 lea 0x4(%esp),%ecx ; |
1263: 83 e4 f0 and $0xfffffff0,%esp ; |
1266: ff 71 fc pushl -0x4(%ecx) ; | prolog
1269: 55 push %ebp ; |
126a: 89 e5 mov %esp,%ebp ; |
126c: 51 push %ecx ; preserve ecx (so it can be used for passing arg 0)
126d: 83 ec 24 sub $0x24,%esp ; reserve stack space for struct (local area)
1270: c7 45 e8 09 00 00 00 movl $0x9,-0x18(%ebp) ; | int x
1277: 66 c7 45 ec 63 00 movw $0x63,-0x14(%ebp) ; | short y
127d: c6 45 ee 17 movb $0x17,-0x12(%ebp) ; | struct values (local area) char z
1281: c7 45 f0 0c 00 00 00 movl $0xc,-0x10(%ebp) ; | |
1288: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) ; | | long long t
128f: 8d 45 d8 lea -0x28(%ebp),%eax ; ptr to space used for struct retval (passed as hidden first arg) -> eax
1292: 83 ec 04 sub $0x4,%esp ; @@@ unsure why, alignment? (also needed so what's in eax doesn't point below esp)
1295: 6a 00 push $0x0 ; |
1297: 6a 07 push $0x7 ; | arg 7
1299: 6a 06 push $0x6 ; arg 6
dyncall/doc/disas_examples/x86.plan9call.disas view on Meta::CPAN
; output from plan9-4th_edition-x86 w/ 8c x.c && 8l -a x.8
001020 (1) TEXT leaf_call+0(SB),$0
001020 c3 (3) RET ,
001021 (5) TEXT nonleaf_call+0(SB),$28
001021 83ec1c (5) SUBL $28,SP ; prolog (note, there is no register save area at all)
001024 8b442424 (7) MOVL b+36(FP),AX ; |
001028 890424 (7) MOVL AX,(SP) ; |
00102b 8b442428 (7) MOVL c+40(FP),AX ; |
00102f 89442404 (7) MOVL AX,4(SP) ; |
001033 8b44242c (7) MOVL d+44(FP),AX ; |
001037 89442408 (7) MOVL AX,8(SP) ; | fetch in args from prev frame's param area ...
00103b 8b442430 (7) MOVL e+48(FP),AX ; | ... and "push" onto stack
00103f 8944240c (7) MOVL AX,12(SP) ; |
001043 8b442434 (7) MOVL f+52(FP),AX ; |
001047 89442410 (7) MOVL AX,16(SP) ; |
00104b 8b442438 (7) MOVL g+56(FP),AX ; |
00104f 89442414 (7) MOVL AX,20(SP) ; |
001053 e8c8ffffff (7) CALL ,1020+leaf_call ; push return address and call
001058 b878000000 (8) MOVL $120,AX ; return value: 'x' -> eax
00105d 83c41c (8) ADDL $28,SP ; |
001060 c3 (8) RET , ; | epilog
001061 (11) TEXT main+0(SB),$32
001061 83ec20 (11) SUBL $32,SP ; prolog (note, there is no register save area at all)
001064 c7042400000000 (13) MOVL $0,(SP) ; arg 0 -> "push" onto stack
00106b b801000000 (13) MOVL $1,AX ; arg 1 -> eax, then ...
001070 89442404 (13) MOVL AX,4(SP) ; ... "pushed" onto stack
001074 b802000000 (13) MOVL $2,AX ; arg 2 -> eax, then ...
001079 89442408 (13) MOVL AX,8(SP) ; ... "pushed" onto stack
00107d b803000000 (13) MOVL $3,AX ; .
001082 8944240c (13) MOVL AX,12(SP) ; .
001086 b804000000 (13) MOVL $4,AX ; .
00108b 89442410 (13) MOVL AX,16(SP) ; .
00108f b805000000 (13) MOVL $5,AX ; .
001094 89442414 (13) MOVL AX,20(SP) ; .
dyncall/doc/disas_examples/x86.plan9call.disas view on Meta::CPAN
001021 81ec94000000 (7) SUBL $148,SP ; prolog (note, there is no register save area at all)
001027 8d842494000000 (10) LEAL l+148(SP),AX ; |
00102e 89442430 (10) MOVL AX,l+48(SP) ; | loop's write ptr (stored at beginning of char[100] space)
001032 83442430fc (10) ADDL $-4,l+48(SP) ; | decr loop ptr in memory
001037 8b442430 (10) MOVL l+48(SP),AX ; | ptr -> eax
00103b c70000000000 (10) MOVL $0,(AX) ; | zero-init char[100] space write a 0
001041 837c243000 (10) CMPL l+48(SP),$0 ; | cmp if done
001046 75ea (10) JNE ,1032 ; | loop
001048 c64424304c (10) MOVB $76,l+48(SP) ; 'L' -> local area (beginning of char[100] space)
00104d 8b84249c000000 (11) MOVL b+156(FP),AX ; |
001054 890424 (11) MOVL AX,(SP) ; |
001057 8b8424a0000000 (11) MOVL c+160(FP),AX ; |
00105e 89442404 (11) MOVL AX,4(SP) ; | fetch in args (ints before struct) from prev frame's param area ...
001062 8b8424a4000000 (11) MOVL d+164(FP),AX ; | ... and "push" onto stack
001069 89442408 (11) MOVL AX,8(SP) ; |
00106d 8b8424a8000000 (11) MOVL e+168(FP),AX ; |
001074 8944240c (11) MOVL AX,12(SP) ; /
001078 8d7c2410 (11) LEAL 16(SP),DI ; \ dst ptr
00107c 8db424ac000000 (11) LEAL f+172(FP),SI ; | src ptr
001083 b904000000 (11) MOVL $4,CX ; | rep counter (4, for dwords = 16b = sizeof(struct A))
001088 fc (11) CLD , ; | copy struct to next call's stack
dyncall/doc/disas_examples/x86.plan9call.disas view on Meta::CPAN
00108b 8b8424bc000000 (11) MOVL g+188(FP),AX ; \
001092 89442420 (11) MOVL AX,32(SP) ; | fetch remaining in args (ints after struct) from prev frame's param area ...
001096 8b8424c0000000 (11) MOVL h+192(FP),AX ; | ... and "push" onto stack
00109d 89442424 (11) MOVL AX,36(SP) ; |
0010a1 e87affffff (11) CALL ,1020+leaf_call ; push return address and call
0010a6 81c494000000 (11) ADDL $148,SP ; |
0010ac c3 (11) RET , ; | epilog
0010ad (14) TEXT main+0(SB),$52
0010ad 83ec34 (14) SUBL $52,SP ; prolog (note, there is no register save area at all)
0010b0 c7042400000000 (16) MOVL $0,(SP) ; arg 0 -> "push" onto stack
0010b7 b801000000 (16) MOVL $1,AX ; arg 1 -> eax, then ...
0010bc 89442404 (16) MOVL AX,4(SP) ; ... "pushed" onto stack
0010c0 b802000000 (16) MOVL $2,AX ; arg 2 -> eax, then ...
0010c5 89442408 (16) MOVL AX,8(SP) ; ... "pushed" onto stack
0010c9 b803000000 (16) MOVL $3,AX ; .
0010ce 8944240c (16) MOVL AX,12(SP) ; .
0010d2 b804000000 (16) MOVL $4,AX ; .
0010d7 89442410 (16) MOVL AX,16(SP) ; .
0010db 8d442414 (16) LEAL 20(SP),AX ; get ptr to next (unused) stack bytes -> eax ...
0010df 89442430 (16) MOVL AX,.safe+48(SP) ; ... and write it to very top of stack (seems aligned and not adjacent to last arg) | looks like callconv keeps a ptr to
dyncall/doc/disas_examples/x86.plan9call.disas view on Meta::CPAN
001021 81ecb8000000 (8) SUBL $184,SP
001027 8d8424b8000000 (11) LEAL l+184(SP),AX
00102e 89442454 (11) MOVL AX,l+84(SP)
001032 83442454fc (11) ADDL $-4,l+84(SP)
001037 8b442454 (11) MOVL l+84(SP),AX
00103b c70000000000 (11) MOVL $0,(AX)
001041 837c245400 (11) CMPL l+84(SP),$0
001046 75ea (11) JNE ,1032
001048 c64424544c (11) MOVB $76,l+84(SP)
00104d 8b8424c0000000 (12) MOVL b+192(FP),AX
001054 890424 (12) MOVL AX,(SP)
001057 8d7c2404 (12) LEAL 4(SP),DI
00105b 8db424c4000000 (12) LEAL c+196(FP),SI
001062 b903000000 (12) MOVL $3,CX
001067 fc (12) CLD ,
001068 f3 (12) REP ,
001069 a5 (12) MOVSL ,
00106a 8d7c2410 (12) LEAL 16(SP),DI
00106e 8db424d0000000 (12) LEAL d+208(FP),SI
001075 b904000000 (12) MOVL $4,CX
00107a fc (12) CLD ,
dyncall/doc/disas_examples/x86.plan9call.disas view on Meta::CPAN
0010b9 8b842404010000 (12) MOVL i+260(FP),AX
0010c0 89442444 (12) MOVL AX,68(SP)
0010c4 8b842408010000 (12) MOVL j+264(FP),AX
0010cb 89442448 (12) MOVL AX,72(SP)
0010cf e84cffffff (12) CALL ,1020+leaf_call
0010d4 81c4b8000000 (12) ADDL $184,SP
0010da c3 (12) RET ,
0010db (15) TEXT main+0(SB),$100
0010db 83ec64 (15) SUBL $100,SP
0010de c7042400000000 (17) MOVL $0,(SP)
0010e5 b801000000 (17) MOVL $1,AX
0010ea 89442404 (17) MOVL AX,4(SP)
0010ee 8d442408 (17) LEAL 8(SP),AX
0010f2 89442460 (17) MOVL AX,.safe+96(SP)
0010f6 8b442460 (17) MOVL .safe+96(SP),AX
0010fa c70002000000 (17) MOVL $2,(AX)
001100 8b442460 (17) MOVL .safe+96(SP),AX
001104 c7400403000000 (17) MOVL $3,4(AX)
00110b dd0500200000 (17) FMOVD $0.40100000+0(SB),F0
001111 8b442460 (17) MOVL .safe+96(SP),AX
dyncall/doc/disas_examples/x86.plan9call.disas view on Meta::CPAN
001020 (2) TEXT f1+0(SB),$0
001020 8b442404 (4) MOVL .ret+4(FP),AX ; ptr to retval space -> eax
001024 c700031c0000 (4) MOVL $7171,(AX) ; |
00102a c7400400000000 (4) MOVL $0,4(AX) ; | return value
001031 c3 (4) RET ,
001032 (7) TEXT main+0(SB),$16
001032 83ec10 (7) SUBL $16,SP ; prolog
001035 8d4c2408 (9) LEAL .safe+8(SP),CX ; | ptr to space for return value ...
001039 890c24 (9) MOVL CX,(SP) ; | ... pushed as implicit first arg
00103c e8dfffffff (9) CALL ,1020+f1 ; push return address and call
001041 8b442408 (9) MOVL .safe+8(SP),AX ; return value
001045 8b54240c (9) MOVL .safe+12(SP),DX ; @@@ unsure, b/c we have a cast
001049 83c410 (9) ADDL $16,SP ; |
00104c c3 (9) RET , ; | epilog
; ---------- returning structs by value ---------->
;
dyncall/doc/disas_examples/x86.plan9call.disas view on Meta::CPAN
00105f b903000000 (14) MOVL $3,CX ; | copy struct in local area to return
001064 fc (14) CLD , ; | value (pointed to by implicit first arg)
001065 f3 (14) REP , ; |
001066 a5 (14) MOVSL , ; /
001067 83c410 (14) ADDL $16,SP ; \
00106a c3 (14) RET , ; | epilog
00106b (17) TEXT main+0(SB),$28
00106b 83ec1c (17) SUBL $28,SP ; prolog
00106e 8d442418 (19) LEAL s+24(SP),AX ; | ptr to space for return value ...
001072 890424 (19) MOVL AX,(SP) ; | ... pushed as implicit first arg
001075 e8a6ffffff (19) CALL ,1020+f0 ; push return address and call
00107a 8d44240c (20) LEAL b+12(SP),AX ; | ptr to space for return value ...
00107e 890424 (20) MOVL AX,(SP) ; | ... pushed as implicit first arg
001081 e8b6ffffff (20) CALL ,103c+f1 ; push return address and call
001086 0fbe442418 (21) MOVBLSX s+24(SP),AX ; |
00108b 03442414 (21) ADDL b+20(SP),AX ; / return value
00108f 83c41c (21) ADDL $28,SP ; \
001092 c3 (21) RET , ; | epilog
; vim: ft=asm
dyncall/doc/disas_examples/x86.stdcall.disas view on Meta::CPAN
1228: e8 d0 ff ff ff call 11fd <__x86.get_pc_thunk.ax>
122d: 05 a3 2d 00 00 add $0x2da3,%eax
1232: 83 ec 0c sub $0xc,%esp
1235: ff 75 08 pushl 0x8(%ebp)
1238: e8 65 00 00 00 call 12a2 <_ZN10NonTrivialC1Ev>
123d: 83 c4 0c add $0xc,%esp
1240: 8b 45 08 mov 0x8(%ebp),%eax
1243: c9 leave
1244: c2 04 00 ret $0x4
00001247 <f>:
1247: 55 push %ebp ;
1248: 89 e5 mov %esp,%ebp ;
124a: 83 ec 18 sub $0x18,%esp ;
124d: e8 ab ff ff ff call 11fd <__x86.get_pc_thunk.ax> ;
1252: 05 7e 2d 00 00 add $0x2d7e,%eax ;
1257: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp) ; a = 1
125e: 83 45 f4 7b addl $0x7b,-0xc(%ebp) ; a += 123
1262: 8d 45 f0 lea -0x10(%ebp),%eax ; ptr to space (top of stack) to hold aggr retval -> eax ...
1265: 50 push %eax ; ... as hidden first arg
1266: e8 9a ff ff ff call 1205 <f1> ; call f1()
dyncall/doc/manual/dyncall_logo.eps view on Meta::CPAN
688.98833 672.67377 689.34532 669.61282 689.6875 666.625 curveto
690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 curveto
687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 curveto
679.84991 657.2682 677.68005 660.39024 673.25 663.90625 curveto
671.64242 665.98692 670.31033 668.38726 668.875 670.65625 curveto
668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 curveto
664.57176 672.59674 661.8957 671.71207 659.25 670.625 curveto
657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 curveto
651.41884 666.19934 649.42459 664.62531 647.65625 662.625 curveto
646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 curveto
643.7724 656.39254 643.63115 656.00124 643.5 655.59375 curveto
644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 curveto
650.86951 652.64677 654.50896 649.03691 658.25 645.96875 curveto
659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 curveto
662.92903 639.79809 663.36287 638.192 663.875 636.28125 curveto
664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 curveto
663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 curveto
660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 curveto
closepath
651.59375 632.9375 moveto
652.70528 632.94669 653.82545 632.75541 654.875 633.4375 curveto
dyncall/doc/manual/dyncall_logo.pdf view on Meta::CPAN
688.98833 672.67377 689.34532 669.61282 689.6875 666.625 c
690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 c
687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 c
679.84991 657.2682 677.68005 660.39024 673.25 663.90625 c
671.64242 665.98692 670.31033 668.38726 668.875 670.65625 c
668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 c
664.57176 672.59674 661.8957 671.71207 659.25 670.625 c
657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 c
651.41884 666.19934 649.42459 664.62531 647.65625 662.625 c
646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 c
643.7724 656.39254 643.63115 656.00124 643.5 655.59375 c
644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 c
650.86951 652.64677 654.50896 649.03691 658.25 645.96875 c
659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 c
662.92903 639.79809 663.36287 638.192 663.875 636.28125 c
664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 c
663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 c
660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 c
h
651.59375 632.9375 m
652.70528 632.94669 653.82545 632.75541 654.875 633.4375 c
dyncall/doc/manual/dyncall_logo.svg view on Meta::CPAN
transform="matrix(0.4354368,0,0,0.4354368,82.400777,-58.916687)"
id="path50"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccc" />
</g>
<g
stroke-miterlimit="10"
id="g52"
style="fill:#000000;fill-rule:nonzero;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
<path
style="fill:#000000"
d="M 658.03125 626.5625 C 655.25013 626.68881 652.89528 628.64662 650.5 630.34375 C 645.86328 633.50839 641.64235 636.86247 638 641.6875 C 636.50265 643.53622 636.13403 645.73808 635.8125 648.3125 C 635.79309 648.61363 635.79586 648.91743 635.7812...
transform="matrix(0.4354368,0,0,0.4354368,82.400777,-58.916687)"
id="path54" />
</g>
</g></svg>
dyncall/doc/manual/dyncall_watermark.eps view on Meta::CPAN
688.98833 672.67377 689.34532 669.61282 689.6875 666.625 curveto
690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 curveto
687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 curveto
679.84991 657.2682 677.68005 660.39024 673.25 663.90625 curveto
671.64242 665.98692 670.31033 668.38726 668.875 670.65625 curveto
668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 curveto
664.57176 672.59674 661.8957 671.71207 659.25 670.625 curveto
657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 curveto
651.41884 666.19934 649.42459 664.62531 647.65625 662.625 curveto
646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 curveto
643.7724 656.39254 643.63115 656.00124 643.5 655.59375 curveto
644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 curveto
650.86951 652.64677 654.50896 649.03691 658.25 645.96875 curveto
659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 curveto
662.92903 639.79809 663.36287 638.192 663.875 636.28125 curveto
664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 curveto
663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 curveto
660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 curveto
closepath
651.59375 632.9375 moveto
652.70528 632.94669 653.82545 632.75541 654.875 633.4375 curveto
dyncall/doc/manual/dyncall_watermark.eps view on Meta::CPAN
688.98833 672.67377 689.34532 669.61282 689.6875 666.625 curveto
690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 curveto
687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 curveto
679.84991 657.2682 677.68005 660.39024 673.25 663.90625 curveto
671.64242 665.98692 670.31033 668.38726 668.875 670.65625 curveto
668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 curveto
664.57176 672.59674 661.8957 671.71207 659.25 670.625 curveto
657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 curveto
651.41884 666.19934 649.42459 664.62531 647.65625 662.625 curveto
646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 curveto
643.7724 656.39254 643.63115 656.00124 643.5 655.59375 curveto
644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 curveto
650.86951 652.64677 654.50896 649.03691 658.25 645.96875 curveto
659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 curveto
662.92903 639.79809 663.36287 638.192 663.875 636.28125 curveto
664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 curveto
663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 curveto
660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 curveto
closepath
651.59375 632.9375 moveto
652.70528 632.94669 653.82545 632.75541 654.875 633.4375 curveto
dyncall/doc/manual/dyncall_watermark.svg view on Meta::CPAN
<path
d="M 372.4375,226.8125 C 350.03614,226.99774 326.37254,235.86686 301.53125,253.375 L 368.53125,345.625 C 371.39273,344.04727 374.33807,342.1941 377.40625,339.96875 L 419.75,309.1875 C 431.09721,316.83039 443.82523,328.92944 457.9375,345.375 L 557....
transform="matrix(0.4354368,0,0,0.4354368,82.400777,-58.916687)"
id="path50"
style="fill:#e6e6e6;stroke:#e6e6e6" />
</g><g
transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
id="g52"
style="fill:#e6e6e6;fill-rule:nonzero;stroke:#e6e6e6;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
<path
d="M 658.03125,626.5625 C 655.25013,626.68881 652.89528,628.64662 650.5,630.34375 C 645.86328,633.50839 641.64235,636.86247 638,641.6875 C 636.50265,643.53622 636.13403,645.73808 635.8125,648.3125 C 635.79309,648.61363 635.79586,648.91743 635.7812...
transform="matrix(0.4354368,0,0,0.4354368,82.400777,-58.916687)"
id="path54"
style="fill:#e6e6e6;stroke:#e6e6e6" />
</g>
<g
transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
dyncall/dyncall/dyncall_call_mips_eabi_gas.s view on Meta::CPAN
sub $sp,$sp,$16
/* load integer parameter registers */
lw $4 , 0($13)
lw $5 , 4($13)
lw $6 , 8($13)
lw $7 ,12($13)
lw $8 ,16($13)
lw $9 ,20($13)
lw $10,24($13)
lw $11,28($13)
/* load single-precision floating pointer parameter registers */
l.s $f12, 32($13)
l.s $f13, 36($13)
l.s $f14, 40($13)
l.s $f15, 44($13)
l.s $f16, 48($13)
l.s $f17, 52($13)
dyncall/dyncallback/dyncall_callback_sparc32.s view on Meta::CPAN
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* input:
$i0 -> thunk
$i0+24 -> cb handler
$i0+28 -> userdata
*/
.text
.globl dcCallbackThunkEntry
/* Called by thunk - thunk stores pointer to DCCallback */
/* in %g1, and pointer to called function in %g2 */
dcCallbackThunkEntry: