On Wed, 2024-03-13 at 06:56 +0800, Xi Ruoyao wrote:
> On Wed, 2024-03-13 at 06:15 +0800, Xi Ruoyao wrote:
> > > +(define_insn "@got_load_tls_desc<mode>"
> > > +  [(set (match_operand:P 0 "register_operand" "=r")
> 
> Hmm, and it looks like we should use (reg:P 4) instead of match_operand
> here, because the instruction does not work for a different register:
> with TARGET_EXPLICIT_RELOCS we are hard coding r4, and without
> TARGET_EXPLICIT_RELOCS the TLS desc function still only puts the return
> value in r4.

Suggested changes:

diff --git a/gcc/config/loongarch/loongarch.cc 
b/gcc/config/loongarch/loongarch.cc
index 303666bf6d5..8f4d3f36c26 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -2954,10 +2954,10 @@ loongarch_legitimize_tls_address (rtx loc)
          tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
 
          if (TARGET_CMODEL_EXTREME)
-           emit_insn (gen_got_load_tls_desc_off64 (a0, loc,
+           emit_insn (gen_got_load_tls_desc_off64 (loc,
                                                    gen_reg_rtx (DImode)));
          else
-           emit_insn (gen_got_load_tls_desc (Pmode, a0, loc));
+           emit_insn (gen_got_load_tls_desc (Pmode, loc));
 
          emit_insn (gen_add3_insn (dest, a0, tp));
        }
diff --git a/gcc/config/loongarch/loongarch.md 
b/gcc/config/loongarch/loongarch.md
index 0a1a6a24f61..8e8f1012344 100644
--- a/gcc/config/loongarch/loongarch.md
+++ b/gcc/config/loongarch/loongarch.md
@@ -2772,9 +2772,9 @@ (define_insn "store_word<mode>"
 ;; Thread-Local Storage
 
 (define_insn "@got_load_tls_desc<mode>"
-  [(set (match_operand:P 0 "register_operand" "=r")
+  [(set (reg:P 4)
        (unspec:P
-           [(match_operand:P 1 "symbolic_operand" "")]
+           [(match_operand:P 0 "symbolic_operand" "")]
            UNSPEC_TLS_DESC))
     (clobber (reg:SI FCC0_REGNUM))
     (clobber (reg:SI FCC1_REGNUM))
@@ -2788,20 +2788,20 @@ (define_insn "@got_load_tls_desc<mode>"
   "TARGET_TLS_DESC"
 {
   return TARGET_EXPLICIT_RELOCS
-    ? "pcalau12i\t$r4,%%desc_pc_hi20(%1)\n\
-      \taddi.d\t$r4,$r4,%%desc_pc_lo12(%1)\n\
-      \tld.d\t$r1,$r4,%%desc_ld(%1)\n\
-      \tjirl\t$r1,$r1,%%desc_call(%1)"
-    : "la.tls.desc\t%0,%1";
+    ? "pcalau12i\t$r4,%%desc_pc_hi20(%0)\n\t"
+      "addi.d\t$r4,$r4,%%desc_pc_lo12(%0)\n\t"
+      "ld.d\t$r1,$r4,%%desc_ld(%0)\n\t"
+      "jirl\t$r1,$r1,%%desc_call(%0)"
+    : "la.tls.desc\t$r4,%0";
 }
   [(set_attr "got" "load")
    (set_attr "mode" "<MODE>")
    (set_attr "length" "16")])
 
 (define_insn "got_load_tls_desc_off64"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (reg:DI 4)
        (unspec:DI
-           [(match_operand:DI 1 "symbolic_operand" "")]
+           [(match_operand:DI 0 "symbolic_operand" "")]
            UNSPEC_TLS_DESC_OFF64))
     (clobber (reg:SI FCC0_REGNUM))
     (clobber (reg:SI FCC1_REGNUM))
@@ -2812,18 +2812,18 @@ (define_insn "got_load_tls_desc_off64"
     (clobber (reg:SI FCC6_REGNUM))
     (clobber (reg:SI FCC7_REGNUM))
     (clobber (reg:SI RETURN_ADDR_REGNUM))
-    (clobber (match_operand:DI 2 "register_operand" "=&r"))]
+    (clobber (match_operand:DI 1 "register_operand" "=&r"))]
   "TARGET_TLS_DESC && TARGET_CMODEL_EXTREME"
 {
   return TARGET_EXPLICIT_RELOCS
-    ? "pcalau12i\t$r4,%%desc_pc_hi20(%1)\n\
-      \taddi.d\t%2,$r0,%%desc_pc_lo12(%1)\n\
-      \tlu32i.d\t%2,%%desc64_pc_lo20(%1)\n\
-      \tlu52i.d\t%2,%2,%%desc64_pc_hi12(%1)\n\
-      \tadd.d\t$r4,$r4,%2\n\
-      \tld.d\t$r1,$r4,%%desc_ld(%1)\n\
-      \tjirl\t$r1,$r1,%%desc_call(%1)"
-    : "la.tls.desc\t%0,%2,%1";
+    ? "pcalau12i\t$r4,%%desc_pc_hi20(%0)\n\t"
+      "addi.d\t%1,$r0,%%desc_pc_lo12(%0)\n\t"
+      "lu32i.d\t%1,%%desc64_pc_lo20(%0)\n\t"
+      "lu52i.d\t%1,%2,%%desc64_pc_hi12(%0)\n\t"
+      "add.d\t$r4,$r4,%1\n\t"
+      "ld.d\t$r1,$r4,%%desc_ld(%0)\n\t"
+      "jirl\t$r1,$r1,%%desc_call(%0)"
+    : "la.tls.desc\t$r4,%1,%0";
 }
   [(set_attr "got" "load")
    (set_attr "length" "28")])

-- 
Xi Ruoyao <xry...@xry111.site>
School of Aerospace Science and Technology, Xidian University

Reply via email to