Fixed bug in calculation of use/def classes. Still not tested.
[jitcs.git] / include / jitcs_callingconvention.h
blobfc1581314753107e4c840c7a15095a5398e13293
1 //===-- jitcs_callconv.h - --------------------------------------*- C++ -*-===//
2 //
3 //
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"
15 #include <memory>
17 namespace jitcs {
18 class MachineDumper;
19 class IMachineInfo;
20 struct VirtualRegister;
22 enum CallerCalleeStrategyId {
23 CCS_Scratch,
24 CCS_ByCaller,
25 CCS_ByCallee,
28 class CallingConvention {
29 public:
30 CallingConvention() = default;
31 virtual ~CallingConvention() = default;
33 public:
34 void dump(MachineDumper&) const;
36 public:
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;
53 public:
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
68 #endif
69 // _JITCS_CALLINGCONVENTION_H_