9 #include <llvm/ADT/ArrayRef.h>
10 #include <llvm/ADT/iterator_range.h>
11 #include <llvm/MC/MCRegister.h>
13 #include "core/inst.h"
14 #include "emitter/call_lowering.h"
34 PPCCall(
const ReturnInst *inst);
38 PPCCall(
const LandingPadInst *inst);
43 llvm::ArrayRef<llvm::MCPhysReg>
GetUsedGPRs()
const;
47 llvm::ArrayRef<llvm::MCPhysReg>
GetUsedFPRs()
const;
51 if (hasStackArgs_ || isVarArg_) {
52 return std::max<unsigned>(stack_, 32 + 8 * 8);
60 void AssignArgC(
unsigned i,
FlaggedType type)
override;
62 void AssignArgOCaml(
unsigned i,
FlaggedType type)
override;
64 void AssignArgOCamlAlloc(
unsigned i,
FlaggedType type)
override
66 return AssignArgOCaml(i, type);
69 void AssignArgOCamlGc(
unsigned i,
FlaggedType type)
override
71 return AssignArgOCaml(i, type);
74 void AssignArgXen(
unsigned i,
FlaggedType type)
override;
76 void AssignArgWin64(
unsigned i,
FlaggedType type)
override;
79 void AssignRetC(
unsigned i,
FlaggedType type)
override;
81 void AssignRetOCaml(
unsigned i,
FlaggedType type)
override;
83 void AssignRetOCamlAlloc(
unsigned i,
FlaggedType type)
override
85 return AssignRetOCaml(i, type);
88 void AssignRetOCamlGc(
unsigned i,
FlaggedType type)
override
90 return AssignRetOCaml(i, type);
93 void AssignRetXen(
unsigned i,
FlaggedType type)
override;
96 void AssignArgReg(ArgLoc &loc, llvm::MVT vt, llvm::Register reg);
98 void AssignArgStack(ArgLoc &loc, llvm::MVT type,
unsigned size);
100 void AssignRetReg(RetLoc &loc, llvm::MVT vt, llvm::Register reg);
102 void AssignRetWin64(
unsigned i,
FlaggedType type)
override;
105 llvm::ArrayRef<llvm::MCPhysReg> GetGPRs()
const;
107 llvm::ArrayRef<llvm::MCPhysReg> GetFPRs()
const;
110 bool HasStackArgs()
const {
return hasStackArgs_; }
122 unsigned stack_ = 4 * 8;
124 bool hasStackArgs_ =
false;
126 bool isVarArg_ =
false;