summaryrefslogtreecommitdiff
path: root/compiler/utils/x86/assembler_x86.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/utils/x86/assembler_x86.cc')
-rw-r--r--compiler/utils/x86/assembler_x86.cc37
1 files changed, 37 insertions, 0 deletions
diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc
index b6708de81c..4b64e92136 100644
--- a/compiler/utils/x86/assembler_x86.cc
+++ b/compiler/utils/x86/assembler_x86.cc
@@ -783,6 +783,43 @@ void X86Assembler::vdivps(XmmRegister dst, XmmRegister src1, XmmRegister src2) {
EmitXmmRegisterOperand(dst, src2);
}
+void X86Assembler::vfmadd213ss(XmmRegister acc, XmmRegister left, XmmRegister right) {
+ DCHECK(CpuHasAVXorAVX2FeatureFlag());
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ uint8_t ByteZero = 0x00, ByteOne = 0x00, ByteTwo = 0x00;
+ ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false);
+ X86ManagedRegister vvvv_reg = X86ManagedRegister::FromXmmRegister(left);
+ ByteOne = EmitVexPrefixByteOne(/*R=*/ false,
+ /*X=*/ false,
+ /*B=*/ false,
+ SET_VEX_M_0F_38);
+ ByteTwo = EmitVexPrefixByteTwo(/*W=*/ false, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66);
+
+ EmitUint8(ByteZero);
+ EmitUint8(ByteOne);
+ EmitUint8(ByteTwo);
+ EmitUint8(0xA9);
+ EmitXmmRegisterOperand(acc, right);
+}
+
+void X86Assembler::vfmadd213sd(XmmRegister acc, XmmRegister left, XmmRegister right) {
+ DCHECK(CpuHasAVXorAVX2FeatureFlag());
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ uint8_t ByteZero = 0x00, ByteOne = 0x00, ByteTwo = 0x00;
+ ByteZero = EmitVexPrefixByteZero(/*is_twobyte_form=*/ false);
+ X86ManagedRegister vvvv_reg = X86ManagedRegister::FromXmmRegister(left);
+ ByteOne = EmitVexPrefixByteOne(/*R=*/ false,
+ /*X=*/ false,
+ /*B=*/ false,
+ SET_VEX_M_0F_38);
+ ByteTwo = EmitVexPrefixByteTwo(/*W=*/ true, vvvv_reg, SET_VEX_L_128, SET_VEX_PP_66);
+
+ EmitUint8(ByteZero);
+ EmitUint8(ByteOne);
+ EmitUint8(ByteTwo);
+ EmitUint8(0xA9);
+ EmitXmmRegisterOperand(acc, right);
+}
void X86Assembler::movapd(XmmRegister dst, XmmRegister src) {
if (CpuHasAVXorAVX2FeatureFlag()) {