| Index: src/compiler/ia32/code-generator-ia32.cc
|
| diff --git a/src/compiler/ia32/code-generator-ia32.cc b/src/compiler/ia32/code-generator-ia32.cc
|
| index 316333ba89aa481830499c5e0b3df95c6d5c4308..1d29372115d31c89dc482af74b297adbbf9776bc 100644
|
| --- a/src/compiler/ia32/code-generator-ia32.cc
|
| +++ b/src/compiler/ia32/code-generator-ia32.cc
|
| @@ -450,6 +450,30 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| case kIA32Lzcnt:
|
| __ Lzcnt(i.OutputRegister(), i.InputOperand(0));
|
| break;
|
| + case kSSEFloat32Cmp:
|
| + __ ucomiss(i.InputDoubleRegister(0), i.InputOperand(1));
|
| + break;
|
| + case kSSEFloat32Add:
|
| + __ addss(i.InputDoubleRegister(0), i.InputOperand(1));
|
| + break;
|
| + case kSSEFloat32Sub:
|
| + __ subss(i.InputDoubleRegister(0), i.InputOperand(1));
|
| + break;
|
| + case kSSEFloat32Mul:
|
| + __ mulss(i.InputDoubleRegister(0), i.InputOperand(1));
|
| + break;
|
| + case kSSEFloat32Div:
|
| + __ divss(i.InputDoubleRegister(0), i.InputOperand(1));
|
| + break;
|
| + case kSSEFloat32Max:
|
| + __ maxss(i.InputDoubleRegister(0), i.InputOperand(1));
|
| + break;
|
| + case kSSEFloat32Min:
|
| + __ minss(i.InputDoubleRegister(0), i.InputOperand(1));
|
| + break;
|
| + case kSSEFloat32Sqrt:
|
| + __ sqrtss(i.OutputDoubleRegister(), i.InputOperand(0));
|
| + break;
|
| case kSSEFloat64Cmp:
|
| __ ucomisd(i.InputDoubleRegister(0), i.InputOperand(1));
|
| break;
|
| @@ -506,10 +530,10 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| __ roundsd(i.OutputDoubleRegister(), i.InputDoubleRegister(0), mode);
|
| break;
|
| }
|
| - case kSSECvtss2sd:
|
| + case kSSEFloat32ToFloat64:
|
| __ cvtss2sd(i.OutputDoubleRegister(), i.InputOperand(0));
|
| break;
|
| - case kSSECvtsd2ss:
|
| + case kSSEFloat64ToFloat32:
|
| __ cvtsd2ss(i.OutputDoubleRegister(), i.InputOperand(0));
|
| break;
|
| case kSSEFloat64ToInt32:
|
| @@ -552,6 +576,42 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| case kSSEFloat64LoadLowWord32:
|
| __ movd(i.OutputDoubleRegister(), i.InputOperand(0));
|
| break;
|
| + case kAVXFloat32Add: {
|
| + CpuFeatureScope avx_scope(masm(), AVX);
|
| + __ vaddss(i.OutputDoubleRegister(), i.InputDoubleRegister(0),
|
| + i.InputOperand(1));
|
| + break;
|
| + }
|
| + case kAVXFloat32Sub: {
|
| + CpuFeatureScope avx_scope(masm(), AVX);
|
| + __ vsubss(i.OutputDoubleRegister(), i.InputDoubleRegister(0),
|
| + i.InputOperand(1));
|
| + break;
|
| + }
|
| + case kAVXFloat32Mul: {
|
| + CpuFeatureScope avx_scope(masm(), AVX);
|
| + __ vmulss(i.OutputDoubleRegister(), i.InputDoubleRegister(0),
|
| + i.InputOperand(1));
|
| + break;
|
| + }
|
| + case kAVXFloat32Div: {
|
| + CpuFeatureScope avx_scope(masm(), AVX);
|
| + __ vdivss(i.OutputDoubleRegister(), i.InputDoubleRegister(0),
|
| + i.InputOperand(1));
|
| + break;
|
| + }
|
| + case kAVXFloat32Max: {
|
| + CpuFeatureScope avx_scope(masm(), AVX);
|
| + __ vmaxss(i.OutputDoubleRegister(), i.InputDoubleRegister(0),
|
| + i.InputOperand(1));
|
| + break;
|
| + }
|
| + case kAVXFloat32Min: {
|
| + CpuFeatureScope avx_scope(masm(), AVX);
|
| + __ vminss(i.OutputDoubleRegister(), i.InputDoubleRegister(0),
|
| + i.InputOperand(1));
|
| + break;
|
| + }
|
| case kAVXFloat64Add: {
|
| CpuFeatureScope avx_scope(masm(), AVX);
|
| __ vaddsd(i.OutputDoubleRegister(), i.InputDoubleRegister(0),
|
| @@ -747,7 +807,7 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| break;
|
| }
|
| }
|
| -}
|
| +} // NOLINT(readability/fn_size)
|
|
|
|
|
| // Assembles a branch after an instruction.
|
|
|