1 /* Simulator instruction decoder for m32r.
3 This file is machine generated with CGEN.
5 Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
7 This file is part of the GNU Simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
33 /* FIXME: wip, may eventually only want one form so this would then go
34 away. However, in the mean time, having both keeps a stable version
35 around while the cache version is being developed.
36 It may still be useful to allow two versions to exist though. */
38 #define EX(fn) XCONCAT3 (m32r,_ex_,fn)
43 #if WITH_SEM_SWITCH_FULL
46 #define FULL(fn) XCONCAT3 (m32r,_sem_,fn)
49 #if WITH_SEM_SWITCH_FAST
53 #define FAST(fn) XCONCAT3 (m32r,_semc_,fn)
59 /*#define DECODE M32R_DECODE*/
61 /* The decode_illegal case is currently non-static and the generator doesn't
62 prepend m32r_, so simplify things by handling it here. */
63 #define decode_illegal m32r_decode_illegal
65 static DECODE decode_add
= { M32R_INSN_ADD
, & m32r_cgen_insn_table_entries
[M32R_INSN_ADD
], EX (fmt_0_add
), FULL (add
), FAST (add
) };
66 static DECODE decode_add3
= { M32R_INSN_ADD3
, & m32r_cgen_insn_table_entries
[M32R_INSN_ADD3
], EX (fmt_1_add3
), FULL (add3
), FAST (add3
) };
67 static DECODE decode_and
= { M32R_INSN_AND
, & m32r_cgen_insn_table_entries
[M32R_INSN_AND
], EX (fmt_0_add
), FULL (and), FAST (and) };
68 static DECODE decode_and3
= { M32R_INSN_AND3
, & m32r_cgen_insn_table_entries
[M32R_INSN_AND3
], EX (fmt_2_and3
), FULL (and3
), FAST (and3
) };
69 static DECODE decode_or
= { M32R_INSN_OR
, & m32r_cgen_insn_table_entries
[M32R_INSN_OR
], EX (fmt_0_add
), FULL (or), FAST (or) };
70 static DECODE decode_or3
= { M32R_INSN_OR3
, & m32r_cgen_insn_table_entries
[M32R_INSN_OR3
], EX (fmt_3_or3
), FULL (or3
), FAST (or3
) };
71 static DECODE decode_xor
= { M32R_INSN_XOR
, & m32r_cgen_insn_table_entries
[M32R_INSN_XOR
], EX (fmt_0_add
), FULL (xor), FAST (xor) };
72 static DECODE decode_xor3
= { M32R_INSN_XOR3
, & m32r_cgen_insn_table_entries
[M32R_INSN_XOR3
], EX (fmt_2_and3
), FULL (xor3
), FAST (xor3
) };
73 static DECODE decode_addi
= { M32R_INSN_ADDI
, & m32r_cgen_insn_table_entries
[M32R_INSN_ADDI
], EX (fmt_4_addi
), FULL (addi
), FAST (addi
) };
74 static DECODE decode_addv
= { M32R_INSN_ADDV
, & m32r_cgen_insn_table_entries
[M32R_INSN_ADDV
], EX (fmt_0_add
), FULL (addv
), FAST (addv
) };
75 static DECODE decode_addv3
= { M32R_INSN_ADDV3
, & m32r_cgen_insn_table_entries
[M32R_INSN_ADDV3
], EX (fmt_5_addv3
), FULL (addv3
), FAST (addv3
) };
76 static DECODE decode_addx
= { M32R_INSN_ADDX
, & m32r_cgen_insn_table_entries
[M32R_INSN_ADDX
], EX (fmt_6_addx
), FULL (addx
), FAST (addx
) };
77 static DECODE decode_bc8
= { M32R_INSN_BC8
, & m32r_cgen_insn_table_entries
[M32R_INSN_BC8
], EX (fmt_7_bc8
), FULL (bc8
), FAST (bc8
) };
78 static DECODE decode_bc24
= { M32R_INSN_BC24
, & m32r_cgen_insn_table_entries
[M32R_INSN_BC24
], EX (fmt_8_bc24
), FULL (bc24
), FAST (bc24
) };
79 static DECODE decode_beq
= { M32R_INSN_BEQ
, & m32r_cgen_insn_table_entries
[M32R_INSN_BEQ
], EX (fmt_9_beq
), FULL (beq
), FAST (beq
) };
80 static DECODE decode_beqz
= { M32R_INSN_BEQZ
, & m32r_cgen_insn_table_entries
[M32R_INSN_BEQZ
], EX (fmt_10_beqz
), FULL (beqz
), FAST (beqz
) };
81 static DECODE decode_bgez
= { M32R_INSN_BGEZ
, & m32r_cgen_insn_table_entries
[M32R_INSN_BGEZ
], EX (fmt_10_beqz
), FULL (bgez
), FAST (bgez
) };
82 static DECODE decode_bgtz
= { M32R_INSN_BGTZ
, & m32r_cgen_insn_table_entries
[M32R_INSN_BGTZ
], EX (fmt_10_beqz
), FULL (bgtz
), FAST (bgtz
) };
83 static DECODE decode_blez
= { M32R_INSN_BLEZ
, & m32r_cgen_insn_table_entries
[M32R_INSN_BLEZ
], EX (fmt_10_beqz
), FULL (blez
), FAST (blez
) };
84 static DECODE decode_bltz
= { M32R_INSN_BLTZ
, & m32r_cgen_insn_table_entries
[M32R_INSN_BLTZ
], EX (fmt_10_beqz
), FULL (bltz
), FAST (bltz
) };
85 static DECODE decode_bnez
= { M32R_INSN_BNEZ
, & m32r_cgen_insn_table_entries
[M32R_INSN_BNEZ
], EX (fmt_10_beqz
), FULL (bnez
), FAST (bnez
) };
86 static DECODE decode_bl8
= { M32R_INSN_BL8
, & m32r_cgen_insn_table_entries
[M32R_INSN_BL8
], EX (fmt_11_bl8
), FULL (bl8
), FAST (bl8
) };
87 static DECODE decode_bl24
= { M32R_INSN_BL24
, & m32r_cgen_insn_table_entries
[M32R_INSN_BL24
], EX (fmt_12_bl24
), FULL (bl24
), FAST (bl24
) };
88 static DECODE decode_bnc8
= { M32R_INSN_BNC8
, & m32r_cgen_insn_table_entries
[M32R_INSN_BNC8
], EX (fmt_7_bc8
), FULL (bnc8
), FAST (bnc8
) };
89 static DECODE decode_bnc24
= { M32R_INSN_BNC24
, & m32r_cgen_insn_table_entries
[M32R_INSN_BNC24
], EX (fmt_8_bc24
), FULL (bnc24
), FAST (bnc24
) };
90 static DECODE decode_bne
= { M32R_INSN_BNE
, & m32r_cgen_insn_table_entries
[M32R_INSN_BNE
], EX (fmt_9_beq
), FULL (bne
), FAST (bne
) };
91 static DECODE decode_bra8
= { M32R_INSN_BRA8
, & m32r_cgen_insn_table_entries
[M32R_INSN_BRA8
], EX (fmt_13_bra8
), FULL (bra8
), FAST (bra8
) };
92 static DECODE decode_bra24
= { M32R_INSN_BRA24
, & m32r_cgen_insn_table_entries
[M32R_INSN_BRA24
], EX (fmt_14_bra24
), FULL (bra24
), FAST (bra24
) };
93 static DECODE decode_cmp
= { M32R_INSN_CMP
, & m32r_cgen_insn_table_entries
[M32R_INSN_CMP
], EX (fmt_15_cmp
), FULL (cmp
), FAST (cmp
) };
94 static DECODE decode_cmpi
= { M32R_INSN_CMPI
, & m32r_cgen_insn_table_entries
[M32R_INSN_CMPI
], EX (fmt_16_cmpi
), FULL (cmpi
), FAST (cmpi
) };
95 static DECODE decode_cmpu
= { M32R_INSN_CMPU
, & m32r_cgen_insn_table_entries
[M32R_INSN_CMPU
], EX (fmt_15_cmp
), FULL (cmpu
), FAST (cmpu
) };
96 static DECODE decode_cmpui
= { M32R_INSN_CMPUI
, & m32r_cgen_insn_table_entries
[M32R_INSN_CMPUI
], EX (fmt_17_cmpui
), FULL (cmpui
), FAST (cmpui
) };
97 static DECODE decode_div
= { M32R_INSN_DIV
, & m32r_cgen_insn_table_entries
[M32R_INSN_DIV
], EX (fmt_18_div
), FULL (div
), FAST (div
) };
98 static DECODE decode_divu
= { M32R_INSN_DIVU
, & m32r_cgen_insn_table_entries
[M32R_INSN_DIVU
], EX (fmt_18_div
), FULL (divu
), FAST (divu
) };
99 static DECODE decode_rem
= { M32R_INSN_REM
, & m32r_cgen_insn_table_entries
[M32R_INSN_REM
], EX (fmt_18_div
), FULL (rem
), FAST (rem
) };
100 static DECODE decode_remu
= { M32R_INSN_REMU
, & m32r_cgen_insn_table_entries
[M32R_INSN_REMU
], EX (fmt_18_div
), FULL (remu
), FAST (remu
) };
101 static DECODE decode_jl
= { M32R_INSN_JL
, & m32r_cgen_insn_table_entries
[M32R_INSN_JL
], EX (fmt_19_jl
), FULL (jl
), FAST (jl
) };
102 static DECODE decode_jmp
= { M32R_INSN_JMP
, & m32r_cgen_insn_table_entries
[M32R_INSN_JMP
], EX (fmt_20_jmp
), FULL (jmp
), FAST (jmp
) };
103 static DECODE decode_ld
= { M32R_INSN_LD
, & m32r_cgen_insn_table_entries
[M32R_INSN_LD
], EX (fmt_21_ld
), FULL (ld
), FAST (ld
) };
104 static DECODE decode_ld_d
= { M32R_INSN_LD_D
, & m32r_cgen_insn_table_entries
[M32R_INSN_LD_D
], EX (fmt_22_ld_d
), FULL (ld_d
), FAST (ld_d
) };
105 static DECODE decode_ldb
= { M32R_INSN_LDB
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDB
], EX (fmt_23_ldb
), FULL (ldb
), FAST (ldb
) };
106 static DECODE decode_ldb_d
= { M32R_INSN_LDB_D
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDB_D
], EX (fmt_24_ldb_d
), FULL (ldb_d
), FAST (ldb_d
) };
107 static DECODE decode_ldh
= { M32R_INSN_LDH
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDH
], EX (fmt_25_ldh
), FULL (ldh
), FAST (ldh
) };
108 static DECODE decode_ldh_d
= { M32R_INSN_LDH_D
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDH_D
], EX (fmt_26_ldh_d
), FULL (ldh_d
), FAST (ldh_d
) };
109 static DECODE decode_ldub
= { M32R_INSN_LDUB
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDUB
], EX (fmt_23_ldb
), FULL (ldub
), FAST (ldub
) };
110 static DECODE decode_ldub_d
= { M32R_INSN_LDUB_D
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDUB_D
], EX (fmt_24_ldb_d
), FULL (ldub_d
), FAST (ldub_d
) };
111 static DECODE decode_lduh
= { M32R_INSN_LDUH
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDUH
], EX (fmt_25_ldh
), FULL (lduh
), FAST (lduh
) };
112 static DECODE decode_lduh_d
= { M32R_INSN_LDUH_D
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDUH_D
], EX (fmt_26_ldh_d
), FULL (lduh_d
), FAST (lduh_d
) };
113 static DECODE decode_ld_plus
= { M32R_INSN_LD_PLUS
, & m32r_cgen_insn_table_entries
[M32R_INSN_LD_PLUS
], EX (fmt_21_ld
), FULL (ld_plus
), FAST (ld_plus
) };
114 static DECODE decode_ld24
= { M32R_INSN_LD24
, & m32r_cgen_insn_table_entries
[M32R_INSN_LD24
], EX (fmt_27_ld24
), FULL (ld24
), FAST (ld24
) };
115 static DECODE decode_ldi8
= { M32R_INSN_LDI8
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDI8
], EX (fmt_28_ldi8
), FULL (ldi8
), FAST (ldi8
) };
116 static DECODE decode_ldi16
= { M32R_INSN_LDI16
, & m32r_cgen_insn_table_entries
[M32R_INSN_LDI16
], EX (fmt_29_ldi16
), FULL (ldi16
), FAST (ldi16
) };
117 static DECODE decode_lock
= { M32R_INSN_LOCK
, & m32r_cgen_insn_table_entries
[M32R_INSN_LOCK
], EX (fmt_0_add
), FULL (lock
), FAST (lock
) };
118 static DECODE decode_machi
= { M32R_INSN_MACHI
, & m32r_cgen_insn_table_entries
[M32R_INSN_MACHI
], EX (fmt_30_machi
), FULL (machi
), FAST (machi
) };
119 static DECODE decode_maclo
= { M32R_INSN_MACLO
, & m32r_cgen_insn_table_entries
[M32R_INSN_MACLO
], EX (fmt_30_machi
), FULL (maclo
), FAST (maclo
) };
120 static DECODE decode_macwhi
= { M32R_INSN_MACWHI
, & m32r_cgen_insn_table_entries
[M32R_INSN_MACWHI
], EX (fmt_30_machi
), FULL (macwhi
), FAST (macwhi
) };
121 static DECODE decode_macwlo
= { M32R_INSN_MACWLO
, & m32r_cgen_insn_table_entries
[M32R_INSN_MACWLO
], EX (fmt_30_machi
), FULL (macwlo
), FAST (macwlo
) };
122 static DECODE decode_mul
= { M32R_INSN_MUL
, & m32r_cgen_insn_table_entries
[M32R_INSN_MUL
], EX (fmt_0_add
), FULL (mul
), FAST (mul
) };
123 static DECODE decode_mulhi
= { M32R_INSN_MULHI
, & m32r_cgen_insn_table_entries
[M32R_INSN_MULHI
], EX (fmt_15_cmp
), FULL (mulhi
), FAST (mulhi
) };
124 static DECODE decode_mullo
= { M32R_INSN_MULLO
, & m32r_cgen_insn_table_entries
[M32R_INSN_MULLO
], EX (fmt_15_cmp
), FULL (mullo
), FAST (mullo
) };
125 static DECODE decode_mulwhi
= { M32R_INSN_MULWHI
, & m32r_cgen_insn_table_entries
[M32R_INSN_MULWHI
], EX (fmt_15_cmp
), FULL (mulwhi
), FAST (mulwhi
) };
126 static DECODE decode_mulwlo
= { M32R_INSN_MULWLO
, & m32r_cgen_insn_table_entries
[M32R_INSN_MULWLO
], EX (fmt_15_cmp
), FULL (mulwlo
), FAST (mulwlo
) };
127 static DECODE decode_mv
= { M32R_INSN_MV
, & m32r_cgen_insn_table_entries
[M32R_INSN_MV
], EX (fmt_31_mv
), FULL (mv
), FAST (mv
) };
128 static DECODE decode_mvfachi
= { M32R_INSN_MVFACHI
, & m32r_cgen_insn_table_entries
[M32R_INSN_MVFACHI
], EX (fmt_32_mvfachi
), FULL (mvfachi
), FAST (mvfachi
) };
129 static DECODE decode_mvfaclo
= { M32R_INSN_MVFACLO
, & m32r_cgen_insn_table_entries
[M32R_INSN_MVFACLO
], EX (fmt_32_mvfachi
), FULL (mvfaclo
), FAST (mvfaclo
) };
130 static DECODE decode_mvfacmi
= { M32R_INSN_MVFACMI
, & m32r_cgen_insn_table_entries
[M32R_INSN_MVFACMI
], EX (fmt_32_mvfachi
), FULL (mvfacmi
), FAST (mvfacmi
) };
131 static DECODE decode_mvfc
= { M32R_INSN_MVFC
, & m32r_cgen_insn_table_entries
[M32R_INSN_MVFC
], EX (fmt_33_mvfc
), FULL (mvfc
), FAST (mvfc
) };
132 static DECODE decode_mvtachi
= { M32R_INSN_MVTACHI
, & m32r_cgen_insn_table_entries
[M32R_INSN_MVTACHI
], EX (fmt_34_mvtachi
), FULL (mvtachi
), FAST (mvtachi
) };
133 static DECODE decode_mvtaclo
= { M32R_INSN_MVTACLO
, & m32r_cgen_insn_table_entries
[M32R_INSN_MVTACLO
], EX (fmt_34_mvtachi
), FULL (mvtaclo
), FAST (mvtaclo
) };
134 static DECODE decode_mvtc
= { M32R_INSN_MVTC
, & m32r_cgen_insn_table_entries
[M32R_INSN_MVTC
], EX (fmt_35_mvtc
), FULL (mvtc
), FAST (mvtc
) };
135 static DECODE decode_neg
= { M32R_INSN_NEG
, & m32r_cgen_insn_table_entries
[M32R_INSN_NEG
], EX (fmt_31_mv
), FULL (neg
), FAST (neg
) };
136 static DECODE decode_nop
= { M32R_INSN_NOP
, & m32r_cgen_insn_table_entries
[M32R_INSN_NOP
], EX (fmt_36_nop
), FULL (nop
), FAST (nop
) };
137 static DECODE decode_not
= { M32R_INSN_NOT
, & m32r_cgen_insn_table_entries
[M32R_INSN_NOT
], EX (fmt_31_mv
), FULL (not), FAST (not) };
138 static DECODE decode_rac
= { M32R_INSN_RAC
, & m32r_cgen_insn_table_entries
[M32R_INSN_RAC
], EX (fmt_37_rac
), FULL (rac
), FAST (rac
) };
139 static DECODE decode_rach
= { M32R_INSN_RACH
, & m32r_cgen_insn_table_entries
[M32R_INSN_RACH
], EX (fmt_37_rac
), FULL (rach
), FAST (rach
) };
140 static DECODE decode_rte
= { M32R_INSN_RTE
, & m32r_cgen_insn_table_entries
[M32R_INSN_RTE
], EX (fmt_38_rte
), FULL (rte
), FAST (rte
) };
141 static DECODE decode_seth
= { M32R_INSN_SETH
, & m32r_cgen_insn_table_entries
[M32R_INSN_SETH
], EX (fmt_39_seth
), FULL (seth
), FAST (seth
) };
142 static DECODE decode_sll
= { M32R_INSN_SLL
, & m32r_cgen_insn_table_entries
[M32R_INSN_SLL
], EX (fmt_0_add
), FULL (sll
), FAST (sll
) };
143 static DECODE decode_sll3
= { M32R_INSN_SLL3
, & m32r_cgen_insn_table_entries
[M32R_INSN_SLL3
], EX (fmt_5_addv3
), FULL (sll3
), FAST (sll3
) };
144 static DECODE decode_slli
= { M32R_INSN_SLLI
, & m32r_cgen_insn_table_entries
[M32R_INSN_SLLI
], EX (fmt_40_slli
), FULL (slli
), FAST (slli
) };
145 static DECODE decode_sra
= { M32R_INSN_SRA
, & m32r_cgen_insn_table_entries
[M32R_INSN_SRA
], EX (fmt_0_add
), FULL (sra
), FAST (sra
) };
146 static DECODE decode_sra3
= { M32R_INSN_SRA3
, & m32r_cgen_insn_table_entries
[M32R_INSN_SRA3
], EX (fmt_5_addv3
), FULL (sra3
), FAST (sra3
) };
147 static DECODE decode_srai
= { M32R_INSN_SRAI
, & m32r_cgen_insn_table_entries
[M32R_INSN_SRAI
], EX (fmt_40_slli
), FULL (srai
), FAST (srai
) };
148 static DECODE decode_srl
= { M32R_INSN_SRL
, & m32r_cgen_insn_table_entries
[M32R_INSN_SRL
], EX (fmt_0_add
), FULL (srl
), FAST (srl
) };
149 static DECODE decode_srl3
= { M32R_INSN_SRL3
, & m32r_cgen_insn_table_entries
[M32R_INSN_SRL3
], EX (fmt_5_addv3
), FULL (srl3
), FAST (srl3
) };
150 static DECODE decode_srli
= { M32R_INSN_SRLI
, & m32r_cgen_insn_table_entries
[M32R_INSN_SRLI
], EX (fmt_40_slli
), FULL (srli
), FAST (srli
) };
151 static DECODE decode_st
= { M32R_INSN_ST
, & m32r_cgen_insn_table_entries
[M32R_INSN_ST
], EX (fmt_15_cmp
), FULL (st
), FAST (st
) };
152 static DECODE decode_st_d
= { M32R_INSN_ST_D
, & m32r_cgen_insn_table_entries
[M32R_INSN_ST_D
], EX (fmt_41_st_d
), FULL (st_d
), FAST (st_d
) };
153 static DECODE decode_stb
= { M32R_INSN_STB
, & m32r_cgen_insn_table_entries
[M32R_INSN_STB
], EX (fmt_15_cmp
), FULL (stb
), FAST (stb
) };
154 static DECODE decode_stb_d
= { M32R_INSN_STB_D
, & m32r_cgen_insn_table_entries
[M32R_INSN_STB_D
], EX (fmt_41_st_d
), FULL (stb_d
), FAST (stb_d
) };
155 static DECODE decode_sth
= { M32R_INSN_STH
, & m32r_cgen_insn_table_entries
[M32R_INSN_STH
], EX (fmt_15_cmp
), FULL (sth
), FAST (sth
) };
156 static DECODE decode_sth_d
= { M32R_INSN_STH_D
, & m32r_cgen_insn_table_entries
[M32R_INSN_STH_D
], EX (fmt_41_st_d
), FULL (sth_d
), FAST (sth_d
) };
157 static DECODE decode_st_plus
= { M32R_INSN_ST_PLUS
, & m32r_cgen_insn_table_entries
[M32R_INSN_ST_PLUS
], EX (fmt_15_cmp
), FULL (st_plus
), FAST (st_plus
) };
158 static DECODE decode_st_minus
= { M32R_INSN_ST_MINUS
, & m32r_cgen_insn_table_entries
[M32R_INSN_ST_MINUS
], EX (fmt_15_cmp
), FULL (st_minus
), FAST (st_minus
) };
159 static DECODE decode_sub
= { M32R_INSN_SUB
, & m32r_cgen_insn_table_entries
[M32R_INSN_SUB
], EX (fmt_0_add
), FULL (sub
), FAST (sub
) };
160 static DECODE decode_subv
= { M32R_INSN_SUBV
, & m32r_cgen_insn_table_entries
[M32R_INSN_SUBV
], EX (fmt_0_add
), FULL (subv
), FAST (subv
) };
161 static DECODE decode_subx
= { M32R_INSN_SUBX
, & m32r_cgen_insn_table_entries
[M32R_INSN_SUBX
], EX (fmt_6_addx
), FULL (subx
), FAST (subx
) };
162 static DECODE decode_trap
= { M32R_INSN_TRAP
, & m32r_cgen_insn_table_entries
[M32R_INSN_TRAP
], EX (fmt_42_trap
), FULL (trap
), FAST (trap
) };
163 static DECODE decode_unlock
= { M32R_INSN_UNLOCK
, & m32r_cgen_insn_table_entries
[M32R_INSN_UNLOCK
], EX (fmt_15_cmp
), FULL (unlock
), FAST (unlock
) };
164 DECODE m32r_decode_illegal
= {
165 M32R_INSN_ILLEGAL
, & m32r_cgen_insn_table_entries
[0],
166 EX (illegal
), FULL (illegal
),
170 /* The order must match that of `labels' in sem-switch.c. */
172 DECODE
*m32r_decode_vars
[] = {
173 & m32r_decode_illegal
,
276 /* The decoder needs a slightly different computed goto switch control. */
278 #define DECODE_SWITCH(N, X) goto *labels_##N[X];
280 #define DECODE_SWITCH(N, X) switch (X)
283 /* Given an instruction, return a pointer to its DECODE entry. */
286 m32r_decode (current_cpu
, pc
, insn
)
287 SIM_CPU
*current_cpu
;
293 static void *labels_0
[256] = {
294 && default_0
, && default_0
, && default_0
, && default_0
,
295 && default_0
, && default_0
, && default_0
, && default_0
,
296 && default_0
, && default_0
, && default_0
, && default_0
,
297 && default_0
, && default_0
, && default_0
, && default_0
,
298 && default_0
, && default_0
, && default_0
, && default_0
,
299 && default_0
, && default_0
, && default_0
, && default_0
,
300 && default_0
, && default_0
, && default_0
, && default_0
,
301 && case_0_28
, && default_0
, && default_0
, && default_0
,
302 && default_0
, && default_0
, && default_0
, && default_0
,
303 && default_0
, && default_0
, && default_0
, && default_0
,
304 && default_0
, && default_0
, && default_0
, && default_0
,
305 && default_0
, && default_0
, && default_0
, && default_0
,
306 && default_0
, && default_0
, && default_0
, && default_0
,
307 && default_0
, && default_0
, && default_0
, && default_0
,
308 && default_0
, && default_0
, && default_0
, && default_0
,
309 && default_0
, && default_0
, && default_0
, && default_0
,
310 && default_0
, && default_0
, && default_0
, && default_0
,
311 && default_0
, && default_0
, && default_0
, && default_0
,
312 && default_0
, && default_0
, && default_0
, && default_0
,
313 && default_0
, && default_0
, && default_0
, && default_0
,
314 && default_0
, && default_0
, && default_0
, && default_0
,
315 && default_0
, && default_0
, && default_0
, && case_0_87
,
316 && default_0
, && default_0
, && default_0
, && default_0
,
317 && default_0
, && default_0
, && default_0
, && case_0_95
,
318 && default_0
, && default_0
, && default_0
, && default_0
,
319 && default_0
, && default_0
, && default_0
, && default_0
,
320 && default_0
, && default_0
, && default_0
, && default_0
,
321 && default_0
, && default_0
, && default_0
, && default_0
,
322 && case_0_112
, && case_0_113
, && case_0_114
, && case_0_115
,
323 && case_0_116
, && case_0_117
, && case_0_118
, && case_0_119
,
324 && case_0_120
, && case_0_121
, && case_0_122
, && case_0_123
,
325 && case_0_124
, && case_0_125
, && case_0_126
, && case_0_127
,
326 && default_0
, && default_0
, && default_0
, && default_0
,
327 && default_0
, && default_0
, && default_0
, && default_0
,
328 && default_0
, && default_0
, && default_0
, && default_0
,
329 && default_0
, && default_0
, && default_0
, && default_0
,
330 && default_0
, && default_0
, && default_0
, && default_0
,
331 && default_0
, && default_0
, && default_0
, && default_0
,
332 && default_0
, && default_0
, && default_0
, && default_0
,
333 && default_0
, && default_0
, && default_0
, && default_0
,
334 && default_0
, && default_0
, && default_0
, && default_0
,
335 && default_0
, && default_0
, && default_0
, && default_0
,
336 && default_0
, && default_0
, && default_0
, && default_0
,
337 && default_0
, && default_0
, && default_0
, && default_0
,
338 && default_0
, && default_0
, && default_0
, && default_0
,
339 && default_0
, && default_0
, && default_0
, && default_0
,
340 && default_0
, && default_0
, && default_0
, && default_0
,
341 && default_0
, && default_0
, && default_0
, && default_0
,
342 && default_0
, && default_0
, && default_0
, && default_0
,
343 && default_0
, && default_0
, && default_0
, && default_0
,
344 && default_0
, && default_0
, && default_0
, && default_0
,
345 && default_0
, && default_0
, && default_0
, && default_0
,
346 && default_0
, && default_0
, && default_0
, && default_0
,
347 && default_0
, && default_0
, && default_0
, && default_0
,
348 && default_0
, && default_0
, && default_0
, && default_0
,
349 && default_0
, && default_0
, && default_0
, && default_0
,
350 && default_0
, && default_0
, && default_0
, && default_0
,
351 && default_0
, && default_0
, && default_0
, && default_0
,
352 && default_0
, && default_0
, && default_0
, && default_0
,
353 && default_0
, && default_0
, && default_0
, && default_0
,
354 && case_0_240
, && case_0_241
, && case_0_242
, && case_0_243
,
355 && case_0_244
, && case_0_245
, && case_0_246
, && case_0_247
,
356 && case_0_248
, && case_0_249
, && case_0_250
, && case_0_251
,
357 && case_0_252
, && case_0_253
, && case_0_254
, && case_0_255
,
360 static DECODE
*insns
[256] = {
361 &decode_subv
, &decode_subx
, &decode_sub
, &decode_neg
,
362 &decode_cmp
, &decode_cmpu
, &decode_illegal
, &decode_illegal
,
363 &decode_addv
, &decode_addx
, &decode_add
, &decode_not
,
364 &decode_and
, &decode_xor
, &decode_or
, &decode_illegal
,
365 &decode_srl
, &decode_illegal
, &decode_sra
, &decode_illegal
,
366 &decode_sll
, &decode_illegal
, &decode_mul
, &decode_illegal
,
367 &decode_mv
, &decode_mvfc
, &decode_mvtc
, &decode_illegal
,
368 0, &decode_rte
, &decode_illegal
, &decode_trap
,
369 &decode_stb
, &decode_illegal
, &decode_sth
, &decode_illegal
,
370 &decode_st
, &decode_unlock
, &decode_st_plus
, &decode_st_minus
,
371 &decode_ldb
, &decode_ldub
, &decode_ldh
, &decode_lduh
,
372 &decode_ld
, &decode_lock
, &decode_ld_plus
, &decode_illegal
,
373 &decode_mulhi
, &decode_mullo
, &decode_mulwhi
, &decode_mulwlo
,
374 &decode_machi
, &decode_maclo
, &decode_macwhi
, &decode_macwlo
,
375 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
376 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
377 &decode_addi
, &decode_addi
, &decode_addi
, &decode_addi
,
378 &decode_addi
, &decode_addi
, &decode_addi
, &decode_addi
,
379 &decode_addi
, &decode_addi
, &decode_addi
, &decode_addi
,
380 &decode_addi
, &decode_addi
, &decode_addi
, &decode_addi
,
381 &decode_srli
, &decode_srli
, &decode_srai
, &decode_srai
,
382 &decode_slli
, &decode_slli
, &decode_illegal
, 0,
383 &decode_rach
, &decode_rac
, &decode_illegal
, &decode_illegal
,
384 &decode_illegal
, &decode_illegal
, &decode_illegal
, 0,
385 &decode_ldi8
, &decode_ldi8
, &decode_ldi8
, &decode_ldi8
,
386 &decode_ldi8
, &decode_ldi8
, &decode_ldi8
, &decode_ldi8
,
387 &decode_ldi8
, &decode_ldi8
, &decode_ldi8
, &decode_ldi8
,
388 &decode_ldi8
, &decode_ldi8
, &decode_ldi8
, &decode_ldi8
,
393 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
394 &decode_cmpi
, &decode_cmpui
, &decode_illegal
, &decode_illegal
,
395 &decode_addv3
, &decode_illegal
, &decode_add3
, &decode_illegal
,
396 &decode_and3
, &decode_xor3
, &decode_or3
, &decode_illegal
,
397 &decode_div
, &decode_divu
, &decode_rem
, &decode_remu
,
398 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
399 &decode_srl3
, &decode_illegal
, &decode_sra3
, &decode_illegal
,
400 &decode_sll3
, &decode_illegal
, &decode_illegal
, &decode_ldi16
,
401 &decode_stb_d
, &decode_illegal
, &decode_sth_d
, &decode_illegal
,
402 &decode_st_d
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
403 &decode_ldb_d
, &decode_ldub_d
, &decode_ldh_d
, &decode_lduh_d
,
404 &decode_ld_d
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
405 &decode_beq
, &decode_bne
, &decode_illegal
, &decode_illegal
,
406 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
407 &decode_beqz
, &decode_bnez
, &decode_bltz
, &decode_bgez
,
408 &decode_blez
, &decode_bgtz
, &decode_illegal
, &decode_illegal
,
409 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
410 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
411 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
412 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
413 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
414 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
415 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
416 &decode_seth
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
417 &decode_ld24
, &decode_ld24
, &decode_ld24
, &decode_ld24
,
418 &decode_ld24
, &decode_ld24
, &decode_ld24
, &decode_ld24
,
419 &decode_ld24
, &decode_ld24
, &decode_ld24
, &decode_ld24
,
420 &decode_ld24
, &decode_ld24
, &decode_ld24
, &decode_ld24
,
427 val
= (((insn
>> 8) & (15 << 4)) | ((insn
>> 4) & (15 << 0)));
428 DECODE_SWITCH (0, val
)
432 static DECODE
*insns
[16] = {
433 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
434 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
435 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
436 &decode_illegal
, &decode_illegal
, &decode_jl
, &decode_jmp
,
438 unsigned int val
= (((insn
>> 8) & (15 << 0)));
443 static DECODE
*insns
[16] = {
444 &decode_mvtachi
, &decode_mvtaclo
, &decode_illegal
, &decode_illegal
,
445 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
446 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
447 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
449 unsigned int val
= (((insn
>> 0) & (15 << 0)));
454 static DECODE
*insns
[16] = {
455 &decode_mvfachi
, &decode_mvfaclo
, &decode_mvfacmi
, &decode_illegal
,
456 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
457 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
458 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
460 unsigned int val
= (((insn
>> 0) & (15 << 0)));
465 static DECODE
*insns
[16] = {
466 &decode_nop
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
467 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
468 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
469 &decode_bc8
, &decode_bnc8
, &decode_bl8
, &decode_bra8
,
471 unsigned int val
= (((insn
>> 8) & (15 << 0)));
474 CASE (0, 113) : /* fall through */
475 CASE (0, 114) : /* fall through */
476 CASE (0, 115) : /* fall through */
477 CASE (0, 116) : /* fall through */
478 CASE (0, 117) : /* fall through */
479 CASE (0, 118) : /* fall through */
480 CASE (0, 119) : /* fall through */
481 CASE (0, 120) : /* fall through */
482 CASE (0, 121) : /* fall through */
483 CASE (0, 122) : /* fall through */
484 CASE (0, 123) : /* fall through */
485 CASE (0, 124) : /* fall through */
486 CASE (0, 125) : /* fall through */
487 CASE (0, 126) : /* fall through */
490 static DECODE
*insns
[16] = {
491 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
492 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
493 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
494 &decode_bc8
, &decode_bnc8
, &decode_bl8
, &decode_bra8
,
496 unsigned int val
= (((insn
>> 8) & (15 << 0)));
499 CASE (0, 240) : /* fall through */
500 CASE (0, 241) : /* fall through */
501 CASE (0, 242) : /* fall through */
502 CASE (0, 243) : /* fall through */
503 CASE (0, 244) : /* fall through */
504 CASE (0, 245) : /* fall through */
505 CASE (0, 246) : /* fall through */
506 CASE (0, 247) : /* fall through */
507 CASE (0, 248) : /* fall through */
508 CASE (0, 249) : /* fall through */
509 CASE (0, 250) : /* fall through */
510 CASE (0, 251) : /* fall through */
511 CASE (0, 252) : /* fall through */
512 CASE (0, 253) : /* fall through */
513 CASE (0, 254) : /* fall through */
516 static DECODE
*insns
[16] = {
517 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
518 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
519 &decode_illegal
, &decode_illegal
, &decode_illegal
, &decode_illegal
,
520 &decode_bc24
, &decode_bnc24
, &decode_bl24
, &decode_bra24
,
522 unsigned int val
= (((insn
>> 8) & (15 << 0)));
525 DEFAULT (0) : return insns
[val
];