[llvm] de7e23f - Sparc: Improve tests

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat May 3 20:26:42 PDT 2025


Author: Fangrui Song
Date: 2025-05-03T20:26:37-07:00
New Revision: de7e23f0e8ca18d3f4b27183cd3930ab831c6c83

URL: https://github.com/llvm/llvm-project/commit/de7e23f0e8ca18d3f4b27183cd3930ab831c6c83
DIFF: https://github.com/llvm/llvm-project/commit/de7e23f0e8ca18d3f4b27183cd3930ab831c6c83.diff

LOG: Sparc: Improve tests

* Remove unuseful -filetype=asm -show-encoding output from relocation tests.
* Test STT_TLS for TLS relocations
* Test r_offset for a few relocations
* Test ASM output for many relocations

Added: 
    llvm/test/MC/Sparc/relocation-specifier.s

Modified: 
    llvm/test/MC/Sparc/sparc-assembly-exprs.s
    llvm/test/MC/Sparc/sparc-relocations.s

Removed: 
    llvm/test/MC/Sparc/sparc-tls-relocations.s


################################################################################
diff  --git a/llvm/test/MC/Sparc/relocation-specifier.s b/llvm/test/MC/Sparc/relocation-specifier.s
new file mode 100644
index 0000000000000..cd4d95a10ad32
--- /dev/null
+++ b/llvm/test/MC/Sparc/relocation-specifier.s
@@ -0,0 +1,152 @@
+# RUN: llvm-mc %s -triple=sparc | FileCheck %s --check-prefix=ASM
+# RUN: llvm-mc %s -triple=sparcv9 | FileCheck %s --check-prefix=ASM
+
+# RUN: llvm-mc %s -triple=sparc -filetype=obj -o %t
+# RUN: llvm-objdump -dr %t | FileCheck %s --check-prefix=OBJDUMP
+# RUN: llvm-mc %s -triple=sparcv9 -filetype=obj -o %t
+# RUN: llvm-objdump -dr %t | FileCheck %s --check-prefix=OBJDUMP
+# RUN: llvm-readelf -s - < %t | FileCheck %s --check-prefix=READELF --implicit-check-not=TLS
+
+# READELF: TLS     LOCAL  DEFAULT [[#]] s_tle_hix22
+# READELF: TLS     LOCAL  DEFAULT [[#]] s_tldo_hix22
+# READELF: TLS     GLOBAL DEFAULT   UND s_tle_lox10
+# READELF: TLS     GLOBAL DEFAULT   UND s_tie_hi22
+# READELF: TLS     GLOBAL DEFAULT   UND s_tie_lo10
+# READELF: TLS     GLOBAL DEFAULT   UND s_tie_ld
+# READELF: TLS     GLOBAL DEFAULT   UND s_tie_ldx
+# READELF: TLS     GLOBAL DEFAULT   UND s_tie_add
+# READELF: TLS     GLOBAL DEFAULT   UND s_tldm_hi22
+# READELF: TLS     GLOBAL DEFAULT   UND s_tldm_lo10
+# READELF: TLS     GLOBAL DEFAULT   UND s_tldm_add
+# READELF: TLS     GLOBAL DEFAULT   UND s_tldo_lox10
+# READELF: TLS     GLOBAL DEFAULT   UND s_tldo_add
+# READELF: TLS     GLOBAL DEFAULT   UND s_tgd_hi22
+# READELF: TLS     GLOBAL DEFAULT   UND s_tgd_lo10
+# READELF: TLS     GLOBAL DEFAULT   UND s_tgd_add
+
+# ASM:      or %g1, %lo(sym), %g3
+# ASM-NEXT: sethi %hi(sym), %l0
+# ASM-NEXT: sethi %h44(sym), %l0
+# ASM-NEXT: or %g1, %m44(sym), %g3
+# ASM-NEXT: or %g1, %l44(sym), %g3
+# OBJDUMP:     0000000:  R_SPARC_LO10	sym
+# OBJDUMP:     0000004:  R_SPARC_HI22	sym
+# OBJDUMP:     0000008:  R_SPARC_H44	sym
+# OBJDUMP:     000000c:  R_SPARC_M44	sym
+# OBJDUMP:     0000010:  R_SPARC_L44	sym
+or %g1, %lo(sym), %g3
+sethi %hi(sym), %l0
+sethi %h44(sym), %l0
+or %g1, %m44(sym), %g3
+or %g1, %l44(sym), %g3
+
+# ASM:      sethi %hh(sym), %l0
+# ASM-NEXT: sethi %hh(sym), %l0
+# ASM-NEXT: or %g1, %hm(sym), %g3
+# ASM-NEXT: or %g1, %hm(sym), %g3
+# ASM-NEXT: sethi %lm(sym), %l0
+# OBJDUMP:     0000014:  R_SPARC_HH22	sym
+# OBJDUMP:     0000018:  R_SPARC_HH22	sym
+# OBJDUMP:     000001c:  R_SPARC_HM10	sym
+# OBJDUMP:     0000020:  R_SPARC_HM10	sym
+# OBJDUMP:     0000024:  R_SPARC_LM22	sym
+sethi %hh(sym), %l0
+sethi %uhi(sym), %l0
+or %g1, %hm(sym), %g3
+or %g1, %ulo(sym), %g3
+sethi %lm(sym), %l0
+
+# ASM:      sethi %hix(sym), %g1
+# ASM-NEXT: xor %g1, %lox(sym), %g1
+# ASM-NEXT: sethi %gdop_hix22(sym), %l1
+# ASM-NEXT: or %l1, %gdop_lox10(sym), %l1
+# ASM-NEXT: ldx [%l7+%l1], %l2, %gdop(sym)
+# OBJDUMP: R_SPARC_HIX22 sym
+# OBJDUMP: R_SPARC_LOX10 sym
+# OBJDUMP: R_SPARC_GOTDATA_HIX22 sym
+# OBJDUMP: R_SPARC_GOTDATA_LOX10 sym
+# OBJDUMP: R_SPARC_GOTDATA_OP sym
+sethi %hix(sym), %g1
+xor %g1, %lox(sym), %g1
+sethi %gdop_hix22(sym), %l1
+or %l1, %gdop_lox10(sym), %l1
+ldx [%l7 + %l1], %l2, %gdop(sym)
+
+# OBJDUMP-LABEL: <.tls>:
+.section .tls,"ax"
+## Local Executable model:
+# ASM:      sethi %tle_hix22(s_tle_hix22), %i0
+# ASM-NEXT: xor %i0, %tle_lox10(s_tle_lox10), %i0
+
+# OBJDUMP:      31 00 00 00   sethi 0x0, %i0
+# OBJDUMP-NEXT:  00000000:  R_SPARC_TLS_LE_HIX22 s_tle_hix22
+# OBJDUMP-NEXT: b0 1e 20 00   xor %i0, 0x0, %i0
+# OBJDUMP-NEXT:  00000004:  R_SPARC_TLS_LE_LOX10 s_tle_lox10
+        sethi %tle_hix22(s_tle_hix22), %i0
+        xor %i0, %tle_lox10(s_tle_lox10), %i0
+
+## Initial Executable model
+# ASM:      sethi %tie_hi22(s_tie_hi22), %i1
+# ASM-NEXT: add %i1, %tie_lo10(s_tie_lo10), %i1
+# ASM-NEXT: ld [%i0+%i1], %i0, %tie_ld(s_tie_ld)
+# ASM-NEXT: ldx [%i0+%i1], %i0, %tie_ldx(s_tie_ldx)
+# ASM-NEXT: add %g7, %i0, %o0, %tie_add(s_tie_add)
+
+# OBJDUMP:      R_SPARC_TLS_IE_HI22	s_tie_hi22
+# OBJDUMP:      R_SPARC_TLS_IE_LO10	s_tie_lo10
+# OBJDUMP:      R_SPARC_TLS_IE_LD	s_tie_ld
+# OBJDUMP:      R_SPARC_TLS_IE_LDX	s_tie_ldx
+# OBJDUMP:      R_SPARC_TLS_IE_ADD	s_tie_add
+	sethi %tie_hi22(s_tie_hi22), %i1
+        add %i1, %tie_lo10(s_tie_lo10), %i1
+        ld [%i0+%i1], %i0, %tie_ld(s_tie_ld)
+        ldx [%i0+%i1], %i0, %tie_ldx(s_tie_ldx)
+        add %g7, %i0, %o0, %tie_add(s_tie_add)
+
+## Local Dynamic model
+# ASM:      sethi %tldo_hix22(s_tldo_hix22), %i1
+# ASM-NEXT: sethi %tldm_hi22(s_tldm_hi22), %i2
+# ASM-NEXT: add %i2, %tldm_lo10(s_tldm_lo10), %i2
+# ASM-NEXT: add %i0, %i2, %o0, %tldm_add(s_tldm_add)
+# ASM-NEXT: xor %i1, %tldo_lox10(s_tldo_lox10), %i0
+# ASM-NEXT: call __tls_get_addr, %tldm_call(s_tldm_call)
+# ASM-NEXT: nop
+# ASM-NEXT: add %o0, %i0, %o0, %tldo_add(s_tldo_add)
+
+# OBJDUMP:      R_SPARC_TLS_LDO_HIX22	s_tldo_hix22
+# OBJDUMP:      R_SPARC_TLS_LDM_HI22	s_tldm_hi22
+# OBJDUMP:      R_SPARC_TLS_LDM_LO10	s_tldm_lo10
+# OBJDUMP:      R_SPARC_TLS_LDM_ADD	s_tldm_add
+# OBJDUMP:      R_SPARC_TLS_LDO_LOX10	s_tldo_lox10
+# OBJDUMP:      R_SPARC_TLS_LDM_CALL	s_tldm_call
+# OBJDUMP:      R_SPARC_TLS_LDO_ADD	s_tldo_add
+        sethi %tldo_hix22(s_tldo_hix22), %i1
+        sethi %tldm_hi22(s_tldm_hi22), %i2
+        add %i2, %tldm_lo10(s_tldm_lo10), %i2
+	add %i0, %i2, %o0, %tldm_add(s_tldm_add)
+        xor %i1, %tldo_lox10(s_tldo_lox10), %i0
+        call __tls_get_addr, %tldm_call(s_tldm_call)
+        nop
+        add %o0, %i0, %o0, %tldo_add(s_tldo_add)
+
+## General Dynamic model
+# ASM:      sethi %tgd_hi22(s_tgd_hi22), %i1
+# ASM-NEXT: add %i1, %tgd_lo10(s_tgd_lo10), %i1
+# ASM-NEXT: add %i0, %i1, %o0, %tgd_add(s_tgd_add)
+# ASM-NEXT: call __tls_get_addr, %tgd_call(s_tgd_call)
+
+# OBJDUMP:      R_SPARC_TLS_GD_HI22	s_tgd_hi22
+# OBJDUMP:      R_SPARC_TLS_GD_LO10	s_tgd_lo10
+# OBJDUMP:      R_SPARC_TLS_GD_ADD	s_tgd_add
+# OBJDUMP:      R_SPARC_TLS_GD_CALL	s_tgd_call
+        sethi %tgd_hi22(s_tgd_hi22), %i1
+        add %i1, %tgd_lo10(s_tgd_lo10), %i1
+        add %i0, %i1, %o0, %tgd_add(s_tgd_add)
+        call __tls_get_addr, %tgd_call(s_tgd_call)
+
+        .type  Local, at object
+        .section      .tbss,#alloc,#write,#tls
+s_tle_hix22:
+s_tldo_hix22:
+        .word  0
+        .size  Local, 4

diff  --git a/llvm/test/MC/Sparc/sparc-assembly-exprs.s b/llvm/test/MC/Sparc/sparc-assembly-exprs.s
index c69199ffe72f5..68ea447a226d6 100644
--- a/llvm/test/MC/Sparc/sparc-assembly-exprs.s
+++ b/llvm/test/MC/Sparc/sparc-assembly-exprs.s
@@ -1,33 +1,33 @@
-! RUN: llvm-mc %s -triple=sparc -show-encoding | FileCheck %s
+! RUN: llvm-mc %s -triple=sparc | FileCheck %s
 ! RUN: llvm-mc %s -triple=sparc -filetype=obj | llvm-objdump -r -d - | FileCheck %s --check-prefix=OBJDUMP
 
-        ! CHECK: mov 1033, %o1  ! encoding: [0x92,0x10,0x24,0x09]
+        ! CHECK: mov 1033, %o1
         mov      (0x400|9), %o1
-        ! CHECK: mov 60, %o2    ! encoding: [0x94,0x10,0x20,0x3c]
+        ! CHECK: mov 60, %o2
         mov      ((12+3)<<2), %o2
 
-        ! CHECK:   ba      symStart+4           ! encoding: [0x10,0b10AAAAAA,A,A]
+        ! CHECK:   ba      symStart+4
         ! OBJDUMP: ba    0x1
 symStart:
         b        symStart + 4
 
-        ! CHECK:   mov     symEnd-symStart, %g1 ! encoding: [0x82,0x10,0b001AAAAA,A]
+        ! CHECK:   mov     symEnd-symStart, %g1
         ! OBJDUMP: mov	   0x18, %g1
         mov      symEnd - symStart, %g1
 
-        ! CHECK:   sethi %hi(sym+10), %g2       ! encoding: [0x05,0b00AAAAAA,A,A]
+        ! CHECK:   sethi %hi(sym+10), %g2
         ! OBJDUMP: R_SPARC_HI22	sym+0xa
         sethi    %hi(sym + 10), %g2
 
-        ! CHECK:   call foo+40                  ! encoding: [0b01AAAAAA,A,A,A]
+        ! CHECK:   call foo+40
         ! OBJDUMP: R_SPARC_WDISP30 foo+0x28
         call     foo + 40
 
-        ! CHECK:   add %g1, val+100, %g1        ! encoding: [0x82,0x00,0b011AAAAA,A]
+        ! CHECK:   add %g1, val+100, %g1
         ! OBJDUMP: R_SPARC_13 val+0x64
         add      %g1, val + 100, %g1
 
-        ! CHECK:   add %g1, 100+val, %g2        ! encoding: [0x84,0x00,0b011AAAAA,A]
+        ! CHECK:   add %g1, 100+val, %g2
         ! OBJDUMP: R_SPARC_13	val+0x64
         add      %g1, 100 + val, %g2
 symEnd:

diff  --git a/llvm/test/MC/Sparc/sparc-relocations.s b/llvm/test/MC/Sparc/sparc-relocations.s
index 62088338cb363..3510eaabc0250 100644
--- a/llvm/test/MC/Sparc/sparc-relocations.s
+++ b/llvm/test/MC/Sparc/sparc-relocations.s
@@ -1,83 +1,23 @@
-! RUN: llvm-mc %s -triple=sparcv9 -show-encoding | FileCheck %s
+! RUN: llvm-mc %s -triple=sparcv9 | FileCheck %s
 ! RUN: llvm-mc %s -triple=sparcv9 -filetype=obj | llvm-readobj -r - | FileCheck %s --check-prefix=CHECK-OBJ
 
         ! CHECK-OBJ: Format: elf64-sparc
         ! CHECK-OBJ: .rela.text {
         ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_WDISP30 foo
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_LO10 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HI22 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_H44 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_M44 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_L44 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HH22 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HH22 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HM10 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HM10 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_LM22 sym
         ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_13 sym
         ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_13 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HIX22 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_LOX10 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOTDATA_HIX22 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOTDATA_LOX10 sym
-        ! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOTDATA_OP sym
         ! CHECK-OBJ-NEXT: }
 
         call a
-        ! CHECK: call foo     ! encoding: [0b01AAAAAA,A,A,A]
+        ! CHECK: call foo
         call foo
 
-        ! CHECK: or %g1, %lo(sym), %g3 ! encoding: [0x86,0x10,0b011000AA,A]
-        or %g1, %lo(sym), %g3
-
-        ! CHECK: sethi %hi(sym), %l0  ! encoding: [0x21,0b00AAAAAA,A,A]
-        sethi %hi(sym), %l0
-
-        ! CHECK: sethi %h44(sym), %l0  ! encoding: [0x21,0b00AAAAAA,A,A]
-        sethi %h44(sym), %l0
-
-        ! CHECK: or %g1, %m44(sym), %g3 ! encoding: [0x86,0x10,0b011000AA,A]
-        or %g1, %m44(sym), %g3
-
-        ! CHECK: or %g1, %l44(sym), %g3 ! encoding: [0x86,0x10,0b0110AAAA,A]
-        or %g1, %l44(sym), %g3
-
-        ! CHECK: sethi %hh(sym), %l0  ! encoding: [0x21,0b00AAAAAA,A,A]
-        sethi %hh(sym), %l0
-
-        ! CHECK: sethi %hh(sym), %l0  ! encoding: [0x21,0b00AAAAAA,A,A]
-        sethi %uhi(sym), %l0
-
-        ! CHECK: or %g1, %hm(sym), %g3 ! encoding: [0x86,0x10,0b011000AA,A]
-        or %g1, %hm(sym), %g3
-
-        ! CHECK: or %g1, %hm(sym), %g3 ! encoding: [0x86,0x10,0b011000AA,A]
-        or %g1, %ulo(sym), %g3
-
-        ! CHECK: sethi %lm(sym), %l0  ! encoding: [0x21,0b00AAAAAA,A,A]
-        sethi %lm(sym), %l0
-
-        ! CHECK: or %g1, sym, %g3 ! encoding: [0x86,0x10,0b011AAAAA,A]
+        ! CHECK: or %g1, sym, %g3
         or %g1, sym, %g3
 
-        ! CHECK: or %g1, sym+4, %g3 ! encoding: [0x86,0x10,0b011AAAAA,A]
+        ! CHECK: or %g1, sym+4, %g3
         or %g1, (sym+4), %g3
 
-        ! CHECK: sethi %hix(sym), %g1 ! encoding: [0x03,0b00AAAAAA,A,A]
-        sethi %hix(sym), %g1
-
-        ! CHECK: xor %g1, %lox(sym), %g1 ! encoding: [0x82,0x18,0b011AAAAA,A]
-        xor %g1, %lox(sym), %g1
-
-        ! CHECK: sethi %gdop_hix22(sym), %l1 ! encoding: [0x23,0x00,0x00,0x00]
-        sethi %gdop_hix22(sym), %l1
-
-        ! CHECK: or %l1, %gdop_lox10(sym), %l1 ! encoding: [0xa2,0x14,0x60,0x00]
-        or %l1, %gdop_lox10(sym), %l1
-
-        ! CHECK: ldx [%l7+%l1], %l2, %gdop(sym) ! encoding: [0xe4,0x5d,0xc0,0x11]
-        ldx [%l7 + %l1], %l2, %gdop(sym)
-
         ! This test needs to placed last in the file
         ! CHECK: .half	a-.Ltmp0
         .half a - .

diff  --git a/llvm/test/MC/Sparc/sparc-tls-relocations.s b/llvm/test/MC/Sparc/sparc-tls-relocations.s
deleted file mode 100644
index bf29a3ed6b9c8..0000000000000
--- a/llvm/test/MC/Sparc/sparc-tls-relocations.s
+++ /dev/null
@@ -1,138 +0,0 @@
-! Testing Sparc TLS relocations emission
-! (for now a couple local ones).
-!
-! RUN: llvm-mc %s -triple=sparc | FileCheck %s --check-prefix=ASM
-! RUN: llvm-mc %s -triple=sparcv9 | FileCheck %s --check-prefix=ASM
-! RUN: llvm-mc %s -triple=sparc -filetype=obj | llvm-readobj -r - | FileCheck %s --check-prefix=REL
-! RUN: llvm-mc %s -triple=sparcv9 -filetype=obj | llvm-readobj -r - | FileCheck %s --check-prefix=REL
-! RUN: llvm-mc %s -triple=sparc -filetype=obj | llvm-objdump -r -d - | FileCheck %s --check-prefix=OBJDUMP
-! RUN: llvm-mc %s -triple=sparcv9 -filetype=obj | llvm-objdump -r -d - | FileCheck %s --check-prefix=OBJDUMP
-
-! REL: Arch: sparc
-! REL: Relocations [
-! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 Local 0x0
-! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 Local 0x0
-! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_HIX22 Local 0x0
-! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_HI22  Local 0x0
-! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_LO10  Local 0x0
-! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_LOX10 Local 0x0
-! REL: ]
-
-
-! OBJDUMP: <foo>:
-foo:
-! Here we use two 
diff erent sequences to get the address of a static TLS variable 'Local'
-! (note - there is no intent to have valid assembler function here,
-!  we just check how TLS relocations are emitted)
-!
-! Sequence for Local Executable model:
-!     LE_HIX22/LE_LOX10
-
-! OBJDUMP: {{[0-9,a-f]+}}:  31 00 00 00  sethi 0x0, %i0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LE_HIX22 Local
-! ASM: sethi %tle_hix22(Local), %i0
-        sethi %tle_hix22(Local), %i0
-
-! OBJDUMP: {{[0-9,a-f]+}}:  b0 1e 20 00  xor %i0, 0x0, %i0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LE_LOX10 Local
-! ASM: xor %i0, %tle_lox10(Local), %i0
-        xor %i0, %tle_lox10(Local), %i0
-
-
-! Second sequence is for PIC, so it is more complicated.
-! Local Dynamic model:
-!     LDO_HIX22/LDO_LOX10/LDO_ADD/LDM_HI22/LDM_LO10/LDM_ADD/LDM_CALL
-
-! OBJDUMP: {{[0-9,a-f]+}}:  33 00 00 00  sethi 0x0, %i1
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LDO_HIX22 Local
-! ASM: sethi %tldo_hix22(Local), %i1
-        sethi %tldo_hix22(Local), %i1
-
-! OBJDUMP: {{[0-9,a-f]+}}:  35 00 00 00  sethi 0x0, %i2
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LDM_HI22 Local
-! ASM: sethi %tldm_hi22(Local), %i2
-        sethi %tldm_hi22(Local), %i2
-
-! OBJDUMP: {{[0-9,a-f]+}}:  b4 06 a0 00  add %i2, 0x0, %i2
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LDM_LO10 Local
-! ASM: add %i2, %tldm_lo10(Local), %i2
-        add %i2, %tldm_lo10(Local), %i2
-
-! OBJDUMP: {{[0-9,a-f]+}}:  90 06 00 1a add %i0, %i2, %o0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LDM_ADD Local
-! ASM: add %i0, %i2, %o0, %tldm_add(Local)
-	add %i0, %i2, %o0, %tldm_add(Local)
-
-! OBJDUMP: {{[0-9,a-f]+}}:  b0 1e 60 00  xor %i1, 0x0, %i0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LDO_LOX10 Local
-! ASM: xor %i1, %tldo_lox10(Local), %i0
-        xor %i1, %tldo_lox10(Local), %i0
-
-! OBJDUMP: {{[0-9,a-f]+}}:  40 00 00 00 call 0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LDM_CALL Local
-! ASM: call __tls_get_addr, %tldm_call(Local)
-        call __tls_get_addr, %tldm_call(Local)
-        nop
-
-! OBJDUMP: {{[0-9,a-f]+}}:  90 02 00 18 add %o0, %i0, %o0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_LDO_ADD Local
-! ASM: add %o0, %i0, %o0, %tldo_add(Local)
-        add %o0, %i0, %o0, %tldo_add(Local)
-
-! Next two sequences are for extern symbols.
-! Initial Executable model:
-!     IE_HI22/IE_LO10/IE_LD (or IE_LDX)/IE_ADD
-
-! OBJDUMP: {{[0-9,a-f]+}}:  33 00 00 00  sethi 0x0, %i1
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_IE_HI22 Extern
-! ASM: sethi %tie_hi22(Extern), %i1
-	sethi %tie_hi22(Extern), %i1
-
-! OBJDUMP: {{[0-9,a-f]+}}:  b2 06 60 00  add %i1, 0x0, %i1
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_IE_LO10 Extern
-! ASM: add %i1, %tie_lo10(Extern), %i1
-        add %i1, %tie_lo10(Extern), %i1
-
-! OBJDUMP: {{[0-9,a-f]+}}:  f0 06 00 19  ld [%i0+%i1], %i0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_IE_LD Extern
-! ASM: ld [%i0+%i1], %i0, %tie_ld(Extern)
-        ld [%i0+%i1], %i0, %tie_ld(Extern)
-
-! OBJDUMP: {{[0-9,a-f]+}}:  f0 5e 00 19  ldx [%i0+%i1], %i0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_IE_LDX Extern
-! ASM: ldx [%i0+%i1], %i0, %tie_ldx(Extern)
-        ldx [%i0+%i1], %i0, %tie_ldx(Extern)
-
-! OBJDUMP: {{[0-9,a-f]+}}:  90 01 c0 18  add %g7, %i0, %o0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_IE_ADD Extern
-! ASM: add %g7, %i0, %o0, %tie_add(Extern)
-        add %g7, %i0, %o0, %tie_add(Extern)
-
-! General Dynamic model
-!     GD_HI22/GD_LO10/GD_ADD/GD_CALL
-
-! OBJDUMP: {{[0-9,a-f]+}}:  33 00 00 00  sethi 0x0, %i1
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_GD_HI22 Extern
-! ASM:  sethi %tgd_hi22(Extern), %i1
-        sethi %tgd_hi22(Extern), %i1
-
-! OBJDUMP: {{[0-9,a-f]+}}:  b2 06 60 00  add %i1, 0x0, %i1
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_GD_LO10 Extern
-! ASM: add %i1, %tgd_lo10(Extern), %i1
-        add %i1, %tgd_lo10(Extern), %i1
-
-! OBJDUMP: {{[0-9,a-f]+}}:  90 06 00 19  add %i0, %i1, %o0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_GD_ADD Extern
-! ASM: add %i0, %i1, %o0, %tgd_add(Extern)
-        add %i0, %i1, %o0, %tgd_add(Extern)
-
-! OBJDUMP: {{[0-9,a-f]+}}:  40 00 00 00 call 0
-! OBJDUMP: {{[0-9,a-f]+}}:     R_SPARC_TLS_GD_CALL Extern
-! ASM: call __tls_get_addr, %tgd_call(Extern)
-        call __tls_get_addr, %tgd_call(Extern)
-
-        .type  Local, at object
-        .section      .tbss,#alloc,#write,#tls
-Local:
-        .word  0
-        .size  Local, 4


        


More information about the llvm-commits mailing list