| Index: src/IceInstARM32.cpp
|
| diff --git a/src/IceInstARM32.cpp b/src/IceInstARM32.cpp
|
| index 7f04c199340cd9e70f3d17f6b530ce45e9b4df8a..d6d6f63bbb369e7df058c0dbc98ed326a829ffb7 100644
|
| --- a/src/IceInstARM32.cpp
|
| +++ b/src/IceInstARM32.cpp
|
| @@ -847,6 +847,11 @@ void InstARM32Label::dump(const Cfg *Func) const {
|
| Str << getName(Func) << ":";
|
| }
|
|
|
| +template <InstARM32::InstKindARM32 K>
|
| +void InstARM32LoadBase<K>::emitIAS(const Cfg *Func) const {
|
| + emitUsingTextFixup(Func);
|
| +}
|
| +
|
| template <> void InstARM32Ldr::emit(const Cfg *Func) const {
|
| if (!BuildDefs::dump())
|
| return;
|
| @@ -868,6 +873,20 @@ template <> void InstARM32Ldr::emit(const Cfg *Func) const {
|
| getSrc(0)->emit(Func);
|
| }
|
|
|
| +template <> void InstARM32Ldr::emitIAS(const Cfg *Func) const {
|
| + assert(getSrcSize() == 1);
|
| + Variable *Dest = getDest();
|
| + Type DestTy = Dest->getType();
|
| + ARM32::AssemblerARM32 *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
|
| + if (isVectorType(DestTy) || isScalarFloatingType(DestTy))
|
| + // TODO(kschimpf) Handle case.
|
| + Asm->setNeedsTextFixup();
|
| + else
|
| + Asm->ldr(Dest, getSrc(0), getPredicate());
|
| + if (Asm->needsTextFixup())
|
| + emitUsingTextFixup(Func);
|
| +}
|
| +
|
| template <> void InstARM32Ldrex::emit(const Cfg *Func) const {
|
| if (!BuildDefs::dump())
|
| return;
|
| @@ -1097,6 +1116,19 @@ void InstARM32Str::emit(const Cfg *Func) const {
|
| getSrc(1)->emit(Func);
|
| }
|
|
|
| +void InstARM32Str::emitIAS(const Cfg *Func) const {
|
| + assert(getSrcSize() == 2);
|
| + Type Ty = getSrc(0)->getType();
|
| + ARM32::AssemblerARM32 *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
|
| + if (isVectorType(Ty) || isScalarFloatingType(Ty))
|
| + // TODO(kschimpf) Handle case.
|
| + Asm->setNeedsTextFixup();
|
| + else
|
| + Asm->str(getSrc(0), getSrc(1), getPredicate());
|
| + if (Asm->needsTextFixup())
|
| + emitUsingTextFixup(Func);
|
| +}
|
| +
|
| void InstARM32Str::dump(const Cfg *Func) const {
|
| if (!BuildDefs::dump())
|
| return;
|
| @@ -1460,6 +1492,9 @@ template class InstARM32ThreeAddrFP<InstARM32::Vdiv>;
|
| template class InstARM32ThreeAddrFP<InstARM32::Vmul>;
|
| template class InstARM32ThreeAddrFP<InstARM32::Vsub>;
|
|
|
| +template class InstARM32LoadBase<InstARM32::Ldr>;
|
| +template class InstARM32LoadBase<InstARM32::Ldrex>;
|
| +
|
| template class InstARM32TwoAddrGPR<InstARM32::Movt>;
|
|
|
| } // end of namespace Ice
|
|
|