#include "decoder.h" #include "decoderImp.h" void Proc_decodeInstruction(proc_t *proc, opcode_t *op, opcode_data_t *instruction) { instruction->op=op->op; instruction->nArgs=op->nArgs; instruction->ext=0; switch(op->op) { case OP_store: case OP_swreg: // rule is 2s decodeInstructionImp(proc, op, instruction, RULE_2s); break; case OP_neg_i: case OP_not: case OP_not_l: case OP_is_l: case OP_push: case OP_dup: case OP_pop: case OP_high: case OP_jmp: case OP_call: case OP_puind: case OP_inth: case OP_stat_g: case OP_ext: case OP_mem_wr: case OP_mem_hr: case OP_mem_br: case OP_sub: case OP_unsub: // rule is 1 decodeInstructionImp(proc, op, instruction, RULE_1); break; case OP_nop: case OP_top: case OP_halt: case OP_reset: case OP_stat: case OP_lastad: // rule is 0 decodeInstructionImp(proc, op, instruction, RULE_0); break; case OP_add_i: case OP_sub_i: case OP_mul_i: case OP_div_i: case OP_mod_i: case OP_shlt: case OP_shrt: case OP_and: case OP_or: case OP_xor: case OP_and_l: case OP_or_l: case OP_xor_l: case OP_lt_i: case OP_le_i: case OP_gt_i: case OP_ge_i: case OP_eq_i: case OP_neq_i: case OP_swap: case OP_jif: case OP_jnt: case OP_jind: case OP_cif: case OP_cnt: case OP_stind: case OP_swregi: case OP_stat_s: case OP_mem_ww: case OP_mem_hw: case OP_mem_bw: case OP_int: // rule is 2 decodeInstructionImp(proc, op, instruction, RULE_2); break; } } void Proc_decodeInstructionExt(proc_t *proc, opcode_ext_t *op, opcode_data_t *instruction) { instruction->op=op->op; instruction->nArgs=op->nArgs; instruction->ext=1; switch(op->op) { case OP_E_add_d: case OP_E_sub_d: case OP_E_mul_d: case OP_E_div_d: case OP_E_pow_d: case OP_E_atan2: case OP_E_lt_d: case OP_E_le_d: case OP_E_gt_d: case OP_E_ge_d: case OP_E_eq_d: case OP_E_neq_d: case OP_E_hypot: // rule is 2d decodeInstructionExtImp(proc, op, instruction, RULE_2d); break; case OP_E_neg_d: case OP_E_cos: case OP_E_sin: case OP_E_tan: case OP_E_atan: case OP_E_d2i: case OP_E_sqrt: case OP_E_cbrt: case OP_E_exp: case OP_E_ln: case OP_E_floor: case OP_E_ceil: case OP_E_round: // rule is 1d decodeInstructionExtImp(proc, op, instruction, RULE_1d); break; case OP_E_i2d: // rule is 1 decodeInstructionExtImp(proc, op, instruction, RULE_1); break; case OP_E_nop: case OP_E_cst_pi: case OP_E_cst_e: // rule is 0 decodeInstructionExtImp(proc, op, instruction, RULE_0); break; } }