Affix

 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:



( run in 1.894 second using v1.01-cache-2.11-cpan-7add2cbd662 )