[riscv-port] RFR: 8277391: riscv: implement tls function MacroAssembler::get_thread() by using tls.ie

Fei Yang fyang at openjdk.java.net
Fri Nov 19 04:01:21 UTC 2021

On Thu, 18 Nov 2021 12:36:31 GMT, zhengxiaolinX <duke at openjdk.java.net> wrote:

> Hi team,
> This patch fixes the unimplemented assembly version of `__ get_thread()`, bringing some performance improvement by directly using the x4 register to refer to the variable `Thread::_thr_current`. Tested tests under hotspot/ and jdk/. [Original patch](https://github.com/riscv-collab/riscv-openjdk/pull/4)
> Thanks,
> Xiaolin

Changes requested by fyang (Lead).

src/hotspot/os_cpu/linux_riscv/threadLS_linux_riscv.S line 31:

> 29:     .type   _ZN10JavaThread25riscv64_get_thread_helperEv, %function
> 30: 
> 31: _ZN10JavaThread25riscv64_get_thread_helperEv:

For maximum flexibility, I would suggest we switch to use the global-dynamic TLS model here if you don't have a strong reason to use the initial-exec TLS model. That's the default TLS model used by the host GCC compiler and I don't want to affected by the limits of the initial-exec TLS model some day.
        la.tls.gd       a0, _ZN6Thread12_thr_currentE
        addi    sp, sp, -16
        sd      ra, 8(sp)
        call    __tls_get_addr at plt
        ld      ra, 8(sp)
        ld      a0, 0(a0)
        addi    sp, sp, 16


PR: https://git.openjdk.java.net/riscv-port/pull/7

More information about the riscv-port-dev mailing list