aboutsummaryrefslogtreecommitdiff
path: root/vm/compiler/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'vm/compiler/codegen')
-rw-r--r--vm/compiler/codegen/arm/Thumb2/Factory.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/vm/compiler/codegen/arm/Thumb2/Factory.c b/vm/compiler/codegen/arm/Thumb2/Factory.c
index 0141a0fec..360b2c183 100644
--- a/vm/compiler/codegen/arm/Thumb2/Factory.c
+++ b/vm/compiler/codegen/arm/Thumb2/Factory.c
@@ -751,9 +751,15 @@ static ArmLIR *storeBaseIndexed(CompilationUnit *cUnit, int rBase,
if (FPREG(rSrc)) {
assert(SINGLEREG(rSrc));
- assert((size == kWord) || (size == kSingle));
- opCode = kThumb2Vstrs;
- size = kSingle;
+ if ((size != kWord) && (size != kSingle)) {
+ /* Move float value into core register */
+ int tReg = dvmCompilerAllocTemp(cUnit);
+ dvmCompilerRegCopy(cUnit, tReg, rSrc);
+ rSrc = tReg;
+ } else {
+ opCode = kThumb2Vstrs;
+ size = kSingle;
+ }
} else {
if (size == kSingle)
size = kWord;