diff options
Diffstat (limited to 'sim/i960/decode.h')
-rw-r--r-- | sim/i960/decode.h | 357 |
1 files changed, 37 insertions, 320 deletions
diff --git a/sim/i960/decode.h b/sim/i960/decode.h index 80fbde6..e88e027 100644 --- a/sim/i960/decode.h +++ b/sim/i960/decode.h @@ -29,6 +29,8 @@ extern const IDESC *i960base_decode (SIM_CPU *, IADDR, CGEN_INSN_INT, ARGBUF *); extern void i960base_init_idesc_table (SIM_CPU *); +extern void i960base_sem_init_idesc_table (SIM_CPU *); +extern void i960base_semf_init_idesc_table (SIM_CPU *); /* Enum declaration for instructions in cpu family i960base. */ typedef enum i960base_insn_type { @@ -109,326 +111,41 @@ typedef enum i960base_insn_type { , I960BASE_INSN_FLUSHREG, I960BASE_INSN_MAX } I960BASE_INSN_TYPE; -#if ! WITH_SEM_SWITCH_FULL -#define SEMFULL(fn) extern SEMANTIC_FN CONCAT3 (i960base,_sem_,fn); -#else -#define SEMFULL(fn) -#endif - -#if ! WITH_SEM_SWITCH_FAST -#define SEMFAST(fn) extern SEMANTIC_FN CONCAT3 (i960base,_semf_,fn); -#else -#define SEMFAST(fn) -#endif - -#define SEM(fn) SEMFULL (fn) SEMFAST (fn) - -/* The function version of the before/after handlers is always needed, - so we always want the SEMFULL declaration of them. */ -extern SEMANTIC_FN CONCAT3 (i960base,_sem_,x_before); -extern SEMANTIC_FN CONCAT3 (i960base,_sem_,x_after); - -SEM (x_invalid) -SEM (x_after) -SEM (x_before) -SEM (x_cti_chain) -SEM (x_chain) -SEM (x_begin) -SEM (mulo) -SEM (mulo1) -SEM (mulo2) -SEM (mulo3) -SEM (remo) -SEM (remo1) -SEM (remo2) -SEM (remo3) -SEM (divo) -SEM (divo1) -SEM (divo2) -SEM (divo3) -SEM (remi) -SEM (remi1) -SEM (remi2) -SEM (remi3) -SEM (divi) -SEM (divi1) -SEM (divi2) -SEM (divi3) -SEM (addo) -SEM (addo1) -SEM (addo2) -SEM (addo3) -SEM (subo) -SEM (subo1) -SEM (subo2) -SEM (subo3) -SEM (notbit) -SEM (notbit1) -SEM (notbit2) -SEM (notbit3) -SEM (and) -SEM (and1) -SEM (and2) -SEM (and3) -SEM (andnot) -SEM (andnot1) -SEM (andnot2) -SEM (andnot3) -SEM (setbit) -SEM (setbit1) -SEM (setbit2) -SEM (setbit3) -SEM (notand) -SEM (notand1) -SEM (notand2) -SEM (notand3) -SEM (xor) -SEM (xor1) -SEM (xor2) -SEM (xor3) -SEM (or) -SEM (or1) -SEM (or2) -SEM (or3) -SEM (nor) -SEM (nor1) -SEM (nor2) -SEM (nor3) -SEM (xnor) -SEM (xnor1) -SEM (xnor2) -SEM (xnor3) -SEM (not) -SEM (not1) -SEM (not2) -SEM (not3) -SEM (ornot) -SEM (ornot1) -SEM (ornot2) -SEM (ornot3) -SEM (clrbit) -SEM (clrbit1) -SEM (clrbit2) -SEM (clrbit3) -SEM (shlo) -SEM (shlo1) -SEM (shlo2) -SEM (shlo3) -SEM (shro) -SEM (shro1) -SEM (shro2) -SEM (shro3) -SEM (shli) -SEM (shli1) -SEM (shli2) -SEM (shli3) -SEM (shri) -SEM (shri1) -SEM (shri2) -SEM (shri3) -SEM (emul) -SEM (emul1) -SEM (emul2) -SEM (emul3) -SEM (mov) -SEM (mov1) -SEM (movl) -SEM (movl1) -SEM (movt) -SEM (movt1) -SEM (movq) -SEM (movq1) -SEM (modpc) -SEM (modac) -SEM (lda_offset) -SEM (lda_indirect_offset) -SEM (lda_indirect) -SEM (lda_indirect_index) -SEM (lda_disp) -SEM (lda_indirect_disp) -SEM (lda_index_disp) -SEM (lda_indirect_index_disp) -SEM (ld_offset) -SEM (ld_indirect_offset) -SEM (ld_indirect) -SEM (ld_indirect_index) -SEM (ld_disp) -SEM (ld_indirect_disp) -SEM (ld_index_disp) -SEM (ld_indirect_index_disp) -SEM (ldob_offset) -SEM (ldob_indirect_offset) -SEM (ldob_indirect) -SEM (ldob_indirect_index) -SEM (ldob_disp) -SEM (ldob_indirect_disp) -SEM (ldob_index_disp) -SEM (ldob_indirect_index_disp) -SEM (ldos_offset) -SEM (ldos_indirect_offset) -SEM (ldos_indirect) -SEM (ldos_indirect_index) -SEM (ldos_disp) -SEM (ldos_indirect_disp) -SEM (ldos_index_disp) -SEM (ldos_indirect_index_disp) -SEM (ldib_offset) -SEM (ldib_indirect_offset) -SEM (ldib_indirect) -SEM (ldib_indirect_index) -SEM (ldib_disp) -SEM (ldib_indirect_disp) -SEM (ldib_index_disp) -SEM (ldib_indirect_index_disp) -SEM (ldis_offset) -SEM (ldis_indirect_offset) -SEM (ldis_indirect) -SEM (ldis_indirect_index) -SEM (ldis_disp) -SEM (ldis_indirect_disp) -SEM (ldis_index_disp) -SEM (ldis_indirect_index_disp) -SEM (ldl_offset) -SEM (ldl_indirect_offset) -SEM (ldl_indirect) -SEM (ldl_indirect_index) -SEM (ldl_disp) -SEM (ldl_indirect_disp) -SEM (ldl_index_disp) -SEM (ldl_indirect_index_disp) -SEM (ldt_offset) -SEM (ldt_indirect_offset) -SEM (ldt_indirect) -SEM (ldt_indirect_index) -SEM (ldt_disp) -SEM (ldt_indirect_disp) -SEM (ldt_index_disp) -SEM (ldt_indirect_index_disp) -SEM (ldq_offset) -SEM (ldq_indirect_offset) -SEM (ldq_indirect) -SEM (ldq_indirect_index) -SEM (ldq_disp) -SEM (ldq_indirect_disp) -SEM (ldq_index_disp) -SEM (ldq_indirect_index_disp) -SEM (st_offset) -SEM (st_indirect_offset) -SEM (st_indirect) -SEM (st_indirect_index) -SEM (st_disp) -SEM (st_indirect_disp) -SEM (st_index_disp) -SEM (st_indirect_index_disp) -SEM (stob_offset) -SEM (stob_indirect_offset) -SEM (stob_indirect) -SEM (stob_indirect_index) -SEM (stob_disp) -SEM (stob_indirect_disp) -SEM (stob_index_disp) -SEM (stob_indirect_index_disp) -SEM (stos_offset) -SEM (stos_indirect_offset) -SEM (stos_indirect) -SEM (stos_indirect_index) -SEM (stos_disp) -SEM (stos_indirect_disp) -SEM (stos_index_disp) -SEM (stos_indirect_index_disp) -SEM (stl_offset) -SEM (stl_indirect_offset) -SEM (stl_indirect) -SEM (stl_indirect_index) -SEM (stl_disp) -SEM (stl_indirect_disp) -SEM (stl_index_disp) -SEM (stl_indirect_index_disp) -SEM (stt_offset) -SEM (stt_indirect_offset) -SEM (stt_indirect) -SEM (stt_indirect_index) -SEM (stt_disp) -SEM (stt_indirect_disp) -SEM (stt_index_disp) -SEM (stt_indirect_index_disp) -SEM (stq_offset) -SEM (stq_indirect_offset) -SEM (stq_indirect) -SEM (stq_indirect_index) -SEM (stq_disp) -SEM (stq_indirect_disp) -SEM (stq_index_disp) -SEM (stq_indirect_index_disp) -SEM (cmpobe_reg) -SEM (cmpobe_lit) -SEM (cmpobne_reg) -SEM (cmpobne_lit) -SEM (cmpobl_reg) -SEM (cmpobl_lit) -SEM (cmpoble_reg) -SEM (cmpoble_lit) -SEM (cmpobg_reg) -SEM (cmpobg_lit) -SEM (cmpobge_reg) -SEM (cmpobge_lit) -SEM (cmpibe_reg) -SEM (cmpibe_lit) -SEM (cmpibne_reg) -SEM (cmpibne_lit) -SEM (cmpibl_reg) -SEM (cmpibl_lit) -SEM (cmpible_reg) -SEM (cmpible_lit) -SEM (cmpibg_reg) -SEM (cmpibg_lit) -SEM (cmpibge_reg) -SEM (cmpibge_lit) -SEM (bbc_reg) -SEM (bbc_lit) -SEM (bbs_reg) -SEM (bbs_lit) -SEM (cmpi) -SEM (cmpi1) -SEM (cmpi2) -SEM (cmpi3) -SEM (cmpo) -SEM (cmpo1) -SEM (cmpo2) -SEM (cmpo3) -SEM (testno_reg) -SEM (testg_reg) -SEM (teste_reg) -SEM (testge_reg) -SEM (testl_reg) -SEM (testne_reg) -SEM (testle_reg) -SEM (testo_reg) -SEM (bno) -SEM (bg) -SEM (be) -SEM (bge) -SEM (bl) -SEM (bne) -SEM (ble) -SEM (bo) -SEM (b) -SEM (bx_indirect_offset) -SEM (bx_indirect) -SEM (bx_indirect_index) -SEM (bx_disp) -SEM (bx_indirect_disp) -SEM (callx_disp) -SEM (callx_indirect) -SEM (callx_indirect_offset) -SEM (ret) -SEM (calls) -SEM (fmark) -SEM (flushreg) - -#undef SEMFULL -#undef SEMFAST -#undef SEM +/* Enum declaration for semantic formats in cpu family i960base. */ +typedef enum i960base_sfmt_type { + I960BASE_SFMT_EMPTY, I960BASE_SFMT_MULO, I960BASE_SFMT_MULO1, I960BASE_SFMT_MULO2 + , I960BASE_SFMT_MULO3, I960BASE_SFMT_NOTBIT, I960BASE_SFMT_NOTBIT1, I960BASE_SFMT_NOTBIT2 + , I960BASE_SFMT_NOTBIT3, I960BASE_SFMT_NOT, I960BASE_SFMT_NOT1, I960BASE_SFMT_SHLO + , I960BASE_SFMT_SHLO1, I960BASE_SFMT_SHLO2, I960BASE_SFMT_SHLO3, I960BASE_SFMT_EMUL + , I960BASE_SFMT_EMUL1, I960BASE_SFMT_EMUL2, I960BASE_SFMT_EMUL3, I960BASE_SFMT_MOVL + , I960BASE_SFMT_MOVL1, I960BASE_SFMT_MOVT, I960BASE_SFMT_MOVT1, I960BASE_SFMT_MOVQ + , I960BASE_SFMT_MOVQ1, I960BASE_SFMT_MODPC, I960BASE_SFMT_LDA_OFFSET, I960BASE_SFMT_LDA_INDIRECT_OFFSET + , I960BASE_SFMT_LDA_INDIRECT, I960BASE_SFMT_LDA_INDIRECT_INDEX, I960BASE_SFMT_LDA_DISP, I960BASE_SFMT_LDA_INDIRECT_DISP + , I960BASE_SFMT_LDA_INDEX_DISP, I960BASE_SFMT_LDA_INDIRECT_INDEX_DISP, I960BASE_SFMT_LD_OFFSET, I960BASE_SFMT_LD_INDIRECT_OFFSET + , I960BASE_SFMT_LD_INDIRECT, I960BASE_SFMT_LD_INDIRECT_INDEX, I960BASE_SFMT_LD_DISP, I960BASE_SFMT_LD_INDIRECT_DISP + , I960BASE_SFMT_LD_INDEX_DISP, I960BASE_SFMT_LD_INDIRECT_INDEX_DISP, I960BASE_SFMT_LDL_OFFSET, I960BASE_SFMT_LDL_INDIRECT_OFFSET + , I960BASE_SFMT_LDL_INDIRECT, I960BASE_SFMT_LDL_INDIRECT_INDEX, I960BASE_SFMT_LDL_DISP, I960BASE_SFMT_LDL_INDIRECT_DISP + , I960BASE_SFMT_LDL_INDEX_DISP, I960BASE_SFMT_LDL_INDIRECT_INDEX_DISP, I960BASE_SFMT_LDT_OFFSET, I960BASE_SFMT_LDT_INDIRECT_OFFSET + , I960BASE_SFMT_LDT_INDIRECT, I960BASE_SFMT_LDT_INDIRECT_INDEX, I960BASE_SFMT_LDT_DISP, I960BASE_SFMT_LDT_INDIRECT_DISP + , I960BASE_SFMT_LDT_INDEX_DISP, I960BASE_SFMT_LDT_INDIRECT_INDEX_DISP, I960BASE_SFMT_LDQ_OFFSET, I960BASE_SFMT_LDQ_INDIRECT_OFFSET + , I960BASE_SFMT_LDQ_INDIRECT, I960BASE_SFMT_LDQ_INDIRECT_INDEX, I960BASE_SFMT_LDQ_DISP, I960BASE_SFMT_LDQ_INDIRECT_DISP + , I960BASE_SFMT_LDQ_INDEX_DISP, I960BASE_SFMT_LDQ_INDIRECT_INDEX_DISP, I960BASE_SFMT_ST_OFFSET, I960BASE_SFMT_ST_INDIRECT_OFFSET + , I960BASE_SFMT_ST_INDIRECT, I960BASE_SFMT_ST_INDIRECT_INDEX, I960BASE_SFMT_ST_DISP, I960BASE_SFMT_ST_INDIRECT_DISP + , I960BASE_SFMT_ST_INDEX_DISP, I960BASE_SFMT_ST_INDIRECT_INDEX_DISP, I960BASE_SFMT_STL_OFFSET, I960BASE_SFMT_STL_INDIRECT_OFFSET + , I960BASE_SFMT_STL_INDIRECT, I960BASE_SFMT_STL_INDIRECT_INDEX, I960BASE_SFMT_STL_DISP, I960BASE_SFMT_STL_INDIRECT_DISP + , I960BASE_SFMT_STL_INDEX_DISP, I960BASE_SFMT_STL_INDIRECT_INDEX_DISP, I960BASE_SFMT_STT_OFFSET, I960BASE_SFMT_STT_INDIRECT_OFFSET + , I960BASE_SFMT_STT_INDIRECT, I960BASE_SFMT_STT_INDIRECT_INDEX, I960BASE_SFMT_STT_DISP, I960BASE_SFMT_STT_INDIRECT_DISP + , I960BASE_SFMT_STT_INDEX_DISP, I960BASE_SFMT_STT_INDIRECT_INDEX_DISP, I960BASE_SFMT_STQ_OFFSET, I960BASE_SFMT_STQ_INDIRECT_OFFSET + , I960BASE_SFMT_STQ_INDIRECT, I960BASE_SFMT_STQ_INDIRECT_INDEX, I960BASE_SFMT_STQ_DISP, I960BASE_SFMT_STQ_INDIRECT_DISP + , I960BASE_SFMT_STQ_INDEX_DISP, I960BASE_SFMT_STQ_INDIRECT_INDEX_DISP, I960BASE_SFMT_CMPOBE_REG, I960BASE_SFMT_CMPOBE_LIT + , I960BASE_SFMT_CMPOBL_REG, I960BASE_SFMT_CMPOBL_LIT, I960BASE_SFMT_BBC_REG, I960BASE_SFMT_BBC_LIT + , I960BASE_SFMT_CMPI, I960BASE_SFMT_CMPI1, I960BASE_SFMT_CMPI2, I960BASE_SFMT_CMPI3 + , I960BASE_SFMT_CMPO, I960BASE_SFMT_CMPO1, I960BASE_SFMT_CMPO2, I960BASE_SFMT_CMPO3 + , I960BASE_SFMT_TESTNO_REG, I960BASE_SFMT_BNO, I960BASE_SFMT_B, I960BASE_SFMT_BX_INDIRECT_OFFSET + , I960BASE_SFMT_BX_INDIRECT, I960BASE_SFMT_BX_INDIRECT_INDEX, I960BASE_SFMT_BX_DISP, I960BASE_SFMT_BX_INDIRECT_DISP + , I960BASE_SFMT_CALLX_DISP, I960BASE_SFMT_CALLX_INDIRECT, I960BASE_SFMT_CALLX_INDIRECT_OFFSET, I960BASE_SFMT_RET + , I960BASE_SFMT_CALLS, I960BASE_SFMT_FMARK, I960BASE_SFMT_FLUSHREG +} I960BASE_SFMT_TYPE; /* Function unit handlers (user written). */ |