RFR(sh/jdk8): Fix register allocation for thread register is 32bit LRB

Roman Kennke rkennke at redhat.com
Tue Dec 1 23:47:51 UTC 2020



Am 01.12.20 um 22:52 schrieb Zhengyu Gu:
> 
> 
> On 12/1/20 2:46 PM, Roman Kennke wrote:
>> This is a shenandoah/jdk8-specific fix. SFX barriers caused the 
>> regression that the thread register in 32bit clashes with the index 
>> register of the source address. Apparently, registers are shuffled 
>> differently in later JDK interpreters. With a little bit of 
>> experimentation I found that we can use rsi instead in JDK8.
>>
>> http://cr.openjdk.java.net/~rkennke/shjdk8-fix32-regalloc-thread/webrev.00/ 
>>
>>
>> Testing: hotspot_gc_shenandoah (x86_32) and specjvm fast run. This 
>> should catch mistakes there reliably, because all of the interpreter 
>> is generated at the start, any clashes should be caught by the assert.
>>
>> Ok?
> 
> 
>   144   Register thread = rsi;
>   145   if (thread == dst) {
>   146     thread = rbx;
>   147   }
>   148   assert_different_registers(dst, src.base(), src.index(), thread);
> 
> Line#145 never true, Line#145 - 147 should be removed.

What makes this obvious to you? It is not obvious to me...

Roman



More information about the shenandoah-dev mailing list