Added list of scratch & reserved registers to calling convention. The
[jitcs.git] / include / jitcs_ids.h
blob234a8d58da4e4f2a775a7d400b80bab367689cdf
1 //===-- jitcs_ids.h - ID types for instructions et al. ----------*- C++ -*-===//
2 //
3 //
4 //
5 //===----------------------------------------------------------------------===//
7 #ifndef _JITCS_IDS_H_
8 #define _JITCS_IDS_H_
10 #include "jitcs_base.h"
12 namespace jitcs {
14 enum RegId : u32 {
15 R_None = 0,
16 R_HardwareLimit = 0x1000,
18 enum ResId : u32 {
19 RES_None = ~0u,
21 enum RegClassId : u8 {
22 RCL_None = 0xff,
24 enum ResClassId : u8 {
25 RESCL_None = 0xff,
28 enum InsId : uptr {
29 I_None = 0,
30 I_Count,
31 I_CoreMax = I_Count,
34 enum BBId : uptr {
35 BB_None = 0,
38 // used in virtual register placement and memory reference
39 enum MModeEnum {
40 MMODE_Bits = 4,
41 MMODE_Mask = (1 << MMODE_Bits) - 1,
42 MMODE_FPCount = 8,
44 enum MMode {
45 MMODE_None = 0, // address undefined
46 MMODE_Base = 1, // base + scale * index + offset
47 //MMODE_Sym = 2, // symbol + offset - the symbol may be global or local(SPREL/FPREL)
48 MMODE_Global= 3, // global pointer + offset (in X64 encoded as RIP-relative)
49 MMODE_VRegSpillSlot= 4, // memory address of a VReg spill slot
50 MMODE_SPRel= 8, // stack (aka FP0) pointer + offset
51 MMODE_FP1Rel= MMODE_SPRel+1, // frame pointer 1 + offset
52 MMODE_FP2Rel= MMODE_SPRel+2, // frame pointer 2 + offset
53 MMODE_FP3Rel= MMODE_SPRel+3, // frame pointer 3 + offset
54 MMODE_FP4Rel= MMODE_SPRel+4, // frame pointer 4 + offset
55 MMODE_FP5Rel= MMODE_SPRel+5, // frame pointer 5 + offset
56 MMODE_FP6Rel= MMODE_SPRel+6, // frame pointer 6 + offset
57 MMODE_FP7Rel= MMODE_SPRel+7, // frame pointer 7 + offset
61 } // end of namespace jitcs
63 #endif
64 // _JITCS_IDS_H_