| .section ".tbss","awT",@nobits |
| .p2align 3 |
| pad: .space 8 |
| .global a |
| a: .space 8 |
| .global b |
| b: .space 8 |
| .global c |
| c: .space 8 |
| .global d |
| d: .space 8 |
| |
| .text |
| .globl _start |
| _start: |
| #Small model OpenPower |
| ld 9,.La@toc(2) |
| add 10,9,.La@tls |
| .section .toc,"aw",@progbits |
| .La: |
| .quad a@tprel |
| .text |
| |
| #Medium model ELF |
| addis 9,2,b@got@tprel@ha |
| ld 10,b@got@tprel@l(9) |
| add 3,10,b@tls |
| |
| #PCrel |
| pld 4,c@got@tprel@pcrel |
| add 4,4,c@tls@pcrel |
| |
| #All of the above using the same symbol |
| addis 9,2,.Ld@toc@ha |
| ld 9,.Ld@toc@l(9) |
| add 10,9,.Ld@tls |
| .section .toc,"aw",@progbits |
| .Ld: |
| .quad d@tprel |
| .text |
| addis 9,2,d@got@tprel@ha |
| ld 31,d@got@tprel@l(9) |
| add 3,31,d@tls |
| pld 30,d@got@tprel@pcrel |
| add 3,30,d@tls@pcrel |
| #Note that after optimisation r31 and r30 above have a different value to |
| #what they would have without optimisation. r31 may not even be written. |
| #Here are all the other insns that gas/ld accept as the final insn of an |
| #IE sequence. The r30 value below will be different after optimisation |
| #for the non-update forms. |
| lwzx 4,30,d@tls@pcrel |
| lwzux 4,30,d@tls@pcrel |
| lbzx 5,30,d@tls@pcrel |
| lbzux 5,30,d@tls@pcrel |
| stwx 6,30,d@tls@pcrel |
| stwux 6,30,d@tls@pcrel |
| stbx 7,30,d@tls@pcrel |
| stbux 7,30,d@tls@pcrel |
| lhzx 8,30,d@tls@pcrel |
| lhzux 8,30,d@tls@pcrel |
| lhax 9,30,d@tls@pcrel |
| lhaux 9,30,d@tls@pcrel |
| sthx 10,30,d@tls@pcrel |
| sthux 10,30,d@tls@pcrel |
| lfsx 11,30,d@tls@pcrel |
| lfsux 11,30,d@tls@pcrel |
| lfdx 12,30,d@tls@pcrel |
| lfdux 12,30,d@tls@pcrel |
| stfsx 13,30,d@tls@pcrel |
| stfsux 13,30,d@tls@pcrel |
| stfdx 14,30,d@tls@pcrel |
| stfdux 14,30,d@tls@pcrel |
| ldx 15,30,d@tls@pcrel |
| ldux 15,30,d@tls@pcrel |
| stdx 16,30,d@tls@pcrel |
| stdux 16,30,d@tls@pcrel |
| lwax 17,30,d@tls@pcrel |