Request for reviews (L): 6761600: Use SSE 4.2 In STTNI Intrinsics
Changpeng Fang
Changpeng.Fang at Sun.COM
Fri Feb 6 14:42:00 PST 2009
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