diff options
| author | gingerBill <bill@gingerbill.org> | 2020-02-05 23:41:10 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-02-05 23:41:10 +0000 |
| commit | 09e1cf0737e9fd950ca63f94fe3d9da62ef48ef9 (patch) | |
| tree | f4bbab550522ca8b56a8403e3eecbb2763a0a893 /src/llvm_backend.hpp | |
| parent | 992858b687d9ff53b53239864114ff7ece22449d (diff) | |
IfStmt
Diffstat (limited to 'src/llvm_backend.hpp')
| -rw-r--r-- | src/llvm_backend.hpp | 150 |
1 files changed, 85 insertions, 65 deletions
diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 3046ebfea..0dfd14163 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -85,71 +85,37 @@ struct lbBranchBlocks { lbBlock *continue_; }; -enum lbCallingConventionKind { - lbCallingConvention_C = 0, - lbCallingConvention_Fast = 8, - lbCallingConvention_Cold = 9, - lbCallingConvention_GHC = 10, - lbCallingConvention_HiPE = 11, - lbCallingConvention_WebKit_JS = 12, - lbCallingConvention_AnyReg = 13, - lbCallingConvention_PreserveMost = 14, - lbCallingConvention_PreserveAll = 15, - lbCallingConvention_Swift = 16, - lbCallingConvention_CXX_FAST_TLS = 17, - lbCallingConvention_FirstTargetCC = 64, - lbCallingConvention_X86_StdCall = 64, - lbCallingConvention_X86_FastCall = 65, - lbCallingConvention_ARM_APCS = 66, - lbCallingConvention_ARM_AAPCS = 67, - lbCallingConvention_ARM_AAPCS_VFP = 68, - lbCallingConvention_MSP430_INTR = 69, - lbCallingConvention_X86_ThisCall = 70, - lbCallingConvention_PTX_Kernel = 71, - lbCallingConvention_PTX_Device = 72, - lbCallingConvention_SPIR_FUNC = 75, - lbCallingConvention_SPIR_KERNEL = 76, - lbCallingConvention_Intel_OCL_BI = 77, - lbCallingConvention_X86_64_SysV = 78, - lbCallingConvention_Win64 = 79, - lbCallingConvention_X86_VectorCall = 80, - lbCallingConvention_HHVM = 81, - lbCallingConvention_HHVM_C = 82, - lbCallingConvention_X86_INTR = 83, - lbCallingConvention_AVR_INTR = 84, - lbCallingConvention_AVR_SIGNAL = 85, - lbCallingConvention_AVR_BUILTIN = 86, - lbCallingConvention_AMDGPU_VS = 87, - lbCallingConvention_AMDGPU_GS = 88, - lbCallingConvention_AMDGPU_PS = 89, - lbCallingConvention_AMDGPU_CS = 90, - lbCallingConvention_AMDGPU_KERNEL = 91, - lbCallingConvention_X86_RegCall = 92, - lbCallingConvention_AMDGPU_HS = 93, - lbCallingConvention_MSP430_BUILTIN = 94, - lbCallingConvention_AMDGPU_LS = 95, - lbCallingConvention_AMDGPU_ES = 96, - lbCallingConvention_AArch64_VectorCall = 97, - lbCallingConvention_MaxID = 1023, + +struct lbContextData { + lbAddr ctx; + isize scope_index; }; -lbCallingConventionKind const lb_calling_convention_map[ProcCC_MAX] = { - lbCallingConvention_C, // ProcCC_Invalid, - lbCallingConvention_C, // ProcCC_Odin, - lbCallingConvention_C, // ProcCC_Contextless, - lbCallingConvention_C, // ProcCC_CDecl, - lbCallingConvention_X86_StdCall, // ProcCC_StdCall, - lbCallingConvention_X86_FastCall, // ProcCC_FastCall, +enum lbParamPasskind { + lbParamPass_Value, // Pass by value + lbParamPass_Pointer, // Pass as a pointer rather than by value + lbParamPass_Integer, // Pass as an integer of the same size + lbParamPass_ConstRef, // Pass as a pointer but the value is immutable + lbParamPass_BitCast, // Pass by value and bit cast to the correct type + lbParamPass_Tuple, // Pass across multiple parameters (System V AMD64, up to 2) +}; - lbCallingConvention_C, // ProcCC_None, +enum lbDeferExitKind { + lbDeferExit_Default, + lbDeferExit_Return, + lbDeferExit_Branch, }; -struct lbContextData { - lbAddr ctx; - isize scope_index; +struct lbTargetList { + lbTargetList *prev; + bool is_block; + lbBlock * break_; + lbBlock * continue_; + lbBlock * fallthrough_; }; + struct lbProcedure { lbProcedure *parent; Array<lbProcedure> children; @@ -179,6 +145,7 @@ struct lbProcedure { lbBlock * decl_block; lbBlock * entry_block; lbBlock * curr_block; + lbTargetList * target_list; Array<lbContextData> context_stack; @@ -187,14 +154,7 @@ struct lbProcedure { bool return_ptr_hint_used; }; -enum lbParamPasskind { - lbParamPass_Value, // Pass by value - lbParamPass_Pointer, // Pass as a pointer rather than by value - lbParamPass_Integer, // Pass as an integer of the same size - lbParamPass_ConstRef, // Pass as a pointer but the value is immutable - lbParamPass_BitCast, // Pass by value and bit cast to the correct type - lbParamPass_Tuple, // Pass across multiple parameters (System V AMD64, up to 2) -}; + @@ -251,3 +211,63 @@ lbAddr lb_add_global_generated(lbModule *m, Type *type, lbValue value={}); lbAddr lb_add_local(lbProcedure *p, Type *type, Entity *e=nullptr, bool zero_init=true, i32 param_index=0); lbValue lb_emit_transmute(lbProcedure *p, lbValue value, Type *t); + + +enum lbCallingConventionKind { + lbCallingConvention_C = 0, + lbCallingConvention_Fast = 8, + lbCallingConvention_Cold = 9, + lbCallingConvention_GHC = 10, + lbCallingConvention_HiPE = 11, + lbCallingConvention_WebKit_JS = 12, + lbCallingConvention_AnyReg = 13, + lbCallingConvention_PreserveMost = 14, + lbCallingConvention_PreserveAll = 15, + lbCallingConvention_Swift = 16, + lbCallingConvention_CXX_FAST_TLS = 17, + lbCallingConvention_FirstTargetCC = 64, + lbCallingConvention_X86_StdCall = 64, + lbCallingConvention_X86_FastCall = 65, + lbCallingConvention_ARM_APCS = 66, + lbCallingConvention_ARM_AAPCS = 67, + lbCallingConvention_ARM_AAPCS_VFP = 68, + lbCallingConvention_MSP430_INTR = 69, + lbCallingConvention_X86_ThisCall = 70, + lbCallingConvention_PTX_Kernel = 71, + lbCallingConvention_PTX_Device = 72, + lbCallingConvention_SPIR_FUNC = 75, + lbCallingConvention_SPIR_KERNEL = 76, + lbCallingConvention_Intel_OCL_BI = 77, + lbCallingConvention_X86_64_SysV = 78, + lbCallingConvention_Win64 = 79, + lbCallingConvention_X86_VectorCall = 80, + lbCallingConvention_HHVM = 81, + lbCallingConvention_HHVM_C = 82, + lbCallingConvention_X86_INTR = 83, + lbCallingConvention_AVR_INTR = 84, + lbCallingConvention_AVR_SIGNAL = 85, + lbCallingConvention_AVR_BUILTIN = 86, + lbCallingConvention_AMDGPU_VS = 87, + lbCallingConvention_AMDGPU_GS = 88, + lbCallingConvention_AMDGPU_PS = 89, + lbCallingConvention_AMDGPU_CS = 90, + lbCallingConvention_AMDGPU_KERNEL = 91, + lbCallingConvention_X86_RegCall = 92, + lbCallingConvention_AMDGPU_HS = 93, + lbCallingConvention_MSP430_BUILTIN = 94, + lbCallingConvention_AMDGPU_LS = 95, + lbCallingConvention_AMDGPU_ES = 96, + lbCallingConvention_AArch64_VectorCall = 97, + lbCallingConvention_MaxID = 1023, +}; + +lbCallingConventionKind const lb_calling_convention_map[ProcCC_MAX] = { + lbCallingConvention_C, // ProcCC_Invalid, + lbCallingConvention_C, // ProcCC_Odin, + lbCallingConvention_C, // ProcCC_Contextless, + lbCallingConvention_C, // ProcCC_CDecl, + lbCallingConvention_X86_StdCall, // ProcCC_StdCall, + lbCallingConvention_X86_FastCall, // ProcCC_FastCall, + + lbCallingConvention_C, // ProcCC_None, +}; |