1 2 .text 3 .ent func1 4func1: 5 .frame $sp,0,$31 6 .set noreorder 7 .cpload $25 # 0000 lui gp,hi(_gp_disp) 8 # 0004 addiu gp,gp,lo(_gp_disp) 9 # 0008 addu gp,gp,t9 10 .set reorder 11 .cprestore 8 # 000c sw gp,8(sp) 12 13 jal end # 0010 lw t9,got(.text)(gp) 14 # 0014 nop 15 # 0018 addiu t9,t9,lo(end) 16 # 001c jalr t9 17 # 0020 nop 18 # 0024 lw gp,8(sp) 19 20 # Avoid confusion: avoid the 'lw' above being put into the delay 21 # slot for the jalr below! 22 .set noreorder 23 nop # 0028 nop 24 .set reorder 25 26 jal $25 # 002c jalr t9 27 # 0030 nop 28 # 0034 lw gp,8(sp) 29 .end func1 30 31 32 .text 33 .ent func2 34func2: 35 .frame $sp,0,$31 36 .set noreorder 37 .cpload $25 # 0038 lui gp,hi(_gp_disp) 38 # 003c addiu gp,gp,lo(_gp_disp) 39 # 0040 addu gp,gp,t9 40 .set reorder 41 .cprestore 32768 # 0044 lui at,0x1 42 # 0048 addu at,at,sp 43 # 004c sw gp,-32768(at) 44 45 jal end # 0050 lw t9,got(.text)(gp) 46 # 0054 nop 47 # 0058 addiu t9,t9,lo(end) 48 # 005c jalr t9 49 # 0060 nop 50 # 0064 lui at,0x1 51 # 0068 addu at,at,sp 52 # 006c lw gp,-32768(at) 53 54 # Avoid confusion: avoid the 'lw' above being put into the delay 55 # slot for the jalr below! 56 .set noreorder 57 nop # 0070 nop 58 .set reorder 59 60 jal $25 # 0074 jalr t9 61 # 0078 nop 62 # 007c lui at,0x1 63 # 0080 addu at,at,sp 64 # 0084 lw gp,-32768(at) 65 .end func2 66 67 68 .text 69 .ent func3 70func3: 71 .frame $sp,0,$31 72 .set noreorder 73 .cpload $25 # 0088 lui gp,hi(_gp_disp) 74 # 008c addiu gp,gp,lo(_gp_disp) 75 # 0090 addu gp,gp,t9 76 .set reorder 77 .cprestore 65536 # 0094 lui at,0x1 78 # 0098 addu at,at,sp 79 # 009c sw gp,0(at) 80 81 jal end # 00a0 lw t9,got(.text)(gp) 82 # 00a4 nop 83 # 00a8 addiu t9,t9,lo(end) 84 # 00ac jalr t9 85 # 00b0 nop 86 # 00b4 lui at,0x1 87 # 00b8 addu at,at,sp 88 # 00bc lw gp,0(at) 89 90 # Avoid confusion: avoid the 'lw' above being put into the delay 91 # slot for the jalr below! 92 .set noreorder 93 nop # 00c0 nop 94 .set reorder 95 96 jal $25 # 00c4 jalr t9 97 # 00c8 nop 98 # 00cc lui at,0x1 99 # 00d0 addu at,at,sp 100 # 00d4 lw gp,0(at) 101 102 .end func3 103 104end: 105 106# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ... 107 .space 8 108