79 #define WS_ASM_CLASS1P(op) (((op) & 0x80) == 0x80) 80 #define WS_ASM_CLASS1_OP(op) ((op) & 0xe0) 81 #define WS_ASM_CLASS1_ARG(op) ((op) & 0x1f) 85 #define WS_ASM_CLASS2P(op) (((op) & 0xe0) == 0x40) 86 #define WS_ASM_CLASS2_OP(op) ((op) & 0xf0) 87 #define WS_ASM_CLASS2_ARG(op) ((op) & 0x0f) 91 #define WS_ASM_CLASS3P(op) (((op) & 0xe0) == 0x60) 92 #define WS_ASM_CLASS3_OP(op) ((op) & 0x78) 93 #define WS_ASM_CLASS3_ARG(op) ((op) & 0x07) 97 #define WS_ASM_CLASS4P(op) (((op) & 0xc0) == 0x00) 98 #define WS_ASM_CLASS4_OP(op) (op) 102 #define WS_ASM_OP(op) \ 103 (WS_ASM_CLASS1P(op) \ 104 ? WS_ASM_CLASS1_OP(op) \ 105 : (WS_ASM_CLASS2P(op) \ 106 ? WS_ASM_CLASS2_OP(op) \ 107 : (WS_ASM_CLASS3P(op) \ 108 ? WS_ASM_CLASS3_OP(op) \ 109 : WS_ASM_CLASS4_OP(op)))) 114 #define WS_ASM_ARG(op) \ 115 (WS_ASM_CLASS1P(op) \ 116 ? WS_ASM_CLASS1_ARG(op) \ 117 : (WS_ASM_CLASS2P(op) \ 118 ? WS_ASM_CLASS2_ARG(op) \ 119 : (WS_ASM_CLASS3P(op) \ 120 ? WS_ASM_CLASS3_ARG(op) \ 125 #define WS_ASM_GLUE(op, arg) ((WsByte) (((WsByte) (op)) | ((WsByte) (arg)))) 130 #define WS_ASM_JUMP_FW_S 0x80 131 #define WS_ASM_JUMP_FW 0x01 132 #define WS_ASM_JUMP_FW_W 0x02 134 #define WS_ASM_JUMP_BW_S 0xa0 135 #define WS_ASM_JUMP_BW 0x03 136 #define WS_ASM_JUMP_BW_W 0x04 138 #define WS_ASM_TJUMP_FW_S 0xc0 139 #define WS_ASM_TJUMP_FW 0x05 140 #define WS_ASM_TJUMP_FW_W 0x06 142 #define WS_ASM_TJUMP_BW 0x07 143 #define WS_ASM_TJUMP_BW_W 0x08 145 #define WS_ASM_CALL_S 0x60 146 #define WS_ASM_CALL 0x09 148 #define WS_ASM_CALL_LIB_S 0x68 149 #define WS_ASM_CALL_LIB 0x0a 150 #define WS_ASM_CALL_LIB_W 0x0b 152 #define WS_ASM_CALL_URL 0x0c 153 #define WS_ASM_CALL_URL_W 0x0d 155 #define WS_ASM_LOAD_VAR_S 0xe0 156 #define WS_ASM_LOAD_VAR 0x0e 158 #define WS_ASM_STORE_VAR_S 0x40 159 #define WS_ASM_STORE_VAR 0x0f 161 #define WS_ASM_INCR_VAR_S 0x70 162 #define WS_ASM_INCR_VAR 0x10 164 #define WS_ASM_DECR_VAR 0x11 166 #define WS_ASM_LOAD_CONST_S 0x50 167 #define WS_ASM_LOAD_CONST 0x12 168 #define WS_ASM_LOAD_CONST_W 0x13 170 #define WS_ASM_CONST_0 0x14 171 #define WS_ASM_CONST_1 0x15 172 #define WS_ASM_CONST_M1 0x16 173 #define WS_ASM_CONST_ES 0x17 174 #define WS_ASM_CONST_INVALID 0x18 175 #define WS_ASM_CONST_TRUE 0x19 176 #define WS_ASM_CONST_FALSE 0x1a 178 #define WS_ASM_INCR 0x1b 179 #define WS_ASM_DECR 0x1c 180 #define WS_ASM_ADD_ASG 0x1d 181 #define WS_ASM_SUB_ASG 0x1e 182 #define WS_ASM_UMINUS 0x1f 183 #define WS_ASM_ADD 0x20 184 #define WS_ASM_SUB 0x21 185 #define WS_ASM_MUL 0x22 186 #define WS_ASM_DIV 0x23 187 #define WS_ASM_IDIV 0x24 188 #define WS_ASM_REM 0x25 190 #define WS_ASM_B_AND 0x26 191 #define WS_ASM_B_OR 0x27 192 #define WS_ASM_B_XOR 0x28 193 #define WS_ASM_B_NOT 0x29 194 #define WS_ASM_B_LSHIFT 0x2a 195 #define WS_ASM_B_RSSHIFT 0x2b 196 #define WS_ASM_B_RSZSHIFT 0x2c 198 #define WS_ASM_EQ 0x2d 199 #define WS_ASM_LE 0x2e 200 #define WS_ASM_LT 0x2f 201 #define WS_ASM_GE 0x30 202 #define WS_ASM_GT 0x31 203 #define WS_ASM_NE 0x32 205 #define WS_ASM_NOT 0x33 206 #define WS_ASM_SCAND 0x34 207 #define WS_ASM_SCOR 0x35 208 #define WS_ASM_TOBOOL 0x36 210 #define WS_ASM_POP 0x37 212 #define WS_ASM_TYPEOF 0x38 213 #define WS_ASM_ISVALID 0x39 215 #define WS_ASM_RETURN 0x3a 216 #define WS_ASM_RETURN_ES 0x3b 218 #define WS_ASM_DEBUG 0x3c 225 #define WS_ASM_P_LABEL 0x0100 226 #define WS_ASM_P_JUMP 0x0200 227 #define WS_ASM_P_TJUMP 0x0300 228 #define WS_ASM_P_CALL 0x0400 229 #define WS_ASM_P_CALL_LIB 0x0500 230 #define WS_ASM_P_CALL_URL 0x0600 231 #define WS_ASM_P_LOAD_VAR 0x0700 232 #define WS_ASM_P_STORE_VAR 0x0800 233 #define WS_ASM_P_INCR_VAR 0x0900 234 #define WS_ASM_P_LOAD_CONST 0x0a00 238 #define WS_ASM_P_BRANCH(ins) \ 239 ((ins)->type == WS_ASM_P_JUMP || (ins)->type == WS_ASM_P_TJUMP) 243 #define ws_label_idx u.ivalues.i1 244 #define ws_label_refcount u.ivalues.i2 245 #define ws_findex u.ivalues.i1 246 #define ws_lindex u.ivalues.i2 247 #define ws_args u.ivalues.i3 248 #define ws_vindex u.ivalues.i1 249 #define ws_cindex u.ivalues.i1 250 #define ws_label u.branch.label 251 #define ws_offset u.branch.offset
WsAsmIns * ws_asm_call_url(WsCompilerPtr compiler, WsUInt32 line, WsUInt16 findex, WsUInt16 urlindex, WsUInt8 args)
struct WsAsmInsRec::@113::@115 ivalues
WsAsmIns * ws_asm_ins(WsCompilerPtr compiler, WsUInt32 line, WsUInt8 opcode)
union WsAsmInsRec::@113 u
WsAsmIns * ws_asm_load_const(WsCompilerPtr compiler, WsUInt32 line, WsUInt16 cindex)
struct WsAsmInsRec::@113::@114 branch
void ws_asm_link(WsCompilerPtr compiler, WsAsmIns *ins)
WsAsmIns * ws_asm_variable(WsCompilerPtr compiler, WsUInt32 line, WsUInt16 ins, WsUInt8 vindex)
struct WsAsmInsRec * next
void ws_asm_dasm(WsCompilerPtr compiler, const unsigned char *code, size_t len)
struct WsAsmInsRec * label
void ws_asm_linearize(WsCompilerPtr compiler)
struct WsAsmInsRec * prev
WsAsmIns * ws_asm_call_lib(WsCompilerPtr compiler, WsUInt32 line, WsUInt8 findex, WsUInt16 lindex)
WsAsmIns * ws_asm_branch(WsCompilerPtr compiler, WsUInt32 line, WsUInt16 ins, WsAsmIns *label)
WsAsmIns * ws_asm_label(WsCompilerPtr compiler, WsUInt32 line)
void ws_asm_print(WsCompilerPtr compiler)
WsAsmIns * ws_asm_call(WsCompilerPtr compiler, WsUInt32 line, WsUInt8 findex)