78 lines
1.6 KiB
ArmAsm
78 lines
1.6 KiB
ArmAsm
.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
|