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. > > + (unspec:P > > + [(match_operand:P 1 "symbolic_operand" "")] > > + UNSPEC_TLS_DESC)) > > + (clobber (reg:SI FCC0_REGNUM)) > > + (clobber (reg:SI FCC1_REGNUM)) > > + (clobber (reg:SI FCC2_REGNUM)) > > + (clobber (reg:SI FCC3_REGNUM)) > > + (clobber (reg:SI FCC4_REGNUM)) > > + (clobber (reg:SI FCC5_REGNUM)) > > + (clobber (reg:SI FCC6_REGNUM)) > > + (clobber (reg:SI FCC7_REGNUM)) > > + (clobber (reg:SI RETURN_ADDR_REGNUM))] > > + "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)" > > Use something like > > ? "pcalau12i\t$r4,%%desc_pc_hi20(%1)\n\t" > "addi.d\t$r4,$r4,%%desc_pc_lo12(%1)\n\t" > "ld.d\t$r1,$r4,%%desc_ld(%1)\n\t" > "jirl\t$r1,$r1,%%desc_call(%1)" > : "la.tls.desc\t%0,%1"; > > to prevent additional white spaces in the output asm before tabs. -- Xi Ruoyao <xry...@xry111.site> School of Aerospace Science and Technology, Xidian University