#define INTERNAL_TYPES_NUM 17 class CInternalType { U8 type, size, name[8]; } internal_types_table[INTERNAL_TYPES_NUM] = { {RT_I0, 0, "I0i"}, {RT_I0, 0, "I0"}, {RT_U0, 0, "U0i"}, {RT_U0, 0, "U0"}, {RT_I8, 1, "I8i"}, {RT_I8, 1, "I8"}, {RT_I8, 1, "Bool"}, {RT_U8, 1, "U8i"}, {RT_U8, 1, "U8"}, {RT_I16, 2, "I16i"}, {RT_U16, 2, "U16i"}, {RT_I32, 4, "I32i"}, {RT_U32, 4, "U32i"}, {RT_I64, 8, "I64i"}, {RT_U64, 8, "U64i"}, {RT_F64, 8, "F64i"}, {RT_F64, 8, "F64"}, }; CIntermediateStruct intermediate_code_table[IC_ICS_NUM] = { {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "END"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "NOP1"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "END_EXP"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "NOP2"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "LABEL"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "CALL_START"}, {IS_0_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "CALL_END"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "CALL_END2"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "RETURN_VAL"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "RETURN_VAL2"}, {IS_0_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "IMM_I64"}, {IS_0_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "IMM_F64"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "STR_CONST"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "ABS_ADDR"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "ADDR_IMPORT"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "HEAP_GLOBAL"}, {IS_0_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "SIZEOF"}, {IS_0_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "TYPE"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "GET_LABEL"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "RBP"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "REG"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "FS"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "MOV_FS"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "GS"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "MOV_GS"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "LEA"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "MOV"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "TO_I64"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "TO_F64"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "TO_BOOL"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "TOUPPER"}, {IS_1_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "POSTFIX_TYPECAST"}, {IS_1_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "ADDR"}, {IS_1_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "COM"}, {IS_1_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "NOT"}, {IS_1_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "UNARY_MINUS"}, {IS_1_ARG, 1, IST_DEREF, FALSE, TRUE, 0, 0, 0, "DEREF"}, {IS_1_ARG, 1, IST_DEREF, FALSE, TRUE, 0, 0, 0, "DEREF_PP"}, {IS_1_ARG, 1, IST_DEREF, FALSE, TRUE, 0, 0, 0, "DEREF_MM"}, {IS_1_ARG, 1, IST_DEREF, TRUE, TRUE, 0, 0, 0, "_PP"}, {IS_1_ARG, 1, IST_DEREF, TRUE, TRUE, 0, 0, 0, "_MM"}, {IS_1_ARG, 1, IST_DEREF, TRUE, TRUE, 0, 0, 0, "PP_"}, {IS_1_ARG, 1, IST_DEREF, TRUE, TRUE, 0, 0, 0, "MM_"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "SHL"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "SHR"}, {IS_1_ARG, 1, IST_ASSIGN, FALSE, FALSE, 0, 0, 0, "SHL_CONST"}, {IS_1_ARG, 1, IST_ASSIGN, FALSE, FALSE, 0, 0, 0, "SHR_CONST"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "POWER"}, {IS_2_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "MUL"}, {IS_2_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "DIV"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "MOD"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "AND"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "OR"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "XOR"}, {IS_2_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "ADD"}, {IS_2_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "SUB"}, {IS_1_ARG, 1, IST_ASSIGN, FALSE, FALSE, 0, 0, 0, "ADD_CONST"}, {IS_1_ARG, 1, IST_ASSIGN, FALSE, FALSE, 0, 0, 0, "SUB_CONST"}, {IS_2_ARG, 1, IST_CMP, FALSE, FALSE, 0, 0, 0, "EQU_EQU"}, {IS_2_ARG, 1, IST_CMP, FALSE, FALSE, 0, 0, 0, "NOT_EQU"}, {IS_2_ARG, 1, IST_CMP, FALSE, FALSE, 0, 0, 0, "LESS"}, {IS_2_ARG, 1, IST_CMP, FALSE, FALSE, 0, 0, 0, "GREATER_EQU"}, {IS_2_ARG, 1, IST_CMP, FALSE, FALSE, 0, 0, 0, "GREATER"}, {IS_2_ARG, 1, IST_CMP, FALSE, FALSE, 0, 0, 0, "LESS_EQU"}, {IS_0_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "PUSH_CMP"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "AND_AND"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "OR_OR"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "XOR_XOR"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "ASSIGN"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "ASSIGN_PP"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "ASSIGN_MM"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "SHL_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "SHR_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "MUL_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "DIV_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "MOD_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "AND_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "OR_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "XOR_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "ADD_EQU"}, {IS_2_ARG, 1, IST_ASSIGN, FALSE, TRUE, 0, 0, 0, "SUB_EQU"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "JMP"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "SUB_CALL"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "SWITCH"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "NOBOUND_SWITCH"}, {IS_V_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "ADD_RSP"}, {IS_V_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "ADD_RSP1"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "ENTER"}, {IS_0_ARG, 0, IST_ASSIGN, FALSE, FALSE, 0, 0, 0, "PUSH_REGS"}, {IS_0_ARG, 0, IST_ASSIGN, FALSE, FALSE, 0, 0, 0, "POP_REGS"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "LEAVE"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "RET"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "CALL"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "CALL_INDIRECT"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "CALL_INDIRECT2"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "CALL_IMPORT"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "CALL_EXTERN"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "ASM"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "PUSH"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "POP"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "CLFLUSH"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "INVLPG"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "IN_U8"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "IN_U16"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "IN_U32"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "OUT_U8"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "OUT_U16"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "OUT_U32"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "GET_RFLAGS"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "CARRY"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "SET_RFLAGS"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "GET_RAX"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "SET_RAX"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "GET_RBP"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "SET_RBP"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "GET_RSP"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "SET_RSP"}, {IS_0_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "RIP"}, {IS_0_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "RDTSC"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BT"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BTS"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BTR"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BTC"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "LBTS"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "LBTR"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "LBTC"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BSF"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BSR"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "QUE_INIT"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "QUE_INS"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "QUE_INS_REV"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "QUE_REM"}, {IS_1_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "STRLEN"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_ZERO"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_NOT_ZERO"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_CARRY"}, {IS_0_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_NOT_CARRY"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_EQU_EQU"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_NOT_EQU"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_LESS"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_GREATER_EQU"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_GREATER"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_LESS_EQU"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_2EQU_EQU"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_2NOT_EQU"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_2LESS"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_2GREATER_EQU"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_2GREATER"}, {IS_2_ARG, 1, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_2LESS_EQU"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_AND_ZERO"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_AND_NOT_ZERO"}, {IS_1_ARG, 0, IST_DEREF, FALSE, TRUE, 0, 0, 0, "BR_MM_ZERO"}, {IS_1_ARG, 0, IST_DEREF, FALSE, TRUE, 0, 0, 0, "BR_MM_NOT_ZERO"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_AND_AND_ZERO"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_AND_AND_NOT_ZERO"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_OR_OR_ZERO"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "BR_OR_OR_NOT_ZERO"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BR_BT"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BR_BTS"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BR_BTR"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BR_BTC"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BR_NOT_BT"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BR_NOT_BTS"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BR_NOT_BTR"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "BR_NOT_BTC"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "SWAP_U8"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "SWAP_U16"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "SWAP_U32"}, {IS_2_ARG, 0, IST_NULL, FALSE, TRUE, 0, 0, 0, "SWAP_U64"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "ABS_I64"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "SIGN_I64"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "I64_MIN"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "U64_MIN"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "I64_MAX"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "U64_MAX"}, {IS_2_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "MOD_U64"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "SQRI64"}, {IS_1_ARG, 0, IST_NULL, FALSE, FALSE, 0, 0, 0, "SQRU64"}, {IS_1_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "SQR"}, {IS_1_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "ABS"}, {IS_1_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "SQRT"}, {IS_1_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "SIN"}, {IS_1_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "COS"}, {IS_1_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "TAN"}, {IS_1_ARG, 1, IST_NULL, TRUE, FALSE, 0, 0, 0, "ATAN"}, {IS_1_ARG, 1, IST_NULL, FALSE, TRUE, 0, 0, 0, "POPCNT"}, }; U0 CompLoadDefines() { DefineListLoad("ST_RAW_TYPES", " \0" " \0" "I0\0" "U0\0" "I8\0" "U8\0" "I16\0" "U16\0" "I32\0" "U32\0" "I64\0" "U64\0" "F32\0" "UF32\0" "F64\0" "UF64\0"); DefineListLoad("ST_NATURAL_TYPES", "I8\0" "U8\0" "I16\0" "U16\0" "I32\0" "U32\0" "I64\0" "U64\0" "F64\0" "String\0"); DefineListLoad("ST_INT_SIZE_TYPES", "I8\0" "U8\0" "I16\0" "U16\0" "I32\0" "U32\0" "I64\0" "U64\0"); DefineListLoad("ST_TY_TYPES", "NULL\0" "STACK\0" "IMM\0" "REG\0" "DISP\0" "SIB\0" "RIP\0"); DefineListLoad("ST_U8_REGS", "AL\0" "CL\0" "DL\0" "BL\0" "AH\0" "CH\0" "DH\0" "BH\0" "R8u8\0" "R9u8\0" "R10u8\0" "R11u8\0" "R12u8\0" "R13u8\0" "R14u8\0" "R15u8\0"); DefineListLoad("ST_U8_REX_REGS", "AL\0" "CL\0" "DL\0" "BL\0" "RSPu8\0" "RBPu8\0" "RSIu8\0" "RDIu8\0" "R8u8\0" "R9u8\0" "R10u8\0" "R11u8\0" "R12u8\0" "R13u8\0" "R14u8\0" "R15u8\0"); DefineListLoad("ST_U16_REGS", "AX\0" "CX\0" "DX\0" "BX\0" "SP\0" "BP\0" "SI\0" "DI\0" "R8u16\0" "R9u16\0" "R10u16\0" "R11u16\0" "R12u16\0" "R13u16\0" "R14u16\0" "R15u16\0"); DefineListLoad("ST_U32_REGS", "EAX\0" "ECX\0" "EDX\0" "EBX\0" "ESP\0" "EBP\0" "ESI\0" "EDI\0" "R8u32\0" "R9u32\0" "R10u32\0" "R11u32\0" "R12u32\0" "R13u32\0" "R14u32\0" "R15u32\0"); DefineListLoad("ST_U64_REGS", "RAX\0" "RCX\0" "RDX\0" "RBX\0" "RSP\0" "RBP\0" "RSI\0" "RDI\0" "R8\0" "R9\0" "R10\0" "R11\0" "R12\0" "R13\0" "R14\0" "R15\0"); DefineListLoad("ST_MM_REGS", "MM0\0" "MM1\0" "MM2\0" "MM3\0" "MM4\0" "MM5\0" "MM6\0" "MM7\0"); DefineListLoad("ST_XMM_REGS", "XMM0\0" "XMM1\0" "XMM2\0" "XMM3\0" "XMM4\0" "XMM5\0" "XMM6\0" "XMM7\0" "XMM8\0" "XMM9\0" "XMM10\0" "XMM11\0" "XMM12\0" "XMM13\0" "XMM14\0" "XMM15\0"); DefineListLoad("ST_ARG_TYPES", "NONE\0" "REL8\0" "REL16\0" "REL32\0" "IMM8\0" "IMM16\0" "IMM32\0" "IMM64\0" "UIMM8\0" "UIMM16\0" "UIMM32\0" "UIMM64\0" "R8\0" "R16\0" "R32\0" "R64\0" "RM8\0" "RM16\0" "RM32\0" "RM64\0" "M8\0" "M16\0" "M32\0" "M64\0" "M1632\0" "M16N32\0" "M16N16\0" "M32N32\0" "MOFFS8\0" "MOFFS16\0" "MOFFS32\0" "MOFFS64\0" "AL\0" "AX\0" "EAX\0" "RAX\0" "CL\0" "DX\0" " \0" "SREG\0" "SS\0" "DS\0" "ES\0" "FS\0" "GS\0" "CS\0" "ST0\0" "STI\0" "MM\0" "MM32\0" "MM64\0" "XMM\0" "XMM32\0" "XMM64\0" "XMM128\0" "XMM0\0"); DefineListLoad("ST_SEG_REGS", "ES\0" "CS\0" "SS\0" "DS\0" "FS\0" "GS\0"); DefineListLoad("ST_FSTACK_REGS", "ST0\0" "ST1\0" "ST2\0" "ST3\0" "ST4\0" "ST5\0" "ST6\0" "ST7\0"); } U0 CompFillTables() { I64 i; U32 *d; cmp.to_reg_vars_map = CAlloc(REG_REGS_NUM * sizeof(U8)); cmp.num_reg_vars = 0; cmp.reg_vars_mask = REGG_LOCAL_VARS; for (i = 0; i < REG_REGS_NUM; i++) if (Bt(&cmp.reg_vars_mask, i)) cmp.to_reg_vars_map[cmp.num_reg_vars++] = i; cmp.non_ptr_vars_map = CAlloc(REG_REGS_NUM * sizeof(U8)); cmp.num_non_ptr_vars = 0; cmp.non_ptr_vars_mask = REGG_LOCAL_NON_PTR_VARS; for (i = 0; i < REG_REGS_NUM; i++) if (Bt(&cmp.non_ptr_vars_mask, i)) cmp.non_ptr_vars_map[cmp.num_non_ptr_vars++] = i; cmp.dual_U16_tokens1 = d = CAlloc(sizeof(U32) * TK_TKS_NUM); d['!'] = TK_NOT_EQU << 16 + '='; d['&'] = TK_AND_AND << 16 + '&'; d['*'] = TK_MUL_EQU << 16 + '='; d['+'] = TK_PLUS_PLUS << 16 + '+'; d['-'] = TK_DEREFERENCE << 16 + '>'; d['/'] = '*'; d[':'] = TK_DBL_COLON << 16 + ':'; d['<'] = TK_LESS_EQU << 16 + '='; d['='] = TK_EQU_EQU << 16 + '='; d['>'] = TK_GREATER_EQU << 16 + '='; d['^'] = TK_XOR_EQU << 16 + '='; d['|'] = TK_OR_OR << 16 + '|'; d['%'] = TK_MOD_EQU << 16 + '='; cmp.dual_U16_tokens2 = d = CAlloc(sizeof(U32) * TK_TKS_NUM); d['&'] = TK_AND_EQU << 16 + '='; d['+'] = TK_ADD_EQU << 16 + '='; d['-'] = TK_MINUS_MINUS << 16 + '-'; d['/'] = '/'; d['<'] = TK_SHL << 16 + '<'; d['>'] = TK_SHR << 16 + '>'; d['^'] = TK_XOR_XOR << 16 + '^'; d['|'] = TK_OR_EQU << 16 + '='; cmp.dual_U16_tokens3 = d = CAlloc(sizeof(U32) * TK_TKS_NUM); d['-'] = TK_SUB_EQU << 16 + '='; d['/'] = TK_DIV_EQU << 16 + '='; cmp.binary_ops = d = CAlloc(sizeof(U32) * TK_TKS_NUM); d['`'] = (PREC_EXP + ASSOCF_RIGHT) << 16 + IC_POWER; d[TK_SHL] = (PREC_EXP + ASSOCF_LEFT) << 16 + IC_SHL; d[TK_SHR] = (PREC_EXP + ASSOCF_LEFT) << 16 + IC_SHR; d['*'] = PREC_MUL << 16 + IC_MUL; d['/'] = (PREC_MUL + ASSOCF_LEFT) << 16 + IC_DIV; d['%'] = (PREC_MUL + ASSOCF_LEFT) << 16 + IC_MOD; d['&'] = PREC_AND << 16 + IC_AND; d['^'] = PREC_XOR << 16 + IC_XOR; d['|'] = PREC_OR << 16 + IC_OR; d['+'] = PREC_ADD << 16 + IC_ADD; d['-'] = (PREC_ADD + ASSOCF_LEFT) << 16 + IC_SUB; d['<'] = PREC_CMP << 16 + IC_LESS; d['>'] = PREC_CMP << 16 + IC_GREATER; d[TK_LESS_EQU] = PREC_CMP << 16 + IC_LESS_EQU; d[TK_GREATER_EQU] = PREC_CMP << 16 + IC_GREATER_EQU; d[TK_EQU_EQU] = PREC_CMP2 << 16 + IC_EQU_EQU; d[TK_NOT_EQU] = PREC_CMP2 << 16 + IC_NOT_EQU; d[TK_AND_AND] = PREC_AND_AND << 16 + IC_AND_AND; d[TK_XOR_XOR] = PREC_XOR_XOR << 16 + IC_XOR_XOR; d[TK_OR_OR] = PREC_OR_OR << 16 + IC_OR_OR; d['='] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_ASSIGN; d[TK_SHL_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_SHL_EQU; d[TK_SHR_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_SHR_EQU; d[TK_MUL_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_MUL_EQU; d[TK_DIV_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_DIV_EQU; d[TK_MOD_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_MOD_EQU; d[TK_AND_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_AND_EQU; d[TK_OR_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_OR_EQU; d[TK_XOR_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_XOR_EQU; d[TK_ADD_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_ADD_EQU; d[TK_SUB_EQU] = (PREC_ASSIGN + ASSOCF_RIGHT) << 16 + IC_SUB_EQU; }