| Index: src/IceInstARM32.cpp
|
| diff --git a/src/IceInstARM32.cpp b/src/IceInstARM32.cpp
|
| index c4d9ebc10a72bb751f177c6bde3775d9d943f48b..d84c6882088cbaf8adb9f74d72e16daa223562e4 100644
|
| --- a/src/IceInstARM32.cpp
|
| +++ b/src/IceInstARM32.cpp
|
| @@ -623,7 +623,22 @@ void InstARM32Mov::emitIASSingleDestSingleSource(const Cfg *Func) const {
|
| const bool CoreVFPMove = isMoveBetweenCoreAndVFPRegisters(Dest, Src0);
|
| if (DestIsVector || DestIsScalarFP || CoreVFPMove)
|
| break;
|
| - Asm->mov(Dest, Src0, getPredicate());
|
| + if (isMemoryAccess(Src0)) {
|
| + // TODO(kschimpf) Figure out how to do ldr on CoreVPFMove? (see
|
| + // emitSingleDestSingleSource, local variable LoadOpcode).
|
| + Asm->ldr(Dest, Src0, getPredicate());
|
| + } else {
|
| + Asm->mov(Dest, Src0, getPredicate());
|
| + }
|
| + return;
|
| + } else {
|
| + Type Src0Type = Src0->getType();
|
| + const bool Src0IsVector = isVectorType(Src0Type);
|
| + const bool Src0IsScalarFP = isScalarFloatingType(Src0Type);
|
| + const bool CoreVFPMove = isMoveBetweenCoreAndVFPRegisters(Dest, Src0);
|
| + if (Src0IsVector || Src0IsScalarFP || CoreVFPMove)
|
| + break;
|
| + Asm->str(Src0, Dest, getPredicate());
|
| return;
|
| }
|
| } while (0);
|
|
|