s390x: shuffle register usage in __tls_get_offset to avoid r0 as address

This fixes an error in 6af4f25b89: The
r0 register is special in addressing modes on s390x and is interpreted
as constant zero, i.e. lg %r5, 8(%r0) would effectively become lg %r5,
8. So care should be taken to never use r0 as an address register in
s390x assembly.
This commit is contained in:
Alex Rønne Petersen
2025-10-12 16:15:47 -04:00
committed by Rich Felker
parent 0ccaf0572e
commit 1b76ff0767
+7 -7
View File
@@ -1,17 +1,17 @@
.global __tls_get_offset
.type __tls_get_offset,%function
__tls_get_offset:
ear %r0, %a0
sllg %r0, %r0, 32
ear %r0, %a1
ear %r3, %a0
sllg %r3, %r3, 32
ear %r3, %a1
la %r1, 0(%r2, %r12)
lg %r3, 0(%r1)
sllg %r4, %r3, 3
lg %r5, 8(%r0)
lg %r0, 0(%r1)
sllg %r4, %r0, 3
lg %r5, 8(%r3)
lg %r2, 0(%r4, %r5)
ag %r2, 8(%r1)
sgr %r2, %r0
sgr %r2, %r3
br %r14