diff options
Diffstat (limited to 'vm/compiler/codegen')
| -rw-r--r-- | vm/compiler/codegen/arm/Thumb2/Factory.c | 12 |
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; |
