Index: src/compiler/arm64/code-generator-arm64.cc |
diff --git a/src/compiler/arm64/code-generator-arm64.cc b/src/compiler/arm64/code-generator-arm64.cc |
index b3c7230807935956e4ad64ef3a763a9d94180d78..0f19cbddfff3c5fe5d51954818d80e6f89d0cef8 100644 |
--- a/src/compiler/arm64/code-generator-arm64.cc |
+++ b/src/compiler/arm64/code-generator-arm64.cc |
@@ -693,6 +693,29 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
case kArm64Uint32ToFloat64: |
__ Ucvtf(i.OutputDoubleRegister(), i.InputRegister32(0)); |
break; |
+ case kArm64Float64ExtractLowWord32: |
+ __ Fmov(i.OutputRegister32(), i.InputFloat32Register(0)); |
+ break; |
+ case kArm64Float64ExtractHighWord32: |
+ __ Fmov(i.OutputRegister(), i.InputFloat64Register(0)); |
+ __ Lsr(i.OutputRegister(), i.OutputRegister(), 32); |
+ break; |
+ case kArm64Float64InsertLowWord32: { |
+ UseScratchRegisterScope scope(masm()); |
+ Register tmp = scope.AcquireX(); |
+ __ Fmov(tmp, i.InputFloat64Register(0)); |
+ __ Bfi(tmp, i.InputRegister(1), 0, 32); |
+ __ Fmov(i.OutputFloat64Register(), tmp); |
+ break; |
+ } |
+ case kArm64Float64InsertHighWord32: { |
+ UseScratchRegisterScope scope(masm()); |
+ Register tmp = scope.AcquireX(); |
+ __ Fmov(tmp.W(), i.InputFloat32Register(0)); |
+ __ Bfi(tmp, i.InputRegister(1), 32, 32); |
+ __ Fmov(i.OutputFloat64Register(), tmp); |
+ break; |
+ } |
case kArm64Ldrb: |
__ Ldrb(i.OutputRegister(), i.MemoryOperand()); |
break; |