templeos-info/public/Wb/Compiler/CompilerA.HH

407 lines
8.7 KiB
C++

#help_index "Compiler/Internal"
//Intermediate compiler codes
#define IS_0_ARG 0
#define IS_1_ARG 1
#define IS_2_ARG 2
#define IS_V_ARG 3 //Variable Arg Cnt
#define IST_NULL 0
#define IST_DEREF 1
#define IST_ASSIGN 2
#define IST_CMP 3
class CIntermediateStruct
{
U8 arg_cnt,res_cnt,type;
Bool fpop,not_const,pad[3];
U8 *name;
};
#define IC_END 0x00
#define IC_NOP1 0x01
#define IC_END_EXP 0x02
#define IC_NOP2 0x03
#define IC_LABEL 0x04
#define IC_CALL_START 0x05
#define IC_CALL_END 0x06
#define IC_CALL_END2 0x07
#define IC_RETURN_VAL 0x08
#define IC_RETURN_VAL2 0x09
#define IC_IMM_I64 0x0A
#define IC_IMM_F64 0x0B
#define IC_STR_CONST 0x0C
#define IC_ABS_ADDR 0x0D
#define IC_ADDR_IMPORT 0x0E
#define IC_HEAP_GLBL 0x0F
#define IC_SIZEOF 0x10
#define IC_TYPE 0x11
#define IC_GET_LABEL 0x12
#define IC_RBP 0x13
#define IC_REG 0x14
#define IC_FS 0x15
#define IC_MOV_FS 0x16
#define IC_GS 0x17
#define IC_MOV_GS 0x18
#define IC_LEA 0x19
#define IC_MOV 0x1A
#define IC_TO_I64 0x1B
#define IC_TO_F64 0x1C
#define IC_TO_BOOL 0x1D
#define IC_TOUPPER 0x1E
#define IC_HOLYC_TYPECAST 0x1F
#define IC_ADDR 0x20
#define IC_COM 0x21
#define IC_NOT 0x22
#define IC_UNARY_MINUS 0x23
#define IC_DEREF 0x24
#define IC_DEREF_PP 0x25
#define IC_DEREF_MM 0x26
#define IC__PP 0x27
#define IC__MM 0x28
#define IC_PP_ 0x29
#define IC_MM_ 0x2A
#define IC_SHL 0x2B
#define IC_SHR 0x2C
#define IC_SHL_CONST 0x2D
#define IC_SHR_CONST 0x2E
#define IC_POWER 0x2F
#define IC_MUL 0x30
#define IC_DIV 0x31
#define IC_MOD 0x32
#define IC_AND 0x33
#define IC_OR 0x34
#define IC_XOR 0x35
#define IC_ADD 0x36
#define IC_SUB 0x37
#define IC_ADD_CONST 0x38
#define IC_SUB_CONST 0x39
#define IC_EQU_EQU 0x3A
#define IC_NOT_EQU 0x3B
#define IC_LESS 0x3C
#define IC_GREATER_EQU 0x3D
#define IC_GREATER 0x3E
#define IC_LESS_EQU 0x3F
#define IC_PUSH_CMP 0x40
#define IC_AND_AND 0x41
#define IC_OR_OR 0x42
#define IC_XOR_XOR 0x43
#define IC_ASSIGN 0x44
#define IC_ASSIGN_PP 0x45
#define IC_ASSIGN_MM 0x46
#define IC_SHL_EQU 0x47
#define IC_SHR_EQU 0x48
#define IC_MUL_EQU 0x49
#define IC_DIV_EQU 0x4A
#define IC_MOD_EQU 0x4B
#define IC_AND_EQU 0x4C
#define IC_OR_EQU 0x4D
#define IC_XOR_EQU 0x4E
#define IC_ADD_EQU 0x4F
#define IC_SUB_EQU 0x50
#define IC_JMP 0x51
#define IC_SUB_CALL 0x52
#define IC_SWITCH 0x53
#define IC_NOBOUND_SWITCH 0x54
#define IC_ADD_RSP 0x55
#define IC_ADD_RSP1 0x56
#define IC_ENTER 0x57
#define IC_PUSH_REGS 0x58
#define IC_POP_REGS 0x59
#define IC_LEAVE 0x5A
#define IC_RET 0x5B
#define IC_CALL 0x5C
#define IC_CALL_INDIRECT 0x5D
#define IC_CALL_INDIRECT2 0x5E
#define IC_CALL_IMPORT 0x5F
#define IC_CALL_EXTERN 0x60
#define IC_ASM 0x61
#define IC_PUSH 0x62
#define IC_POP 0x63
#define IC_CLFLUSH 0x64
#define IC_INVLPG 0x65
#define IC_IN_U8 0x66
#define IC_IN_U16 0x67
#define IC_IN_U32 0x68
#define IC_OUT_U8 0x69
#define IC_OUT_U16 0x6A
#define IC_OUT_U32 0x6B
#define IC_GET_RFLAGS 0x6C
#define IC_CARRY 0x6D
#define IC_SET_RFLAGS 0x6E
#define IC_GET_RAX 0x6F
#define IC_SET_RAX 0x70
#define IC_GET_RBP 0x71
#define IC_SET_RBP 0x72
#define IC_GET_RSP 0x73
#define IC_SET_RSP 0x74
#define IC_RIP 0x75
#define IC_RDTSC 0x76
#define IC_BT 0x77
#define IC_BTS 0x78
#define IC_BTR 0x79
#define IC_BTC 0x7A
#define IC_LBTS 0x7B
#define IC_LBTR 0x7C
#define IC_LBTC 0x7D
#define IC_BSF 0x7E
#define IC_BSR 0x7F
#define IC_QUE_INIT 0x80
#define IC_QUE_INS 0x81
#define IC_QUE_INS_REV 0x82
#define IC_QUE_REM 0x83
#define IC_STRLEN 0x84
#define IC_BR_ZERO 0x85
#define IC_BR_NOT_ZERO 0x86
#define IC_BR_CARRY 0x87
#define IC_BR_NOT_CARRY 0x88
#define IC_BR_EQU_EQU 0x89
#define IC_BR_NOT_EQU 0x8A
#define IC_BR_LESS 0x8B
#define IC_BR_GREATER_EQU 0x8C
#define IC_BR_GREATER 0x8D
#define IC_BR_LESS_EQU 0x8E
#define IC_BR_EQU_EQU2 0x8F
#define IC_BR_NOT_EQU2 0x90
#define IC_BR_LESS2 0x91
#define IC_BR_GREATER_EQU2 0x92
#define IC_BR_GREATER2 0x93
#define IC_BR_LESS_EQU2 0x94
#define IC_BR_AND_ZERO 0x95
#define IC_BR_AND_NOT_ZERO 0x96
#define IC_BR_MM_ZERO 0x97
#define IC_BR_MM_NOT_ZERO 0x98
#define IC_BR_AND_AND_ZERO 0x99
#define IC_BR_AND_AND_NOT_ZERO 0x9A
#define IC_BR_OR_OR_ZERO 0x9B
#define IC_BR_OR_OR_NOT_ZERO 0x9C
#define IC_BR_BT 0x9D
#define IC_BR_BTS 0x9E
#define IC_BR_BTR 0x9F
#define IC_BR_BTC 0xA0
#define IC_BR_NOT_BT 0xA1
#define IC_BR_NOT_BTS 0xA2
#define IC_BR_NOT_BTR 0xA3
#define IC_BR_NOT_BTC 0xA4
#define IC_SWAP_U8 0xA5
#define IC_SWAP_U16 0xA6
#define IC_SWAP_U32 0xA7
#define IC_SWAP_I64 0xA8
#define IC_ABS_I64 0xA9
#define IC_SIGN_I64 0xAA
#define IC_MIN_I64 0xAB
#define IC_MIN_U64 0xAC
#define IC_MAX_I64 0xAD
#define IC_MAX_U64 0xAE
#define IC_MOD_U64 0xAF
#define IC_SQR_I64 0xB0
#define IC_SQR_U64 0xB1
#define IC_SQR 0xB2
#define IC_ABS 0xB3
#define IC_SQRT 0xB4
#define IC_SIN 0xB5
#define IC_COS 0xB6
#define IC_TAN 0xB7
#define IC_ATAN 0xB8
#define IC_ICS_NUM 0xB9
#define KW_INCLUDE 0
#define KW_DEFINE 1
#define KW_UNION 2
#define KW_CATCH 3
#define KW_CLASS 4
#define KW_TRY 5
#define KW_IF 6
#define KW_ELSE 7
#define KW_FOR 8
#define KW_WHILE 9
#define KW_EXTERN 10
#define KW__EXTERN 11
#define KW_RETURN 12
#define KW_SIZEOF 13
#define KW__INTERN 14
#define KW_DO 15
#define KW_ASM 16
#define KW_GOTO 17
#define KW_EXE 18
#define KW_BREAK 19
#define KW_SWITCH 20
#define KW_START 21
#define KW_END 22
#define KW_CASE 23
#define KW_DFT 24
#define KW_PUBLIC 25
#define KW_OFFSET 26
#define KW_IMPORT 27
#define KW__IMPORT 28
#define KW_IFDEF 29
#define KW_IFNDEF 30
#define KW_IFAOT 31
#define KW_IFJIT 32
#define KW_ENDIF 33
#define KW_ASSERT 34
#define KW_REG 35
#define KW_NOREG 36
#define KW_LASTCLASS 37
#define KW_NO_WARN 38
#define KW_HELP_INDEX 39
#define KW_HELP_FILE 40
#define KW_STATIC 41
#define KW_LOCK 42
#define KW_DEFINED 43
#define KW_INTERRUPT 44
#define KW_HASERRCODE 45
#define KW_ARGPOP 46
#define KW_NOARGPOP 47
#define AKW_ALIGN 64
#define AKW_ORG 65
#define AKW_I0 66
#define AKW_I8 67
#define AKW_I16 68
#define AKW_I32 69
#define AKW_I64 70
#define AKW_U0 71
#define AKW_U8 72
#define AKW_U16 73
#define AKW_U32 74
#define AKW_U64 75
#define AKW_F64 76
#define AKW_DU8 77
#define AKW_DU16 78
#define AKW_DU32 79
#define AKW_DU64 80
#define AKW_DUP 81
#define AKW_USE16 82
#define AKW_USE32 83
#define AKW_USE64 84
#define AKW_IMPORT 85
#define AKW_LIST 86
#define AKW_NOLIST 87
#define AKW_BINFILE 88
#define KW_KWS_NUM 89
#define CMP_TEMPLATE_INC 0x00
#define CMP_TEMPLATE_DEC 0x01
#define CMP_TEMPLATE_MOD 0x02
#define CMP_TEMPLATE_LESS 0x03
#define CMP_TEMPLATE_GREATER 0x04
#define CMP_TEMPLATE_LESS_EQU 0x05
#define CMP_TEMPLATE_GREATER_EQU 0x06
#define CMP_TEMPLATE_STRLEN 0x07
#define CMP_TEMPLATE_RDTSC 0x08
#define CMP_TEMPLATE_SIGN_I64 0x09
#define CMP_TEMPLATE_FSTP 0x0A
#define CMP_TEMPLATE_FLD 0x0B
#define CMP_TEMPLATE_SQR 0x0C
#define CMP_TEMPLATE_ABS 0x0D
#define CMP_TEMPLATE_SQRT 0x0E
#define CMP_TEMPLATE_SIN 0x0F
#define CMP_TEMPLATE_COS 0x10
#define CMP_TEMPLATE_TAN 0x11
#define CMP_TEMPLATE_ATAN 0x12
#define ASSOCF_LEFT 1
#define ASSOCF_RIGHT 2
#define ASSOC_MASK 3
#define PREC_NULL 0x00
#define PREC_TERM 0x04
#define PREC_UNARY_POST 0x08
#define PREC_UNARY_PRE 0x0C
#define PREC_EXP 0x10
#define PREC_MUL 0x14
#define PREC_AND 0x18
#define PREC_XOR 0x1C
#define PREC_OR 0x20
#define PREC_ADD 0x24
#define PREC_CMP 0x28
#define PREC_CMP2 0x2C
#define PREC_AND_AND 0x30
#define PREC_XOR_XOR 0x34
#define PREC_OR_OR 0x38
#define PREC_ASSIGN 0x3C
#define PREC_MAX 0x40
//Function/static/public flags
#define FSF_PUBLIC 0x01
#define FSF_ASM 0x02
#define FSF_STATIC 0x04
#define FSF__ 0x08
#define FSF_INTERRUPT (1<<Ff_INTERRUPT)
#define FSF_HASERRCODE (1<<Ff_HASERRCODE)
#define FSF_ARGPOP (1<<Ff_ARGPOP)
#define FSF_NOARGPOP (1<<Ff_NOARGPOP)
#define FSG_FUN_FLAGS1 (FSF_INTERRUPT|FSF_HASERRCODE|FSF_ARGPOP|FSF_NOARGPOP)
#define FSG_FUN_FLAGS2 (FSG_FUN_FLAGS1|FSF_PUBLIC)
//Byte 0
#define PRS0_NULL 0x000000
#define PRS0__EXTERN 0x000001
#define PRS0__INTERN 0x000002
#define PRS0__IMPORT 0x000003
#define PRS0_EXTERN 0x000004
#define PRS0_IMPORT 0x000005
#define PRS0_TYPECAST 0x000006
//Byte 1
#define PRS1B_NULL 0
#define PRS1_NULL 0x000000
#define PRS1B_LOCAL_VAR 1
#define PRS1_LOCAL_VAR 0x000100
#define PRS1B_FUN_ARG 2
#define PRS1_FUN_ARG 0x000200
#define PRS1B_CLASS 3
#define PRS1_CLASS 0x000300
#define PRS1B_STATIC_LOCAL_VAR 4
#define PRS1_STATIC_LOCAL_VAR 0x000400
#define PRS1B__EXTERN_IMPORT 5
#define PRS1_NOT_REALLY__EXTERN 0x000500
#define PRSF_UNION 0x010000
class COptReg
{
I64 offset;
CMemberLst *m;
};
#define CMPF_ASM_BLK 1
#define CMPF_ONE_ASM_INS 2
#define CMPF_LEX_FIRST 4
#define CMPF_PRS_SEMICOLON 8
#help_index ""