> On Nov 16, 2023, at 10:17, Fangrui Song wrote: > > On Mon, Oct 2, 2023 at 7:10 AM Kito Cheng > wrote: >> >> Just one nit and one more comment for doc: >> >> Could you add some doc something like that? mostly I grab from other >> target, so you can just included in the patch. >> >> diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi >> index 31f2234640f..39396668da2 100644 >> --- a/gcc/doc/install.texi >> +++ b/gcc/doc/install.texi >> @@ -1174,6 +1174,9 @@ Specify the default TLS dialect, for systems >> were there is a choice. >> For ARM targets, possible values for @var{dialect} are @code{gnu} or >> @code{gnu2}, which select between the original GNU dialect and the GNU TLS >> descriptor-based dialect. >> +For RISC-V targets, possible values for @var{dialect} are @code{trad} or >> +@code{desc}, which select between the traditional GNU dialect and the GNU TLS >> +descriptor-based dialect. >> >> @item --enable-multiarch >> Specify whether to enable or disable multiarch support. The default is >> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi >> index 4085fc90907..459e266d426 100644 >> --- a/gcc/doc/invoke.texi >> +++ b/gcc/doc/invoke.texi >> @@ -1239,7 +1239,8 @@ See RS/6000 and PowerPC Options. >> -minline-atomics -mno-inline-atomics >> -minline-strlen -mno-inline-strlen >> -minline-strcmp -mno-inline-strcmp >> --minline-strncmp -mno-inline-strncmp} >> +-minline-strncmp -mno-inline-strncmp >> +-mtls-dialect=desc -mtls-dialect=trad} >> >> @emph{RL78 Options} >> @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs >> @@ -29538,6 +29539,17 @@ which register to use as base register for >> reading the canary, >> and from what offset from that base register. There is no default >> register or offset as this is entirely for use within the Linux >> kernel. >> + >> +@opindex mtls-dialect=desc >> +@item -mtls-dialect=desc >> +Use TLS descriptors as the thread-local storage mechanism for dynamic accesses >> +of TLS variables. This is the default. >> + >> +@opindex mtls-dialect=trad >> +@item -mtls-dialect=traditional > > -mtls-dialect=trad. > aarch64-linux-gnu-gcc doesn't support -mtls-dialect=traditional > >> +Use traditional TLS as the thread-local storage mechanism for dynamic accesses >> +of TLS variables. >> + >> @end table > > This is the default :) > > I am happy that we change the default like AArch64, but probably not > now when linker support is not widely available yet. > > I cannot comment on the code side as I am not familiar with GCC internals. > >> @node RL78 Options >> >> >> >> >>> +(define_insn "@tlsdesc" >>> + [(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))] >> >> P rather than SI here. >> >>> + "TARGET_TLSDESC" >>> + { >>> + return ".LT%1: auipc\ta0, %%tlsdesc_hi(%0)\;" >>> + "\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") >>> + (set_attr "length" "16") >>> + (set_attr "mode" "")]) >>> + >>> (define_insn "auipc" >>> [(set (match_operand:P 0 "register_operand" "=r") >>> (unspec:P > > It seems that x86-64 supports non-adjacent code sequence. Writing the > pattern this way does not allow interleaving, but I assume > interleaving doesn't enable much. > https://reviews.llvm.org/D114416 As mentioned in the commit message, the use of relaxation-only labels does not seem well supported in current GCC. Creating a label seems to force a basic block and I’m not sure how we can avoid it. If there’s a better way to implement this I’m happy to adopt. Tatsuyuki. > > -- > 宋方睿