Index: src/compiler/arm/instruction-selector-arm.cc |
diff --git a/src/compiler/arm/instruction-selector-arm.cc b/src/compiler/arm/instruction-selector-arm.cc |
index 6ec86bd6413d9c3e3ff04b6d5877e97218f4a0f3..85969716015f4b3e4bfef64478ab53256823c41b 100644 |
--- a/src/compiler/arm/instruction-selector-arm.cc |
+++ b/src/compiler/arm/instruction-selector-arm.cc |
@@ -55,6 +55,8 @@ class ArmOperandGenerator V8_FINAL : public OperandGenerator { |
case kArmRsb: |
return ImmediateFitsAddrMode1Instruction(value); |
+ case kArmVldr32: |
+ case kArmVstr32: |
case kArmVldr64: |
case kArmVstr64: |
return value >= -1020 && value <= 1020 && (value % 4) == 0; |
@@ -294,12 +296,15 @@ void InstructionSelector::VisitLoad(Node* node) { |
Node* base = node->InputAt(0); |
Node* index = node->InputAt(1); |
- InstructionOperand* result = rep == kRepFloat64 |
+ InstructionOperand* result = (rep == kRepFloat32 || rep == kRepFloat64) |
? g.DefineAsDoubleRegister(node) |
: g.DefineAsRegister(node); |
ArchOpcode opcode; |
switch (rep) { |
+ case kRepFloat32: |
+ opcode = kArmVldr32; |
+ break; |
case kRepFloat64: |
opcode = kArmVldr64; |
break; |
@@ -349,11 +354,15 @@ void InstructionSelector::VisitStore(Node* node) { |
return; |
} |
DCHECK_EQ(kNoWriteBarrier, store_rep.write_barrier_kind); |
- InstructionOperand* val = |
- rep == kRepFloat64 ? g.UseDoubleRegister(value) : g.UseRegister(value); |
+ InstructionOperand* val = (rep == kRepFloat32 || rep == kRepFloat64) |
+ ? g.UseDoubleRegister(value) |
+ : g.UseRegister(value); |
ArchOpcode opcode; |
switch (rep) { |
+ case kRepFloat32: |
+ opcode = kArmVstr32; |
+ break; |
case kRepFloat64: |
opcode = kArmVstr64; |
break; |