Mercurial > hg > graal-jvmci-8
diff src/cpu/x86/vm/assembler_x86.cpp @ 7477:038dd2875b94
8005419: Improve intrinsics code performance on x86 by using AVX2
Summary: use 256bit vpxor,vptest instructions in String.compareTo() and equals() intrinsics.
Reviewed-by: twisti
author | kvn |
---|---|
date | Tue, 08 Jan 2013 11:30:51 -0800 |
parents | ffa87474d7a4 |
children | 989155e2d07a b30b3c2a0cf2 db9981fd3124 |
line wrap: on
line diff
--- a/src/cpu/x86/vm/assembler_x86.cpp Mon Jan 07 14:08:28 2013 -0800 +++ b/src/cpu/x86/vm/assembler_x86.cpp Tue Jan 08 11:30:51 2013 -0800 @@ -2468,6 +2468,26 @@ emit_int8((unsigned char)(0xC0 | encode)); } +void Assembler::vptest(XMMRegister dst, Address src) { + assert(VM_Version::supports_avx(), ""); + InstructionMark im(this); + bool vector256 = true; + assert(dst != xnoreg, "sanity"); + int dst_enc = dst->encoding(); + // swap src<->dst for encoding + vex_prefix(src, dst_enc, dst_enc, VEX_SIMD_66, VEX_OPCODE_0F_38, false, vector256); + emit_int8(0x17); + emit_operand(dst, src); +} + +void Assembler::vptest(XMMRegister dst, XMMRegister src) { + assert(VM_Version::supports_avx(), ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_38); + emit_int8(0x17); + emit_int8((unsigned char)(0xC0 | encode)); +} + void Assembler::punpcklbw(XMMRegister dst, Address src) { NOT_LP64(assert(VM_Version::supports_sse2(), "")); assert((UseAVX > 0), "SSE mode requires address alignment 16 bytes");