[12] RFR(S): 8215313: [AOT] java/lang/String/Split.java fails with AOTed java.base

dean.long at oracle.com dean.long at oracle.com
Thu Jan 10 18:53:51 UTC 2019

Taking another look, it seems like cmpl could be replaced with the 
size-appropriate cmpb, cmpw, or cmpl based on byteMode(kind) and 
findTwoCharPrefix, but I guess AMD64Assembler only supports cmpl and 
cmpq right now.


On 1/10/19 10:04 AM, dean.long at oracle.com wrote:
> Is it OK to modify the values of searchValue[i]?  If the search value 
> is already sign-extended, how about sign-extending cmpResult instead 
> of zero-extending searchValue?
> dl
> On 1/10/19 7:09 AM, Doug Simon wrote:
>> Please review this fix supplied by Josef Haider for an incorrect 
>> compilation of String.split.
>> When the String.indexOf intrinsic on AMD64 reaches the end of a 
>> string, it tries to vectorize the last compare operations by reading 
>> past the bounds of the character/byte array. This is not safe if the 
>> out-of-bounds read would cross a page boundary, so in that case 
>> characters are compared one-by-one. This is done with a 
>> `cmpl`-instruction, which only works as long as the bytes/chars are 
>> not sign extended.
>> The fix is to simply `and` the characters we are searching for with 
>> `0xff`/`0xffff` in order to eliminate any erroneous sign extensions.
>> http://cr.openjdk.java.net/~dnsimon/8215313
>> https://bugs.openjdk.java.net/browse/JDK-8215313
>> -Doug

More information about the hotspot-compiler-dev mailing list