view doc/disas_examples/mips64.n64.disas @ 498:fd9ba3a6d348

- corrections in tool usage in lastly added disas_examples
author Tassilo Philipp
date Wed, 23 Mar 2022 15:33:09 +0100
parents cb19b2fe2422
children fc614cb865c6
line wrap: on
line source

; #include <stdlib.h>
; 
; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
; {
; }
; 
; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h)
; {
; 	/* use some local data */
; 	*(char*)alloca(220) = 'L';
; 	leaf_call(b, c, d, e, f, g, h);
; }
; 
; int main()
; {
; 	nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
; 	return 0;
; }



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <leaf_call>:
   0:   67bdffd0        daddiu  sp,sp,-48
   4:   ffbe0028        sd      s8,40(sp)
   8:   ffbc0020        sd      gp,32(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   0080102d        move    v0,a0
  20:   00a0182d        move    v1,a1
  24:   00c0202d        move    a0,a2
  28:   00e0282d        move    a1,a3
  2c:   0100302d        move    a2,a4
  30:   0120382d        move    a3,a5
  34:   0140402d        move    a4,a6
  38:   00021000        sll     v0,v0,0x0
  3c:   afc20000        sw      v0,0(s8)
  40:   00031000        sll     v0,v1,0x0
  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)  ; |
  90:   ffbe0058        sd      s8,88(sp)  ; | prolog
  94:   ffbc0050        sd      gp,80(sp)  ; |
  98:   03a0f02d        move    s8,sp      ; |
  9c:   3c1c0000        lui     gp,0x0     ; @@@ unsure
  a0:   0399e02d        daddu   gp,gp,t9   ; @@@ unsure
  a4:   679c0000        daddiu  gp,gp,0    ; @@@ unsure
  a8:   0080102d        move    v0,a0      ; |
  ac:   00a0182d        move    v1,a1      ; |
  b0:   00c0202d        move    a0,a2      ; | pointlessly (?) moving a{0,1} to v{0,1} respectively,
  b4:   00e0282d        move    a1,a3      ; | and all last 6 a? registers two regs down, freeing up
  b8:   0100302d        move    a2,a4      ; | a{6,7}, which aren't used for anything though
  bc:   0120382d        move    a3,a5      ; |
  c0:   0140402d        move    a4,a6      ; |
  c4:   0160482d        move    a5,a7      ; /
  c8:   00021000        sll     v0,v0,0x0  ; \
  cc:   afc20000        sw      v0,0(s8)   ; |
  d0:   00031000        sll     v0,v1,0x0  ; |
  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
 128:   2402004c        li      v0,76      ; 'L' -> v0, and ...
 12c:   a0620000        sb      v0,0(v1)   ; ... store in local area (of alloca()'d space)
 130:   8fc20004        lw      v0,4(s8)   ; prep arg 0 (pointlessly) to move to a0 below
 134:   8fc30008        lw      v1,8(s8)   ; prep arg 1 (pointlessly) to move to a1 below
 138:   8fc6000c        lw      a2,12(s8)  ; arg 2
 13c:   8fc70010        lw      a3,16(s8)  ; arg 3
 140:   8fc80014        lw      a4,20(s8)  ; arg 4
 144:   8fc90018        lw      a5,24(s8)  ; arg 5
 148:   8fca001c        lw      a6,28(s8)  ; arg 6
 14c:   0040202d        move    a0,v0      ; arg 0
 150:   0060282d        move    a1,v1      ; arg 1
 154:   df990000        ld      t9,0(gp)   ; addr of callee -> t9
 158:   0320f809        jalr    t9         ; return address -> ra, and call
 15c:   00000000        nop                ; branch delay slot
 160:   03c0e82d        move    sp,s8      ; |
 164:   dfbf0060        ld      ra,96(sp)  ; |
 168:   dfbe0058        ld      s8,88(sp)  ; |
 16c:   dfbc0050        ld      gp,80(sp)  ; | epilog
 170:   03e00008        jr      ra         ; |
 174:   67bd0070        daddiu  sp,sp,112  ; |         branch delay slot style

0000000000000178 <main>:
 178:   67bdffe0        daddiu  sp,sp,-32  ; |
 17c:   ffbf0010        sd      ra,16(sp)  ; |
 180:   ffbe0008        sd      s8,8(sp)   ; | prolog
 184:   ffbc0000        sd      gp,0(sp)   ; |
 188:   03a0f02d        move    s8,sp      ; |
 18c:   3c1c0000        lui     gp,0x0     ; @@@ unsure
 190:   0399e02d        daddu   gp,gp,t9   ; @@@ unsure
 194:   679c0000        daddiu  gp,gp,0    ; @@@ unsure
 198:   0000202d        move    a0,zero    ; arg 0
 19c:   24050001        li      a1,1       ; arg 1
 1a0:   24060002        li      a2,2       ; arg 2
 1a4:   24070003        li      a3,3       ; arg 3
 1a8:   24080004        li      a4,4       ; arg 4
 1ac:   24090005        li      a5,5       ; arg 5
 1b0:   240a0006        li      a6,6       ; arg 6
 1b4:   240b0007        li      a7,7       ; arg 7
 1b8:   df990000        ld      t9,0(gp)   ; address of callee -> t9
 1bc:   0320f809        jalr    t9         ; return address -> ra, and call
 1c0:   00000000        nop                ; branch delay slot
 1c4:   0000102d        move    v0,zero    ; return value
 1c8:   03c0e82d        move    sp,s8      ; |
 1cc:   dfbf0010        ld      ra,16(sp)  ; |
 1d0:   dfbe0008        ld      s8,8(sp)   ; |
 1d4:   dfbc0000        ld      gp,0(sp)   ; | epilog
 1d8:   03e00008        jr      ra         ; |
 1dc:   67bd0020        daddiu  sp,sp,32   ; |         branch delay slot style



; output from debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <leaf_call>:
   0:   67bdffd0        daddiu  sp,sp,-48
   4:   ffbe0028        sd      s8,40(sp)
   8:   03a0f02d        move    s8,sp
   c:   0080602d        move    t0,a0
  10:   00a0582d        move    a7,a1
  14:   00e0282d        move    a1,a3
  18:   0100202d        move    a0,a4
  1c:   0120182d        move    v1,a5
  20:   0140102d        move    v0,a6
  24:   000c3800        sll     a3,t0,0x0
  28:   afc70000        sw      a3,0(s8)
  2c:   000b3800        sll     a3,a7,0x0
  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
  7c:   ffbc0028        sd      gp,40(sp)  ; |
  80:   03a0f02d        move    s8,sp      ; |
  84:   3c1c0000        lui     gp,0x0     ; @@@ unsure
  88:   0399e02d        daddu   gp,gp,t9   ; @@@ unsure
  8c:   679c0000        daddiu  gp,gp,0    ; @@@ unsure
  90:   0080702d        move    t2,a0      ; |
  94:   00a0682d        move    t1,a1      ; |
  98:   00c0602d        move    t0,a2      ; | pointlessly (?) moving regs around, freeing effectively
  9c:   00e0302d        move    a2,a3      ; | some registers for use below, still unnecessary though
  a0:   0100282d        move    a1,a4      ; | with different code below
  a4:   0120202d        move    a0,a5      ; |
  a8:   0140182d        move    v1,a6      ; |
  ac:   0160102d        move    v0,a7      ; /
  b0:   000e3800        sll     a3,t2,0x0  ; \
  b4:   afc70000        sw      a3,0(s8)   ; |
  b8:   000d3800        sll     a3,t1,0x0  ; |
  bc:   afc70004        sw      a3,4(s8)   ; |
  c0:   000c3800        sll     a3,t0,0x0  ; |
  c4:   afc70008        sw      a3,8(s8)   ; |
  c8:   00063000        sll     a2,a2,0x0  ; |
  cc:   afc6000c        sw      a2,12(s8)  ; | storing all register in args in local area on stack
  d0:   00052800        sll     a1,a1,0x0  ; | (using the set of pointlessly moved-to regs, above)
  d4:   afc50010        sw      a1,16(s8)  ; |
  d8:   00042000        sll     a0,a0,0x0  ; |
  dc:   afc40014        sw      a0,20(s8)  ; |
  e0:   00031800        sll     v1,v1,0x0  ; |
  e4:   afc30018        sw      v1,24(s8)  ; |
  e8:   00021000        sll     v0,v0,0x0  ; |
  ec:   afc2001c        sw      v0,28(s8)  ; |
  f0:   67bdff10        daddiu  sp,sp,-240 ; alloca(220) - with padding to guarantee alignment
  f4:   03a0102d        move    v0,sp      ; |
  f8:   6442000f        daddiu  v0,v0,15   ; | start of alloca()'d memory -> v1, by ...
  fc:   0002113a        dsrl    v0,v0,0x4  ; | ... using v0 as helper to align to 8b
 100:   00021138        dsll    v0,v0,0x4  ; |
 104:   0040182d        move    v1,v0      ; |
 108:   2402004c        li      v0,76      ; 'L' -> v0, and ...
 10c:   a0620000        sb      v0,0(v1)   ; ... store in local area (of alloca()'d space)
 110:   8fc40004        lw      a0,4(s8)   ; arg 0
 114:   8fc50008        lw      a1,8(s8)   ; arg 1
 118:   8fc6000c        lw      a2,12(s8)  ; arg 2
 11c:   8fc70010        lw      a3,16(s8)  ; arg 3
 120:   8fc80014        lw      a4,20(s8)  ; arg 4
 124:   8fc30018        lw      v1,24(s8)  ; prep arg 5 (pointlessly) to move to a5 below
 128:   8fc2001c        lw      v0,28(s8)  ; prep arg 5 (pointlessly) to move to a5 below
 12c:   0060482d        move    a5,v1      ; arg 5
 130:   0040502d        move    a6,v0      ; arg 6
 134:   df820000        ld      v0,0(gp)   ; addr of callee ...
 138:   0040c82d        move    t9,v0      ; ... -> t9
 13c:   0320f809        jalr    t9         ; return address -> ra, and call
 140:   00200825        move    at,at      ; branch delay slot (effectively nop)
 144:   03c0e82d        move    sp,s8      ; |
 148:   dfbf0038        ld      ra,56(sp)  ; |
 14c:   dfbe0030        ld      s8,48(sp)  ; |
 150:   dfbc0028        ld      gp,40(sp)  ; | epilog
 154:   67bd0040        daddiu  sp,sp,64   ; |
 158:   03e00008        jr      ra         ; |
 15c:   00200825        move    at,at      ; |         branch delay slot (effectively nop)

0000000000000160 <main>:
 160:   67bdffe0        daddiu  sp,sp,-32  ; |
 164:   ffbf0018        sd      ra,24(sp)  ; |
 168:   ffbe0010        sd      s8,16(sp)  ; | prolog
 16c:   ffbc0008        sd      gp,8(sp)   ; |
 170:   03a0f02d        move    s8,sp      ; |
 174:   3c1c0000        lui     gp,0x0     ; @@@ unsure
 178:   0399e02d        daddu   gp,gp,t9   ; @@@ unsure
 17c:   679c0000        daddiu  gp,gp,0    ; @@@ unsure
 180:   0000202d        move    a0,zero    ; arg 0
 184:   24050001        li      a1,1       ; arg 1
 188:   24060002        li      a2,2       ; arg 2
 18c:   24070003        li      a3,3       ; arg 3
 190:   24080004        li      a4,4       ; arg 4
 194:   24090005        li      a5,5       ; arg 5
 198:   240a0006        li      a6,6       ; arg 6
 19c:   240b0007        li      a7,7       ; arg 7
 1a0:   df820000        ld      v0,0(gp)   ; address of callee, to ...
 1a4:   0040c82d        move    t9,v0      ; ... t9
 1a8:   0320f809        jalr    t9         ; return address -> ra, and call
 1ac:   00200825        move    at,at      ; branch delay slot (effectively nop)
 1b0:   0000102d        move    v0,zero    ; return value
 1b4:   03c0e82d        move    sp,s8      ; |
 1b8:   dfbf0018        ld      ra,24(sp)  ; |
 1bc:   dfbe0010        ld      s8,16(sp)  ; |
 1c0:   dfbc0008        ld      gp,8(sp)   ; | epilog
 1c4:   67bd0020        daddiu  sp,sp,32   ; |
 1c8:   03e00008        jr      ra         ; |
 1cc:   00200825        move    at,at      ; |         branch delay slot (effectively nop)



; ------------- var args with ints and floats to see spilling (which remains only a?-a7 regs), b/c doubles are passed via them and floats are promoted to doubles in (...) ----------->

; #include <stdlib.h>
; #include <stdarg.h>
; 
; void leaf_call(int b, int c, int d, int e, float f, float g, int h, int i, float j)
; {
; }
; 
; void nonleaf_call(int a, ...)
; {
;     int b, c, d, e, h, i;
;     float f, g, j;
;     va_list ap;
;     va_start(ap, a);
;     b = va_arg(ap, int);
;     c = va_arg(ap, int);
;     d = va_arg(ap, int);
;     e = va_arg(ap, int);
;     f = (float)va_arg(ap, double);
;     g = (float)va_arg(ap, double);
;     h = va_arg(ap, int);
;     i = va_arg(ap, int);
;     j = (float)va_arg(ap, double);
;     /* use some local data */
;     *(char*)alloca(220) = 'L';
;     leaf_call(b, c, d, e, f, g, h, i, j);
; }
; 
; int main()
; {
;     nonleaf_call(0, 1, 2, 3, 4, 5.f, 6.f, 7, 8, 9.f);
;     return 0;
; }



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <leaf_call>:
   0:   67bdffd0        daddiu  sp,sp,-48
   4:   ffbe0028        sd      s8,40(sp)
   8:   ffbc0020        sd      gp,32(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   0080102d        move    v0,a0
  20:   00a0182d        move    v1,a1
  24:   00c0202d        move    a0,a2
  28:   00e0302d        move    a2,a3
  2c:   afc80010        sw      a4,16(s8)
  30:   afc90014        sw      a5,20(s8)
  34:   0140282d        move    a1,a6
  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
  84:   ffbf0060        sd      ra,96(sp)
  88:   ffbe0058        sd      s8,88(sp)
  8c:   ffbc0050        sd      gp,80(sp)
  90:   03a0f02d        move    s8,sp
  94:   3c1c0000        lui     gp,0x0
  98:   0399e02d        daddu   gp,gp,t9
  9c:   679c0000        daddiu  gp,gp,0
  a0:   ffc50078        sd      a1,120(s8)
  a4:   ffc60080        sd      a2,128(s8)
  a8:   ffc70088        sd      a3,136(s8)
  ac:   ffc80090        sd      a4,144(s8)
  b0:   ffc90098        sd      a5,152(s8)
  b4:   ffca00a0        sd      a6,160(s8)
  b8:   ffcb00a8        sd      a7,168(s8)
  bc:   0080102d        move    v0,a0
  c0:   00021000        sll     v0,v0,0x0
  c4:   afc20040        sw      v0,64(s8)
  c8:   67c200b0        daddiu  v0,s8,176
  cc:   6442ffc8        daddiu  v0,v0,-56
  d0:   ffc20038        sd      v0,56(s8)
  d4:   dfc30038        ld      v1,56(s8)
  d8:   64620008        daddiu  v0,v1,8
  dc:   ffc20038        sd      v0,56(s8)
  e0:   0060102d        move    v0,v1
  e4:   8c420000        lw      v0,0(v0)
  e8:   afc20030        sw      v0,48(s8)
  ec:   dfc30038        ld      v1,56(s8)
  f0:   64620008        daddiu  v0,v1,8
  f4:   ffc20038        sd      v0,56(s8)
  f8:   0060102d        move    v0,v1
  fc:   8c420000        lw      v0,0(v0)
 100:   afc2002c        sw      v0,44(s8)
 104:   dfc30038        ld      v1,56(s8)
 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)
 184:   dfc30038        ld      v1,56(s8)
 188:   64620008        daddiu  v0,v1,8
 18c:   ffc20038        sd      v0,56(s8)
 190:   0060102d        move    v0,v1
 194:   8c420000        lw      v0,0(v0)
 198:   afc20020        sw      v0,32(s8)
 19c:   dfc30038        ld      v1,56(s8)
 1a0:   64620008        daddiu  v0,v1,8
 1a4:   ffc20038        sd      v0,56(s8)
 1a8:   0060102d        move    v0,v1
 1ac:   8c420000        lw      v0,0(v0)
 1b0:   afc2001c        sw      v0,28(s8)
 1b4:   dfc30038        ld      v1,56(s8)
 1b8:   64620008        daddiu  v0,v1,8
 1bc:   ffc20038        sd      v0,56(s8)
 1c0:   0060102d        move    v0,v1
 1c4:   dc420000        ld      v0,0(v0)
 1c8:   0040202d        move    a0,v0
 1cc:   df990000        ld      t9,0(gp)
 1d0:   0320f809        jalr    t9
 1d4:   00000000        nop
 1d8:   afc20010        sw      v0,16(s8)
 1dc:   67bdff10        daddiu  sp,sp,-240
 1e0:   67a20010        daddiu  v0,sp,16
 1e4:   ffc20048        sd      v0,72(s8)
 1e8:   dfc30048        ld      v1,72(s8)
 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
 240:   03c0e82d        move    sp,s8
 244:   dfbf0060        ld      ra,96(sp)
 248:   dfbe0058        ld      s8,88(sp)
 24c:   dfbc0050        ld      gp,80(sp)
 250:   03e00008        jr      ra
 254:   67bd00b0        daddiu  sp,sp,176

0000000000000258 <main>:
 258:   67bdffd0        daddiu  sp,sp,-48
 25c:   ffbf0020        sd      ra,32(sp)
 260:   ffbe0018        sd      s8,24(sp)
 264:   ffbc0010        sd      gp,16(sp)
 268:   03a0f02d        move    s8,sp
 26c:   3c1c0000        lui     gp,0x0
 270:   0399e02d        daddu   gp,gp,t9
 274:   679c0000        daddiu  gp,gp,0
 278:   df830000        ld      v1,0(gp)
 27c:   dc630000        ld      v1,0(v1)
 280:   df8a0000        ld      a6,0(gp)
 284:   dd4a0000        ld      a6,0(a6)
 288:   24020008        li      v0,8
 28c:   ffa20000        sd      v0,0(sp)
 290:   df820000        ld      v0,0(gp)
 294:   dc420000        ld      v0,0(v0)
 298:   ffa20008        sd      v0,8(sp)
 29c:   0000202d        move    a0,zero
 2a0:   24050001        li      a1,1
 2a4:   24060002        li      a2,2
 2a8:   24070003        li      a3,3
 2ac:   24080004        li      a4,4
 2b0:   0060482d        move    a5,v1
 2b4:   240b0007        li      a7,7
 2b8:   df990000        ld      t9,0(gp)
 2bc:   0320f809        jalr    t9
 2c0:   00000000        nop
 2c4:   03c0e82d        move    sp,s8
 2c8:   dfbf0020        ld      ra,32(sp)
 2cc:   dfbe0018        ld      s8,24(sp)
 2d0:   dfbc0010        ld      gp,16(sp)
 2d4:   03e00008        jr      ra
 2d8:   67bd0030        daddiu  sp,sp,48
 2dc:   00000000        nop



; output from debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <leaf_call>:
   0:   67bdffd0        daddiu  sp,sp,-48
   4:   ffbe0028        sd      s8,40(sp)
   8:   03a0f02d        move    s8,sp
   c:   0080482d        move    a5,a0
  10:   00a0402d        move    a4,a1
  14:   00c0282d        move    a1,a2
  18:   00e0202d        move    a0,a3
  1c:   e7d00010        swc1    $f16,16(s8)
  20:   e7d10014        swc1    $f17,20(s8)
  24:   0140182d        move    v1,a6
  28:   0160102d        move    v0,a7
  2c:   00093000        sll     a2,a5,0x0
  30:   afc60000        sw      a2,0(s8)
  34:   00083000        sll     a2,a4,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:   afc30018        sw      v1,24(s8)
  54:   00021000        sll     v0,v0,0x0
  58:   afc2001c        sw      v0,28(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:   67bdff50        daddiu  sp,sp,-176  ; |         leaving 64b extra space adjacent to prev frame's param area for spilling
  74:   ffbf0068        sd      ra,104(sp)  ; |
  78:   ffbe0060        sd      s8,96(sp)   ; | prolog
  7c:   ffbc0058        sd      gp,88(sp)   ; |
  80:   03a0f02d        move    s8,sp       ; |
  84:   3c1c0000        lui     gp,0x0      ; @@@ unsure
  88:   0399e02d        daddu   gp,gp,t9    ; @@@ unsure
  8c:   679c0000        daddiu  gp,gp,0     ; @@@ unsure
  90:   ffc50078        sd      a1,120(s8)  ; |
  94:   ffc60080        sd      a2,128(s8)  ; |
  98:   ffc70088        sd      a3,136(s8)  ; |
  9c:   ffc80090        sd      a4,144(s8)  ; | in args 1,2,3,4,5,6,7 -> spill area in current frame (adjacent to prev frame's param area)
  a0:   ffc90098        sd      a5,152(s8)  ; |
  a4:   ffca00a0        sd      a6,160(s8)  ; |
  a8:   ffcb00a8        sd      a7,168(s8)  ; /
  ac:   0080102d        move    v0,a0       ; \
  b0:   00021000        sll     v0,v0,0x0   ; |
  b4:   afc20040        sw      v0,64(s8)   ; |
  b8:   67c200b0        daddiu  v0,s8,176   ; |
  bc:   6442ffc8        daddiu  v0,v0,-56   ; |
  c0:   ffc20038        sd      v0,56(s8)   ; |
  c4:   dfc20038        ld      v0,56(s8)   ; |
  c8:   64430008        daddiu  v1,v0,8     ; |
  cc:   ffc30038        sd      v1,56(s8)   ; |
  d0:   8c420000        lw      v0,0(v0)    ; |
  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)   ; |
 17c:   dfc20038        ld      v0,56(s8)   ; |
 180:   64430008        daddiu  v1,v0,8     ; |
 184:   ffc30038        sd      v1,56(s8)   ; |
 188:   dc420000        ld      v0,0(v0)    ; |
 18c:   44a20000        dmtc1   v0,$f0      ; |
 190:   46200020        cvt.s.d $f0,$f0     ; |
 194:   44020000        mfc1    v0,$f0      ; |
 198:   afc20030        sw      v0,48(s8)   ; |
 19c:   67bdff10        daddiu  sp,sp,-240  ; alloca(220) - with padding to guarantee alignment
 1a0:   67a20010        daddiu  v0,sp,16    ; |
 1a4:   6442000f        daddiu  v0,v0,15    ; |
 1a8:   0002113a        dsrl    v0,v0,0x4   ; | start of alloca()'d memory -> v1, by ...
 1ac:   00021138        dsll    v0,v0,0x4   ; | ... using v0 as helper to align to 16b
 1b0:   0040182d        move    v1,v0       ; |
 1b4:   2402004c        li      v0,76       ; 'L' -> v0, and ...
 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
 20c:   67bd00b0        daddiu  sp,sp,176   ; |
 210:   03e00008        jr      ra          ; |
 214:   00200825        move    at,at       ; |         branch delay slot (effectively nop)

0000000000000218 <main>:
 218:   67bdffd0        daddiu  sp,sp,-48   ; |
 21c:   ffbf0028        sd      ra,40(sp)   ; |
 220:   ffbe0020        sd      s8,32(sp)   ; | prolog
 224:   ffbc0018        sd      gp,24(sp)   ; |
 228:   03a0f02d        move    s8,sp       ; |
 22c:   3c1c0000        lui     gp,0x0      ; unsure@@@
 230:   0399e02d        daddu   gp,gp,t9    ; unsure@@@
 234:   679c0000        daddiu  gp,gp,0     ; unsure@@@
 238:   df820000        ld      v0,0(gp)    ; arg 6 (float promoted to double), from static data (0 b/c objdmp is from .o, not final linked exec), ...
 23c:   d4410000        ldc1    $f1,0(v0)   ; ... to f1
 240:   df820000        ld      v0,0(gp)    ; arg 5 (float promoted to double), from static data (0 b/c objdmp is from .o, not final linked exec), ...
 244:   d4400000        ldc1    $f0,0(v0)   ; ... to f0
 248:   24020008        li      v0,8        ; arg 8, ...
 24c:   ffa20000        sd      v0,0(sp)    ; ... "pushed" onto stack
 250:   df820000        ld      v0,0(gp)    ; arg 9 (float promoted to double), from static data (0 b/c objdmp is from .o, not final linked exec), ...
 254:   dc420000        ld      v0,0(v0)    ; ... via v0 ...
 258:   ffa20008        sd      v0,8(sp)    ; ... "pushed" onto stack
 25c:   0000202d        move    a0,zero     ; arg 0
 260:   24050001        li      a1,1        ; arg 1
 264:   24060002        li      a2,2        ; arg 2
 268:   24070003        li      a3,3        ; arg 3
 26c:   24080004        li      a4,4        ; arg 4
 270:   44290800        dmfc1   a5,$f1      ; arg 5 (note: passed in a5 b/c vararg)
 274:   442a0000        dmfc1   a6,$f0      ; arg 6 (note: passed in a6 b/c vararg)
 278:   240b0007        li      a7,7        ; arg 7
 27c:   df820000        ld      v0,0(gp)    ; address of callee, to ...
 280:   0040c82d        move    t9,v0       ; ... t9
 284:   0320f809        jalr    t9          ; return address -> ra, and call
 288:   00200825        move    at,at       ; branch delay slot (effectively nop)
 28c:   03c0e82d        move    sp,s8       ; |
 290:   dfbf0028        ld      ra,40(sp)   ; |
 294:   dfbe0020        ld      s8,32(sp)   ; |
 298:   dfbc0018        ld      gp,24(sp)   ; |
 29c:   67bd0030        daddiu  sp,sp,48    ; | epilog
 2a0:   03e00008        jr      ra          ; |
 2a4:   00200825        move    at,at       ; |         branch delay slot (effectively nop)
 2a8:   00200825        move    at,at       ; |         ? @@@
 2ac:   00200825        move    at,at       ; |         ? @@@



; ---------- simple float arg (uses fp regs on hard-float) ---------->
;
; float f(float f) { return f; }
;
; int main()
; {
;     return !!f(1324.5f);
; }



; output from debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <f>:
   0:	67bdffe0 	daddiu	sp,sp,-32
   4:	ffbe0018 	sd	s8,24(sp)
   8:	03a0f02d 	move	s8,sp
   c:	e7cc0000 	swc1	$f12,0(s8)
  10:	c7c00000 	lwc1	$f0,0(s8)
  14:	03c0e82d 	move	sp,s8
  18:	dfbe0018 	ld	s8,24(sp)
  1c:	67bd0020 	daddiu	sp,sp,32
  20:	03e00008 	jr	ra
  24:	00200825 	move	at,at

0000000000000028 <main>:
  28:	67bdffe0 	daddiu	sp,sp,-32
  2c:	ffbf0018 	sd	ra,24(sp)
  30:	ffbe0010 	sd	s8,16(sp)
  34:	ffbc0008 	sd	gp,8(sp)
  38:	03a0f02d 	move	s8,sp
  3c:	3c1c0000 	lui	gp,0x0
  40:	0399e02d 	daddu	gp,gp,t9
  44:	679c0000 	daddiu	gp,gp,0
  48:	df820000 	ld	v0,0(gp)
  4c:	c4400000 	lwc1	$f0,0(v0)
  50:	46000306 	mov.s	$f12,$f0
  54:	df820000 	ld	v0,0(gp)
  58:	0040c82d 	move	t9,v0
  5c:	0320f809 	jalr	t9
  60:	00200825 	move	at,at
  64:	46000046 	mov.s	$f1,$f0
  68:	24020001 	li	v0,1
  6c:	44800000 	mtc1	zero,$f0
  70:	46000832 	c.eq.s	$f1,$f0
  74:	45000002 	bc1f	80 <main+0x58>
  78:	00200825 	move	at,at
  7c:	0000102d 	move	v0,zero
  80:	304200ff 	andi	v0,v0,0xff
  84:	03c0e82d 	move	sp,s8
  88:	dfbf0018 	ld	ra,24(sp)
  8c:	dfbe0010 	ld	s8,16(sp)
  90:	dfbc0008 	ld	gp,8(sp)
  94:	67bd0020 	daddiu	sp,sp,32
  98:	03e00008 	jr	ra
  9c:	00200825 	move	at,at



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <f>:
   0:   67bdffe0        daddiu  sp,sp,-32
   4:   ffbe0018        sd      s8,24(sp)
   8:   ffbc0010        sd      gp,16(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   afc40000        sw      a0,0(s8)
  20:   8fc20000        lw      v0,0(s8)
  24:   03c0e82d        move    sp,s8
  28:   dfbe0018        ld      s8,24(sp)
  2c:   dfbc0010        ld      gp,16(sp)
  30:   03e00008        jr      ra
  34:   67bd0020        daddiu  sp,sp,32

0000000000000038 <main>:
  38:   67bdffd0        daddiu  sp,sp,-48
  3c:   ffbf0020        sd      ra,32(sp)
  40:   ffbe0018        sd      s8,24(sp)
  44:   ffbc0010        sd      gp,16(sp)
  48:   03a0f02d        move    s8,sp
  4c:   3c1c0000        lui     gp,0x0
  50:   0399e02d        daddu   gp,gp,t9
  54:   679c0000        daddiu  gp,gp,0
  58:   df820000        ld      v0,0(gp)
  5c:   8c420000        lw      v0,0(v0)
  60:   0040202d        move    a0,v0
  64:   df990000        ld      t9,0(gp)
  68:   0320f809        jalr    t9
  6c:   00000000        nop
  70:   ffc00000        sd      zero,0(s8)
  74:   0040202d        move    a0,v0
  78:   0000282d        move    a1,zero
  7c:   df990000        ld      t9,0(gp)
  80:   0320f809        jalr    t9
  84:   00000000        nop
  88:   14400003        bnez    v0,98 <main+0x60>
  8c:   00000000        nop
  90:   10000003        b       a0 <main+0x68>
  94:   00000000        nop
  98:   24020001        li      v0,1
  9c:   ffc20000        sd      v0,0(s8)
  a0:   dfc20000        ld      v0,0(s8)
  a4:   03c0e82d        move    sp,s8
  a8:   dfbf0020        ld      ra,32(sp)
  ac:   dfbe0018        ld      s8,24(sp)
  b0:   dfbc0010        ld      gp,16(sp)
  b4:   03e00008        jr      ra
  b8:   67bd0030        daddiu  sp,sp,48
  bc:   00000000        nop



; output from freebsd-12.0_r333647-malta_mips64ebhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <f>:
   0:   67bdffe0        daddiu  sp,sp,-32
   4:   ffbe0018        sd      s8,24(sp)
   8:   ffbc0010        sd      gp,16(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   afc40000        sw      a0,0(s8)
  20:   8fc20000        lw      v0,0(s8)
  24:   03c0e82d        move    sp,s8
  28:   dfbe0018        ld      s8,24(sp)
  2c:   dfbc0010        ld      gp,16(sp)
  30:   03e00008        jr      ra
  34:   67bd0020        daddiu  sp,sp,32

0000000000000038 <main>:
  38:   67bdffd0        daddiu  sp,sp,-48
  3c:   ffbf0020        sd      ra,32(sp)
  40:   ffbe0018        sd      s8,24(sp)
  44:   ffbc0010        sd      gp,16(sp)
  48:   03a0f02d        move    s8,sp
  4c:   3c1c0000        lui     gp,0x0
  50:   0399e02d        daddu   gp,gp,t9
  54:   679c0000        daddiu  gp,gp,0
  58:   df820000        ld      v0,0(gp)
  5c:   8c420000        lw      v0,0(v0)
  60:   0040202d        move    a0,v0
  64:   df990000        ld      t9,0(gp)
  68:   0320f809        jalr    t9
  6c:   00000000        nop
  70:   ffc00000        sd      zero,0(s8)
  74:   0040202d        move    a0,v0
  78:   0000282d        move    a1,zero
  7c:   df990000        ld      t9,0(gp)
  80:   0320f809        jalr    t9
  84:   00000000        nop
  88:   14400003        bnez    v0,98 <main+0x60>
  8c:   00000000        nop
  90:   10000003        b       a0 <main+0x68>
  94:   00000000        nop
  98:   24020001        li      v0,1
  9c:   ffc20000        sd      v0,0(s8)
  a0:   dfc20000        ld      v0,0(s8)
  a4:   03c0e82d        move    sp,s8
  a8:   dfbf0020        ld      ra,32(sp)
  ac:   dfbe0018        ld      s8,24(sp)
  b0:   dfbc0010        ld      gp,16(sp)
  b4:   03e00008        jr      ra
  b8:   67bd0030        daddiu  sp,sp,48
  bc:   00000000        nop



; output from freebsd-12.0_r333647-malta_mips64ebhf w/ gcc 4.2.1 *and* -mhard-float

0000000000000000 <f>:
   0:   67bdffe0        daddiu  sp,sp,-32
   4:   ffbe0018        sd      s8,24(sp)
   8:   ffbc0010        sd      gp,16(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   e7cc0000        swc1    $f12,0(s8)
  20:   c7c00000        lwc1    $f0,0(s8)
  24:   03c0e82d        move    sp,s8
  28:   dfbe0018        ld      s8,24(sp)
  2c:   dfbc0010        ld      gp,16(sp)
  30:   03e00008        jr      ra
  34:   67bd0020        daddiu  sp,sp,32

0000000000000038 <main>:
  38:   67bdffd0        daddiu  sp,sp,-48
  3c:   ffbf0020        sd      ra,32(sp)
  40:   ffbe0018        sd      s8,24(sp)
  44:   ffbc0010        sd      gp,16(sp)
  48:   03a0f02d        move    s8,sp
  4c:   3c1c0000        lui     gp,0x0
  50:   0399e02d        daddu   gp,gp,t9
  54:   679c0000        daddiu  gp,gp,0
  58:   df810000        ld      at,0(gp)
  5c:   c4200000        lwc1    $f0,0(at)
  60:   46000306        mov.s   $f12,$f0
  64:   df990000        ld      t9,0(gp)
  68:   0320f809        jalr    t9
  6c:   00000000        nop
  70:   46000046        mov.s   $f1,$f0
  74:   24020001        li      v0,1
  78:   ffc20000        sd      v0,0(s8)
  7c:   44800000        mtc1    zero,$f0
  80:   00000000        nop
  84:   46000832        c.eq.s  $f1,$f0
  88:   00000000        nop
  8c:   45000002        bc1f    98 <main+0x60>
  90:   00000000        nop
  94:   ffc00000        sd      zero,0(s8)
  98:   dfc20000        ld      v0,0(s8)
  9c:   03c0e82d        move    sp,s8
  a0:   dfbf0020        ld      ra,32(sp)
  a4:   dfbe0018        ld      s8,24(sp)
  a8:   dfbc0010        ld      gp,16(sp)
  ac:   03e00008        jr      ra
  b0:   67bd0030        daddiu  sp,sp,48



; ---------- structs by value ---------->
;
; struct A { int i, j; long long l; };
;
; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h)
; {
; }
;
; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h)
; {
;     /* use some local data */
;     char l[100] ={ 'L'};
;     leaf_call(b, c, d, e, f, g, h);
; }
;
; int main()
; {
;     nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9);
;     return 0;
; }



; output from debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <leaf_call>:
   0:	67bdffc0 	daddiu	sp,sp,-64
   4:	ffbe0038 	sd	s8,56(sp)
   8:	03a0f02d 	move	s8,sp
   c:	0080682d 	move	t1,a0
  10:	00a0602d 	move	t0,a1
  14:	00c0282d 	move	a1,a2
  18:	00e0202d 	move	a0,a3
  1c:	ffc80010 	sd	a4,16(s8)
  20:	ffc90018 	sd	a5,24(s8)
  24:	0140182d 	move	v1,a6
  28:	0160102d 	move	v0,a7
  2c:	000d3000 	sll	a2,t1,0x0
  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)
  7c:	ffbc00a8 	sd	gp,168(sp)
  80:	03a0f02d 	move	s8,sp
  84:	3c1c0000 	lui	gp,0x0
  88:	0399e02d 	daddu	gp,gp,t9
  8c:	679c0000 	daddiu	gp,gp,0
  90:	0080682d 	move	t1,a0
  94:	00a0602d 	move	t0,a1
  98:	00c0282d 	move	a1,a2
  9c:	00e0202d 	move	a0,a3
  a0:	0100182d 	move	v1,a4
  a4:	ffc90088 	sd	a5,136(s8)
  a8:	ffca0090 	sd	a6,144(s8)
  ac:	0160102d 	move	v0,a7
  b0:	000d3000 	sll	a2,t1,0x0
  b4:	afc60070 	sw	a2,112(s8)
  b8:	000c3000 	sll	a2,t0,0x0
  bc:	afc60074 	sw	a2,116(s8)
  c0:	00052800 	sll	a1,a1,0x0
  c4:	afc50078 	sw	a1,120(s8)
  c8:	00042000 	sll	a0,a0,0x0
  cc:	afc4007c 	sw	a0,124(s8)
  d0:	00031800 	sll	v1,v1,0x0
  d4:	afc30080 	sw	v1,128(s8)
  d8:	00021000 	sll	v0,v0,0x0
  dc:	afc20084 	sw	v0,132(s8)
  e0:	ffc00000 	sd	zero,0(s8)
  e4:	ffc00008 	sd	zero,8(s8)
  e8:	ffc00010 	sd	zero,16(s8)
  ec:	ffc00018 	sd	zero,24(s8)
  f0:	ffc00020 	sd	zero,32(s8)
  f4:	ffc00028 	sd	zero,40(s8)
  f8:	ffc00030 	sd	zero,48(s8)
  fc:	ffc00038 	sd	zero,56(s8)
 100:	ffc00040 	sd	zero,64(s8)
 104:	ffc00048 	sd	zero,72(s8)
 108:	ffc00050 	sd	zero,80(s8)
 10c:	ffc00058 	sd	zero,88(s8)
 110:	afc00060 	sw	zero,96(s8)
 114:	2402004c 	li	v0,76
 118:	a3c20000 	sb	v0,0(s8)
 11c:	8fc40074 	lw	a0,116(s8)
 120:	8fc50078 	lw	a1,120(s8)
 124:	8fc6007c 	lw	a2,124(s8)
 128:	8fc70080 	lw	a3,128(s8)
 12c:	8fc30084 	lw	v1,132(s8)
 130:	8fc200c0 	lw	v0,192(s8)
 134:	dfc80088 	ld	a4,136(s8)
 138:	dfc90090 	ld	a5,144(s8)
 13c:	0060502d 	move	a6,v1
 140:	0040582d 	move	a7,v0
 144:	df820000 	ld	v0,0(gp)
 148:	0040c82d 	move	t9,v0
 14c:	0320f809 	jalr	t9
 150:	00200825 	move	at,at
 154:	03c0e82d 	move	sp,s8
 158:	dfbf00b8 	ld	ra,184(sp)
 15c:	dfbe00b0 	ld	s8,176(sp)
 160:	dfbc00a8 	ld	gp,168(sp)
 164:	67bd00c0 	daddiu	sp,sp,192
 168:	03e00008 	jr	ra
 16c:	00200825 	move	at,at

0000000000000170 <main>:
 170:	67bdffc0 	daddiu	sp,sp,-64
 174:	ffbf0038 	sd	ra,56(sp)
 178:	ffbe0030 	sd	s8,48(sp)
 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
 1d0:	df820000 	ld	v0,0(gp)
 1d4:	0040c82d 	move	t9,v0
 1d8:	0320f809 	jalr	t9
 1dc:	00200825 	move	at,at
 1e0:	0000102d 	move	v0,zero
 1e4:	03c0e82d 	move	sp,s8
 1e8:	dfbf0038 	ld	ra,56(sp)
 1ec:	dfbe0030 	ld	s8,48(sp)
 1f0:	dfbc0028 	ld	gp,40(sp)
 1f4:	67bd0040 	daddiu	sp,sp,64
 1f8:	03e00008 	jr	ra
 1fc:	00200825 	move	at,at



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <leaf_call>:
   0:   67bdffc0        daddiu  sp,sp,-64
   4:   ffbe0038        sd      s8,56(sp)
   8:   ffbc0030        sd      gp,48(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   0080102d        move    v0,a0
  20:   00a0182d        move    v1,a1
  24:   00c0202d        move    a0,a2
  28:   00e0302d        move    a2,a3
  2c:   ffc80010        sd      a4,16(s8)
  30:   ffc90018        sd      a5,24(s8)
  34:   0140282d        move    a1,a6
  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:   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)
  8c:   ffbc00a0        sd      gp,160(sp)
  90:   03a0f02d        move    s8,sp
  94:   3c1c0000        lui     gp,0x0
  98:   0399e02d        daddu   gp,gp,t9
  9c:   679c0000        daddiu  gp,gp,0
  a0:   0080102d        move    v0,a0
  a4:   00a0182d        move    v1,a1
  a8:   00c0202d        move    a0,a2
  ac:   00e0282d        move    a1,a3
  b0:   0100302d        move    a2,a4
  b4:   ffc90088        sd      a5,136(s8)
  b8:   ffca0090        sd      a6,144(s8)
  bc:   0160382d        move    a3,a7
  c0:   00021000        sll     v0,v0,0x0
  c4:   afc20070        sw      v0,112(s8)
  c8:   00031000        sll     v0,v1,0x0
  cc:   afc20074        sw      v0,116(s8)
  d0:   00041000        sll     v0,a0,0x0
  d4:   afc20078        sw      v0,120(s8)
  d8:   00051000        sll     v0,a1,0x0
  dc:   afc2007c        sw      v0,124(s8)
  e0:   00061000        sll     v0,a2,0x0
  e4:   afc20080        sw      v0,128(s8)
  e8:   00071000        sll     v0,a3,0x0
  ec:   afc20098        sw      v0,152(s8)
  f0:   ffc00000        sd      zero,0(s8)
  f4:   ffc00008        sd      zero,8(s8)
  f8:   ffc00010        sd      zero,16(s8)
  fc:   ffc00018        sd      zero,24(s8)
 100:   ffc00020        sd      zero,32(s8)
 104:   ffc00028        sd      zero,40(s8)
 108:   ffc00030        sd      zero,48(s8)
 10c:   ffc00038        sd      zero,56(s8)
 110:   ffc00040        sd      zero,64(s8)
 114:   ffc00048        sd      zero,72(s8)
 118:   ffc00050        sd      zero,80(s8)
 11c:   ffc00058        sd      zero,88(s8)
 120:   afc00060        sw      zero,96(s8)
 124:   2402004c        li      v0,76
 128:   a3c20000        sb      v0,0(s8)
 12c:   8fc20074        lw      v0,116(s8)
 130:   8fc30078        lw      v1,120(s8)
 134:   8fc6007c        lw      a2,124(s8)
 138:   8fc70080        lw      a3,128(s8)
 13c:   8fca0098        lw      a6,152(s8)
 140:   8fcb00c0        lw      a7,192(s8)
 144:   0040202d        move    a0,v0
 148:   0060282d        move    a1,v1
 14c:   dfc80088        ld      a4,136(s8)
 150:   dfc90090        ld      a5,144(s8)
 154:   df990000        ld      t9,0(gp)
 158:   0320f809        jalr    t9
 15c:   00000000        nop
 160:   03c0e82d        move    sp,s8
 164:   dfbf00b0        ld      ra,176(sp)
 168:   dfbe00a8        ld      s8,168(sp)
 16c:   dfbc00a0        ld      gp,160(sp)
 170:   03e00008        jr      ra
 174:   67bd00c0        daddiu  sp,sp,192

0000000000000178 <main>:
 178:   67bdffc0        daddiu  sp,sp,-64
 17c:   ffbf0030        sd      ra,48(sp)
 180:   ffbe0028        sd      s8,40(sp)
 184:   ffbc0020        sd      gp,32(sp)
 188:   03a0f02d        move    s8,sp
 18c:   3c1c0000        lui     gp,0x0
 190:   0399e02d        daddu   gp,gp,t9
 194:   679c0000        daddiu  gp,gp,0
 198:   df820000        ld      v0,0(gp)
 19c:   dc420000        ld      v0,0(v0)
 1a0:   df830000        ld      v1,0(gp)
 1a4:   dc630000        ld      v1,0(v1)
 1a8:   ffc20010        sd      v0,16(s8)
 1ac:   ffc30018        sd      v1,24(s8)
 1b0:   24020009        li      v0,9
 1b4:   ffa20000        sd      v0,0(sp)
 1b8:   0000202d        move    a0,zero
 1bc:   24050001        li      a1,1
 1c0:   24060002        li      a2,2
 1c4:   24070003        li      a3,3
 1c8:   24080004        li      a4,4
 1cc:   dfc90010        ld      a5,16(s8)
 1d0:   dfca0018        ld      a6,24(s8)
 1d4:   240b0008        li      a7,8
 1d8:   df990000        ld      t9,0(gp)
 1dc:   0320f809        jalr    t9
 1e0:   00000000        nop
 1e4:   0000102d        move    v0,zero
 1e8:   03c0e82d        move    sp,s8
 1ec:   dfbf0030        ld      ra,48(sp)
 1f0:   dfbe0028        ld      s8,40(sp)
 1f4:   dfbc0020        ld      gp,32(sp)
 1f8:   03e00008        jr      ra
 1fc:   67bd0040        daddiu  sp,sp,64



; ---------- structs by value, complex example (multiple structs) ---------->
;
; struct A { int i, j; float f; };
; struct B { double d; long long l; };
;
; void leaf_call(int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j)
; {
; }
;
; void nonleaf_call(int a, int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j)
; {
;     /* use some local data */
;     char l[100] ={ 'L'};
;     leaf_call(b, c, d, e, f, g, h, i, j);
; }
;
; int main()
; {
;     nonleaf_call(0, 1, (struct A){2, 3, 4.f}, (struct B){5., 6ll}, 7, 8, (struct A){9, 10, 11.f}, (struct B){12., 13ll}, 14, 15);
;     return 0;
; }



; output from debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <leaf_call>:
   0:	67bdffb0 	daddiu	sp,sp,-80
   4:	ffbe0038 	sd	s8,56(sp)
   8:	03a0f02d 	move	s8,sp
   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

0000000000000060 <nonleaf_call>:
  60:	67bdff10 	daddiu	sp,sp,-240
  64:	ffbf00e8 	sd	ra,232(sp)
  68:	ffbe00e0 	sd	s8,224(sp)
  6c:	ffbc00d8 	sd	gp,216(sp)
  70:	03a0f02d 	move	s8,sp
  74:	3c1c0000 	lui	gp,0x0
  78:	0399e02d 	daddu	gp,gp,t9
  7c:	679c0000 	daddiu	gp,gp,0
  80:	0080402d 	move	a4,a0
  84:	ffc600a8 	sd	a2,168(s8)
  88:	ffc700b0 	sd	a3,176(s8)
  8c:	46208006 	mov.d	$f0,$f16
  90:	0120202d 	move	a0,a5
  94:	0140182d 	move	v1,a6
  98:	0160102d 	move	v0,a7
  9c:	00083000 	sll	a2,a4,0x0
  a0:	afc600a0 	sw	a2,160(s8)
  a4:	00052800 	sll	a1,a1,0x0
  a8:	afc500a4 	sw	a1,164(s8)
  ac:	f7c000b8 	sdc1	$f0,184(s8)
  b0:	ffc400c0 	sd	a0,192(s8)
  b4:	00031800 	sll	v1,v1,0x0
  b8:	afc300c8 	sw	v1,200(s8)
  bc:	00021000 	sll	v0,v0,0x0
  c0:	afc200cc 	sw	v0,204(s8)
  c4:	ffc00030 	sd	zero,48(s8)
  c8:	ffc00038 	sd	zero,56(s8)
  cc:	ffc00040 	sd	zero,64(s8)
  d0:	ffc00048 	sd	zero,72(s8)
  d4:	ffc00050 	sd	zero,80(s8)
  d8:	ffc00058 	sd	zero,88(s8)
  dc:	ffc00060 	sd	zero,96(s8)
  e0:	ffc00068 	sd	zero,104(s8)
  e4:	ffc00070 	sd	zero,112(s8)
  e8:	ffc00078 	sd	zero,120(s8)
  ec:	ffc00080 	sd	zero,128(s8)
  f0:	ffc00088 	sd	zero,136(s8)
  f4:	afc00090 	sw	zero,144(s8)
  f8:	2402004c 	li	v0,76
  fc:	a3c20030 	sb	v0,48(s8)
 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
 160:	03c0e82d 	move	sp,s8
 164:	dfbf00e8 	ld	ra,232(sp)
 168:	dfbe00e0 	ld	s8,224(sp)
 16c:	dfbc00d8 	ld	gp,216(sp)
 170:	67bd00f0 	daddiu	sp,sp,240
 174:	03e00008 	jr	ra
 178:	00200825 	move	at,at

000000000000017c <main>:
 17c:	67bdff70 	daddiu	sp,sp,-144
 180:	ffbf0088 	sd	ra,136(sp)
 184:	ffbe0080 	sd	s8,128(sp)
 188:	ffbc0078 	sd	gp,120(sp)
 18c:	03a0f02d 	move	s8,sp
 190:	3c1c0000 	lui	gp,0x0
 194:	0399e02d 	daddu	gp,gp,t9
 198:	679c0000 	daddiu	gp,gp,0
 19c:	df820000 	ld	v0,0(gp)
 1a0:	64430000 	daddiu	v1,v0,0
 1a4:	68630007 	ldl	v1,7(v1)
 1a8:	6c430000 	ldr	v1,0(v0)
 1ac:	ffc30060 	sd	v1,96(s8)
 1b0:	64420000 	daddiu	v0,v0,0
 1b4:	8c420008 	lw	v0,8(v0)
 1b8:	afc20068 	sw	v0,104(s8)
 1bc:	df820000 	ld	v0,0(gp)
 1c0:	dc420000 	ld	v0,0(v0)
 1c4:	ffc20050 	sd	v0,80(s8)
 1c8:	24020006 	li	v0,6
 1cc:	ffc20058 	sd	v0,88(s8)
 1d0:	df820000 	ld	v0,0(gp)
 1d4:	64430000 	daddiu	v1,v0,0
 1d8:	68630007 	ldl	v1,7(v1)
 1dc:	6c430000 	ldr	v1,0(v0)
 1e0:	ffc30040 	sd	v1,64(s8)
 1e4:	64420000 	daddiu	v0,v0,0
 1e8:	8c420008 	lw	v0,8(v0)
 1ec:	afc20048 	sw	v0,72(s8)
 1f0:	df820000 	ld	v0,0(gp)
 1f4:	dc420000 	ld	v0,0(v0)
 1f8:	ffc20030 	sd	v0,48(s8)
 1fc:	2402000d 	li	v0,13
 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
 254:	240a0007 	li	a6,7
 258:	240b0008 	li	a7,8
 25c:	df820000 	ld	v0,0(gp)
 260:	0040c82d 	move	t9,v0
 264:	0320f809 	jalr	t9
 268:	00200825 	move	at,at
 26c:	0000102d 	move	v0,zero
 270:	03c0e82d 	move	sp,s8
 274:	dfbf0088 	ld	ra,136(sp)
 278:	dfbe0080 	ld	s8,128(sp)
 27c:	dfbc0078 	ld	gp,120(sp)
 280:	67bd0090 	daddiu	sp,sp,144
 284:	03e00008 	jr	ra
 288:	00200825 	move	at,at
 28c:	00200825 	move	at,at



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <leaf_call>:
   0:   67bdffb0        daddiu  sp,sp,-80
   4:   ffbe0038        sd      s8,56(sp)
   8:   ffbc0030        sd      gp,48(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   0080102d        move    v0,a0
  20:   ffc50008        sd      a1,8(s8)
  24:   ffc60010        sd      a2,16(s8)
  28:   00e0182d        move    v1,a3
  2c:   0100202d        move    a0,a4
  30:   0120282d        move    a1,a5
  34:   0140302d        move    a2,a6
  38:   ffcb0048        sd      a7,72(s8)
  3c:   00021000        sll     v0,v0,0x0
  40:   afc20000        sw      v0,0(s8)
  44:   ffc30018        sd      v1,24(s8)
  48:   ffc40020        sd      a0,32(s8)
  4c:   00051000        sll     v0,a1,0x0
  50:   afc20028        sw      v0,40(s8)
  54:   00061000        sll     v0,a2,0x0
  58:   afc2002c        sw      v0,44(s8)
  5c:   03c0e82d        move    sp,s8
  60:   dfbe0038        ld      s8,56(sp)
  64:   dfbc0030        ld      gp,48(sp)
  68:   03e00008        jr      ra
  6c:   67bd0050        daddiu  sp,sp,80

0000000000000070 <nonleaf_call>:
  70:   67bdff00        daddiu  sp,sp,-256
  74:   ffbf00f0        sd      ra,240(sp)
  78:   ffbe00e8        sd      s8,232(sp)
  7c:   ffbc00e0        sd      gp,224(sp)
  80:   03a0f02d        move    s8,sp
  84:   3c1c0000        lui     gp,0x0
  88:   0399e02d        daddu   gp,gp,t9
  8c:   679c0000        daddiu  gp,gp,0
  90:   0080102d        move    v0,a0
  94:   00a0182d        move    v1,a1
  98:   ffc600a8        sd      a2,168(s8)
  9c:   ffc700b0        sd      a3,176(s8)
  a0:   0100202d        move    a0,a4
  a4:   0120282d        move    a1,a5
  a8:   0140302d        move    a2,a6
  ac:   0160382d        move    a3,a7
  b0:   00021000        sll     v0,v0,0x0
  b4:   afc200a0        sw      v0,160(s8)
  b8:   00031000        sll     v0,v1,0x0
  bc:   afc200a4        sw      v0,164(s8)
  c0:   ffc400b8        sd      a0,184(s8)
  c4:   ffc500c0        sd      a1,192(s8)
  c8:   00061000        sll     v0,a2,0x0
  cc:   afc200c8        sw      v0,200(s8)
  d0:   00071000        sll     v0,a3,0x0
  d4:   afc200cc        sw      v0,204(s8)
  d8:   ffc00030        sd      zero,48(s8)
  dc:   ffc00038        sd      zero,56(s8)
  e0:   ffc00040        sd      zero,64(s8)
  e4:   ffc00048        sd      zero,72(s8)
  e8:   ffc00050        sd      zero,80(s8)
  ec:   ffc00058        sd      zero,88(s8)
  f0:   ffc00060        sd      zero,96(s8)
  f4:   ffc00068        sd      zero,104(s8)
  f8:   ffc00070        sd      zero,112(s8)
  fc:   ffc00078        sd      zero,120(s8)
 100:   ffc00080        sd      zero,128(s8)
 104:   ffc00088        sd      zero,136(s8)
 108:   afc00090        sw      zero,144(s8)
 10c:   2402004c        li      v0,76
 110:   a3c20030        sb      v0,48(s8)
 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
 168:   0002103c        dsll32  v0,v0,0x0
 16c:   dfc600d0        ld      a2,208(s8)
 170:   00c21024        and     v0,a2,v0
 174:   00431025        or      v0,v0,v1
 178:   ffc200d0        sd      v0,208(s8)
 17c:   dfc30100        ld      v1,256(s8)
 180:   8fc20108        lw      v0,264(s8)
 184:   afa20000        sw      v0,0(sp)
 188:   dfc600d0        ld      a2,208(s8)
 18c:   0060582d        move    a7,v1
 190:   df990000        ld      t9,0(gp)
 194:   0320f809        jalr    t9
 198:   00000000        nop
 19c:   03c0e82d        move    sp,s8
 1a0:   dfbf00f0        ld      ra,240(sp)
 1a4:   dfbe00e8        ld      s8,232(sp)
 1a8:   dfbc00e0        ld      gp,224(sp)
 1ac:   03e00008        jr      ra
 1b0:   67bd0100        daddiu  sp,sp,256
 1b4:   00000000        nop

00000000000001b8 <main>:
 1b8:   67bdff60        daddiu  sp,sp,-160
 1bc:   ffbf0090        sd      ra,144(sp)
 1c0:   ffbe0088        sd      s8,136(sp)
 1c4:   ffbc0080        sd      gp,128(sp)
 1c8:   03a0f02d        move    s8,sp
 1cc:   3c1c0000        lui     gp,0x0
 1d0:   0399e02d        daddu   gp,gp,t9
 1d4:   679c0000        daddiu  gp,gp,0
 1d8:   df820000        ld      v0,0(gp)
 1dc:   dc420000        ld      v0,0(v0)
 1e0:   ffc20060        sd      v0,96(s8)
 1e4:   df820000        ld      v0,0(gp)
 1e8:   8c420000        lw      v0,0(v0)
 1ec:   afc20068        sw      v0,104(s8)
 1f0:   df820000        ld      v0,0(gp)
 1f4:   dc420000        ld      v0,0(v0)
 1f8:   df830000        ld      v1,0(gp)
 1fc:   dc630000        ld      v1,0(v1)
 200:   ffc20050        sd      v0,80(s8)
 204:   ffc30058        sd      v1,88(s8)
 208:   df820000        ld      v0,0(gp)
 20c:   dc420000        ld      v0,0(v0)
 210:   ffc20040        sd      v0,64(s8)
 214:   df820000        ld      v0,0(gp)
 218:   8c420000        lw      v0,0(v0)
 21c:   afc20048        sw      v0,72(s8)
 220:   df820000        ld      v0,0(gp)
 224:   dc420000        ld      v0,0(v0)
 228:   df830000        ld      v1,0(gp)
 22c:   dc630000        ld      v1,0(v1)
 230:   ffc20030        sd      v0,48(s8)
 234:   ffc30038        sd      v1,56(s8)
 238:   dfc80050        ld      a4,80(s8)
 23c:   dfc90058        ld      a5,88(s8)
 240:   dfc20040        ld      v0,64(s8)
 244:   ffa20000        sd      v0,0(sp)
 248:   8fc20048        lw      v0,72(s8)
 24c:   afa20008        sw      v0,8(sp)
 250:   dfc20030        ld      v0,48(s8)
 254:   dfc30038        ld      v1,56(s8)
 258:   ffa20010        sd      v0,16(sp)
 25c:   ffa30018        sd      v1,24(sp)
 260:   2402000e        li      v0,14
 264:   ffa20020        sd      v0,32(sp)
 268:   2402000f        li      v0,15
 26c:   ffa20028        sd      v0,40(sp)
 270:   dfc60060        ld      a2,96(s8)
 274:   9fc30068        lwu     v1,104(s8)
 278:   ffc00070        sd      zero,112(s8)
 27c:   24020001        li      v0,1
 280:   0002103c        dsll32  v0,v0,0x0
 284:   6442ffff        daddiu  v0,v0,-1
 288:   00621824        and     v1,v1,v0
 28c:   2402ffff        li      v0,-1
 290:   0002103c        dsll32  v0,v0,0x0
 294:   dfc40070        ld      a0,112(s8)
 298:   00821024        and     v0,a0,v0
 29c:   00431025        or      v0,v0,v1
 2a0:   ffc20070        sd      v0,112(s8)
 2a4:   0000202d        move    a0,zero
 2a8:   24050001        li      a1,1
 2ac:   dfc70070        ld      a3,112(s8)
 2b0:   240a0007        li      a6,7
 2b4:   240b0008        li      a7,8
 2b8:   df990000        ld      t9,0(gp)
 2bc:   0320f809        jalr    t9
 2c0:   00000000        nop
 2c4:   0000102d        move    v0,zero
 2c8:   03c0e82d        move    sp,s8
 2cc:   dfbf0090        ld      ra,144(sp)
 2d0:   dfbe0088        ld      s8,136(sp)
 2d4:   dfbc0080        ld      gp,128(sp)
 2d8:   03e00008        jr      ra
 2dc:   67bd00a0        daddiu  sp,sp,160



; ---------- passing structs with only fp parts ---------->
;
; struct A { float a; };
; struct B { float a, b; };
; struct C { float a, b, c; };
; struct D { double a; };
; struct E { double a, b; };
; struct F { double a, b, c; };
;
; void leaf_call(struct A a, struct B b, struct C c, struct D d, struct E e, struct F f)
; {
; }
;
; int main()
; {
;     leaf_call((struct A){1.f}, (struct B){2.f,3.f}, (struct C){4.f,5.f,6.f}, (struct D){1.}, (struct E){2.,3.}, (struct F){4.,5.,6.});
;     return 0;
; }



; output from debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <leaf_call>:
   0:	67bdff90 	daddiu	sp,sp,-112
   4:	ffbe0058 	sd	s8,88(sp)
   8:	03a0f02d 	move	s8,sp
   c:	afc40000 	sw	a0,0(s8)
  10:	ffc50008 	sd	a1,8(s8)
  14:	ffc60010 	sd	a2,16(s8)
  18:	ffc70018 	sd	a3,24(s8)
  1c:	f7d00040 	sdc1	$f16,64(s8)
  20:	dfc20040 	ld	v0,64(s8)
  24:	ffc20038 	sd	v0,56(s8)
  28:	d7c00038 	ldc1	$f0,56(s8)
  2c:	f7c00020 	sdc1	$f0,32(s8)
  30:	46208846 	mov.d	$f1,$f17
  34:	46209006 	mov.d	$f0,$f18
  38:	46209886 	mov.d	$f2,$f19
  3c:	f7c20068 	sdc1	$f2,104(s8)
  40:	f7c10028 	sdc1	$f1,40(s8)
  44:	f7c00030 	sdc1	$f0,48(s8)
  48:	03c0e82d 	move	sp,s8
  4c:	dfbe0058 	ld	s8,88(sp)
  50:	67bd0070 	daddiu	sp,sp,112
  54:	03e00008 	jr	ra
  58:	00200825 	move	at,at

000000000000005c <main>:
  5c:	67bdff80 	daddiu	sp,sp,-128
  60:	ffbf0078 	sd	ra,120(sp)
  64:	ffbe0070 	sd	s8,112(sp)
  68:	ffbc0068 	sd	gp,104(sp)
  6c:	03a0f02d 	move	s8,sp
  70:	3c1c0000 	lui	gp,0x0
  74:	0399e02d 	daddu	gp,gp,t9
  78:	679c0000 	daddiu	gp,gp,0
  7c:	df820000 	ld	v0,0(gp)
  80:	8c420000 	lw	v0,0(v0)
  84:	afc20058 	sw	v0,88(s8)
  88:	df820000 	ld	v0,0(gp)
  8c:	64430000 	daddiu	v1,v0,0
  90:	68630007 	ldl	v1,7(v1)
  94:	0060202d 	move	a0,v1
  98:	6c440000 	ldr	a0,0(v0)
  9c:	0080102d 	move	v0,a0
  a0:	ffc20050 	sd	v0,80(s8)
  a4:	df820000 	ld	v0,0(gp)
  a8:	64430000 	daddiu	v1,v0,0
  ac:	68630007 	ldl	v1,7(v1)
  b0:	6c430000 	ldr	v1,0(v0)
  b4:	ffc30040 	sd	v1,64(s8)
  b8:	64420000 	daddiu	v0,v0,0
  bc:	8c420008 	lw	v0,8(v0)
  c0:	afc20048 	sw	v0,72(s8)
  c4:	df820000 	ld	v0,0(gp)
  c8:	dc420000 	ld	v0,0(v0)
  cc:	ffc20038 	sd	v0,56(s8)
  d0:	df820000 	ld	v0,0(gp)
  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)
 128:	d7c00010 	ldc1	$f0,16(s8)
 12c:	462004c6 	mov.d	$f19,$f0
 130:	d7c00010 	ldc1	$f0,16(s8)
 134:	8fc40058 	lw	a0,88(s8)
 138:	dfc50050 	ld	a1,80(s8)
 13c:	dfc60040 	ld	a2,64(s8)
 140:	dfc70048 	ld	a3,72(s8)
 144:	46201c06 	mov.d	$f16,$f3
 148:	46201446 	mov.d	$f17,$f2
 14c:	46200c86 	mov.d	$f18,$f1
 150:	462004c6 	mov.d	$f19,$f0
 154:	df820000 	ld	v0,0(gp)
 158:	0040c82d 	move	t9,v0
 15c:	0320f809 	jalr	t9
 160:	00200825 	move	at,at
 164:	0000102d 	move	v0,zero
 168:	03c0e82d 	move	sp,s8
 16c:	dfbf0078 	ld	ra,120(sp)
 170:	dfbe0070 	ld	s8,112(sp)
 174:	dfbc0068 	ld	gp,104(sp)
 178:	67bd0080 	daddiu	sp,sp,128
 17c:	03e00008 	jr	ra
 180:	00200825 	move	at,at
 184:	00200825 	move	at,at
 188:	00200825 	move	at,at
 18c:	00200825 	move	at,at



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <leaf_call>:
   0:   67bdffa0        daddiu  sp,sp,-96
   4:   ffbe0048        sd      s8,72(sp)
   8:   ffbc0040        sd      gp,64(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   afc40000        sw      a0,0(s8)
  20:   ffc50008        sd      a1,8(s8)
  24:   ffc60010        sd      a2,16(s8)
  28:   ffc70018        sd      a3,24(s8)
  2c:   0100182d        move    v1,a4
  30:   0120202d        move    a0,a5
  34:   0140282d        move    a1,a6
  38:   0160102d        move    v0,a7
  3c:   ffc20058        sd      v0,88(s8)
  40:   ffc30020        sd      v1,32(s8)
  44:   ffc40028        sd      a0,40(s8)
  48:   ffc50030        sd      a1,48(s8)
  4c:   03c0e82d        move    sp,s8
  50:   dfbe0048        ld      s8,72(sp)
  54:   dfbc0040        ld      gp,64(sp)
  58:   03e00008        jr      ra
  5c:   67bd0060        daddiu  sp,sp,96

0000000000000060 <main>:
  60:   67bdff70        daddiu  sp,sp,-144
  64:   ffbf0080        sd      ra,128(sp)
  68:   ffbe0078        sd      s8,120(sp)
  6c:   ffbc0070        sd      gp,112(sp)
  70:   03a0f02d        move    s8,sp
  74:   3c1c0000        lui     gp,0x0
  78:   0399e02d        daddu   gp,gp,t9
  7c:   679c0000        daddiu  gp,gp,0
  80:   df820000        ld      v0,0(gp)
  84:   8c420000        lw      v0,0(v0)
  88:   afc20054        sw      v0,84(s8)
  8c:   df820000        ld      v0,0(gp)
  90:   dc420000        ld      v0,0(v0)
  94:   b3c20053        sdl     v0,83(s8)
  98:   b7c2004c        sdr     v0,76(s8)
  9c:   df820000        ld      v0,0(gp)
  a0:   dc420000        ld      v0,0(v0)
  a4:   ffc20040        sd      v0,64(s8)
  a8:   df820000        ld      v0,0(gp)
  ac:   8c420000        lw      v0,0(v0)
  b0:   afc20048        sw      v0,72(s8)
  b4:   df820000        ld      v0,0(gp)
  b8:   dc420000        ld      v0,0(v0)
  bc:   ffc20038        sd      v0,56(s8)
  c0:   df820000        ld      v0,0(gp)
  c4:   dc420000        ld      v0,0(v0)
  c8:   df830000        ld      v1,0(gp)
  cc:   dc630000        ld      v1,0(v1)
  d0:   ffc20028        sd      v0,40(s8)
  d4:   ffc30030        sd      v1,48(s8)
  d8:   df820000        ld      v0,0(gp)
  dc:   dc420000        ld      v0,0(v0)
  e0:   df830000        ld      v1,0(gp)
  e4:   dc630000        ld      v1,0(v1)
  e8:   df840000        ld      a0,0(gp)
  ec:   dc840000        ld      a0,0(a0)
  f0:   ffc20010        sd      v0,16(s8)
  f4:   ffc30018        sd      v1,24(s8)
  f8:   ffc40020        sd      a0,32(s8)
  fc:   dfc80038        ld      a4,56(s8)
 100:   dfc90028        ld      a5,40(s8)
 104:   dfca0030        ld      a6,48(s8)
 108:   6bc20053        ldl     v0,83(s8)
 10c:   6fc2004c        ldr     v0,76(s8)
 110:   0040282d        move    a1,v0
 114:   dfc60040        ld      a2,64(s8)
 118:   9fc30048        lwu     v1,72(s8)
 11c:   ffc00060        sd      zero,96(s8)
 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
 174:   0000102d        move    v0,zero
 178:   03c0e82d        move    sp,s8
 17c:   dfbf0080        ld      ra,128(sp)
 180:   dfbe0078        ld      s8,120(sp)
 184:   dfbc0070        ld      gp,112(sp)
 188:   03e00008        jr      ra
 18c:   67bd0090        daddiu  sp,sp,144



; output from freebsd-12.0_r333647-malta_mips64ebhf w/ gcc 4.2.1 *and* -mhard-float

0000000000000000 <leaf_call>:
   0:   67bdffa0        daddiu  sp,sp,-96
   4:   ffbe0048        sd      s8,72(sp)
   8:   ffbc0040        sd      gp,64(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   ffc40000        sd      a0,0(s8)
  20:   ffc50008        sd      a1,8(s8)
  24:   ffc60010        sd      a2,16(s8)
  28:   ffc70018        sd      a3,24(s8)
  2c:   46208046        mov.d   $f1,$f16
  30:   46208886        mov.d   $f2,$f17
  34:   462090c6        mov.d   $f3,$f18
  38:   46209806        mov.d   $f0,$f19
  3c:   f7c00058        sdc1    $f0,88(s8)
  40:   f7c10020        sdc1    $f1,32(s8)
  44:   f7c20028        sdc1    $f2,40(s8)
  48:   f7c30030        sdc1    $f3,48(s8)
  4c:   03c0e82d        move    sp,s8
  50:   dfbe0048        ld      s8,72(sp)
  54:   dfbc0040        ld      gp,64(sp)
  58:   03e00008        jr      ra
  5c:   67bd0060        daddiu  sp,sp,96

0000000000000060 <main>:
  60:   67bdff70        daddiu  sp,sp,-144
  64:   ffbf0080        sd      ra,128(sp)
  68:   ffbe0078        sd      s8,120(sp)
  6c:   ffbc0070        sd      gp,112(sp)
  70:   03a0f02d        move    s8,sp
  74:   3c1c0000        lui     gp,0x0
  78:   0399e02d        daddu   gp,gp,t9
  7c:   679c0000        daddiu  gp,gp,0
  80:   df810000        ld      at,0(gp)
  84:   c4200000        lwc1    $f0,0(at)
  88:   e7c00054        swc1    $f0,84(s8)
  8c:   df820000        ld      v0,0(gp)
  90:   dc420000        ld      v0,0(v0)
  94:   b3c2004c        sdl     v0,76(s8)
  98:   b7c20053        sdr     v0,83(s8)
  9c:   df820000        ld      v0,0(gp)
  a0:   dc420000        ld      v0,0(v0)
  a4:   ffc20040        sd      v0,64(s8)
  a8:   df820000        ld      v0,0(gp)
  ac:   8c420000        lw      v0,0(v0)
  b0:   afc20048        sw      v0,72(s8)
  b4:   df810000        ld      at,0(gp)
  b8:   d4200000        ldc1    $f0,0(at)
  bc:   f7c00038        sdc1    $f0,56(s8)
  c0:   df820000        ld      v0,0(gp)
  c4:   dc420000        ld      v0,0(v0)
  c8:   df830000        ld      v1,0(gp)
  cc:   dc630000        ld      v1,0(v1)
  d0:   ffc20028        sd      v0,40(s8)
  d4:   ffc30030        sd      v1,48(s8)
  d8:   df820000        ld      v0,0(gp)
  dc:   dc420000        ld      v0,0(v0)
  e0:   df830000        ld      v1,0(gp)
  e4:   dc630000        ld      v1,0(v1)
  e8:   df840000        ld      a0,0(gp)
  ec:   dc840000        ld      a0,0(a0)
  f0:   ffc20010        sd      v0,16(s8)
  f4:   ffc30018        sd      v1,24(s8)
  f8:   ffc40020        sd      a0,32(s8)
  fc:   d7c10038        ldc1    $f1,56(s8)
 100:   d7c20028        ldc1    $f2,40(s8)
 104:   d7c30030        ldc1    $f3,48(s8)
 108:   6bc2004c        ldl     v0,76(s8)
 10c:   6fc20053        ldr     v0,83(s8)
 110:   0040282d        move    a1,v0
 114:   dfc60040        ld      a2,64(s8)
 118:   dfc20048        ld      v0,72(s8)
 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
 170:   462004c6        mov.d   $f19,$f0
 174:   df990000        ld      t9,0(gp)
 178:   0320f809        jalr    t9
 17c:   00000000        nop
 180:   0000102d        move    v0,zero
 184:   03c0e82d        move    sp,s8
 188:   dfbf0080        ld      ra,128(sp)
 18c:   dfbe0078        ld      s8,120(sp)
 190:   dfbc0070        ld      gp,112(sp)
 194:   03e00008        jr      ra
 198:   67bd0090        daddiu  sp,sp,144
 19c:   00000000        nop



; ---------- returning structs by value ---------->
; 
; struct Small { char x; };
; struct Big { long long i,j,k,l; long m; }; /* bigger than 16b */
;
; struct Small f0()
; {
;     struct Small s = { 132 };
;     return s;
; }
;
; struct Big f1()
; {
;     struct Big b = { 7171LL, 99LL, -99LL, -3102LL, 32 };
;     return b;
; }
;
; int main()
; {
;     struct Small s = f0();
;     struct Big b = f1();
;     return b.j + b.k + b.m + s.x;
; }



; output from debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <f0>:
   0:	67bdffe0 	daddiu	sp,sp,-32
   4:	ffbe0018 	sd	s8,24(sp)
   8:	03a0f02d 	move	s8,sp
   c:	2402ff84 	li	v0,-124
  10:	a3c20000 	sb	v0,0(s8)
  14:	93c20000 	lbu	v0,0(s8)
  18:	03c0e82d 	move	sp,s8
  1c:	dfbe0018 	ld	s8,24(sp)
  20:	67bd0020 	daddiu	sp,sp,32
  24:	03e00008 	jr	ra
  28:	00200825 	move	at,at

000000000000002c <f1>:
  2c:	67bdffb0 	daddiu	sp,sp,-80
  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
  ac:	ffbf0048 	sd	ra,72(sp)
  b0:	ffbe0040 	sd	s8,64(sp)
  b4:	ffbc0038 	sd	gp,56(sp)
  b8:	03a0f02d 	move	s8,sp
  bc:	3c1c0000 	lui	gp,0x0
  c0:	0399e02d 	daddu	gp,gp,t9
  c4:	679c0000 	daddiu	gp,gp,0
  c8:	df820000 	ld	v0,0(gp)
  cc:	0040c82d 	move	t9,v0
  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)
 124:	dfbc0038 	ld	gp,56(sp)
 128:	67bd0050 	daddiu	sp,sp,80
 12c:	03e00008 	jr	ra
 130:	00200825 	move	at,at
 134:	00200825 	move	at,at
 138:	00200825 	move	at,at
 13c:	00200825 	move	at,at



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <f0>:
   0:   67bdffe0        daddiu  sp,sp,-32
   4:   ffbe0018        sd      s8,24(sp)
   8:   ffbc0010        sd      gp,16(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   2402ff84        li      v0,-124
  20:   a3c20000        sb      v0,0(s8)
  24:   93c20000        lbu     v0,0(s8)
  28:   03c0e82d        move    sp,s8
  2c:   dfbe0018        ld      s8,24(sp)
  30:   dfbc0010        ld      gp,16(sp)
  34:   03e00008        jr      ra
  38:   67bd0020        daddiu  sp,sp,32
  3c:   00000000        nop

0000000000000040 <f1>:
  40:   67bdffc0        daddiu  sp,sp,-64
  44:   ffbe0038        sd      s8,56(sp)
  48:   ffbc0030        sd      gp,48(sp)
  4c:   03a0f02d        move    s8,sp
  50:   3c1c0000        lui     gp,0x0
  54:   0399e02d        daddu   gp,gp,t9
  58:   679c0000        daddiu  gp,gp,0
  5c:   0080102d        move    v0,a0
  60:   df830000        ld      v1,0(gp)
  64:   dc630000        ld      v1,0(v1)
  68:   df840000        ld      a0,0(gp)
  6c:   dc840000        ld      a0,0(a0)
  70:   df850000        ld      a1,0(gp)
  74:   dca50000        ld      a1,0(a1)
  78:   df860000        ld      a2,0(gp)
  7c:   dcc60000        ld      a2,0(a2)
  80:   df870000        ld      a3,0(gp)
  84:   dce70000        ld      a3,0(a3)
  88:   ffc30000        sd      v1,0(s8)
  8c:   ffc40008        sd      a0,8(s8)
  90:   ffc50010        sd      a1,16(s8)
  94:   ffc60018        sd      a2,24(s8)
  98:   ffc70020        sd      a3,32(s8)
  9c:   dfc30000        ld      v1,0(s8)
  a0:   dfc40008        ld      a0,8(s8)
  a4:   dfc50010        ld      a1,16(s8)
  a8:   dfc60018        ld      a2,24(s8)
  ac:   dfc70020        ld      a3,32(s8)
  b0:   fc430000        sd      v1,0(v0)
  b4:   fc440008        sd      a0,8(v0)
  b8:   fc450010        sd      a1,16(v0)
  bc:   fc460018        sd      a2,24(v0)
  c0:   fc470020        sd      a3,32(v0)
  c4:   03c0e82d        move    sp,s8
  c8:   dfbe0038        ld      s8,56(sp)
  cc:   dfbc0030        ld      gp,48(sp)
  d0:   03e00008        jr      ra
  d4:   67bd0040        daddiu  sp,sp,64

00000000000000d8 <main>:
  d8:   67bdffb0        daddiu  sp,sp,-80
  dc:   ffbf0040        sd      ra,64(sp)
  e0:   ffbe0038        sd      s8,56(sp)
  e4:   ffbc0030        sd      gp,48(sp)
  e8:   03a0f02d        move    s8,sp
  ec:   3c1c0000        lui     gp,0x0
  f0:   0399e02d        daddu   gp,gp,t9
  f4:   679c0000        daddiu  gp,gp,0
  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)
 14c:   dfbc0030        ld      gp,48(sp)
 150:   03e00008        jr      ra
 154:   67bd0050        daddiu  sp,sp,80
        ...



; ---------- single-field structs by values (and small array fields) ---------->
;
; struct C { char c; };
; struct S { short s; };
; struct I { int i; };
; struct F { float f; };
; struct D { double d; };
;
; struct C2 { char c[2]; }; // <= 2 bytes, special alignment
; struct C3 { char c[3]; }; //  > 2 bytes, normal alignment
;
; void leaf_call(struct C2 a, struct C b, struct S c, struct I d, struct F e, struct D f, struct C3 g)
; {
; }
;
; int main()
; {
;     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 debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <leaf_call>:
   0:	67bdffa0 	daddiu	sp,sp,-96
   4:	ffbe0058 	sd	s8,88(sp)
   8:	03a0f02d 	move	s8,sp
   c:	0080102d 	move	v0,a0
  10:	00021000 	sll	v0,v0,0x0
  14:	a7c20000 	sh	v0,0(s8)
  18:	a3c50008 	sb	a1,8(s8)
  1c:	a7c60010 	sh	a2,16(s8)
  20:	afc70018 	sw	a3,24(s8)
  24:	afc80020 	sw	a4,32(s8)
  28:	f7d10040 	sdc1	$f17,64(s8)
  2c:	dfc20040 	ld	v0,64(s8)
  30:	ffc20038 	sd	v0,56(s8)
  34:	d7c00038 	ldc1	$f0,56(s8)
  38:	f7c00028 	sdc1	$f0,40(s8)
  3c:	ffca0030 	sd	a6,48(s8)
  40:	03c0e82d 	move	sp,s8
  44:	dfbe0058 	ld	s8,88(sp)
  48:	67bd0060 	daddiu	sp,sp,96
  4c:	03e00008 	jr	ra
  50:	00200825 	move	at,at

0000000000000054 <main>:
  54:	67bdffa0 	daddiu	sp,sp,-96
  58:	ffbf0058 	sd	ra,88(sp)
  5c:	ffbe0050 	sd	s8,80(sp)
  60:	ffbc0048 	sd	gp,72(sp)
  64:	03a0f02d 	move	s8,sp
  68:	3c1c0000 	lui	gp,0x0
  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)
  c0:	24020009 	li	v0,9
  c4:	a3c20002 	sb	v0,2(s8)
  c8:	d7c00008 	ldc1	$f0,8(s8)
  cc:	dfc40030 	ld	a0,48(s8)
  d0:	93c50028 	lbu	a1,40(s8)
  d4:	97c60020 	lhu	a2,32(s8)
  d8:	8fc70018 	lw	a3,24(s8)
  dc:	8fc80010 	lw	a4,16(s8)
  e0:	46200446 	mov.d	$f17,$f0
  e4:	dfca0000 	ld	a6,0(s8)
  e8:	df820000 	ld	v0,0(gp)
  ec:	0040c82d 	move	t9,v0
  f0:	0320f809 	jalr	t9
  f4:	00200825 	move	at,at
  f8:	0000102d 	move	v0,zero
  fc:	03c0e82d 	move	sp,s8
 100:	dfbf0058 	ld	ra,88(sp)
 104:	dfbe0050 	ld	s8,80(sp)
 108:	dfbc0048 	ld	gp,72(sp)
 10c:	67bd0060 	daddiu	sp,sp,96
 110:	03e00008 	jr	ra
 114:	00200825 	move	at,at
 118:	00200825 	move	at,at
 11c:	00200825 	move	at,at



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <leaf_call>:
   0:   67bdffc0        daddiu  sp,sp,-64
   4:   ffbe0038        sd      s8,56(sp)
   8:   ffbc0030        sd      gp,48(sp)
   c:   03a0f02d        move    s8,sp
  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)
  5c:   ffbc0030        sd      gp,48(sp)
  60:   03a0f02d        move    s8,sp
  64:   3c1c0000        lui     gp,0x0
  68:   0399e02d        daddu   gp,gp,t9
  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)
  c0:   a7c20000        sh      v0,0(s8)
  c4:   df820000        ld      v0,0(gp)
  c8:   90420000        lbu     v0,0(v0)
  cc:   a3c20002        sb      v0,2(s8)
  d0:   dfc90008        ld      a5,8(s8)
  d4:   93c3001b        lbu     v1,27(s8)
  d8:   93c2001c        lbu     v0,28(s8)
  dc:   00021238        dsll    v0,v0,0x8
  e0:   00431025        or      v0,v0,v1
  e4:   ffc00020        sd      zero,32(s8)
  e8:   3043ffff        andi    v1,v0,0xffff
  ec:   3c02ffff        lui     v0,0xffff
  f0:   dfc40020        ld      a0,32(s8)
  f4:   00821024        and     v0,a0,v0
  f8:   00431025        or      v0,v0,v1
  fc:   ffc20020        sd      v0,32(s8)
 100:   dfc30000        ld      v1,0(s8)
 104:   3c0200ff        lui     v0,0xff
 108:   3442ffff        ori     v0,v0,0xffff
 10c:   00621824        and     v1,v1,v0
 110:   ffc00028        sd      zero,40(s8)
 114:   3c0200ff        lui     v0,0xff
 118:   3442ffff        ori     v0,v0,0xffff
 11c:   00621824        and     v1,v1,v0
 120:   3c02ff00        lui     v0,0xff00
 124:   dfc40028        ld      a0,40(s8)
 128:   00821024        and     v0,a0,v0
 12c:   00431025        or      v0,v0,v1
 130:   ffc20028        sd      v0,40(s8)
 134:   dfc40020        ld      a0,32(s8)
 138:   93c5001a        lbu     a1,26(s8)
 13c:   97c60018        lhu     a2,24(s8)
 140:   8fc70014        lw      a3,20(s8)
 144:   8fc80010        lw      a4,16(s8)
 148:   dfca0028        ld      a6,40(s8)
 14c:   df990000        ld      t9,0(gp)
 150:   0320f809        jalr    t9
 154:   00000000        nop
 158:   0000102d        move    v0,zero
 15c:   03c0e82d        move    sp,s8
 160:   dfbf0040        ld      ra,64(sp)
 164:   dfbe0038        ld      s8,56(sp)
 168:   dfbc0030        ld      gp,48(sp)
 16c:   03e00008        jr      ra
 170:   67bd0050        daddiu  sp,sp,80
        ...



; ---------- returning structs by value, focusing on mips64 specifics ---------->
;
; /* first to fp fields returned in fregs, *iff* only fp fields and hard-float platform */
; struct F { float a; };
; struct D { double a; };
; struct FC { float a; char b; };
; struct LF { long long a; float b; };
; struct FF { float a, b; };
; struct DF { double a; float b; };
; union DFu { double a; float b; };
; union Du  { double a; };
; 
; struct F   f_F()   { return (struct F){132.f}; }
; struct D   f_D()   { return (struct D){132.}; }
; struct FC  f_FC()  { return (struct FC){132.f,2}; }
; struct LF  f_LF()  { return (struct LF){-12349,132.f}; }
; struct FF  f_FF()  { return (struct FF){-349.f,132.f}; }
; struct DF  f_DF()  { return (struct DF){-349.,132.f}; }
; union  Du  f_Du()  { return (union Du){-349.}; }        /* not returned in fregs, b/c union*/
; union  DFu f_DFu() { return (union DFu){-349.}; }       /* not returned in fregs, b/c union*/
; 
; int main()
; {
;     struct F   a = f_F();
;     struct D   b = f_D();
;     struct FC  c = f_FC();
;     struct LF  d = f_LF();
;     struct FF  e = f_FF();
;     struct DF  f = f_DF();
;     union  Du  g = f_Du();
;     union  DFu h = f_DFu();
;     return 0;
; }



; output from debian-sid_20150616-malta_mips64el_n64 w/ gcc 4.9.2

0000000000000000 <f_F>:
   0:	67bdfff0 	daddiu	sp,sp,-16
   4:	ffbe0008 	sd	s8,8(sp)
   8:	03a0f02d 	move	s8,sp
   c:	3c030000 	lui	v1,0x0
  10:	0079182d 	daddu	v1,v1,t9
  14:	64630000 	daddiu	v1,v1,0
  18:	dc620000 	ld	v0,0(v1)
  1c:	c4400000 	lwc1	$f0,0(v0)
  20:	03c0e82d 	move	sp,s8
  24:	dfbe0008 	ld	s8,8(sp)
  28:	67bd0010 	daddiu	sp,sp,16
  2c:	03e00008 	jr	ra
  30:	00200825 	move	at,at

0000000000000034 <f_D>:
  34:	67bdfff0 	daddiu	sp,sp,-16
  38:	ffbe0008 	sd	s8,8(sp)
  3c:	03a0f02d 	move	s8,sp
  40:	3c030000 	lui	v1,0x0
  44:	0079182d 	daddu	v1,v1,t9
  48:	64630000 	daddiu	v1,v1,0
  4c:	dc620000 	ld	v0,0(v1)
  50:	d4400000 	ldc1	$f0,0(v0)
  54:	03c0e82d 	move	sp,s8
  58:	dfbe0008 	ld	s8,8(sp)
  5c:	67bd0010 	daddiu	sp,sp,16
  60:	03e00008 	jr	ra
  64:	00200825 	move	at,at

0000000000000068 <f_FC>:
  68:	67bdffe0 	daddiu	sp,sp,-32
  6c:	ffbe0018 	sd	s8,24(sp)
  70:	03a0f02d 	move	s8,sp
  74:	3c050000 	lui	a1,0x0
  78:	00b9282d 	daddu	a1,a1,t9
  7c:	64a50000 	daddiu	a1,a1,0
  80:	dca20000 	ld	v0,0(a1)
  84:	64430000 	daddiu	v1,v0,0
  88:	68630007 	ldl	v1,7(v1)
  8c:	0060202d 	move	a0,v1
  90:	6c440000 	ldr	a0,0(v0)
  94:	0080102d 	move	v0,a0
  98:	ffc20000 	sd	v0,0(s8)
  9c:	0000102d 	move	v0,zero
  a0:	9fc30000 	lwu	v1,0(s8)
  a4:	0003183c 	dsll32	v1,v1,0x0
  a8:	0003183e 	dsrl32	v1,v1,0x0
  ac:	2404ffff 	li	a0,-1
  b0:	0004203c 	dsll32	a0,a0,0x0
  b4:	00441024 	and	v0,v0,a0
  b8:	00431025 	or	v0,v0,v1
  bc:	9fc30004 	lwu	v1,4(s8)
  c0:	0003183c 	dsll32	v1,v1,0x0
  c4:	0002103c 	dsll32	v0,v0,0x0
  c8:	0002103e 	dsrl32	v0,v0,0x0
  cc:	00431025 	or	v0,v0,v1
  d0:	03c0e82d 	move	sp,s8
  d4:	dfbe0018 	ld	s8,24(sp)
  d8:	67bd0020 	daddiu	sp,sp,32
  dc:	03e00008 	jr	ra
  e0:	00200825 	move	at,at

00000000000000e4 <f_LF>:
  e4:	67bdffe0 	daddiu	sp,sp,-32
  e8:	ffbe0018 	sd	s8,24(sp)
  ec:	03a0f02d 	move	s8,sp
  f0:	3c060000 	lui	a2,0x0
  f4:	00d9302d 	daddu	a2,a2,t9
  f8:	64c60000 	daddiu	a2,a2,0
  fc:	2402cfc3 	li	v0,-12349
 100:	ffc20000 	sd	v0,0(s8)
 104:	dcc20000 	ld	v0,0(a2)
 108:	8c420000 	lw	v0,0(v0)
 10c:	afc20008 	sw	v0,8(s8)
 110:	0000182d 	move	v1,zero
 114:	dfc30000 	ld	v1,0(s8)
 118:	0000102d 	move	v0,zero
 11c:	dfc20008 	ld	v0,8(s8)
 120:	0060202d 	move	a0,v1
 124:	0040282d 	move	a1,v0
 128:	0080102d 	move	v0,a0
 12c:	00a0182d 	move	v1,a1
 130:	03c0e82d 	move	sp,s8
 134:	dfbe0018 	ld	s8,24(sp)
 138:	67bd0020 	daddiu	sp,sp,32
 13c:	03e00008 	jr	ra
 140:	00200825 	move	at,at

0000000000000144 <f_FF>:
 144:	67bdffd0 	daddiu	sp,sp,-48
 148:	ffbe0028 	sd	s8,40(sp)
 14c:	03a0f02d 	move	s8,sp
 150:	3c050000 	lui	a1,0x0
 154:	00b9282d 	daddu	a1,a1,t9
 158:	64a50000 	daddiu	a1,a1,0
 15c:	dca20000 	ld	v0,0(a1)
 160:	64430000 	daddiu	v1,v0,0
 164:	68630007 	ldl	v1,7(v1)
 168:	0060202d 	move	a0,v1
 16c:	6c440000 	ldr	a0,0(v0)
 170:	0080102d 	move	v0,a0
 174:	ffc20000 	sd	v0,0(s8)
 178:	c7c10000 	lwc1	$f1,0(s8)
 17c:	c7c00004 	lwc1	$f0,4(s8)
 180:	46000886 	mov.s	$f2,$f1
 184:	46000046 	mov.s	$f1,$f0
 188:	46001006 	mov.s	$f0,$f2
 18c:	46000886 	mov.s	$f2,$f1
 190:	03c0e82d 	move	sp,s8
 194:	dfbe0028 	ld	s8,40(sp)
 198:	67bd0030 	daddiu	sp,sp,48
 19c:	03e00008 	jr	ra
 1a0:	00200825 	move	at,at

00000000000001a4 <f_DF>:
 1a4:	67bdffd0 	daddiu	sp,sp,-48
 1a8:	ffbe0028 	sd	s8,40(sp)
 1ac:	03a0f02d 	move	s8,sp
 1b0:	3c030000 	lui	v1,0x0
 1b4:	0079182d 	daddu	v1,v1,t9
 1b8:	64630000 	daddiu	v1,v1,0
 1bc:	dc620000 	ld	v0,0(v1)
 1c0:	dc420000 	ld	v0,0(v0)
 1c4:	ffc20000 	sd	v0,0(s8)
 1c8:	dc620000 	ld	v0,0(v1)
 1cc:	8c420000 	lw	v0,0(v0)
 1d0:	afc20008 	sw	v0,8(s8)
 1d4:	d7c10000 	ldc1	$f1,0(s8)
 1d8:	c7c00008 	lwc1	$f0,8(s8)
 1dc:	46200886 	mov.d	$f2,$f1
 1e0:	46000046 	mov.s	$f1,$f0
 1e4:	46201006 	mov.d	$f0,$f2
 1e8:	46000886 	mov.s	$f2,$f1
 1ec:	03c0e82d 	move	sp,s8
 1f0:	dfbe0028 	ld	s8,40(sp)
 1f4:	67bd0030 	daddiu	sp,sp,48
 1f8:	03e00008 	jr	ra
 1fc:	00200825 	move	at,at

0000000000000200 <f_Du>:
 200:	67bdfff0 	daddiu	sp,sp,-16
 204:	ffbe0008 	sd	s8,8(sp)
 208:	03a0f02d 	move	s8,sp
 20c:	3c02fffc 	lui	v0,0xfffc
 210:	3442075d 	ori	v0,v0,0x75d
 214:	0002133c 	dsll32	v0,v0,0xc
 218:	03c0e82d 	move	sp,s8
 21c:	dfbe0008 	ld	s8,8(sp)
 220:	67bd0010 	daddiu	sp,sp,16
 224:	03e00008 	jr	ra
 228:	00200825 	move	at,at

000000000000022c <f_DFu>:
 22c:	67bdfff0 	daddiu	sp,sp,-16
 230:	ffbe0008 	sd	s8,8(sp)
 234:	03a0f02d 	move	s8,sp
 238:	3c02fffc 	lui	v0,0xfffc
 23c:	3442075d 	ori	v0,v0,0x75d
 240:	0002133c 	dsll32	v0,v0,0xc
 244:	03c0e82d 	move	sp,s8
 248:	dfbe0008 	ld	s8,8(sp)
 24c:	67bd0010 	daddiu	sp,sp,16
 250:	03e00008 	jr	ra
 254:	00200825 	move	at,at

0000000000000258 <main>:
 258:	67bdff90 	daddiu	sp,sp,-112
 25c:	ffbf0068 	sd	ra,104(sp)
 260:	ffbe0060 	sd	s8,96(sp)
 264:	ffbc0058 	sd	gp,88(sp)
 268:	03a0f02d 	move	s8,sp
 26c:	3c1c0000 	lui	gp,0x0
 270:	0399e02d 	daddu	gp,gp,t9
 274:	679c0000 	daddiu	gp,gp,0
 278:	df820000 	ld	v0,0(gp)
 27c:	0040c82d 	move	t9,v0
 280:	0320f809 	jalr	t9
 284:	00200825 	move	at,at
 288:	e7c00000 	swc1	$f0,0(s8)
 28c:	df820000 	ld	v0,0(gp)
 290:	0040c82d 	move	t9,v0
 294:	0320f809 	jalr	t9
 298:	00200825 	move	at,at
 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)
 2f0:	0040c82d 	move	t9,v0
 2f4:	0320f809 	jalr	t9
 2f8:	00200825 	move	at,at
 2fc:	46200046 	mov.d	$f1,$f0
 300:	46001006 	mov.s	$f0,$f2
 304:	f7c10030 	sdc1	$f1,48(s8)
 308:	e7c00038 	swc1	$f0,56(s8)
 30c:	df820000 	ld	v0,0(gp)
 310:	0040c82d 	move	t9,v0
 314:	0320f809 	jalr	t9
 318:	00200825 	move	at,at
 31c:	ffc20040 	sd	v0,64(s8)
 320:	df820000 	ld	v0,0(gp)
 324:	0040c82d 	move	t9,v0
 328:	0320f809 	jalr	t9
 32c:	00200825 	move	at,at
 330:	ffc20048 	sd	v0,72(s8)
 334:	0000102d 	move	v0,zero
 338:	03c0e82d 	move	sp,s8
 33c:	dfbf0068 	ld	ra,104(sp)
 340:	dfbe0060 	ld	s8,96(sp)
 344:	dfbc0058 	ld	gp,88(sp)
 348:	67bd0070 	daddiu	sp,sp,112
 34c:	03e00008 	jr	ra
 350:	00200825 	move	at,at
 354:	00200825 	move	at,at
 358:	00200825 	move	at,at
 35c:	00200825 	move	at,at



; output from freebsd-12.0_r333647-malta_mips64elhf w/ gcc 4.2.1 (*not* using hard-float)

0000000000000000 <f_F>:
   0:   67bdffe0        daddiu  sp,sp,-32
   4:   ffbe0018        sd      s8,24(sp)
   8:   ffbc0010        sd      gp,16(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   df820000        ld      v0,0(gp)
  20:   8c420000        lw      v0,0(v0)
  24:   afc20000        sw      v0,0(s8)
  28:   8fc20000        lw      v0,0(s8)
  2c:   03c0e82d        move    sp,s8
  30:   dfbe0018        ld      s8,24(sp)
  34:   dfbc0010        ld      gp,16(sp)
  38:   03e00008        jr      ra
  3c:   67bd0020        daddiu  sp,sp,32

0000000000000040 <f_D>:
  40:   67bdffe0        daddiu  sp,sp,-32
  44:   ffbe0018        sd      s8,24(sp)
  48:   ffbc0010        sd      gp,16(sp)
  4c:   03a0f02d        move    s8,sp
  50:   3c1c0000        lui     gp,0x0
  54:   0399e02d        daddu   gp,gp,t9
  58:   679c0000        daddiu  gp,gp,0
  5c:   df820000        ld      v0,0(gp)
  60:   dc420000        ld      v0,0(v0)
  64:   ffc20000        sd      v0,0(s8)
  68:   dfc20000        ld      v0,0(s8)
  6c:   03c0e82d        move    sp,s8
  70:   dfbe0018        ld      s8,24(sp)
  74:   dfbc0010        ld      gp,16(sp)
  78:   03e00008        jr      ra
  7c:   67bd0020        daddiu  sp,sp,32

0000000000000080 <f_FC>:
  80:   67bdffd0        daddiu  sp,sp,-48
  84:   ffbe0028        sd      s8,40(sp)
  88:   ffbc0020        sd      gp,32(sp)
  8c:   03a0f02d        move    s8,sp
  90:   3c1c0000        lui     gp,0x0
  94:   0399e02d        daddu   gp,gp,t9
  98:   679c0000        daddiu  gp,gp,0
  9c:   df820000        ld      v0,0(gp)
  a0:   dc420000        ld      v0,0(v0)
  a4:   ffc20000        sd      v0,0(s8)
  a8:   dfc20000        ld      v0,0(s8)
  ac:   ffc20008        sd      v0,8(s8)
  b0:   ffc00010        sd      zero,16(s8)
  b4:   9fc30008        lwu     v1,8(s8)
  b8:   24020001        li      v0,1
  bc:   0002103c        dsll32  v0,v0,0x0
  c0:   6442ffff        daddiu  v0,v0,-1
  c4:   00621824        and     v1,v1,v0
  c8:   2402ffff        li      v0,-1
  cc:   0002103c        dsll32  v0,v0,0x0
  d0:   dfc40010        ld      a0,16(s8)
  d4:   00821024        and     v0,a0,v0
  d8:   00431025        or      v0,v0,v1
  dc:   ffc20010        sd      v0,16(s8)
  e0:   9fc2000c        lwu     v0,12(s8)
  e4:   0002183c        dsll32  v1,v0,0x0
  e8:   24020001        li      v0,1
  ec:   0002103c        dsll32  v0,v0,0x0
  f0:   6442ffff        daddiu  v0,v0,-1
  f4:   dfc40010        ld      a0,16(s8)
  f8:   00821024        and     v0,a0,v0
  fc:   00431025        or      v0,v0,v1
 100:   ffc20010        sd      v0,16(s8)
 104:   dfc20010        ld      v0,16(s8)
 108:   03c0e82d        move    sp,s8
 10c:   dfbe0028        ld      s8,40(sp)
 110:   dfbc0020        ld      gp,32(sp)
 114:   03e00008        jr      ra
 118:   67bd0030        daddiu  sp,sp,48
 11c:   00000000        nop

0000000000000120 <f_LF>:
 120:   67bdffc0        daddiu  sp,sp,-64
 124:   ffbe0038        sd      s8,56(sp)
 128:   ffbc0030        sd      gp,48(sp)
 12c:   03a0f02d        move    s8,sp
 130:   3c1c0000        lui     gp,0x0
 134:   0399e02d        daddu   gp,gp,t9
 138:   679c0000        daddiu  gp,gp,0
 13c:   df820000        ld      v0,0(gp)
 140:   dc420000        ld      v0,0(v0)
 144:   df830000        ld      v1,0(gp)
 148:   dc630000        ld      v1,0(v1)
 14c:   ffc20000        sd      v0,0(s8)
 150:   ffc30008        sd      v1,8(s8)
 154:   dfc20000        ld      v0,0(s8)
 158:   dfc30008        ld      v1,8(s8)
 15c:   ffc20010        sd      v0,16(s8)
 160:   ffc30018        sd      v1,24(s8)
 164:   dfc20010        ld      v0,16(s8)
 168:   dfc30018        ld      v1,24(s8)
 16c:   ffc20020        sd      v0,32(s8)
 170:   ffc30028        sd      v1,40(s8)
 174:   dfc20020        ld      v0,32(s8)
 178:   0040202d        move    a0,v0
 17c:   dfc20028        ld      v0,40(s8)
 180:   0040282d        move    a1,v0
 184:   0080102d        move    v0,a0
 188:   00a0182d        move    v1,a1
 18c:   03c0e82d        move    sp,s8
 190:   dfbe0038        ld      s8,56(sp)
 194:   dfbc0030        ld      gp,48(sp)
 198:   03e00008        jr      ra
 19c:   67bd0040        daddiu  sp,sp,64

00000000000001a0 <f_FF>:
 1a0:   67bdffd0        daddiu  sp,sp,-48
 1a4:   ffbe0028        sd      s8,40(sp)
 1a8:   ffbc0020        sd      gp,32(sp)
 1ac:   03a0f02d        move    s8,sp
 1b0:   3c1c0000        lui     gp,0x0
 1b4:   0399e02d        daddu   gp,gp,t9
 1b8:   679c0000        daddiu  gp,gp,0
 1bc:   df820000        ld      v0,0(gp)
 1c0:   dc420000        ld      v0,0(v0)
 1c4:   ffc20000        sd      v0,0(s8)
 1c8:   dfc20000        ld      v0,0(s8)
 1cc:   ffc20008        sd      v0,8(s8)
 1d0:   8fc20008        lw      v0,8(s8)
 1d4:   8fc3000c        lw      v1,12(s8)
 1d8:   0060202d        move    a0,v1
 1dc:   03c0e82d        move    sp,s8
 1e0:   dfbe0028        ld      s8,40(sp)
 1e4:   dfbc0020        ld      gp,32(sp)
 1e8:   03e00008        jr      ra
 1ec:   67bd0030        daddiu  sp,sp,48

00000000000001f0 <f_DF>:
 1f0:   67bdffc0        daddiu  sp,sp,-64
 1f4:   ffbe0038        sd      s8,56(sp)
 1f8:   ffbc0030        sd      gp,48(sp)
 1fc:   03a0f02d        move    s8,sp
 200:   3c1c0000        lui     gp,0x0
 204:   0399e02d        daddu   gp,gp,t9
 208:   679c0000        daddiu  gp,gp,0
 20c:   df820000        ld      v0,0(gp)
 210:   dc420000        ld      v0,0(v0)
 214:   df830000        ld      v1,0(gp)
 218:   dc630000        ld      v1,0(v1)
 21c:   ffc20000        sd      v0,0(s8)
 220:   ffc30008        sd      v1,8(s8)
 224:   dfc20000        ld      v0,0(s8)
 228:   dfc30008        ld      v1,8(s8)
 22c:   ffc20010        sd      v0,16(s8)
 230:   ffc30018        sd      v1,24(s8)
 234:   dfc20010        ld      v0,16(s8)
 238:   8fc30018        lw      v1,24(s8)
 23c:   0060202d        move    a0,v1
 240:   03c0e82d        move    sp,s8
 244:   dfbe0038        ld      s8,56(sp)
 248:   dfbc0030        ld      gp,48(sp)
 24c:   03e00008        jr      ra
 250:   67bd0040        daddiu  sp,sp,64
 254:   00000000        nop

0000000000000258 <f_Du>:
 258:   67bdffe0        daddiu  sp,sp,-32
 25c:   ffbe0018        sd      s8,24(sp)
 260:   ffbc0010        sd      gp,16(sp)
 264:   03a0f02d        move    s8,sp
 268:   3c1c0000        lui     gp,0x0
 26c:   0399e02d        daddu   gp,gp,t9
 270:   679c0000        daddiu  gp,gp,0
 274:   ffc00000        sd      zero,0(s8)
 278:   df820000        ld      v0,0(gp)
 27c:   dc420000        ld      v0,0(v0)
 280:   ffc20000        sd      v0,0(s8)
 284:   dfc20000        ld      v0,0(s8)
 288:   03c0e82d        move    sp,s8
 28c:   dfbe0018        ld      s8,24(sp)
 290:   dfbc0010        ld      gp,16(sp)
 294:   03e00008        jr      ra
 298:   67bd0020        daddiu  sp,sp,32
 29c:   00000000        nop

00000000000002a0 <f_DFu>:
 2a0:   67bdffe0        daddiu  sp,sp,-32
 2a4:   ffbe0018        sd      s8,24(sp)
 2a8:   ffbc0010        sd      gp,16(sp)
 2ac:   03a0f02d        move    s8,sp
 2b0:   3c1c0000        lui     gp,0x0
 2b4:   0399e02d        daddu   gp,gp,t9
 2b8:   679c0000        daddiu  gp,gp,0
 2bc:   ffc00000        sd      zero,0(s8)
 2c0:   df820000        ld      v0,0(gp)
 2c4:   dc420000        ld      v0,0(v0)
 2c8:   ffc20000        sd      v0,0(s8)
 2cc:   dfc20000        ld      v0,0(s8)
 2d0:   03c0e82d        move    sp,s8
 2d4:   dfbe0018        ld      s8,24(sp)
 2d8:   dfbc0010        ld      gp,16(sp)
 2dc:   03e00008        jr      ra
 2e0:   67bd0020        daddiu  sp,sp,32
 2e4:   00000000        nop

00000000000002e8 <main>:
 2e8:   67bdff70        daddiu  sp,sp,-144
 2ec:   ffbf0080        sd      ra,128(sp)
 2f0:   ffbe0078        sd      s8,120(sp)
 2f4:   ffbc0070        sd      gp,112(sp)
 2f8:   03a0f02d        move    s8,sp
 2fc:   3c1c0000        lui     gp,0x0
 300:   0399e02d        daddu   gp,gp,t9
 304:   679c0000        daddiu  gp,gp,0
 308:   df990000        ld      t9,0(gp)
 30c:   0320f809        jalr    t9
 310:   00000000        nop
 314:   afc20000        sw      v0,0(s8)
 318:   df990000        ld      t9,0(gp)
 31c:   0320f809        jalr    t9
 320:   00000000        nop
 324:   ffc20008        sd      v0,8(s8)
 328:   df990000        ld      t9,0(gp)
 32c:   0320f809        jalr    t9
 330:   00000000        nop
 334:   0002203c        dsll32  a0,v0,0x0
 338:   0004203e        dsrl32  a0,a0,0x0
 33c:   24030001        li      v1,1
 340:   0003183c        dsll32  v1,v1,0x0
 344:   6463ffff        daddiu  v1,v1,-1
 348:   00832824        and     a1,a0,v1
 34c:   dfc40050        ld      a0,80(s8)
 350:   2403ffff        li      v1,-1
 354:   0003183c        dsll32  v1,v1,0x0
 358:   00831824        and     v1,a0,v1
 35c:   00651825        or      v1,v1,a1
 360:   ffc30050        sd      v1,80(s8)
 364:   0002103e        dsrl32  v0,v0,0x0
 368:   0002203c        dsll32  a0,v0,0x0
 36c:   dfc30050        ld      v1,80(s8)
 370:   24020001        li      v0,1
 374:   0002103c        dsll32  v0,v0,0x0
 378:   6442ffff        daddiu  v0,v0,-1
 37c:   00621024        and     v0,v1,v0
 380:   00441025        or      v0,v0,a0
 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)
 3d8:   0320f809        jalr    t9
 3dc:   00000000        nop
 3e0:   0080182d        move    v1,a0
 3e4:   ffc20050        sd      v0,80(s8)
 3e8:   afc30058        sw      v1,88(s8)
 3ec:   dfc20050        ld      v0,80(s8)
 3f0:   dfc30058        ld      v1,88(s8)
 3f4:   ffc20030        sd      v0,48(s8)
 3f8:   ffc30038        sd      v1,56(s8)
 3fc:   df990000        ld      t9,0(gp)
 400:   0320f809        jalr    t9
 404:   00000000        nop
 408:   ffc20040        sd      v0,64(s8)
 40c:   df990000        ld      t9,0(gp)
 410:   0320f809        jalr    t9
 414:   00000000        nop
 418:   ffc20048        sd      v0,72(s8)
 41c:   0000102d        move    v0,zero
 420:   03c0e82d        move    sp,s8
 424:   dfbf0080        ld      ra,128(sp)
 428:   dfbe0078        ld      s8,120(sp)
 42c:   dfbc0070        ld      gp,112(sp)
 430:   03e00008        jr      ra
 434:   67bd0090        daddiu  sp,sp,144



; output from freebsd-12.0_r333647-malta_mips64ebhf w/ gcc 4.2.1 *and* -mhard-float

0000000000000000 <f_F>:
   0:   67bdffe0        daddiu  sp,sp,-32
   4:   ffbe0018        sd      s8,24(sp)
   8:   ffbc0010        sd      gp,16(sp)
   c:   03a0f02d        move    s8,sp
  10:   3c1c0000        lui     gp,0x0
  14:   0399e02d        daddu   gp,gp,t9
  18:   679c0000        daddiu  gp,gp,0
  1c:   df810000        ld      at,0(gp)
  20:   c4200000        lwc1    $f0,0(at)
  24:   e7c00000        swc1    $f0,0(s8)
  28:   c7c00000        lwc1    $f0,0(s8)
  2c:   03c0e82d        move    sp,s8
  30:   dfbe0018        ld      s8,24(sp)
  34:   dfbc0010        ld      gp,16(sp)
  38:   03e00008        jr      ra
  3c:   67bd0020        daddiu  sp,sp,32

0000000000000040 <f_D>:
  40:   67bdffe0        daddiu  sp,sp,-32
  44:   ffbe0018        sd      s8,24(sp)
  48:   ffbc0010        sd      gp,16(sp)
  4c:   03a0f02d        move    s8,sp
  50:   3c1c0000        lui     gp,0x0
  54:   0399e02d        daddu   gp,gp,t9
  58:   679c0000        daddiu  gp,gp,0
  5c:   df810000        ld      at,0(gp)
  60:   d4200000        ldc1    $f0,0(at)
  64:   f7c00000        sdc1    $f0,0(s8)
  68:   d7c00000        ldc1    $f0,0(s8)
  6c:   03c0e82d        move    sp,s8
  70:   dfbe0018        ld      s8,24(sp)
  74:   dfbc0010        ld      gp,16(sp)
  78:   03e00008        jr      ra
  7c:   67bd0020        daddiu  sp,sp,32

0000000000000080 <f_FC>:
  80:   67bdffd0        daddiu  sp,sp,-48
  84:   ffbe0028        sd      s8,40(sp)
  88:   ffbc0020        sd      gp,32(sp)
  8c:   03a0f02d        move    s8,sp
  90:   3c1c0000        lui     gp,0x0
  94:   0399e02d        daddu   gp,gp,t9
  98:   679c0000        daddiu  gp,gp,0
  9c:   df820000        ld      v0,0(gp)
  a0:   dc420000        ld      v0,0(v0)
  a4:   ffc20000        sd      v0,0(s8)
  a8:   dfc20000        ld      v0,0(s8)
  ac:   ffc20008        sd      v0,8(s8)
  b0:   ffc00010        sd      zero,16(s8)
  b4:   dfc20008        ld      v0,8(s8)
  b8:   0002103e        dsrl32  v0,v0,0x0
  bc:   0002183c        dsll32  v1,v0,0x0
  c0:   24020001        li      v0,1
  c4:   0002103c        dsll32  v0,v0,0x0
  c8:   6442ffff        daddiu  v0,v0,-1
  cc:   dfc40010        ld      a0,16(s8)
  d0:   00821024        and     v0,a0,v0
  d4:   00431025        or      v0,v0,v1
  d8:   ffc20010        sd      v0,16(s8)
  dc:   dfc30008        ld      v1,8(s8)
  e0:   24020001        li      v0,1
  e4:   0002103c        dsll32  v0,v0,0x0
  e8:   6442ffff        daddiu  v0,v0,-1
  ec:   00621824        and     v1,v1,v0
  f0:   24020001        li      v0,1
  f4:   0002103c        dsll32  v0,v0,0x0
  f8:   6442ffff        daddiu  v0,v0,-1
  fc:   00621824        and     v1,v1,v0
 100:   2402ffff        li      v0,-1
 104:   0002103c        dsll32  v0,v0,0x0
 108:   dfc40010        ld      a0,16(s8)
 10c:   00821024        and     v0,a0,v0
 110:   00431025        or      v0,v0,v1
 114:   ffc20010        sd      v0,16(s8)
 118:   dfc20010        ld      v0,16(s8)
 11c:   03c0e82d        move    sp,s8
 120:   dfbe0028        ld      s8,40(sp)
 124:   dfbc0020        ld      gp,32(sp)
 128:   03e00008        jr      ra
 12c:   67bd0030        daddiu  sp,sp,48

0000000000000130 <f_LF>:
 130:   67bdffc0        daddiu  sp,sp,-64
 134:   ffbe0038        sd      s8,56(sp)
 138:   ffbc0030        sd      gp,48(sp)
 13c:   03a0f02d        move    s8,sp
 140:   3c1c0000        lui     gp,0x0
 144:   0399e02d        daddu   gp,gp,t9
 148:   679c0000        daddiu  gp,gp,0
 14c:   df820000        ld      v0,0(gp)
 150:   dc420000        ld      v0,0(v0)
 154:   df830000        ld      v1,0(gp)
 158:   dc630000        ld      v1,0(v1)
 15c:   ffc20000        sd      v0,0(s8)
 160:   ffc30008        sd      v1,8(s8)
 164:   dfc20000        ld      v0,0(s8)
 168:   dfc30008        ld      v1,8(s8)
 16c:   ffc20010        sd      v0,16(s8)
 170:   ffc30018        sd      v1,24(s8)
 174:   dfc20010        ld      v0,16(s8)
 178:   dfc30018        ld      v1,24(s8)
 17c:   ffc20020        sd      v0,32(s8)
 180:   ffc30028        sd      v1,40(s8)
 184:   dfc20020        ld      v0,32(s8)
 188:   0040202d        move    a0,v0
 18c:   dfc20028        ld      v0,40(s8)
 190:   0040282d        move    a1,v0
 194:   0080102d        move    v0,a0
 198:   00a0182d        move    v1,a1
 19c:   03c0e82d        move    sp,s8
 1a0:   dfbe0038        ld      s8,56(sp)
 1a4:   dfbc0030        ld      gp,48(sp)
 1a8:   03e00008        jr      ra
 1ac:   67bd0040        daddiu  sp,sp,64

00000000000001b0 <f_FF>:
 1b0:   67bdffd0        daddiu  sp,sp,-48
 1b4:   ffbe0028        sd      s8,40(sp)
 1b8:   ffbc0020        sd      gp,32(sp)
 1bc:   03a0f02d        move    s8,sp
 1c0:   3c1c0000        lui     gp,0x0
 1c4:   0399e02d        daddu   gp,gp,t9
 1c8:   679c0000        daddiu  gp,gp,0
 1cc:   df820000        ld      v0,0(gp)
 1d0:   dc420000        ld      v0,0(v0)
 1d4:   ffc20000        sd      v0,0(s8)
 1d8:   dfc20000        ld      v0,0(s8)
 1dc:   ffc20008        sd      v0,8(s8)
 1e0:   c7c00008        lwc1    $f0,8(s8)
 1e4:   c7c1000c        lwc1    $f1,12(s8)
 1e8:   46000886        mov.s   $f2,$f1
 1ec:   03c0e82d        move    sp,s8
 1f0:   dfbe0028        ld      s8,40(sp)
 1f4:   dfbc0020        ld      gp,32(sp)
 1f8:   03e00008        jr      ra
 1fc:   67bd0030        daddiu  sp,sp,48

0000000000000200 <f_DF>:
 200:   67bdffc0        daddiu  sp,sp,-64
 204:   ffbe0038        sd      s8,56(sp)
 208:   ffbc0030        sd      gp,48(sp)
 20c:   03a0f02d        move    s8,sp
 210:   3c1c0000        lui     gp,0x0
 214:   0399e02d        daddu   gp,gp,t9
 218:   679c0000        daddiu  gp,gp,0
 21c:   df820000        ld      v0,0(gp)
 220:   dc420000        ld      v0,0(v0)
 224:   df830000        ld      v1,0(gp)
 228:   dc630000        ld      v1,0(v1)
 22c:   ffc20000        sd      v0,0(s8)
 230:   ffc30008        sd      v1,8(s8)
 234:   dfc20000        ld      v0,0(s8)
 238:   dfc30008        ld      v1,8(s8)
 23c:   ffc20010        sd      v0,16(s8)
 240:   ffc30018        sd      v1,24(s8)
 244:   d7c00010        ldc1    $f0,16(s8)
 248:   c7c10018        lwc1    $f1,24(s8)
 24c:   46000886        mov.s   $f2,$f1
 250:   03c0e82d        move    sp,s8
 254:   dfbe0038        ld      s8,56(sp)
 258:   dfbc0030        ld      gp,48(sp)
 25c:   03e00008        jr      ra
 260:   67bd0040        daddiu  sp,sp,64
 264:   00000000        nop

0000000000000268 <f_Du>:
 268:   67bdffe0        daddiu  sp,sp,-32
 26c:   ffbe0018        sd      s8,24(sp)
 270:   ffbc0010        sd      gp,16(sp)
 274:   03a0f02d        move    s8,sp
 278:   3c1c0000        lui     gp,0x0
 27c:   0399e02d        daddu   gp,gp,t9
 280:   679c0000        daddiu  gp,gp,0
 284:   ffc00000        sd      zero,0(s8)
 288:   df810000        ld      at,0(gp)
 28c:   d4200000        ldc1    $f0,0(at)
 290:   f7c00000        sdc1    $f0,0(s8)
 294:   dfc20000        ld      v0,0(s8)
 298:   03c0e82d        move    sp,s8
 29c:   dfbe0018        ld      s8,24(sp)
 2a0:   dfbc0010        ld      gp,16(sp)
 2a4:   03e00008        jr      ra
 2a8:   67bd0020        daddiu  sp,sp,32
 2ac:   00000000        nop

00000000000002b0 <f_DFu>:
 2b0:   67bdffe0        daddiu  sp,sp,-32
 2b4:   ffbe0018        sd      s8,24(sp)
 2b8:   ffbc0010        sd      gp,16(sp)
 2bc:   03a0f02d        move    s8,sp
 2c0:   3c1c0000        lui     gp,0x0
 2c4:   0399e02d        daddu   gp,gp,t9
 2c8:   679c0000        daddiu  gp,gp,0
 2cc:   ffc00000        sd      zero,0(s8)
 2d0:   df810000        ld      at,0(gp)
 2d4:   d4200000        ldc1    $f0,0(at)
 2d8:   f7c00000        sdc1    $f0,0(s8)
 2dc:   dfc20000        ld      v0,0(s8)
 2e0:   03c0e82d        move    sp,s8
 2e4:   dfbe0018        ld      s8,24(sp)
 2e8:   dfbc0010        ld      gp,16(sp)
 2ec:   03e00008        jr      ra
 2f0:   67bd0020        daddiu  sp,sp,32
 2f4:   00000000        nop

00000000000002f8 <main>:
 2f8:   67bdff70        daddiu  sp,sp,-144
 2fc:   ffbf0080        sd      ra,128(sp)
 300:   ffbe0078        sd      s8,120(sp)
 304:   ffbc0070        sd      gp,112(sp)
 308:   03a0f02d        move    s8,sp
 30c:   3c1c0000        lui     gp,0x0
 310:   0399e02d        daddu   gp,gp,t9
 314:   679c0000        daddiu  gp,gp,0
 318:   df990000        ld      t9,0(gp)
 31c:   0320f809        jalr    t9
 320:   00000000        nop
 324:   e7c00000        swc1    $f0,0(s8)
 328:   df990000        ld      t9,0(gp)
 32c:   0320f809        jalr    t9
 330:   00000000        nop
 334:   f7c00008        sdc1    $f0,8(s8)
 338:   df990000        ld      t9,0(gp)
 33c:   0320f809        jalr    t9
 340:   00000000        nop
 344:   0002183e        dsrl32  v1,v0,0x0
 348:   0003283c        dsll32  a1,v1,0x0
 34c:   dfc40050        ld      a0,80(s8)
 350:   24030001        li      v1,1
 354:   0003183c        dsll32  v1,v1,0x0
 358:   6463ffff        daddiu  v1,v1,-1
 35c:   00831824        and     v1,a0,v1
 360:   00651825        or      v1,v1,a1
 364:   ffc30050        sd      v1,80(s8)
 368:   0002183c        dsll32  v1,v0,0x0
 36c:   0003183e        dsrl32  v1,v1,0x0
 370:   24020001        li      v0,1
 374:   0002103c        dsll32  v0,v0,0x0
 378:   6442ffff        daddiu  v0,v0,-1
 37c:   00622024        and     a0,v1,v0
 380:   dfc30050        ld      v1,80(s8)
 384:   2402ffff        li      v0,-1
 388:   0002103c        dsll32  v0,v0,0x0
 38c:   00621024        and     v0,v1,v0
 390:   00441025        or      v0,v0,a0
 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)
 3e8:   0320f809        jalr    t9
 3ec:   00000000        nop
 3f0:   46001046        mov.s   $f1,$f2
 3f4:   f7c00050        sdc1    $f0,80(s8)
 3f8:   e7c10058        swc1    $f1,88(s8)
 3fc:   dfc20050        ld      v0,80(s8)
 400:   dfc30058        ld      v1,88(s8)
 404:   ffc20030        sd      v0,48(s8)
 408:   ffc30038        sd      v1,56(s8)
 40c:   df990000        ld      t9,0(gp)
 410:   0320f809        jalr    t9
 414:   00000000        nop
 418:   ffc20040        sd      v0,64(s8)
 41c:   df990000        ld      t9,0(gp)
 420:   0320f809        jalr    t9
 424:   00000000        nop
 428:   ffc20048        sd      v0,72(s8)
 42c:   0000102d        move    v0,zero
 430:   03c0e82d        move    sp,s8
 434:   dfbf0080        ld      ra,128(sp)
 438:   dfbe0078        ld      s8,120(sp)
 43c:   dfbc0070        ld      gp,112(sp)
 440:   03e00008        jr      ra
 444:   67bd0090        daddiu  sp,sp,144
        ...



; ---------- C++ trivial and non-trivial aggrs passed to C funcs ---------->
;
; struct Trivial { int a; };
; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
;
; extern "C" {
; 
;     void f1(struct Trivial s)    { }
;     void f2(struct NonTrivial s) { }
;
;     void f()
;     {
;         struct Trivial t;
;         struct NonTrivial n;
;         int a=1;
;         a += 123;
;         f1(t);
;         a -= 123;
;         f2(n);
;         a -= 12;
;     }
; }



; output from freebsd-12.0_r333647-malta_mips64ebhf w/ gcc 4.2.1

0000000120000b70 <f1>:
   120000b70:   67bdffe0        daddiu  sp,sp,-32
   120000b74:   ffbe0018        sd      s8,24(sp)
   120000b78:   ffbc0010        sd      gp,16(sp)
   120000b7c:   03a0f02d        move    s8,sp
   120000b80:   3c1c0002        lui     gp,0x2
   120000b84:   0399e02d        daddu   gp,gp,t9
   120000b88:   679c84e0        daddiu  gp,gp,-31520
   120000b8c:   ffc40000        sd      a0,0(s8)
   120000b90:   03c0e82d        move    sp,s8
   120000b94:   dfbe0018        ld      s8,24(sp)
   120000b98:   dfbc0010        ld      gp,16(sp)
   120000b9c:   03e00008        jr      ra
   120000ba0:   67bd0020        daddiu  sp,sp,32
   120000ba4:   00000000        nop

0000000120000ba8 <f2>:
   120000ba8:   67bdffe0        daddiu  sp,sp,-32
   120000bac:   ffbe0018        sd      s8,24(sp)
   120000bb0:   ffbc0010        sd      gp,16(sp)
   120000bb4:   03a0f02d        move    s8,sp
   120000bb8:   3c1c0002        lui     gp,0x2
   120000bbc:   0399e02d        daddu   gp,gp,t9
   120000bc0:   679c84a8        daddiu  gp,gp,-31576
   120000bc4:   ffc40000        sd      a0,0(s8)
   120000bc8:   03c0e82d        move    sp,s8
   120000bcc:   dfbe0018        ld      s8,24(sp)
   120000bd0:   dfbc0010        ld      gp,16(sp)
   120000bd4:   03e00008        jr      ra
   120000bd8:   67bd0020        daddiu  sp,sp,32
   120000bdc:   00000000        nop

0000000120000be0 <f>:
   120000be0:   67bdffd0        daddiu  sp,sp,-48     ;
   120000be4:   ffbf0020        sd      ra,32(sp)     ;
   120000be8:   ffbe0018        sd      s8,24(sp)     ;
   120000bec:   ffbc0010        sd      gp,16(sp)     ;
   120000bf0:   03a0f02d        move    s8,sp         ;
   120000bf4:   3c1c0002        lui     gp,0x2        ;
   120000bf8:   0399e02d        daddu   gp,gp,t9      ;
   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      ;
   120000c50:   0040202d        move    a0,v0         ; |               ptr to dest of copy of n
   120000c54:   0060282d        move    a1,v1         ; |               ptr to n
   120000c58:   df9980c0        ld      t9,-32576(gp) ; | copy n        |
   120000c5c:   0320f809        jalr    t9            ; |               | NonTrivial::NonTrivial(const NonTrivial&) / copy ctor
   120000c60:   00000000        nop                   ;
   120000c64:   67c20004        daddiu  v0,s8,4       ; get ptr to copy of n -> v0
   120000c68:   0040202d        move    a0,v0         ; f2 arg 0 (ptr to copy of struct NonTrivial), via ptr as non-trivial
   120000c6c:   df9980d0        ld      t9,-32560(gp) ; |
   120000c70:   0320f809        jalr    t9            ; | call f2(struct NonTrivial)
   120000c74:   00000000        nop                   ;
   120000c78:   8fc20000        lw      v0,0(s8)      ;
   120000c7c:   2442fff4        addiu   v0,v0,-12     ;
   120000c80:   afc20000        sw      v0,0(s8)      ;
   120000c84:   03c0e82d        move    sp,s8         ;
   120000c88:   dfbf0020        ld      ra,32(sp)     ;
   120000c8c:   dfbe0018        ld      s8,24(sp)     ;
   120000c90:   dfbc0010        ld      gp,16(sp)     ;
   120000c94:   03e00008        jr      ra            ;
   120000c98:   67bd0030        daddiu  sp,sp,48      ;
   120000c9c:   00000000        nop                   ;

  ; ... snip, removed code of ctor and copy ctor ...



; vim: ft=asm