RFR: 8338383: Implement JEP 491: Synchronize Virtual Threads without Pinning
Fei Yang
fyang at openjdk.org
Wed Nov 6 17:40:02 UTC 2024
On Mon, 4 Nov 2024 18:18:38 GMT, Patricio Chilano Mateo <pchilanomate at openjdk.org> wrote:
>> Here's my suggested C2 change:
>>
>> diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad
>> index d9c77a2f529..1e99db191ae 100644
>> --- a/src/hotspot/cpu/aarch64/aarch64.ad
>> +++ b/src/hotspot/cpu/aarch64/aarch64.ad
>> @@ -3692,14 +3692,13 @@ encode %{
>> __ post_call_nop();
>> } else {
>> Label retaddr;
>> + // Make the anchor frame walkable
>> __ adr(rscratch2, retaddr);
>> + __ str(rscratch2, Address(rthread, JavaThread::last_Java_pc_offset()));
>> __ lea(rscratch1, RuntimeAddress(entry));
>> - // Leave a breadcrumb for JavaFrameAnchor::capture_last_Java_pc()
>> - __ stp(zr, rscratch2, Address(__ pre(sp, -2 * wordSize)));
>> __ blr(rscratch1);
>> __ bind(retaddr);
>> __ post_call_nop();
>> - __ add(sp, sp, 2 * wordSize);
>> }
>> if (Compile::current()->max_vector_size() > 0) {
>> __ reinitialize_ptrue();
>
> Great, thanks Dean. I removed `possibly_adjust_frame()` and the related code.
> @RealFYang I made the equivalent change for riscv, could you verify it's okay?
@pchilano : Hi, Great to see `possibly_adjust_frame()` go away. Nice cleanup!
`hotspot_loom jdk_loom` still test good with both release and fastdebug builds on linux-riscv64 platform.
BTW: I noticed one more return miss prediction case which I think was previously missed in https://github.com/openjdk/jdk/pull/21565/commits/32840de91953a5e50c85217f2a51fc5a901682a2
Do you mind adding following small addon change to fix it? Thanks.
diff --git a/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp b/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp
index 84a292242c3..ac28f4b3514 100644
--- a/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp
+++ b/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp
@@ -1263,10 +1263,10 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) {
if (LockingMode != LM_LEGACY) {
// Check preemption for Object.wait()
Label not_preempted;
- __ ld(t0, Address(xthread, JavaThread::preempt_alternate_return_offset()));
- __ beqz(t0, not_preempted);
+ __ ld(t1, Address(xthread, JavaThread::preempt_alternate_return_offset()));
+ __ beqz(t1, not_preempted);
__ sd(zr, Address(xthread, JavaThread::preempt_alternate_return_offset()));
- __ jr(t0);
+ __ jr(t1);
__ bind(native_return);
__ restore_after_resume(true /* is_native */);
// reload result_handler
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21565#discussion_r1828797495
More information about the core-libs-dev
mailing list