diff options
Diffstat (limited to 'sim/m32r/decode.h')
-rw-r--r-- | sim/m32r/decode.h | 477 |
1 files changed, 210 insertions, 267 deletions
diff --git a/sim/m32r/decode.h b/sim/m32r/decode.h index 5bc1508..206adb2 100644 --- a/sim/m32r/decode.h +++ b/sim/m32r/decode.h @@ -1,8 +1,8 @@ -/* Decode header for m32r. +/* Decode header for m32rbf. -This file is machine generated with CGEN. +THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU Simulators. @@ -22,273 +22,216 @@ with this program; if not, write to the Free Software Foundation, Inc., */ -#ifndef M32R_DECODE_H -#define M32R_DECODE_H +#ifndef M32RBF_DECODE_H +#define M32RBF_DECODE_H -#define EX(fn) XCONCAT3 (m32r,_ex_,fn) -#define SEM(fn) XCONCAT3 (m32r,_sem_,fn) -#define SEMF(fn) XCONCAT3 (m32r,_semf_,fn) +/* Run-time computed instruction descriptor. */ -extern EXTRACT_FN EX (illegal); -extern SEMANTIC_FN SEM (illegal); -extern SEMANTIC_FN SEMF (illegal); -extern EXTRACT_FN EX (fmt_0_add); -extern EXTRACT_FN EX (fmt_1_add3); -extern EXTRACT_FN EX (fmt_2_and3); -extern EXTRACT_FN EX (fmt_3_or3); -extern EXTRACT_FN EX (fmt_4_addi); -extern EXTRACT_FN EX (fmt_5_addv); -extern EXTRACT_FN EX (fmt_6_addv3); -extern EXTRACT_FN EX (fmt_7_addx); -extern EXTRACT_FN EX (fmt_8_bc8); -extern EXTRACT_FN EX (fmt_9_bc24); -extern EXTRACT_FN EX (fmt_10_beq); -extern EXTRACT_FN EX (fmt_11_beqz); -extern EXTRACT_FN EX (fmt_12_bl8); -extern EXTRACT_FN EX (fmt_13_bl24); -extern EXTRACT_FN EX (fmt_14_bra8); -extern EXTRACT_FN EX (fmt_15_bra24); -extern EXTRACT_FN EX (fmt_16_cmp); -extern EXTRACT_FN EX (fmt_17_cmpi); -extern EXTRACT_FN EX (fmt_18_cmpui); -extern EXTRACT_FN EX (fmt_19_div); -extern EXTRACT_FN EX (fmt_20_jl); -extern EXTRACT_FN EX (fmt_21_jmp); -extern EXTRACT_FN EX (fmt_22_ld); -extern EXTRACT_FN EX (fmt_23_ld_d); -extern EXTRACT_FN EX (fmt_24_ldb); -extern EXTRACT_FN EX (fmt_25_ldb_d); -extern EXTRACT_FN EX (fmt_26_ldh); -extern EXTRACT_FN EX (fmt_27_ldh_d); -extern EXTRACT_FN EX (fmt_28_ld_plus); -extern EXTRACT_FN EX (fmt_29_ld24); -extern EXTRACT_FN EX (fmt_30_ldi8); -extern EXTRACT_FN EX (fmt_31_ldi16); -extern EXTRACT_FN EX (fmt_32_lock); -extern EXTRACT_FN EX (fmt_33_machi); -extern EXTRACT_FN EX (fmt_34_mulhi); -extern EXTRACT_FN EX (fmt_35_mv); -extern EXTRACT_FN EX (fmt_36_mvfachi); -extern EXTRACT_FN EX (fmt_37_mvfc); -extern EXTRACT_FN EX (fmt_38_mvtachi); -extern EXTRACT_FN EX (fmt_39_mvtc); -extern EXTRACT_FN EX (fmt_40_nop); -extern EXTRACT_FN EX (fmt_41_rac); -extern EXTRACT_FN EX (fmt_42_rte); -extern EXTRACT_FN EX (fmt_43_seth); -extern EXTRACT_FN EX (fmt_44_sll3); -extern EXTRACT_FN EX (fmt_45_slli); -extern EXTRACT_FN EX (fmt_46_st); -extern EXTRACT_FN EX (fmt_47_st_d); -extern EXTRACT_FN EX (fmt_48_stb); -extern EXTRACT_FN EX (fmt_49_stb_d); -extern EXTRACT_FN EX (fmt_50_sth); -extern EXTRACT_FN EX (fmt_51_sth_d); -extern EXTRACT_FN EX (fmt_52_st_plus); -extern EXTRACT_FN EX (fmt_53_trap); -extern EXTRACT_FN EX (fmt_54_unlock); +struct idesc { +#if WITH_SEM_SWITCH_FULL +#ifdef __GNUC__ + void *sem_full_lab; +#endif +#else + SEMANTIC_FN *sem_full; +#endif -extern SEMANTIC_FN SEM (add); -extern SEMANTIC_FN SEMF (add); -extern SEMANTIC_FN SEM (add3); -extern SEMANTIC_FN SEMF (add3); -extern SEMANTIC_FN SEM (and); -extern SEMANTIC_FN SEMF (and); -extern SEMANTIC_FN SEM (and3); -extern SEMANTIC_FN SEMF (and3); -extern SEMANTIC_FN SEM (or); -extern SEMANTIC_FN SEMF (or); -extern SEMANTIC_FN SEM (or3); -extern SEMANTIC_FN SEMF (or3); -extern SEMANTIC_FN SEM (xor); -extern SEMANTIC_FN SEMF (xor); -extern SEMANTIC_FN SEM (xor3); -extern SEMANTIC_FN SEMF (xor3); -extern SEMANTIC_FN SEM (addi); -extern SEMANTIC_FN SEMF (addi); -extern SEMANTIC_FN SEM (addv); -extern SEMANTIC_FN SEMF (addv); -extern SEMANTIC_FN SEM (addv3); -extern SEMANTIC_FN SEMF (addv3); -extern SEMANTIC_FN SEM (addx); -extern SEMANTIC_FN SEMF (addx); -extern SEMANTIC_FN SEM (bc8); -extern SEMANTIC_FN SEMF (bc8); -extern SEMANTIC_FN SEM (bc24); -extern SEMANTIC_FN SEMF (bc24); -extern SEMANTIC_FN SEM (beq); -extern SEMANTIC_FN SEMF (beq); -extern SEMANTIC_FN SEM (beqz); -extern SEMANTIC_FN SEMF (beqz); -extern SEMANTIC_FN SEM (bgez); -extern SEMANTIC_FN SEMF (bgez); -extern SEMANTIC_FN SEM (bgtz); -extern SEMANTIC_FN SEMF (bgtz); -extern SEMANTIC_FN SEM (blez); -extern SEMANTIC_FN SEMF (blez); -extern SEMANTIC_FN SEM (bltz); -extern SEMANTIC_FN SEMF (bltz); -extern SEMANTIC_FN SEM (bnez); -extern SEMANTIC_FN SEMF (bnez); -extern SEMANTIC_FN SEM (bl8); -extern SEMANTIC_FN SEMF (bl8); -extern SEMANTIC_FN SEM (bl24); -extern SEMANTIC_FN SEMF (bl24); -extern SEMANTIC_FN SEM (bnc8); -extern SEMANTIC_FN SEMF (bnc8); -extern SEMANTIC_FN SEM (bnc24); -extern SEMANTIC_FN SEMF (bnc24); -extern SEMANTIC_FN SEM (bne); -extern SEMANTIC_FN SEMF (bne); -extern SEMANTIC_FN SEM (bra8); -extern SEMANTIC_FN SEMF (bra8); -extern SEMANTIC_FN SEM (bra24); -extern SEMANTIC_FN SEMF (bra24); -extern SEMANTIC_FN SEM (cmp); -extern SEMANTIC_FN SEMF (cmp); -extern SEMANTIC_FN SEM (cmpi); -extern SEMANTIC_FN SEMF (cmpi); -extern SEMANTIC_FN SEM (cmpu); -extern SEMANTIC_FN SEMF (cmpu); -extern SEMANTIC_FN SEM (cmpui); -extern SEMANTIC_FN SEMF (cmpui); -extern SEMANTIC_FN SEM (div); -extern SEMANTIC_FN SEMF (div); -extern SEMANTIC_FN SEM (divu); -extern SEMANTIC_FN SEMF (divu); -extern SEMANTIC_FN SEM (rem); -extern SEMANTIC_FN SEMF (rem); -extern SEMANTIC_FN SEM (remu); -extern SEMANTIC_FN SEMF (remu); -extern SEMANTIC_FN SEM (jl); -extern SEMANTIC_FN SEMF (jl); -extern SEMANTIC_FN SEM (jmp); -extern SEMANTIC_FN SEMF (jmp); -extern SEMANTIC_FN SEM (ld); -extern SEMANTIC_FN SEMF (ld); -extern SEMANTIC_FN SEM (ld_d); -extern SEMANTIC_FN SEMF (ld_d); -extern SEMANTIC_FN SEM (ldb); -extern SEMANTIC_FN SEMF (ldb); -extern SEMANTIC_FN SEM (ldb_d); -extern SEMANTIC_FN SEMF (ldb_d); -extern SEMANTIC_FN SEM (ldh); -extern SEMANTIC_FN SEMF (ldh); -extern SEMANTIC_FN SEM (ldh_d); -extern SEMANTIC_FN SEMF (ldh_d); -extern SEMANTIC_FN SEM (ldub); -extern SEMANTIC_FN SEMF (ldub); -extern SEMANTIC_FN SEM (ldub_d); -extern SEMANTIC_FN SEMF (ldub_d); -extern SEMANTIC_FN SEM (lduh); -extern SEMANTIC_FN SEMF (lduh); -extern SEMANTIC_FN SEM (lduh_d); -extern SEMANTIC_FN SEMF (lduh_d); -extern SEMANTIC_FN SEM (ld_plus); -extern SEMANTIC_FN SEMF (ld_plus); -extern SEMANTIC_FN SEM (ld24); -extern SEMANTIC_FN SEMF (ld24); -extern SEMANTIC_FN SEM (ldi8); -extern SEMANTIC_FN SEMF (ldi8); -extern SEMANTIC_FN SEM (ldi16); -extern SEMANTIC_FN SEMF (ldi16); -extern SEMANTIC_FN SEM (lock); -extern SEMANTIC_FN SEMF (lock); -extern SEMANTIC_FN SEM (machi); -extern SEMANTIC_FN SEMF (machi); -extern SEMANTIC_FN SEM (maclo); -extern SEMANTIC_FN SEMF (maclo); -extern SEMANTIC_FN SEM (macwhi); -extern SEMANTIC_FN SEMF (macwhi); -extern SEMANTIC_FN SEM (macwlo); -extern SEMANTIC_FN SEMF (macwlo); -extern SEMANTIC_FN SEM (mul); -extern SEMANTIC_FN SEMF (mul); -extern SEMANTIC_FN SEM (mulhi); -extern SEMANTIC_FN SEMF (mulhi); -extern SEMANTIC_FN SEM (mullo); -extern SEMANTIC_FN SEMF (mullo); -extern SEMANTIC_FN SEM (mulwhi); -extern SEMANTIC_FN SEMF (mulwhi); -extern SEMANTIC_FN SEM (mulwlo); -extern SEMANTIC_FN SEMF (mulwlo); -extern SEMANTIC_FN SEM (mv); -extern SEMANTIC_FN SEMF (mv); -extern SEMANTIC_FN SEM (mvfachi); -extern SEMANTIC_FN SEMF (mvfachi); -extern SEMANTIC_FN SEM (mvfaclo); -extern SEMANTIC_FN SEMF (mvfaclo); -extern SEMANTIC_FN SEM (mvfacmi); -extern SEMANTIC_FN SEMF (mvfacmi); -extern SEMANTIC_FN SEM (mvfc); -extern SEMANTIC_FN SEMF (mvfc); -extern SEMANTIC_FN SEM (mvtachi); -extern SEMANTIC_FN SEMF (mvtachi); -extern SEMANTIC_FN SEM (mvtaclo); -extern SEMANTIC_FN SEMF (mvtaclo); -extern SEMANTIC_FN SEM (mvtc); -extern SEMANTIC_FN SEMF (mvtc); -extern SEMANTIC_FN SEM (neg); -extern SEMANTIC_FN SEMF (neg); -extern SEMANTIC_FN SEM (nop); -extern SEMANTIC_FN SEMF (nop); -extern SEMANTIC_FN SEM (not); -extern SEMANTIC_FN SEMF (not); -extern SEMANTIC_FN SEM (rac); -extern SEMANTIC_FN SEMF (rac); -extern SEMANTIC_FN SEM (rach); -extern SEMANTIC_FN SEMF (rach); -extern SEMANTIC_FN SEM (rte); -extern SEMANTIC_FN SEMF (rte); -extern SEMANTIC_FN SEM (seth); -extern SEMANTIC_FN SEMF (seth); -extern SEMANTIC_FN SEM (sll); -extern SEMANTIC_FN SEMF (sll); -extern SEMANTIC_FN SEM (sll3); -extern SEMANTIC_FN SEMF (sll3); -extern SEMANTIC_FN SEM (slli); -extern SEMANTIC_FN SEMF (slli); -extern SEMANTIC_FN SEM (sra); -extern SEMANTIC_FN SEMF (sra); -extern SEMANTIC_FN SEM (sra3); -extern SEMANTIC_FN SEMF (sra3); -extern SEMANTIC_FN SEM (srai); -extern SEMANTIC_FN SEMF (srai); -extern SEMANTIC_FN SEM (srl); -extern SEMANTIC_FN SEMF (srl); -extern SEMANTIC_FN SEM (srl3); -extern SEMANTIC_FN SEMF (srl3); -extern SEMANTIC_FN SEM (srli); -extern SEMANTIC_FN SEMF (srli); -extern SEMANTIC_FN SEM (st); -extern SEMANTIC_FN SEMF (st); -extern SEMANTIC_FN SEM (st_d); -extern SEMANTIC_FN SEMF (st_d); -extern SEMANTIC_FN SEM (stb); -extern SEMANTIC_FN SEMF (stb); -extern SEMANTIC_FN SEM (stb_d); -extern SEMANTIC_FN SEMF (stb_d); -extern SEMANTIC_FN SEM (sth); -extern SEMANTIC_FN SEMF (sth); -extern SEMANTIC_FN SEM (sth_d); -extern SEMANTIC_FN SEMF (sth_d); -extern SEMANTIC_FN SEM (st_plus); -extern SEMANTIC_FN SEMF (st_plus); -extern SEMANTIC_FN SEM (st_minus); -extern SEMANTIC_FN SEMF (st_minus); -extern SEMANTIC_FN SEM (sub); -extern SEMANTIC_FN SEMF (sub); -extern SEMANTIC_FN SEM (subv); -extern SEMANTIC_FN SEMF (subv); -extern SEMANTIC_FN SEM (subx); -extern SEMANTIC_FN SEMF (subx); -extern SEMANTIC_FN SEM (trap); -extern SEMANTIC_FN SEMF (trap); -extern SEMANTIC_FN SEM (unlock); -extern SEMANTIC_FN SEMF (unlock); +#if WITH_SEM_SWITCH_FAST +#ifdef __GNUC__ + void *sem_fast_lab; +#endif +#else + SEMANTIC_FN *sem_fast; +#endif -#undef EX + /* Instruction number (index in IDESC table, profile table). + Also used to switch on in non-gcc semantic switches. */ + int num; + + /* opcode table data */ + const CGEN_INSN *opcode; + + /* profiling/modelling support */ + const INSN_TIMING *timing; +}; + +extern const IDESC *m32rbf_decode (SIM_CPU *, IADDR, + CGEN_INSN_INT, CGEN_INSN_INT, + ARGBUF *); + +/* Enum declaration for instructions in cpu family m32rbf. */ +typedef enum m32rbf_insn_type { + M32RBF_INSN_X_INVALID, M32RBF_INSN_X_AFTER, M32RBF_INSN_X_BEFORE, M32RBF_INSN_X_CTI_CHAIN + , M32RBF_INSN_X_CHAIN, M32RBF_INSN_X_BEGIN, M32RBF_INSN_ADD, M32RBF_INSN_ADD3 + , M32RBF_INSN_AND, M32RBF_INSN_AND3, M32RBF_INSN_OR, M32RBF_INSN_OR3 + , M32RBF_INSN_XOR, M32RBF_INSN_XOR3, M32RBF_INSN_ADDI, M32RBF_INSN_ADDV + , M32RBF_INSN_ADDV3, M32RBF_INSN_ADDX, M32RBF_INSN_BC8, M32RBF_INSN_BC24 + , M32RBF_INSN_BEQ, M32RBF_INSN_BEQZ, M32RBF_INSN_BGEZ, M32RBF_INSN_BGTZ + , M32RBF_INSN_BLEZ, M32RBF_INSN_BLTZ, M32RBF_INSN_BNEZ, M32RBF_INSN_BL8 + , M32RBF_INSN_BL24, M32RBF_INSN_BNC8, M32RBF_INSN_BNC24, M32RBF_INSN_BNE + , M32RBF_INSN_BRA8, M32RBF_INSN_BRA24, M32RBF_INSN_CMP, M32RBF_INSN_CMPI + , M32RBF_INSN_CMPU, M32RBF_INSN_CMPUI, M32RBF_INSN_DIV, M32RBF_INSN_DIVU + , M32RBF_INSN_REM, M32RBF_INSN_REMU, M32RBF_INSN_JL, M32RBF_INSN_JMP + , M32RBF_INSN_LD, M32RBF_INSN_LD_D, M32RBF_INSN_LDB, M32RBF_INSN_LDB_D + , M32RBF_INSN_LDH, M32RBF_INSN_LDH_D, M32RBF_INSN_LDUB, M32RBF_INSN_LDUB_D + , M32RBF_INSN_LDUH, M32RBF_INSN_LDUH_D, M32RBF_INSN_LD_PLUS, M32RBF_INSN_LD24 + , M32RBF_INSN_LDI8, M32RBF_INSN_LDI16, M32RBF_INSN_LOCK, M32RBF_INSN_MACHI + , M32RBF_INSN_MACLO, M32RBF_INSN_MACWHI, M32RBF_INSN_MACWLO, M32RBF_INSN_MUL + , M32RBF_INSN_MULHI, M32RBF_INSN_MULLO, M32RBF_INSN_MULWHI, M32RBF_INSN_MULWLO + , M32RBF_INSN_MV, M32RBF_INSN_MVFACHI, M32RBF_INSN_MVFACLO, M32RBF_INSN_MVFACMI + , M32RBF_INSN_MVFC, M32RBF_INSN_MVTACHI, M32RBF_INSN_MVTACLO, M32RBF_INSN_MVTC + , M32RBF_INSN_NEG, M32RBF_INSN_NOP, M32RBF_INSN_NOT, M32RBF_INSN_RAC + , M32RBF_INSN_RACH, M32RBF_INSN_RTE, M32RBF_INSN_SETH, M32RBF_INSN_SLL + , M32RBF_INSN_SLL3, M32RBF_INSN_SLLI, M32RBF_INSN_SRA, M32RBF_INSN_SRA3 + , M32RBF_INSN_SRAI, M32RBF_INSN_SRL, M32RBF_INSN_SRL3, M32RBF_INSN_SRLI + , M32RBF_INSN_ST, M32RBF_INSN_ST_D, M32RBF_INSN_STB, M32RBF_INSN_STB_D + , M32RBF_INSN_STH, M32RBF_INSN_STH_D, M32RBF_INSN_ST_PLUS, M32RBF_INSN_ST_MINUS + , M32RBF_INSN_SUB, M32RBF_INSN_SUBV, M32RBF_INSN_SUBX, M32RBF_INSN_TRAP + , M32RBF_INSN_UNLOCK, M32RBF_INSN_MAX +} M32RBF_INSN_TYPE; + +#if ! WITH_SEM_SWITCH_FULL +#define SEMFULL(fn) extern SEMANTIC_FN CONCAT3 (m32rbf,_sem_,fn); +#else +#define SEMFULL(fn) +#endif + +#if ! WITH_SEM_SWITCH_FAST +#define SEMFAST(fn) extern SEMANTIC_FN CONCAT3 (m32rbf,_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 (m32rbf,_sem_,x_before); +extern SEMANTIC_FN CONCAT3 (m32rbf,_sem_,x_after); + +SEM (x_invalid) +SEM (x_after) +SEM (x_before) +SEM (x_cti_chain) +SEM (x_chain) +SEM (x_begin) +SEM (add) +SEM (add3) +SEM (and) +SEM (and3) +SEM (or) +SEM (or3) +SEM (xor) +SEM (xor3) +SEM (addi) +SEM (addv) +SEM (addv3) +SEM (addx) +SEM (bc8) +SEM (bc24) +SEM (beq) +SEM (beqz) +SEM (bgez) +SEM (bgtz) +SEM (blez) +SEM (bltz) +SEM (bnez) +SEM (bl8) +SEM (bl24) +SEM (bnc8) +SEM (bnc24) +SEM (bne) +SEM (bra8) +SEM (bra24) +SEM (cmp) +SEM (cmpi) +SEM (cmpu) +SEM (cmpui) +SEM (div) +SEM (divu) +SEM (rem) +SEM (remu) +SEM (jl) +SEM (jmp) +SEM (ld) +SEM (ld_d) +SEM (ldb) +SEM (ldb_d) +SEM (ldh) +SEM (ldh_d) +SEM (ldub) +SEM (ldub_d) +SEM (lduh) +SEM (lduh_d) +SEM (ld_plus) +SEM (ld24) +SEM (ldi8) +SEM (ldi16) +SEM (lock) +SEM (machi) +SEM (maclo) +SEM (macwhi) +SEM (macwlo) +SEM (mul) +SEM (mulhi) +SEM (mullo) +SEM (mulwhi) +SEM (mulwlo) +SEM (mv) +SEM (mvfachi) +SEM (mvfaclo) +SEM (mvfacmi) +SEM (mvfc) +SEM (mvtachi) +SEM (mvtaclo) +SEM (mvtc) +SEM (neg) +SEM (nop) +SEM (not) +SEM (rac) +SEM (rach) +SEM (rte) +SEM (seth) +SEM (sll) +SEM (sll3) +SEM (slli) +SEM (sra) +SEM (sra3) +SEM (srai) +SEM (srl) +SEM (srl3) +SEM (srli) +SEM (st) +SEM (st_d) +SEM (stb) +SEM (stb_d) +SEM (sth) +SEM (sth_d) +SEM (st_plus) +SEM (st_minus) +SEM (sub) +SEM (subv) +SEM (subx) +SEM (trap) +SEM (unlock) + +#undef SEMFULL +#undef SEMFAST #undef SEM -#undef SEMF -#endif /* M32R_DECODE_H */ +/* Function unit handlers (user written). */ + +extern int m32rbf_model_m32r_d_u_store (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/, INT /*src1*/, INT /*src2*/); +extern int m32rbf_model_m32r_d_u_load (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/, INT /*sr*/, INT /*dr*/); +extern int m32rbf_model_m32r_d_u_cti (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/, INT /*sr*/); +extern int m32rbf_model_m32r_d_u_mac (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/, INT /*src1*/, INT /*src2*/); +extern int m32rbf_model_m32r_d_u_cmp (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/, INT /*src1*/, INT /*src2*/); +extern int m32rbf_model_m32r_d_u_exec (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/, INT /*sr*/, INT /*sr2*/, INT /*dr*/); +extern int m32rbf_model_test_u_exec (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/); + +/* Profiling before/after handlers (user written) */ + +extern void m32rbf_model_insn_before (SIM_CPU *, int /*first_p*/); +extern void m32rbf_model_insn_after (SIM_CPU *, int /*last_p*/, int /*cycles*/); + +#endif /* M32RBF_DECODE_H */ |