c_abi.h (1291B)
1 #ifndef KIT_LANG_C_ABI_H 2 #define KIT_LANG_C_ABI_H 3 4 #include "c_support.h" 5 #include "type/type.h" 6 7 typedef enum ABIScalarKind { 8 ABI_SC_VOID, 9 ABI_SC_BOOL, 10 ABI_SC_INT, 11 ABI_SC_FLOAT, 12 ABI_SC_PTR, 13 } ABIScalarKind; 14 15 typedef struct ABITypeInfo { 16 u32 size; 17 u32 align; 18 u8 scalar_kind; 19 u8 signed_; 20 u8 atomic; 21 u8 pad; 22 } ABITypeInfo; 23 24 typedef struct ABIFieldLayout { 25 u32 offset; 26 u16 bit_offset; 27 u16 bit_width; 28 u32 storage_size; 29 } ABIFieldLayout; 30 31 typedef struct ABIRecordLayout { 32 u32 size; 33 u32 align; 34 u32 nfields; 35 const ABIFieldLayout* fields; 36 } ABIRecordLayout; 37 38 typedef struct ABIArgInfo { 39 u8 dummy; 40 } ABIArgInfo; 41 42 typedef struct ABIFuncInfo { 43 ABIArgInfo* params; 44 u16 nparams; 45 } ABIFuncInfo; 46 47 ABITypeInfo c_abi_type_info(KitCompiler*, const Type*); 48 u32 c_abi_sizeof(KitCompiler*, const Type*); 49 u32 c_abi_alignof(KitCompiler*, const Type*); 50 const ABIRecordLayout* c_abi_record_layout(KitCompiler*, Pool*, const Type*); 51 const ABIFuncInfo* c_abi_func_info(KitCompiler*, Pool*, const Type*); 52 53 const Type* c_abi_size_type(KitCompiler*, Pool*); 54 const Type* c_abi_ptrdiff_type(KitCompiler*, Pool*); 55 const Type* c_abi_intptr_type(KitCompiler*, Pool*); 56 const Type* c_abi_uintptr_type(KitCompiler*, Pool*); 57 const Type* c_abi_va_list_type(KitCompiler*, Pool*); 58 59 #endif