Request for reviews (L): 6761600: Use SSE 4.2 In STTNI Intrinsics

Vladimir Kozlov Vladimir.Kozlov at Sun.COM
Fri Feb 6 15:58:59 PST 2009


Looks good.

Vladimir

Changpeng Fang wrote:
> Thanks. I put the updated webrev in:
> http://cr.openjdk.java.net/~cfang/6761600/webrev/
> 
> and I am testing to adjust the masm.jccb stuff.
> 
> Changpeng
> 
> 
> Vladimir Kozlov wrote:
>> Changpeng,
>>
>> Good work.
>>
>> src/cpu/x86/vm/assembler_x86.cpp:
>> Remove Macro NOT_LP64() around asserts in new instructions.
>> VM_Version::supports_sse4_2() should be checked on LP64 also
>> since not all 64-bits CPUs support it.
>>
>>
>> src/cpu/x86/vm/vm_version_x86_32.cpp:
>> src/cpu/x86/vm/vm_version_x86_64.cpp:
>> Remove UseUnalignedLoadStores check in the next code,
>> it is not needed and it is wrong to have it since it depends on
>> UseXMMForArrayCopy flag. The top check supports_sse4_2() && supports_ht()
>> is enough for movdqu verification.
>>
>> +         if(FLAG_IS_DEFAULT(UseSSE42Intrinsics) &&
>> +            UseUnalignedLoadStores){ //sse42 intrinsics depend on movdqu
>> +             UseSSE42Intrinsics = true;
>>           }
>>
>>
>> In both x86_32.ad and x86_64.ad try to use short forward branches 
>> masm.jccb()
>> starting from the bottom of the assembler code. Then try to use all
>> intrinsics with all flags variations and revert back to long jump 
>> those branches
>> VM will complain about.
>>
>>
>> cpu/x86/vm/x86_32.ad:
>> align comments:
>>
>> !       masm.andl(rsi, 0xfffffff8); // rsi holds the vector count
>> !       masm.andl(rdi, 0x00000007);       // rdi holds the tail count
>>
>> In enc_String_Equals() and enc_String_IndexOf()
>> use movptr() for value_offset.
>>
>>
>> src/share/vm/adlc/formssel.cpp:
>> Missing checks for AryEq.
>>
>> src/share/vm/classfile/vmSymbols.hpp:
>> Remove empty after indexOf_name since equals() also j.l.String method:
>>      do_name(     indexOf_name,       "indexOf")
>>
>>
>> +   do_intrinsic(_equals, java_lang_String, equals_name, 
>> object_boolean_signature,  F_R)
>>
>>
>> src/share/vm/opto/library_call.cpp:
>> Add that it because spec allow to specify NULL as argument:
>> +   //should not do null check for argument for string_equals.
>>
>> Remove next line
>> +   //argument = do_null_check(argument, T_OBJECT);
>>
>> Thanks,
>> Vladimir
>>
>> Changpeng Fang wrote:
>>> http://webrev.invokedynamic.info/cfang/6761600/index.html
>>>
>>> Works on 6761600 : Use SSE 4.2 in intrinsics for String.compareTo(),
>>> String.equals(), String.indexOf() and Arrays.equals(), among which,
>>> String.equals() and String.indexOf() are intrinsified for the first 
>>> time.
>>>
>>> Problem: Use SSE 4.2 instructions for STTNI intrinsics for for Nehalem
>>>               improvements
>>>
>>> Solution:
>>>    Implemented both 32 and 64-bit versions for X86.  Introduced  a new
>>> flag  UseSSE42Intrinsics, with the default TRUE on systems that support
>>> SSE4.2 (false otherwise).
>>>
>>> Reviewed by:
>>>
>>> Fix verified (y/n): y
>>>
>>> Other testing:  JPRT,
>>>
>>>
> 



More information about the hotspot-compiler-dev mailing list