Hi Tatsuyuki: Thanks your TLS desc implementation, it's looks already in good shape now! just few minor comment :)
> @@ -121,6 +121,14 @@ > (T1_REGNUM 6) > (S0_REGNUM 8) > (S1_REGNUM 9) > + (A0_REGNUM 10) > + (A1_REGNUM 11) > + (A2_REGNUM 12) > + (A3_REGNUM 13) > + (A4_REGNUM 14) > + (A5_REGNUM 15) > + (A6_REGNUM 16) > + (A7_REGNUM 17) Drop A1_REGNUM~A7_REGNUM, they seems unused. > (S2_REGNUM 18) > (S3_REGNUM 19) > (S4_REGNUM 20) > @@ -1869,6 +1877,18 @@ > [(set_attr "got" "load") > (set_attr "mode" "<MODE>")]) > > +(define_insn "tlsdesc<mode>" You can add @ to the pattern name ("@tlsdesc<mode>"), then you can simplify riscv_legitimize_tls_address like that: @@ -1908,7 +1898,7 @@ riscv_legitimize_tls_address (rtx loc) a0 = gen_rtx_REG (Pmode, GP_ARG_FIRST); dest = gen_reg_rtx (Pmode); - emit_insn (riscv_tlsdesc (loc, GEN_INT (seqno))); + emit_insn (gen_tlsdesc (Pmode, loc, GEN_INT (seqno))); emit_insn (gen_add3_insn (dest, a0, tp)); seqno++; } > + [(set (reg:P A0_REGNUM) > + (unspec:P > + [(match_operand:P 0 "symbolic_operand" "") > + (match_operand:P 1 "const_int_operand")] > + UNSPEC_TLSDESC)) > + (clobber (reg:SI T0_REGNUM))] > + "TARGET_TLSDESC" > + ".LT%1: auipc\ta0, > %%tlsdesc_hi(%0)\;<load>\tt0,%%tlsdesc_load_lo(.LT%1)(a0)\;addi\ta0,a0,%%tlsdesc_add_lo(.LT%1)\;jalr\tt0,t0,%%tlsdesc_call(.LT%1)" I would suggest using return rather than single long line, like below, that would be easier to read : { return ".LT%1: auipc\ta0, %%tlsdesc_hi(%0)\;" "<load>\tt0,%%tlsdesc_load_lo(.LT%1)(a0)\;" "addi\ta0,a0,%%tlsdesc_add_lo(.LT%1)\;" "jalr\tt0,t0,%%tlsdesc_call(.LT%1)" } > + [(set_attr "type" "multi") We need add length here, something like that: "(set_attr "length" (const_int 16))" > + (set_attr "mode" "<MODE>")]) > + > (define_insn "auipc<mode>" > [(set (match_operand:P 0 "register_operand" "=r") > (unspec:P > diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt > index 6304efebfd5..40b3ebf2a99 100644 > --- a/gcc/config/riscv/riscv.opt > +++ b/gcc/config/riscv/riscv.opt > @@ -311,3 +311,17 @@ Enum(riscv_autovec_lmul) String(m8) Value(RVV_M8) > -param=riscv-autovec-lmul= > Target RejectNegative Joined Enum(riscv_autovec_lmul) > Var(riscv_autovec_lmul) Init(RVV_M1) > -param=riscv-autovec-lmul=<string> Set the RVV LMUL of > auto-vectorization in the RISC-V port. > + > +Enum > +Name(tls_type) Type(enum riscv_tls_type) > +The possible TLS dialects: > + > +EnumValue > +Enum(tls_type) String(trad) Value(TLS_TRADITIONAL) > + > +EnumValue > +Enum(tls_type) String(desc) Value(TLS_DESCRIPTORS) > + > +mtls-dialect= > +Target RejectNegative Joined Enum(tls_type) Var(riscv_tls_dialect) > Init(TLS_TRADITIONAL) Save Could you add a configure option `--with-tls` to control the default TLS dialect? You can reference ARM: gcc/gcc/config/arm/arm.h: grep "OPTION_DEFAULT_SPECS" gcc/gcc/config.gcc: grep "with_tls" > +Specify TLS dialect. > \ No newline at end of file > -- > 2.34.1 >