kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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