Index: src/IceTargetLoweringARM32.h |
diff --git a/src/IceTargetLoweringARM32.h b/src/IceTargetLoweringARM32.h |
index 019a3e0831cf37276cc40bb8ed1f0025c86af44e..fd96e49c367219132e980db3873710f68b58df77 100644 |
--- a/src/IceTargetLoweringARM32.h |
+++ b/src/IceTargetLoweringARM32.h |
@@ -52,6 +52,9 @@ public: |
// i8, and i16 are rounded up to 4 bytes. |
return (typeWidthInBytes(Ty) + 3) & ~3; |
} |
+ size_t minStackSlotSizeLog2() const final { return 2; } |
+ size_t maxStackSlotSizeLog2() const final { return 4; } |
+ |
void emitVariable(const Variable *Var) const override; |
const char *getConstantPrefix() const final { return "#"; } |
@@ -71,6 +74,8 @@ public: |
void split64(Variable *Var); |
Operand *loOperand(Operand *Operand); |
Operand *hiOperand(Operand *Operand); |
+ void finishArgumentLowering(Variable *Arg, Variable *FramePtr, |
+ size_t BasicFrameOffset, size_t &InArgsSizeBytes); |
protected: |
explicit TargetARM32(Cfg *Func); |
@@ -219,6 +224,17 @@ protected: |
CondARM32::Cond Pred = CondARM32::AL) { |
Context.insert(InstARM32Orr::create(Func, Dest, Src0, Src1, Pred)); |
} |
+ void _push(const VarList &Sources) { |
+ Context.insert(InstARM32Push::create(Func, Sources)); |
+ } |
+ void _pop(const VarList &Dests) { |
+ Variable *First = Dests[0]; |
+ Context.insert(InstARM32Pop::create(Func, Dests)); |
+ // Mark other dests as modified. |
+ for (size_t I = 1; I < Dests.size(); ++I) { |
+ Context.insert(InstFakeDef::create(Func, Dests[I], First)); |
+ } |
+ } |
void _sbc(Variable *Dest, Variable *Src0, Operand *Src1, |
CondARM32::Cond Pred = CondARM32::AL) { |
Context.insert(InstARM32Sbc::create(Func, Dest, Src0, Src1, Pred)); |
@@ -253,6 +269,8 @@ protected: |
bool UsesFramePointer; |
bool NeedsStackAlignment; |
+ bool MaybeLeafFunc; |
+ size_t SpillAreaSizeBytes; |
llvm::SmallBitVector TypeToRegisterSet[IceType_NUM]; |
llvm::SmallBitVector ScratchRegs; |
llvm::SmallBitVector RegsUsed; |