< prev index next >

src/cpu/x86/vm/assembler_x86.cpp

Print this page




3342   emit_vex_arith(0x57, dst, nds, src, VEX_SIMD_66, vector256);
3343 }
3344 
3345 void Assembler::vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3346   assert(VM_Version::supports_avx(), "");
3347   emit_vex_arith(0x57, dst, nds, src, VEX_SIMD_NONE, vector256);
3348 }
3349 
3350 void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256) {
3351   assert(VM_Version::supports_avx(), "");
3352   emit_vex_arith(0x57, dst, nds, src, VEX_SIMD_66, vector256);
3353 }
3354 
3355 void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src, bool vector256) {
3356   assert(VM_Version::supports_avx(), "");
3357   emit_vex_arith(0x57, dst, nds, src, VEX_SIMD_NONE, vector256);
3358 }
3359 
3360 
3361 // Integer vector arithmetic














3362 void Assembler::paddb(XMMRegister dst, XMMRegister src) {
3363   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
3364   emit_simd_arith(0xFC, dst, src, VEX_SIMD_66);
3365 }
3366 
3367 void Assembler::paddw(XMMRegister dst, XMMRegister src) {
3368   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
3369   emit_simd_arith(0xFD, dst, src, VEX_SIMD_66);
3370 }
3371 
3372 void Assembler::paddd(XMMRegister dst, XMMRegister src) {
3373   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
3374   emit_simd_arith(0xFE, dst, src, VEX_SIMD_66);
3375 }
3376 
3377 void Assembler::paddq(XMMRegister dst, XMMRegister src) {
3378   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
3379   emit_simd_arith(0xD4, dst, src, VEX_SIMD_66);
3380 }
3381 














3382 void Assembler::vpaddb(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3383   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3384   emit_vex_arith(0xFC, dst, nds, src, VEX_SIMD_66, vector256);
3385 }
3386 
3387 void Assembler::vpaddw(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3388   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3389   emit_vex_arith(0xFD, dst, nds, src, VEX_SIMD_66, vector256);
3390 }
3391 
3392 void Assembler::vpaddd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3393   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3394   emit_vex_arith(0xFE, dst, nds, src, VEX_SIMD_66, vector256);
3395 }
3396 
3397 void Assembler::vpaddq(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3398   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3399   emit_vex_arith(0xD4, dst, nds, src, VEX_SIMD_66, vector256);
3400 }
3401 


3783   assert(VM_Version::supports_avx(), "");
3784   bool vector256 = true;
3785   int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A);
3786   emit_int8(0x18);
3787   emit_int8((unsigned char)(0xC0 | encode));
3788   // 0x00 - insert into lower 128 bits
3789   // 0x01 - insert into upper 128 bits
3790   emit_int8(0x01);
3791 }
3792 
3793 void Assembler::vinsertf128h(XMMRegister dst, Address src) {
3794   assert(VM_Version::supports_avx(), "");
3795   InstructionMark im(this);
3796   bool vector256 = true;
3797   assert(dst != xnoreg, "sanity");
3798   int dst_enc = dst->encoding();
3799   // swap src<->dst for encoding
3800   vex_prefix(src, dst_enc, dst_enc, VEX_SIMD_66, VEX_OPCODE_0F_3A, false, vector256);
3801   emit_int8(0x18);
3802   emit_operand(dst, src);











3803   // 0x01 - insert into upper 128 bits
3804   emit_int8(0x01);
3805 }
3806 
3807 void Assembler::vextractf128h(Address dst, XMMRegister src) {
3808   assert(VM_Version::supports_avx(), "");
3809   InstructionMark im(this);
3810   bool vector256 = true;
3811   assert(src != xnoreg, "sanity");
3812   int src_enc = src->encoding();
3813   vex_prefix(dst, 0, src_enc, VEX_SIMD_66, VEX_OPCODE_0F_3A, false, vector256);
3814   emit_int8(0x19);
3815   emit_operand(src, dst);
3816   // 0x01 - extract from upper 128 bits
3817   emit_int8(0x01);
3818 }
3819 
3820 void Assembler::vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) {
3821   assert(VM_Version::supports_avx2(), "");
3822   bool vector256 = true;




3342   emit_vex_arith(0x57, dst, nds, src, VEX_SIMD_66, vector256);
3343 }
3344 
3345 void Assembler::vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3346   assert(VM_Version::supports_avx(), "");
3347   emit_vex_arith(0x57, dst, nds, src, VEX_SIMD_NONE, vector256);
3348 }
3349 
3350 void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, Address src, bool vector256) {
3351   assert(VM_Version::supports_avx(), "");
3352   emit_vex_arith(0x57, dst, nds, src, VEX_SIMD_66, vector256);
3353 }
3354 
3355 void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src, bool vector256) {
3356   assert(VM_Version::supports_avx(), "");
3357   emit_vex_arith(0x57, dst, nds, src, VEX_SIMD_NONE, vector256);
3358 }
3359 
3360 
3361 // Integer vector arithmetic
3362 void Assembler::vphaddw(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3363   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3364   int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_38);
3365   emit_int8(0x01);
3366   emit_int8((unsigned char)(0xC0 | encode));
3367 }
3368 
3369 void Assembler::vphaddd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3370   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3371   int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_38);
3372   emit_int8(0x02);
3373   emit_int8((unsigned char)(0xC0 | encode));
3374 }
3375 
3376 void Assembler::paddb(XMMRegister dst, XMMRegister src) {
3377   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
3378   emit_simd_arith(0xFC, dst, src, VEX_SIMD_66);
3379 }
3380 
3381 void Assembler::paddw(XMMRegister dst, XMMRegister src) {
3382   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
3383   emit_simd_arith(0xFD, dst, src, VEX_SIMD_66);
3384 }
3385 
3386 void Assembler::paddd(XMMRegister dst, XMMRegister src) {
3387   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
3388   emit_simd_arith(0xFE, dst, src, VEX_SIMD_66);
3389 }
3390 
3391 void Assembler::paddq(XMMRegister dst, XMMRegister src) {
3392   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
3393   emit_simd_arith(0xD4, dst, src, VEX_SIMD_66);
3394 }
3395 
3396 void Assembler::phaddw(XMMRegister dst, XMMRegister src) {
3397   NOT_LP64(assert(VM_Version::supports_sse3(), ""));
3398   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38);
3399   emit_int8(0x01);
3400   emit_int8((unsigned char)(0xC0 | encode));
3401 }
3402 
3403 void Assembler::phaddd(XMMRegister dst, XMMRegister src) {
3404   NOT_LP64(assert(VM_Version::supports_sse3(), ""));
3405   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38);
3406   emit_int8(0x02);
3407   emit_int8((unsigned char)(0xC0 | encode));
3408 }
3409 
3410 void Assembler::vpaddb(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3411   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3412   emit_vex_arith(0xFC, dst, nds, src, VEX_SIMD_66, vector256);
3413 }
3414 
3415 void Assembler::vpaddw(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3416   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3417   emit_vex_arith(0xFD, dst, nds, src, VEX_SIMD_66, vector256);
3418 }
3419 
3420 void Assembler::vpaddd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3421   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3422   emit_vex_arith(0xFE, dst, nds, src, VEX_SIMD_66, vector256);
3423 }
3424 
3425 void Assembler::vpaddq(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
3426   assert(VM_Version::supports_avx() && !vector256 || VM_Version::supports_avx2(), "256 bit integer vectors requires AVX2");
3427   emit_vex_arith(0xD4, dst, nds, src, VEX_SIMD_66, vector256);
3428 }
3429 


3811   assert(VM_Version::supports_avx(), "");
3812   bool vector256 = true;
3813   int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A);
3814   emit_int8(0x18);
3815   emit_int8((unsigned char)(0xC0 | encode));
3816   // 0x00 - insert into lower 128 bits
3817   // 0x01 - insert into upper 128 bits
3818   emit_int8(0x01);
3819 }
3820 
3821 void Assembler::vinsertf128h(XMMRegister dst, Address src) {
3822   assert(VM_Version::supports_avx(), "");
3823   InstructionMark im(this);
3824   bool vector256 = true;
3825   assert(dst != xnoreg, "sanity");
3826   int dst_enc = dst->encoding();
3827   // swap src<->dst for encoding
3828   vex_prefix(src, dst_enc, dst_enc, VEX_SIMD_66, VEX_OPCODE_0F_3A, false, vector256);
3829   emit_int8(0x18);
3830   emit_operand(dst, src);
3831   // 0x01 - insert into upper 128 bits
3832   emit_int8(0x01);
3833 }
3834 
3835 void Assembler::vextractf128h(XMMRegister dst, XMMRegister src) {
3836   assert(VM_Version::supports_avx(), ""); 
3837   bool vector256 = true;
3838   int encode = vex_prefix_and_encode(src, xnoreg, dst, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A);
3839   emit_int8(0x19);
3840   emit_int8((unsigned char)(0xC0 | encode));
3841   // 0x00 - insert into lower 128 bits
3842   // 0x01 - insert into upper 128 bits
3843   emit_int8(0x01);
3844 }
3845 
3846 void Assembler::vextractf128h(Address dst, XMMRegister src) {
3847   assert(VM_Version::supports_avx(), "");
3848   InstructionMark im(this);
3849   bool vector256 = true;
3850   assert(src != xnoreg, "sanity");
3851   int src_enc = src->encoding();
3852   vex_prefix(dst, 0, src_enc, VEX_SIMD_66, VEX_OPCODE_0F_3A, false, vector256);
3853   emit_int8(0x19);
3854   emit_operand(src, dst);
3855   // 0x01 - extract from upper 128 bits
3856   emit_int8(0x01);
3857 }
3858 
3859 void Assembler::vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) {
3860   assert(VM_Version::supports_avx2(), "");
3861   bool vector256 = true;


< prev index next >