| .data |
| .align 4096 |
| .section ".tdata", #alloc, #write, #tls |
| .align 4 |
| .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 |
| .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 |
| .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 |
| sg1: .word 17 |
| sg2: .word 18 |
| sg3: .word 19 |
| sg4: .word 20 |
| sg5: .word 21 |
| sg6: .word 22 |
| sg7: .word 23 |
| sg8: .word 24 |
| sl1: .word 65 |
| sl2: .word 66 |
| sl3: .word 67 |
| sl4: .word 68 |
| sl5: .word 69 |
| sl6: .word 70 |
| sl7: .word 71 |
| sl8: .word 72 |
| sh1: .word 257 |
| sh2: .word 258 |
| sh3: .word 259 |
| sh4: .word 260 |
| sh5: .word 261 |
| sh6: .word 262 |
| sh7: .word 263 |
| sh8: .word 264 |
| |
| .text |
| .align 4096 |
| .LLGETPC0: |
| retl |
| add %o7, %l7, %l7 |
| |
| .globl fn1 |
| .type fn1,#function |
| .proc 04 |
| fn1: |
| save %sp, -104, %sp |
| sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7 |
| call .LLGETPC0 |
| add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7 |
| nop;nop;nop;nop |
| |
| /* GD */ |
| sethi %tgd_hi22(sg1), %l1 |
| nop |
| add %l1, %tgd_lo10(sg1), %l2 |
| nop |
| add %l7, %l2, %o0, %tgd_add(sg1) |
| nop |
| call __tls_get_addr, %tgd_call(sg1) |
| nop |
| nop;nop;nop;nop |
| |
| /* GD -> IE because variable is referenced through IE too */ |
| sethi %tgd_hi22(sg2), %o0 |
| add %o0, %tgd_lo10(sg2), %o1 |
| add %l7, %o1, %o0, %tgd_add(sg2) |
| call __tls_get_addr, %tgd_call(sg2) |
| nop |
| nop;nop;nop;nop |
| |
| /* GD against local variable */ |
| sethi %tgd_hi22(sl1), %o4 |
| add %o4, %tgd_lo10(sl1), %o4 |
| add %l7, %o4, %o0, %tgd_add(sl1) |
| call __tls_get_addr, %tgd_call(sl1) |
| nop |
| nop;nop;nop;nop |
| |
| /* GD -> IE against local variable referenced through IE too */ |
| sethi %tgd_hi22(sl2), %o0 |
| add %o0, %tgd_lo10(sl2), %o0 |
| add %l7, %o0, %o0, %tgd_add(sl2) |
| call __tls_get_addr, %tgd_call(sl2) |
| nop |
| nop;nop;nop;nop |
| |
| /* GD against hidden and local variable */ |
| sethi %tgd_hi22(sh1), %o4 |
| add %o4, %tgd_lo10(sh1), %o4 |
| add %l7, %o4, %o0, %tgd_add(sh1) |
| call __tls_get_addr, %tgd_call(sh1) |
| nop |
| nop;nop;nop;nop |
| |
| /* GD -> IE against hidden and local variable referenced through |
| IE too */ |
| sethi %tgd_hi22(sh2), %o0 |
| add %o0, %tgd_lo10(sh2), %o0 |
| add %l7, %o0, %o0, %tgd_add(sh2) |
| call __tls_get_addr, %tgd_call(sh2) |
| nop |
| nop;nop;nop;nop |
| |
| /* GD against hidden but not local variable */ |
| sethi %tgd_hi22(sH1), %o4 |
| add %o4, %tgd_lo10(sH1), %o4 |
| add %l7, %o4, %o0, %tgd_add(sH1) |
| call __tls_get_addr, %tgd_call(sH1) |
| nop |
| nop;nop;nop;nop |
| |
| /* GD -> IE against hidden but not local variable referenced through |
| IE too */ |
| sethi %tgd_hi22(sH2), %o0 |
| add %o0, %tgd_lo10(sH2), %o0 |
| add %l7, %o0, %o0, %tgd_add(sH2) |
| call __tls_get_addr, %tgd_call(sH2) |
| nop |
| nop;nop;nop;nop |
| |
| /* LD */ |
| sethi %tldm_hi22(sl1), %l1 |
| nop |
| add %l1, %tldm_lo10(sl1), %l2 |
| nop |
| add %l7, %l2, %o0, %tldm_add(sl1) |
| nop |
| call __tls_get_addr, %tldm_call(sl1) |
| nop |
| sethi %tldo_hix22(sl1), %l3 |
| nop |
| xor %l3, %tldo_lox10(sl1), %l4 |
| nop |
| add %o0, %l4, %l5, %tldo_add(sl1) |
| nop |
| sethi %tldo_hix22(sl2 + 2), %l2 |
| nop |
| xor %l2, %tldo_lox10(sl2 + 2), %l3 |
| nop |
| lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2) |
| nop;nop;nop;nop |
| |
| /* LD against hidden and local variables */ |
| sethi %tldm_hi22(sh1), %o1 |
| sethi %tldo_hix22(sh1), %l3 |
| add %o1, %tldm_lo10(sh1), %o2 |
| sethi %tldo_hix22(sh2 + 1), %l2 |
| add %l7, %o2, %o0, %tldm_add(sh1) |
| xor %l3, %tldo_lox10(sh1), %l4 |
| call __tls_get_addr, %tldm_call(sh1) |
| xor %l2, %tldo_lox10(sh2 + 1), %l3 |
| add %o0, %l4, %l5, %tldo_add(sh1) |
| ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1) |
| nop;nop;nop;nop |
| |
| /* LD against hidden but not local variables */ |
| sethi %tldm_hi22(sH1), %o1 |
| sethi %tldo_hix22(sH1 + 3), %l3 |
| add %o1, %tldm_lo10(sH1), %o2 |
| sethi %tldo_hix22(sH2), %l2 |
| add %l7, %o2, %o0, %tldm_add(sH1) |
| xor %l3, %tldo_lox10(sH1 + 3), %l4 |
| call __tls_get_addr, %tldm_call(sH1) |
| xor %l2, %tldo_lox10(sH2), %l3 |
| add %o0, %l4, %l5, %tldo_add(sH1 + 3) |
| ld [%o0 + %l3], %l6, %tldo_add(sH2) |
| nop;nop;nop;nop |
| |
| /* IE against global var */ |
| sethi %tie_hi22(sg2), %l1 |
| nop |
| add %l1, %tie_lo10(sg2), %l2 |
| nop |
| ld [%l7 + %l2], %l2, %tie_ld(sg2) |
| nop |
| add %g7, %l2, %l2, %tie_add(sg2) |
| nop;nop;nop;nop |
| |
| /* IE against local var */ |
| sethi %tie_hi22(sl2), %o3 |
| add %o3, %tie_lo10(sl2), %o3 |
| ld [%l7 + %o3], %o2, %tie_ld(sl2) |
| add %g7, %o2, %o4, %tie_add(sl2) |
| nop;nop;nop;nop |
| |
| /* IE against hidden and local var */ |
| sethi %tie_hi22(sh2), %l1 |
| add %l1, %tie_lo10(sh2), %l2 |
| ld [%l7 + %l2], %l2, %tie_ld(sh2) |
| add %g7, %l2, %l2, %tie_add(sh2) |
| nop;nop;nop;nop |
| |
| /* IE against hidden but not local var */ |
| sethi %tie_hi22(sH2), %l1 |
| add %l1, %tie_lo10(sH2), %l2 |
| ld [%l7 + %l2], %l2, %tie_ld(sH2) |
| add %g7, %l2, %l2, %tie_add(sH2) |
| nop;nop;nop;nop |
| |
| /* Direct access through %g7 */ |
| |
| /* IE against global var */ |
| sethi %tie_hi22(sg5), %l1 |
| add %l1, %tie_lo10(sg5), %l2 |
| ld [%l7 + %l2], %l2, %tie_ld(sg5) |
| ld [%g7 + %l2], %l2, %tie_add(sg5) |
| nop;nop;nop;nop |
| |
| /* IE against local var */ |
| sethi %tie_hi22(sl5), %o3 |
| add %o3, %tie_lo10(sl5), %o4 |
| ld [%l7 + %o4], %o5, %tie_ld(sl5) |
| stb %l2, [%g7 + %o5], %tie_add(sl5) |
| nop;nop;nop;nop |
| |
| /* IE against hidden and local var */ |
| sethi %tie_hi22(sh5), %o3 |
| add %o3, %tie_lo10(sh5), %o4 |
| ld [%l7 + %o4], %o5, %tie_ld(sh5) |
| lduh [%g7 + %o5], %l2, %tie_add(sh5) |
| nop;nop;nop;nop |
| |
| /* IE against hidden but not local var */ |
| sethi %tie_hi22(sH5), %o3 |
| add %o3, %tie_lo10(sH5), %o4 |
| ld [%l7 + %o4], %o5, %tie_ld(sH5) |
| st %l2, [%g7 + %o5], %tie_add(sH5) |
| nop;nop;nop;nop |
| |
| ret |
| restore |