1 //===-- jitcs_callconv.h - --------------------------------------*- C++ -*-===//
4 //===----------------------------------------------------------------------===//
6 #ifndef _JITCS_CALLINGCONVENTION_H_
7 #define _JITCS_CALLINGCONVENTION_H_
9 #include "jitcs_adt_ref.h"
10 #include "jitcs_adt_refcounter.h"
11 #include "jitcs_adt_slice.h"
12 #include "jitcs_base.h"
13 #include "jitcs_fnctypeinfo.h"
14 #include "jitcs_spillslotinfo.h"
20 struct VirtualRegister
;
22 enum CallerCalleeStrategyId
{
28 class CallingConvention
{
30 CallingConvention() = default;
31 virtual ~CallingConvention() = default;
34 void dump(MachineDumper
&) const;
37 virtual RefCounter
<IMachineInfo
> getMachineInfo() const = 0;
38 virtual size_t getResultCount() const = 0;
39 virtual size_t getParamCount() const = 0;
40 virtual size_t getParamAreaSize() const = 0;
41 virtual SpillSlotInfo
getResultSpillSlotInfo(size_t r
) const = 0;
42 virtual RefOrNull
<const VirtualRegister
> getResultRegister(size_t r
) const = 0;
43 virtual SpillSlotInfo
getParamSpillSlotInfo(size_t p
) const = 0;
44 virtual RefOrNull
<const VirtualRegister
> getParamRegister(size_t p
) const = 0;
45 virtual size_t getRequiredStackAlignment() const = 0;
46 virtual size_t getRequiredStackAlignmentOffset() const = 0;
47 virtual CallerCalleeStrategyId
getStackCleaningStrategy() const = 0;
49 virtual FTSubType
getSubType() const = 0;
50 virtual FTTypeId
getResultType(size_t r
) const = 0;
51 virtual FTTypeId
getParamType(size_t p
) const = 0;
54 virtual void setTypeInfo(FTSubType
,Slice
<FTTypeId
> res
,Slice
<FTTypeId
> par
) = 0;
55 virtual void addResult(const VirtualRegister
*, SpillSlotInfo
) = 0;
56 virtual void addParam(const VirtualRegister
*, SpillSlotInfo
) = 0;
57 virtual void setStackAlignment(size_t align
, size_t ofs
) = 0;
58 virtual void setParamAreaSize(size_t) = 0;
59 virtual void setCleanStack(CallerCalleeStrategyId
) = 0;
60 //virtual void initSaveResource(uint resNo, CallerCalleeStrategyId) = 0;
61 //virtual void changeSaveResource(uint res, CallerCalleeStrategyId) = 0;
62 //virtual void setSaveResource(CallerCalleeStrategyId) = 0;
63 //virtual void finalize() = 0;
66 } // end of namespace jitcs
69 // _JITCS_CALLINGCONVENTION_H_