diff options
| -rw-r--r-- | compiler/utils/x86/assembler_x86.cc | 76 | ||||
| -rw-r--r-- | compiler/utils/x86/assembler_x86_test.cc | 60 | ||||
| -rw-r--r-- | compiler/utils/x86_64/assembler_x86_64.cc | 66 | ||||
| -rw-r--r-- | compiler/utils/x86_64/assembler_x86_64_test.cc | 59 |
4 files changed, 190 insertions, 71 deletions
diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc index 01eb160fa7..bcc197b776 100644 --- a/compiler/utils/x86/assembler_x86.cc +++ b/compiler/utils/x86/assembler_x86.cc @@ -188,7 +188,7 @@ void X86Assembler::movntl(const Address& dst, Register src) { void X86Assembler::blsi(Register dst, Register src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - uint8_t byte_zero = EmitVexPrefixByteZero(false /*is_two_byte*/); + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false); uint8_t byte_one = EmitVexPrefixByteOne(false, false, false, SET_VEX_M_0F_38); uint8_t byte_two = EmitVexPrefixByteTwo(false, X86ManagedRegister::FromCpuRegister(dst), @@ -202,7 +202,7 @@ void X86Assembler::blsi(Register dst, Register src) { void X86Assembler::blsmsk(Register dst, Register src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - uint8_t byte_zero = EmitVexPrefixByteZero(false /*is_two_byte*/); + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false); uint8_t byte_one = EmitVexPrefixByteOne(false, false, false, SET_VEX_M_0F_38); uint8_t byte_two = EmitVexPrefixByteTwo(false, X86ManagedRegister::FromCpuRegister(dst), @@ -216,7 +216,7 @@ void X86Assembler::blsmsk(Register dst, Register src) { void X86Assembler::blsr(Register dst, Register src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - uint8_t byte_zero = EmitVexPrefixByteZero(false /*is_two_byte*/); + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false); uint8_t byte_one = EmitVexPrefixByteOne(false, false, false, SET_VEX_M_0F_38); uint8_t byte_two = EmitVexPrefixByteTwo(false, X86ManagedRegister::FromCpuRegister(dst), @@ -434,11 +434,11 @@ void X86Assembler::vmovaps(XmmRegister dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix*/ - uint8_t byte_zero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t byte_one = EmitVexPrefixByteOne(/**R = */false, + uint8_t byte_one = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_NONE); @@ -466,11 +466,11 @@ void X86Assembler::vmovaps(XmmRegister dst, const Address& src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix*/ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_NONE); @@ -498,11 +498,11 @@ void X86Assembler::vmovups(XmmRegister dst, const Address& src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix*/ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_NONE); @@ -530,11 +530,11 @@ void X86Assembler::vmovaps(const Address& dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix*/ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_NONE); @@ -562,11 +562,11 @@ void X86Assembler::vmovups(const Address& dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix*/ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_NONE); @@ -745,11 +745,11 @@ void X86Assembler::vmovapd(XmmRegister dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix*/ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg , SET_VEX_L_128, SET_VEX_PP_66); @@ -778,11 +778,11 @@ void X86Assembler::vmovapd(XmmRegister dst, const Address& src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix*/ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66); @@ -811,11 +811,11 @@ void X86Assembler::vmovupd(XmmRegister dst, const Address& src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix*/ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66); @@ -845,11 +845,11 @@ void X86Assembler::vmovapd(const Address& dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix */ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.*/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66); @@ -878,11 +878,11 @@ void X86Assembler::vmovupd(const Address& dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix */ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); /**a REX prefix is necessary only if an instruction references one of the extended registers or uses a 64-bit operand.**/ - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66); @@ -1085,9 +1085,9 @@ void X86Assembler::vmovdqa(XmmRegister dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix */ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66); @@ -1116,9 +1116,9 @@ void X86Assembler::vmovdqa(XmmRegister dst, const Address& src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix */ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66); @@ -1147,9 +1147,9 @@ void X86Assembler::vmovdqu(XmmRegister dst, const Address& src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix */ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_F3); @@ -1178,9 +1178,9 @@ void X86Assembler::vmovdqa(const Address& dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); /**Instruction VEX Prefix */ - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66); @@ -1210,9 +1210,9 @@ void X86Assembler::vmovdqu(const Address& dst, XmmRegister src) { DCHECK(CpuHasAVXorAVX2FeatureFlag()); AssemblerBuffer::EnsureCapacity ensured(&buffer_); // Instruction VEX Prefix - uint8_t ByteZero = EmitVexPrefixByteZero(/**is_twobyte_form= */true); + uint8_t ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ true); X86ManagedRegister vvvv_reg = ManagedRegister::NoRegister().AsX86(); - uint8_t ByteOne = EmitVexPrefixByteOne(/**R = */false, + uint8_t ByteOne = EmitVexPrefixByteOne(/*R=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_F3); @@ -1716,12 +1716,12 @@ void X86Assembler::orps(XmmRegister dst, XmmRegister src) { void X86Assembler::andn(Register dst, Register src1, Register src2) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - uint8_t byte_zero = EmitVexPrefixByteZero(/**is_twobyte_form= */false); - uint8_t byte_one = EmitVexPrefixByteOne(/**R = */false, - /**X = */false, - /**B = */false, + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false); + uint8_t byte_one = EmitVexPrefixByteOne(/*R=*/ false, + /*X=*/ false, + /*B=*/ false, SET_VEX_M_0F_38); - uint8_t byte_two = EmitVexPrefixByteTwo(/**W= */false, + uint8_t byte_two = EmitVexPrefixByteTwo(/*W=*/ false, X86ManagedRegister::FromCpuRegister(src1), SET_VEX_L_128, SET_VEX_PP_NONE); diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc index 519715631f..ee2948288f 100644 --- a/compiler/utils/x86/assembler_x86_test.cc +++ b/compiler/utils/x86/assembler_x86_test.cc @@ -501,6 +501,10 @@ TEST_F(AssemblerX86AVXTest, VMovaps) { DriverStr(RepeatFF(&x86::X86Assembler::vmovaps, "vmovaps %{reg2}, %{reg1}"), "vmovaps"); } +TEST_F(AssemblerX86AVXTest, Movaps) { + DriverStr(RepeatFF(&x86::X86Assembler::movaps, "vmovaps %{reg2}, %{reg1}"), "avx_movaps"); +} + TEST_F(AssemblerX86Test, MovapsLoad) { DriverStr(RepeatFA(&x86::X86Assembler::movaps, "movaps {mem}, %{reg}"), "movaps_load"); } @@ -509,6 +513,10 @@ TEST_F(AssemblerX86AVXTest, VMovapsLoad) { DriverStr(RepeatFA(&x86::X86Assembler::vmovaps, "vmovaps {mem}, %{reg}"), "vmovaps_load"); } +TEST_F(AssemblerX86AVXTest, MovapsLoad) { + DriverStr(RepeatFA(&x86::X86Assembler::movaps, "vmovaps {mem}, %{reg}"), "avx_movaps_load"); +} + TEST_F(AssemblerX86Test, MovapsStore) { DriverStr(RepeatAF(&x86::X86Assembler::movaps, "movaps %{reg}, {mem}"), "movaps_store"); } @@ -517,6 +525,10 @@ TEST_F(AssemblerX86AVXTest, VMovapsStore) { DriverStr(RepeatAF(&x86::X86Assembler::vmovaps, "vmovaps %{reg}, {mem}"), "vmovaps_store"); } +TEST_F(AssemblerX86AVXTest, MovapsStore) { + DriverStr(RepeatAF(&x86::X86Assembler::movaps, "vmovaps %{reg}, {mem}"), "avx_movaps_store"); +} + TEST_F(AssemblerX86Test, MovupsLoad) { DriverStr(RepeatFA(&x86::X86Assembler::movups, "movups {mem}, %{reg}"), "movups_load"); } @@ -525,6 +537,10 @@ TEST_F(AssemblerX86AVXTest, VMovupsLoad) { DriverStr(RepeatFA(&x86::X86Assembler::vmovups, "vmovups {mem}, %{reg}"), "vmovups_load"); } +TEST_F(AssemblerX86AVXTest, MovupsLoad) { + DriverStr(RepeatFA(&x86::X86Assembler::movups, "vmovups {mem}, %{reg}"), "avx_movups_load"); +} + TEST_F(AssemblerX86Test, MovupsStore) { DriverStr(RepeatAF(&x86::X86Assembler::movups, "movups %{reg}, {mem}"), "movups_store"); } @@ -533,6 +549,10 @@ TEST_F(AssemblerX86AVXTest, VMovupsStore) { DriverStr(RepeatAF(&x86::X86Assembler::vmovups, "vmovups %{reg}, {mem}"), "vmovups_store"); } +TEST_F(AssemblerX86AVXTest, MovupsStore) { + DriverStr(RepeatAF(&x86::X86Assembler::movups, "vmovups %{reg}, {mem}"), "avx_movups_store"); +} + TEST_F(AssemblerX86Test, Movapd) { DriverStr(RepeatFF(&x86::X86Assembler::movapd, "movapd %{reg2}, %{reg1}"), "movapd"); } @@ -541,6 +561,10 @@ TEST_F(AssemblerX86AVXTest, VMovapd) { DriverStr(RepeatFF(&x86::X86Assembler::vmovapd, "vmovapd %{reg2}, %{reg1}"), "vmovapd"); } +TEST_F(AssemblerX86AVXTest, Movapd) { + DriverStr(RepeatFF(&x86::X86Assembler::movapd, "vmovapd %{reg2}, %{reg1}"), "avx_movapd"); +} + TEST_F(AssemblerX86Test, MovapdLoad) { DriverStr(RepeatFA(&x86::X86Assembler::movapd, "movapd {mem}, %{reg}"), "movapd_load"); } @@ -549,6 +573,10 @@ TEST_F(AssemblerX86AVXTest, VMovapdLoad) { DriverStr(RepeatFA(&x86::X86Assembler::vmovapd, "vmovapd {mem}, %{reg}"), "vmovapd_load"); } +TEST_F(AssemblerX86AVXTest, MovapdLoad) { + DriverStr(RepeatFA(&x86::X86Assembler::movapd, "vmovapd {mem}, %{reg}"), "avx_movapd_load"); +} + TEST_F(AssemblerX86Test, MovapdStore) { DriverStr(RepeatAF(&x86::X86Assembler::movapd, "movapd %{reg}, {mem}"), "movapd_store"); } @@ -557,6 +585,10 @@ TEST_F(AssemblerX86AVXTest, VMovapdStore) { DriverStr(RepeatAF(&x86::X86Assembler::vmovapd, "vmovapd %{reg}, {mem}"), "vmovapd_store"); } +TEST_F(AssemblerX86AVXTest, MovapdStore) { + DriverStr(RepeatAF(&x86::X86Assembler::movapd, "vmovapd %{reg}, {mem}"), "avx_movapd_store"); +} + TEST_F(AssemblerX86Test, MovupdLoad) { DriverStr(RepeatFA(&x86::X86Assembler::movupd, "movupd {mem}, %{reg}"), "movupd_load"); } @@ -565,6 +597,10 @@ TEST_F(AssemblerX86AVXTest, VMovupdLoad) { DriverStr(RepeatFA(&x86::X86Assembler::vmovupd, "vmovupd {mem}, %{reg}"), "vmovupd_load"); } +TEST_F(AssemblerX86AVXTest, MovupdLoad) { + DriverStr(RepeatFA(&x86::X86Assembler::movupd, "vmovupd {mem}, %{reg}"), "avx_movupd_load"); +} + TEST_F(AssemblerX86Test, MovupdStore) { DriverStr(RepeatAF(&x86::X86Assembler::movupd, "movupd %{reg}, {mem}"), "movupd_store"); } @@ -573,6 +609,10 @@ TEST_F(AssemblerX86AVXTest, VMovupdStore) { DriverStr(RepeatAF(&x86::X86Assembler::vmovupd, "vmovupd %{reg}, {mem}"), "vmovupd_store"); } +TEST_F(AssemblerX86AVXTest, MovupdStore) { + DriverStr(RepeatAF(&x86::X86Assembler::movupd, "vmovupd %{reg}, {mem}"), "avx_movupd_store"); +} + TEST_F(AssemblerX86Test, Movdqa) { DriverStr(RepeatFF(&x86::X86Assembler::movdqa, "movdqa %{reg2}, %{reg1}"), "movdqa"); } @@ -581,6 +621,10 @@ TEST_F(AssemblerX86AVXTest, VMovdqa) { DriverStr(RepeatFF(&x86::X86Assembler::vmovdqa, "vmovdqa %{reg2}, %{reg1}"), "vmovdqa"); } +TEST_F(AssemblerX86AVXTest, Movdqa) { + DriverStr(RepeatFF(&x86::X86Assembler::movdqa, "vmovdqa %{reg2}, %{reg1}"), "avx_movdqa"); +} + TEST_F(AssemblerX86Test, MovdqaLoad) { DriverStr(RepeatFA(&x86::X86Assembler::movdqa, "movdqa {mem}, %{reg}"), "movdqa_load"); } @@ -589,6 +633,10 @@ TEST_F(AssemblerX86AVXTest, VMovdqaLoad) { DriverStr(RepeatFA(&x86::X86Assembler::vmovdqa, "vmovdqa {mem}, %{reg}"), "vmovdqa_load"); } +TEST_F(AssemblerX86AVXTest, MovdqaLoad) { + DriverStr(RepeatFA(&x86::X86Assembler::movdqa, "vmovdqa {mem}, %{reg}"), "avx_movdqa_load"); +} + TEST_F(AssemblerX86Test, MovdqaStore) { DriverStr(RepeatAF(&x86::X86Assembler::movdqa, "movdqa %{reg}, {mem}"), "movdqa_store"); } @@ -597,6 +645,10 @@ TEST_F(AssemblerX86AVXTest, VMovdqaStore) { DriverStr(RepeatAF(&x86::X86Assembler::vmovdqa, "vmovdqa %{reg}, {mem}"), "vmovdqa_store"); } +TEST_F(AssemblerX86AVXTest, MovdqaStore) { + DriverStr(RepeatAF(&x86::X86Assembler::movdqa, "vmovdqa %{reg}, {mem}"), "avx_movdqa_store"); +} + TEST_F(AssemblerX86Test, MovdquLoad) { DriverStr(RepeatFA(&x86::X86Assembler::movdqu, "movdqu {mem}, %{reg}"), "movdqu_load"); } @@ -605,6 +657,10 @@ TEST_F(AssemblerX86AVXTest, VMovdquLoad) { DriverStr(RepeatFA(&x86::X86Assembler::vmovdqu, "vmovdqu {mem}, %{reg}"), "vmovdqu_load"); } +TEST_F(AssemblerX86AVXTest, MovdquLoad) { + DriverStr(RepeatFA(&x86::X86Assembler::movdqu, "vmovdqu {mem}, %{reg}"), "avx_movdqu_load"); +} + TEST_F(AssemblerX86Test, MovdquStore) { DriverStr(RepeatAF(&x86::X86Assembler::movdqu, "movdqu %{reg}, {mem}"), "movdqu_store"); } @@ -613,6 +669,10 @@ TEST_F(AssemblerX86AVXTest, VMovdquStore) { DriverStr(RepeatAF(&x86::X86Assembler::vmovdqu, "vmovdqu %{reg}, {mem}"), "vmovdqu_store"); } +TEST_F(AssemblerX86AVXTest, MovdquStore) { + DriverStr(RepeatAF(&x86::X86Assembler::movdqu, "vmovdqu %{reg}, {mem}"), "avx_movdqu_store"); +} + TEST_F(AssemblerX86Test, AddPS) { DriverStr(RepeatFF(&x86::X86Assembler::addps, "addps %{reg2}, %{reg1}"), "addps"); } diff --git a/compiler/utils/x86_64/assembler_x86_64.cc b/compiler/utils/x86_64/assembler_x86_64.cc index c010a68276..336ecbf785 100644 --- a/compiler/utils/x86_64/assembler_x86_64.cc +++ b/compiler/utils/x86_64/assembler_x86_64.cc @@ -448,10 +448,10 @@ void X86_64Assembler::vmovaps(XmmRegister dst, XmmRegister src) { SET_VEX_PP_NONE); } else { byte_one = EmitVexPrefixByteOne(dst.NeedsRex(), - /** X= */false, + /*X=*/ false, src.NeedsRex(), SET_VEX_M_0F); - byte_two = EmitVexPrefixByteTwo(/**W= */false, + byte_two = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_NONE); } @@ -511,7 +511,7 @@ void X86_64Assembler::vmovaps(XmmRegister dst, const Address& src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_NONE); } @@ -563,7 +563,7 @@ void X86_64Assembler::vmovups(XmmRegister dst, const Address& src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_NONE); } @@ -617,7 +617,7 @@ void X86_64Assembler::vmovaps(const Address& dst, XmmRegister src) { Rex_x , Rex_b , SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_NONE); } @@ -670,7 +670,7 @@ void X86_64Assembler::vmovups(const Address& dst, XmmRegister src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_NONE); } @@ -931,10 +931,10 @@ void X86_64Assembler::vmovapd(XmmRegister dst, XmmRegister src) { SET_VEX_PP_66); } else { ByteOne = EmitVexPrefixByteOne(dst.NeedsRex(), - /**X = */false , + /*X=*/ false , src.NeedsRex(), SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_66); } @@ -996,7 +996,7 @@ void X86_64Assembler::vmovapd(XmmRegister dst, const Address& src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_66); } @@ -1050,7 +1050,7 @@ void X86_64Assembler::vmovupd(XmmRegister dst, const Address& src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_66); } @@ -1102,7 +1102,7 @@ void X86_64Assembler::vmovapd(const Address& dst, XmmRegister src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_66); } @@ -1156,7 +1156,7 @@ void X86_64Assembler::vmovupd(const Address& dst, XmmRegister src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_66); } @@ -1357,10 +1357,10 @@ void X86_64Assembler::vmovdqa(XmmRegister dst, XmmRegister src) { SET_VEX_PP_66); } else { ByteOne = EmitVexPrefixByteOne(dst.NeedsRex(), - /**X = */false, + /*X=*/ false, src.NeedsRex(), SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_66); } @@ -1422,7 +1422,7 @@ void X86_64Assembler::vmovdqa(XmmRegister dst, const Address& src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_66); } @@ -1477,7 +1477,7 @@ void X86_64Assembler::vmovdqu(XmmRegister dst, const Address& src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_F3); } @@ -1530,7 +1530,7 @@ void X86_64Assembler::vmovdqa(const Address& dst, XmmRegister src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_66); } @@ -1584,7 +1584,7 @@ void X86_64Assembler::vmovdqu(const Address& dst, XmmRegister src) { Rex_x, Rex_b, SET_VEX_M_0F); - ByteTwo = EmitVexPrefixByteTwo(/**W= */false, + ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, SET_VEX_L_128, SET_VEX_PP_F3); } @@ -2174,12 +2174,12 @@ void X86_64Assembler::pand(XmmRegister dst, XmmRegister src) { void X86_64Assembler::andn(CpuRegister dst, CpuRegister src1, CpuRegister src2) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - uint8_t byte_zero = EmitVexPrefixByteZero(/**is_two_byte= */false); + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false); uint8_t byte_one = EmitVexPrefixByteOne(dst.NeedsRex(), - /**X = */false, + /*X=*/ false, src2.NeedsRex(), SET_VEX_M_0F_38); - uint8_t byte_two = EmitVexPrefixByteTwo(/**W= */true, + uint8_t byte_two = EmitVexPrefixByteTwo(/*W=*/ true, X86_64ManagedRegister::FromCpuRegister(src1.AsRegister()), SET_VEX_L_128, SET_VEX_PP_NONE); @@ -3970,12 +3970,12 @@ void X86_64Assembler::setcc(Condition condition, CpuRegister dst) { void X86_64Assembler::blsi(CpuRegister dst, CpuRegister src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - uint8_t byte_zero = EmitVexPrefixByteZero(/**is_two_byte= */false); - uint8_t byte_one = EmitVexPrefixByteOne(/**R = */false, - /**X = */false, + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false); + uint8_t byte_one = EmitVexPrefixByteOne(/*R=*/ false, + /*X=*/ false, src.NeedsRex(), SET_VEX_M_0F_38); - uint8_t byte_two = EmitVexPrefixByteTwo(/**W= */true, + uint8_t byte_two = EmitVexPrefixByteTwo(/*W=*/true, X86_64ManagedRegister::FromCpuRegister(dst.AsRegister()), SET_VEX_L_128, SET_VEX_PP_NONE); @@ -3988,12 +3988,12 @@ void X86_64Assembler::blsi(CpuRegister dst, CpuRegister src) { void X86_64Assembler::blsmsk(CpuRegister dst, CpuRegister src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - uint8_t byte_zero = EmitVexPrefixByteZero(/**is_two_byte= */false); - uint8_t byte_one = EmitVexPrefixByteOne(/**R = */false, - /**X = */false, + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false); + uint8_t byte_one = EmitVexPrefixByteOne(/*R=*/ false, + /*X=*/ false, src.NeedsRex(), SET_VEX_M_0F_38); - uint8_t byte_two = EmitVexPrefixByteTwo(/**W= */true, + uint8_t byte_two = EmitVexPrefixByteTwo(/*W=*/ true, X86_64ManagedRegister::FromCpuRegister(dst.AsRegister()), SET_VEX_L_128, SET_VEX_PP_NONE); @@ -4006,12 +4006,12 @@ void X86_64Assembler::blsmsk(CpuRegister dst, CpuRegister src) { void X86_64Assembler::blsr(CpuRegister dst, CpuRegister src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - uint8_t byte_zero = EmitVexPrefixByteZero(/**is_two_byte= */false); - uint8_t byte_one = EmitVexPrefixByteOne(/**R = */false, - /**X = */false, + uint8_t byte_zero = EmitVexPrefixByteZero(/*is_twobyte_form=*/false); + uint8_t byte_one = EmitVexPrefixByteOne(/*R=*/ false, + /*X=*/ false, src.NeedsRex(), SET_VEX_M_0F_38); - uint8_t byte_two = EmitVexPrefixByteTwo(/**W= */true, + uint8_t byte_two = EmitVexPrefixByteTwo(/*W=*/ true, X86_64ManagedRegister::FromCpuRegister(dst.AsRegister()), SET_VEX_L_128, SET_VEX_PP_NONE); diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc index 297246e9cf..411c30bf84 100644 --- a/compiler/utils/x86_64/assembler_x86_64_test.cc +++ b/compiler/utils/x86_64/assembler_x86_64_test.cc @@ -1123,6 +1123,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovaps) { DriverStr(RepeatFF(&x86_64::X86_64Assembler::vmovaps, "vmovaps %{reg2}, %{reg1}"), "vmovaps"); } +TEST_F(AssemblerX86_64AVXTest, Movaps) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::movaps, "vmovaps %{reg2}, %{reg1}"), "avx_movaps"); +} + TEST_F(AssemblerX86_64Test, MovapsStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::movaps, "movaps %{reg}, {mem}"), "movaps_s"); } @@ -1131,6 +1135,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovapsStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::vmovaps, "vmovaps %{reg}, {mem}"), "vmovaps_s"); } +TEST_F(AssemblerX86_64AVXTest, MovapsStore) { + DriverStr(RepeatAF(&x86_64::X86_64Assembler::movaps, "vmovaps %{reg}, {mem}"), "avx_movaps_s"); +} + TEST_F(AssemblerX86_64Test, MovapsLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::movaps, "movaps {mem}, %{reg}"), "movaps_l"); } @@ -1139,6 +1147,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovapsLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::vmovaps, "vmovaps {mem}, %{reg}"), "vmovaps_l"); } +TEST_F(AssemblerX86_64AVXTest, MovapsLoad) { + DriverStr(RepeatFA(&x86_64::X86_64Assembler::movaps, "vmovaps {mem}, %{reg}"), "avx_movaps_l"); +} + TEST_F(AssemblerX86_64Test, MovupsStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::movups, "movups %{reg}, {mem}"), "movups_s"); } @@ -1147,6 +1159,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovupsStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::vmovups, "vmovups %{reg}, {mem}"), "vmovups_s"); } +TEST_F(AssemblerX86_64AVXTest, MovupsStore) { + DriverStr(RepeatAF(&x86_64::X86_64Assembler::movups, "vmovups %{reg}, {mem}"), "avx_movups_s"); +} + TEST_F(AssemblerX86_64Test, MovupsLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::movups, "movups {mem}, %{reg}"), "movups_l"); } @@ -1155,6 +1171,9 @@ TEST_F(AssemblerX86_64AVXTest, VMovupsLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::vmovups, "vmovups {mem}, %{reg}"), "vmovups_l"); } +TEST_F(AssemblerX86_64AVXTest, MovupsLoad) { + DriverStr(RepeatFA(&x86_64::X86_64Assembler::movups, "vmovups {mem}, %{reg}"), "avx_movups_l"); +} TEST_F(AssemblerX86_64Test, Movss) { DriverStr(RepeatFF(&x86_64::X86_64Assembler::movss, "movss %{reg2}, %{reg1}"), "movss"); @@ -1168,6 +1187,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovapd) { DriverStr(RepeatFF(&x86_64::X86_64Assembler::vmovapd, "vmovapd %{reg2}, %{reg1}"), "vmovapd"); } +TEST_F(AssemblerX86_64AVXTest, Movapd) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::movapd, "vmovapd %{reg2}, %{reg1}"), "avx_movapd"); +} + TEST_F(AssemblerX86_64Test, MovapdStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::movapd, "movapd %{reg}, {mem}"), "movapd_s"); } @@ -1176,6 +1199,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovapdStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::vmovapd, "vmovapd %{reg}, {mem}"), "vmovapd_s"); } +TEST_F(AssemblerX86_64AVXTest, MovapdStore) { + DriverStr(RepeatAF(&x86_64::X86_64Assembler::movapd, "vmovapd %{reg}, {mem}"), "avx_movapd_s"); +} + TEST_F(AssemblerX86_64Test, MovapdLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::movapd, "movapd {mem}, %{reg}"), "movapd_l"); } @@ -1184,6 +1211,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovapdLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::vmovapd, "vmovapd {mem}, %{reg}"), "vmovapd_l"); } +TEST_F(AssemblerX86_64AVXTest, MovapdLoad) { + DriverStr(RepeatFA(&x86_64::X86_64Assembler::movapd, "vmovapd {mem}, %{reg}"), "avx_movapd_l"); +} + TEST_F(AssemblerX86_64Test, MovupdStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::movupd, "movupd %{reg}, {mem}"), "movupd_s"); } @@ -1192,6 +1223,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovupdStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::vmovupd, "vmovupd %{reg}, {mem}"), "vmovupd_s"); } +TEST_F(AssemblerX86_64AVXTest, MovupdStore) { + DriverStr(RepeatAF(&x86_64::X86_64Assembler::movupd, "vmovupd %{reg}, {mem}"), "avx_movupd_s"); +} + TEST_F(AssemblerX86_64Test, MovupdLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::movupd, "movupd {mem}, %{reg}"), "movupd_l"); } @@ -1200,6 +1235,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovupdLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::vmovupd, "vmovupd {mem}, %{reg}"), "vmovupd_l"); } +TEST_F(AssemblerX86_64AVXTest, MovupdLoad) { + DriverStr(RepeatFA(&x86_64::X86_64Assembler::movupd, "vmovupd {mem}, %{reg}"), "avx_movupd_l"); +} + TEST_F(AssemblerX86_64Test, Movsd) { DriverStr(RepeatFF(&x86_64::X86_64Assembler::movsd, "movsd %{reg2}, %{reg1}"), "movsd"); } @@ -1212,6 +1251,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovdqa) { DriverStr(RepeatFF(&x86_64::X86_64Assembler::vmovdqa, "vmovdqa %{reg2}, %{reg1}"), "vmovdqa"); } +TEST_F(AssemblerX86_64AVXTest, Movdqa) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::movdqa, "vmovdqa %{reg2}, %{reg1}"), "avx_movdqa"); +} + TEST_F(AssemblerX86_64Test, MovdqaStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::movdqa, "movdqa %{reg}, {mem}"), "movdqa_s"); } @@ -1220,6 +1263,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovdqaStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::vmovdqa, "vmovdqa %{reg}, {mem}"), "vmovdqa_s"); } +TEST_F(AssemblerX86_64AVXTest, MovdqaStore) { + DriverStr(RepeatAF(&x86_64::X86_64Assembler::movdqa, "vmovdqa %{reg}, {mem}"), "avx_movdqa_s"); +} + TEST_F(AssemblerX86_64Test, MovdqaLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::movdqa, "movdqa {mem}, %{reg}"), "movdqa_l"); } @@ -1228,6 +1275,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovdqaLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::vmovdqa, "vmovdqa {mem}, %{reg}"), "vmovdqa_l"); } +TEST_F(AssemblerX86_64AVXTest, MovdqaLoad) { + DriverStr(RepeatFA(&x86_64::X86_64Assembler::movdqa, "vmovdqa {mem}, %{reg}"), "avx_movdqa_l"); +} + TEST_F(AssemblerX86_64Test, MovdquStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::movdqu, "movdqu %{reg}, {mem}"), "movdqu_s"); } @@ -1236,6 +1287,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovdquStore) { DriverStr(RepeatAF(&x86_64::X86_64Assembler::vmovdqu, "vmovdqu %{reg}, {mem}"), "vmovdqu_s"); } +TEST_F(AssemblerX86_64AVXTest, MovdquStore) { + DriverStr(RepeatAF(&x86_64::X86_64Assembler::movdqu, "vmovdqu %{reg}, {mem}"), "avx_movdqu_s"); +} + TEST_F(AssemblerX86_64Test, MovdquLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::movdqu, "movdqu {mem}, %{reg}"), "movdqu_l"); } @@ -1244,6 +1299,10 @@ TEST_F(AssemblerX86_64AVXTest, VMovdquLoad) { DriverStr(RepeatFA(&x86_64::X86_64Assembler::vmovdqu, "vmovdqu {mem}, %{reg}"), "vmovdqu_l"); } +TEST_F(AssemblerX86_64AVXTest, MovdquLoad) { + DriverStr(RepeatFA(&x86_64::X86_64Assembler::movdqu, "vmovdqu {mem}, %{reg}"), "avx_movdqu_l"); +} + TEST_F(AssemblerX86_64Test, Movd1) { DriverStr(RepeatFR(&x86_64::X86_64Assembler::movd, "movd %{reg2}, %{reg1}"), "movd.1"); } |