1 /* Simulator instruction decoder for iq2000bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 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 3 of the License, or
12 (at your option) any later version.
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
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 #define WANT_CPU iq2000bf
25 #define WANT_CPU_IQ2000BF
28 #include "sim-assert.h"
30 /* The instruction descriptor array.
31 This is computed at runtime. Space for it is not malloc'd to save a
32 teensy bit of cpu in the decoder. Moving it to malloc space is trivial
33 but won't be done until necessary (we don't currently support the runtime
34 addition of instructions nor an SMP machine with different cpus). */
35 static IDESC iq2000bf_insn_data
[IQ2000BF_INSN_BMB
+ 1];
37 /* Commas between elements are contained in the macros.
38 Some of these are conditionally compiled out. */
40 static const struct insn_sem iq2000bf_insn_sem
[] =
42 { VIRTUAL_INSN_X_INVALID
, IQ2000BF_INSN_X_INVALID
, IQ2000BF_SFMT_EMPTY
},
43 { VIRTUAL_INSN_X_AFTER
, IQ2000BF_INSN_X_AFTER
, IQ2000BF_SFMT_EMPTY
},
44 { VIRTUAL_INSN_X_BEFORE
, IQ2000BF_INSN_X_BEFORE
, IQ2000BF_SFMT_EMPTY
},
45 { VIRTUAL_INSN_X_CTI_CHAIN
, IQ2000BF_INSN_X_CTI_CHAIN
, IQ2000BF_SFMT_EMPTY
},
46 { VIRTUAL_INSN_X_CHAIN
, IQ2000BF_INSN_X_CHAIN
, IQ2000BF_SFMT_EMPTY
},
47 { VIRTUAL_INSN_X_BEGIN
, IQ2000BF_INSN_X_BEGIN
, IQ2000BF_SFMT_EMPTY
},
48 { IQ2000_INSN_ADD
, IQ2000BF_INSN_ADD
, IQ2000BF_SFMT_ADD
},
49 { IQ2000_INSN_ADDI
, IQ2000BF_INSN_ADDI
, IQ2000BF_SFMT_ADDI
},
50 { IQ2000_INSN_ADDIU
, IQ2000BF_INSN_ADDIU
, IQ2000BF_SFMT_ADDI
},
51 { IQ2000_INSN_ADDU
, IQ2000BF_INSN_ADDU
, IQ2000BF_SFMT_ADD
},
52 { IQ2000_INSN_ADO16
, IQ2000BF_INSN_ADO16
, IQ2000BF_SFMT_ADO16
},
53 { IQ2000_INSN_AND
, IQ2000BF_INSN_AND
, IQ2000BF_SFMT_ADD
},
54 { IQ2000_INSN_ANDI
, IQ2000BF_INSN_ANDI
, IQ2000BF_SFMT_ADDI
},
55 { IQ2000_INSN_ANDOI
, IQ2000BF_INSN_ANDOI
, IQ2000BF_SFMT_ADDI
},
56 { IQ2000_INSN_NOR
, IQ2000BF_INSN_NOR
, IQ2000BF_SFMT_ADD
},
57 { IQ2000_INSN_OR
, IQ2000BF_INSN_OR
, IQ2000BF_SFMT_ADD
},
58 { IQ2000_INSN_ORI
, IQ2000BF_INSN_ORI
, IQ2000BF_SFMT_ADDI
},
59 { IQ2000_INSN_RAM
, IQ2000BF_INSN_RAM
, IQ2000BF_SFMT_RAM
},
60 { IQ2000_INSN_SLL
, IQ2000BF_INSN_SLL
, IQ2000BF_SFMT_SLL
},
61 { IQ2000_INSN_SLLV
, IQ2000BF_INSN_SLLV
, IQ2000BF_SFMT_ADD
},
62 { IQ2000_INSN_SLMV
, IQ2000BF_INSN_SLMV
, IQ2000BF_SFMT_SLMV
},
63 { IQ2000_INSN_SLT
, IQ2000BF_INSN_SLT
, IQ2000BF_SFMT_SLT
},
64 { IQ2000_INSN_SLTI
, IQ2000BF_INSN_SLTI
, IQ2000BF_SFMT_SLTI
},
65 { IQ2000_INSN_SLTIU
, IQ2000BF_INSN_SLTIU
, IQ2000BF_SFMT_SLTI
},
66 { IQ2000_INSN_SLTU
, IQ2000BF_INSN_SLTU
, IQ2000BF_SFMT_SLT
},
67 { IQ2000_INSN_SRA
, IQ2000BF_INSN_SRA
, IQ2000BF_SFMT_SLL
},
68 { IQ2000_INSN_SRAV
, IQ2000BF_INSN_SRAV
, IQ2000BF_SFMT_ADD
},
69 { IQ2000_INSN_SRL
, IQ2000BF_INSN_SRL
, IQ2000BF_SFMT_SLL
},
70 { IQ2000_INSN_SRLV
, IQ2000BF_INSN_SRLV
, IQ2000BF_SFMT_ADD
},
71 { IQ2000_INSN_SRMV
, IQ2000BF_INSN_SRMV
, IQ2000BF_SFMT_SLMV
},
72 { IQ2000_INSN_SUB
, IQ2000BF_INSN_SUB
, IQ2000BF_SFMT_ADD
},
73 { IQ2000_INSN_SUBU
, IQ2000BF_INSN_SUBU
, IQ2000BF_SFMT_ADD
},
74 { IQ2000_INSN_XOR
, IQ2000BF_INSN_XOR
, IQ2000BF_SFMT_ADD
},
75 { IQ2000_INSN_XORI
, IQ2000BF_INSN_XORI
, IQ2000BF_SFMT_ADDI
},
76 { IQ2000_INSN_BBI
, IQ2000BF_INSN_BBI
, IQ2000BF_SFMT_BBI
},
77 { IQ2000_INSN_BBIN
, IQ2000BF_INSN_BBIN
, IQ2000BF_SFMT_BBI
},
78 { IQ2000_INSN_BBV
, IQ2000BF_INSN_BBV
, IQ2000BF_SFMT_BBV
},
79 { IQ2000_INSN_BBVN
, IQ2000BF_INSN_BBVN
, IQ2000BF_SFMT_BBV
},
80 { IQ2000_INSN_BEQ
, IQ2000BF_INSN_BEQ
, IQ2000BF_SFMT_BBV
},
81 { IQ2000_INSN_BEQL
, IQ2000BF_INSN_BEQL
, IQ2000BF_SFMT_BBV
},
82 { IQ2000_INSN_BGEZ
, IQ2000BF_INSN_BGEZ
, IQ2000BF_SFMT_BGEZ
},
83 { IQ2000_INSN_BGEZAL
, IQ2000BF_INSN_BGEZAL
, IQ2000BF_SFMT_BGEZAL
},
84 { IQ2000_INSN_BGEZALL
, IQ2000BF_INSN_BGEZALL
, IQ2000BF_SFMT_BGEZAL
},
85 { IQ2000_INSN_BGEZL
, IQ2000BF_INSN_BGEZL
, IQ2000BF_SFMT_BGEZ
},
86 { IQ2000_INSN_BLTZ
, IQ2000BF_INSN_BLTZ
, IQ2000BF_SFMT_BGEZ
},
87 { IQ2000_INSN_BLTZL
, IQ2000BF_INSN_BLTZL
, IQ2000BF_SFMT_BGEZ
},
88 { IQ2000_INSN_BLTZAL
, IQ2000BF_INSN_BLTZAL
, IQ2000BF_SFMT_BGEZAL
},
89 { IQ2000_INSN_BLTZALL
, IQ2000BF_INSN_BLTZALL
, IQ2000BF_SFMT_BGEZAL
},
90 { IQ2000_INSN_BMB0
, IQ2000BF_INSN_BMB0
, IQ2000BF_SFMT_BBV
},
91 { IQ2000_INSN_BMB1
, IQ2000BF_INSN_BMB1
, IQ2000BF_SFMT_BBV
},
92 { IQ2000_INSN_BMB2
, IQ2000BF_INSN_BMB2
, IQ2000BF_SFMT_BBV
},
93 { IQ2000_INSN_BMB3
, IQ2000BF_INSN_BMB3
, IQ2000BF_SFMT_BBV
},
94 { IQ2000_INSN_BNE
, IQ2000BF_INSN_BNE
, IQ2000BF_SFMT_BBV
},
95 { IQ2000_INSN_BNEL
, IQ2000BF_INSN_BNEL
, IQ2000BF_SFMT_BBV
},
96 { IQ2000_INSN_JALR
, IQ2000BF_INSN_JALR
, IQ2000BF_SFMT_JALR
},
97 { IQ2000_INSN_JR
, IQ2000BF_INSN_JR
, IQ2000BF_SFMT_JR
},
98 { IQ2000_INSN_LB
, IQ2000BF_INSN_LB
, IQ2000BF_SFMT_LB
},
99 { IQ2000_INSN_LBU
, IQ2000BF_INSN_LBU
, IQ2000BF_SFMT_LB
},
100 { IQ2000_INSN_LH
, IQ2000BF_INSN_LH
, IQ2000BF_SFMT_LH
},
101 { IQ2000_INSN_LHU
, IQ2000BF_INSN_LHU
, IQ2000BF_SFMT_LH
},
102 { IQ2000_INSN_LUI
, IQ2000BF_INSN_LUI
, IQ2000BF_SFMT_LUI
},
103 { IQ2000_INSN_LW
, IQ2000BF_INSN_LW
, IQ2000BF_SFMT_LW
},
104 { IQ2000_INSN_SB
, IQ2000BF_INSN_SB
, IQ2000BF_SFMT_SB
},
105 { IQ2000_INSN_SH
, IQ2000BF_INSN_SH
, IQ2000BF_SFMT_SH
},
106 { IQ2000_INSN_SW
, IQ2000BF_INSN_SW
, IQ2000BF_SFMT_SW
},
107 { IQ2000_INSN_BREAK
, IQ2000BF_INSN_BREAK
, IQ2000BF_SFMT_BREAK
},
108 { IQ2000_INSN_SYSCALL
, IQ2000BF_INSN_SYSCALL
, IQ2000BF_SFMT_SYSCALL
},
109 { IQ2000_INSN_ANDOUI
, IQ2000BF_INSN_ANDOUI
, IQ2000BF_SFMT_ANDOUI
},
110 { IQ2000_INSN_ORUI
, IQ2000BF_INSN_ORUI
, IQ2000BF_SFMT_ANDOUI
},
111 { IQ2000_INSN_BGTZ
, IQ2000BF_INSN_BGTZ
, IQ2000BF_SFMT_BGEZ
},
112 { IQ2000_INSN_BGTZL
, IQ2000BF_INSN_BGTZL
, IQ2000BF_SFMT_BGEZ
},
113 { IQ2000_INSN_BLEZ
, IQ2000BF_INSN_BLEZ
, IQ2000BF_SFMT_BGEZ
},
114 { IQ2000_INSN_BLEZL
, IQ2000BF_INSN_BLEZL
, IQ2000BF_SFMT_BGEZ
},
115 { IQ2000_INSN_MRGB
, IQ2000BF_INSN_MRGB
, IQ2000BF_SFMT_MRGB
},
116 { IQ2000_INSN_BCTXT
, IQ2000BF_INSN_BCTXT
, IQ2000BF_SFMT_BCTXT
},
117 { IQ2000_INSN_BC0F
, IQ2000BF_INSN_BC0F
, IQ2000BF_SFMT_BCTXT
},
118 { IQ2000_INSN_BC0FL
, IQ2000BF_INSN_BC0FL
, IQ2000BF_SFMT_BCTXT
},
119 { IQ2000_INSN_BC3F
, IQ2000BF_INSN_BC3F
, IQ2000BF_SFMT_BCTXT
},
120 { IQ2000_INSN_BC3FL
, IQ2000BF_INSN_BC3FL
, IQ2000BF_SFMT_BCTXT
},
121 { IQ2000_INSN_BC0T
, IQ2000BF_INSN_BC0T
, IQ2000BF_SFMT_BCTXT
},
122 { IQ2000_INSN_BC0TL
, IQ2000BF_INSN_BC0TL
, IQ2000BF_SFMT_BCTXT
},
123 { IQ2000_INSN_BC3T
, IQ2000BF_INSN_BC3T
, IQ2000BF_SFMT_BCTXT
},
124 { IQ2000_INSN_BC3TL
, IQ2000BF_INSN_BC3TL
, IQ2000BF_SFMT_BCTXT
},
125 { IQ2000_INSN_CFC0
, IQ2000BF_INSN_CFC0
, IQ2000BF_SFMT_SYSCALL
},
126 { IQ2000_INSN_CFC1
, IQ2000BF_INSN_CFC1
, IQ2000BF_SFMT_SYSCALL
},
127 { IQ2000_INSN_CFC2
, IQ2000BF_INSN_CFC2
, IQ2000BF_SFMT_SYSCALL
},
128 { IQ2000_INSN_CFC3
, IQ2000BF_INSN_CFC3
, IQ2000BF_SFMT_SYSCALL
},
129 { IQ2000_INSN_CHKHDR
, IQ2000BF_INSN_CHKHDR
, IQ2000BF_SFMT_SYSCALL
},
130 { IQ2000_INSN_CTC0
, IQ2000BF_INSN_CTC0
, IQ2000BF_SFMT_SYSCALL
},
131 { IQ2000_INSN_CTC1
, IQ2000BF_INSN_CTC1
, IQ2000BF_SFMT_SYSCALL
},
132 { IQ2000_INSN_CTC2
, IQ2000BF_INSN_CTC2
, IQ2000BF_SFMT_SYSCALL
},
133 { IQ2000_INSN_CTC3
, IQ2000BF_INSN_CTC3
, IQ2000BF_SFMT_SYSCALL
},
134 { IQ2000_INSN_JCR
, IQ2000BF_INSN_JCR
, IQ2000BF_SFMT_BCTXT
},
135 { IQ2000_INSN_LUC32
, IQ2000BF_INSN_LUC32
, IQ2000BF_SFMT_SYSCALL
},
136 { IQ2000_INSN_LUC32L
, IQ2000BF_INSN_LUC32L
, IQ2000BF_SFMT_SYSCALL
},
137 { IQ2000_INSN_LUC64
, IQ2000BF_INSN_LUC64
, IQ2000BF_SFMT_SYSCALL
},
138 { IQ2000_INSN_LUC64L
, IQ2000BF_INSN_LUC64L
, IQ2000BF_SFMT_SYSCALL
},
139 { IQ2000_INSN_LUK
, IQ2000BF_INSN_LUK
, IQ2000BF_SFMT_SYSCALL
},
140 { IQ2000_INSN_LULCK
, IQ2000BF_INSN_LULCK
, IQ2000BF_SFMT_SYSCALL
},
141 { IQ2000_INSN_LUM32
, IQ2000BF_INSN_LUM32
, IQ2000BF_SFMT_SYSCALL
},
142 { IQ2000_INSN_LUM32L
, IQ2000BF_INSN_LUM32L
, IQ2000BF_SFMT_SYSCALL
},
143 { IQ2000_INSN_LUM64
, IQ2000BF_INSN_LUM64
, IQ2000BF_SFMT_SYSCALL
},
144 { IQ2000_INSN_LUM64L
, IQ2000BF_INSN_LUM64L
, IQ2000BF_SFMT_SYSCALL
},
145 { IQ2000_INSN_LUR
, IQ2000BF_INSN_LUR
, IQ2000BF_SFMT_SYSCALL
},
146 { IQ2000_INSN_LURL
, IQ2000BF_INSN_LURL
, IQ2000BF_SFMT_SYSCALL
},
147 { IQ2000_INSN_LUULCK
, IQ2000BF_INSN_LUULCK
, IQ2000BF_SFMT_SYSCALL
},
148 { IQ2000_INSN_MFC0
, IQ2000BF_INSN_MFC0
, IQ2000BF_SFMT_SYSCALL
},
149 { IQ2000_INSN_MFC1
, IQ2000BF_INSN_MFC1
, IQ2000BF_SFMT_SYSCALL
},
150 { IQ2000_INSN_MFC2
, IQ2000BF_INSN_MFC2
, IQ2000BF_SFMT_SYSCALL
},
151 { IQ2000_INSN_MFC3
, IQ2000BF_INSN_MFC3
, IQ2000BF_SFMT_SYSCALL
},
152 { IQ2000_INSN_MTC0
, IQ2000BF_INSN_MTC0
, IQ2000BF_SFMT_SYSCALL
},
153 { IQ2000_INSN_MTC1
, IQ2000BF_INSN_MTC1
, IQ2000BF_SFMT_SYSCALL
},
154 { IQ2000_INSN_MTC2
, IQ2000BF_INSN_MTC2
, IQ2000BF_SFMT_SYSCALL
},
155 { IQ2000_INSN_MTC3
, IQ2000BF_INSN_MTC3
, IQ2000BF_SFMT_SYSCALL
},
156 { IQ2000_INSN_PKRL
, IQ2000BF_INSN_PKRL
, IQ2000BF_SFMT_SYSCALL
},
157 { IQ2000_INSN_PKRLR1
, IQ2000BF_INSN_PKRLR1
, IQ2000BF_SFMT_SYSCALL
},
158 { IQ2000_INSN_PKRLR30
, IQ2000BF_INSN_PKRLR30
, IQ2000BF_SFMT_SYSCALL
},
159 { IQ2000_INSN_RB
, IQ2000BF_INSN_RB
, IQ2000BF_SFMT_SYSCALL
},
160 { IQ2000_INSN_RBR1
, IQ2000BF_INSN_RBR1
, IQ2000BF_SFMT_SYSCALL
},
161 { IQ2000_INSN_RBR30
, IQ2000BF_INSN_RBR30
, IQ2000BF_SFMT_SYSCALL
},
162 { IQ2000_INSN_RFE
, IQ2000BF_INSN_RFE
, IQ2000BF_SFMT_SYSCALL
},
163 { IQ2000_INSN_RX
, IQ2000BF_INSN_RX
, IQ2000BF_SFMT_SYSCALL
},
164 { IQ2000_INSN_RXR1
, IQ2000BF_INSN_RXR1
, IQ2000BF_SFMT_SYSCALL
},
165 { IQ2000_INSN_RXR30
, IQ2000BF_INSN_RXR30
, IQ2000BF_SFMT_SYSCALL
},
166 { IQ2000_INSN_SLEEP
, IQ2000BF_INSN_SLEEP
, IQ2000BF_SFMT_SYSCALL
},
167 { IQ2000_INSN_SRRD
, IQ2000BF_INSN_SRRD
, IQ2000BF_SFMT_SYSCALL
},
168 { IQ2000_INSN_SRRDL
, IQ2000BF_INSN_SRRDL
, IQ2000BF_SFMT_SYSCALL
},
169 { IQ2000_INSN_SRULCK
, IQ2000BF_INSN_SRULCK
, IQ2000BF_SFMT_SYSCALL
},
170 { IQ2000_INSN_SRWR
, IQ2000BF_INSN_SRWR
, IQ2000BF_SFMT_SYSCALL
},
171 { IQ2000_INSN_SRWRU
, IQ2000BF_INSN_SRWRU
, IQ2000BF_SFMT_SYSCALL
},
172 { IQ2000_INSN_TRAPQFL
, IQ2000BF_INSN_TRAPQFL
, IQ2000BF_SFMT_SYSCALL
},
173 { IQ2000_INSN_TRAPQNE
, IQ2000BF_INSN_TRAPQNE
, IQ2000BF_SFMT_SYSCALL
},
174 { IQ2000_INSN_TRAPREL
, IQ2000BF_INSN_TRAPREL
, IQ2000BF_SFMT_SYSCALL
},
175 { IQ2000_INSN_WB
, IQ2000BF_INSN_WB
, IQ2000BF_SFMT_SYSCALL
},
176 { IQ2000_INSN_WBU
, IQ2000BF_INSN_WBU
, IQ2000BF_SFMT_SYSCALL
},
177 { IQ2000_INSN_WBR1
, IQ2000BF_INSN_WBR1
, IQ2000BF_SFMT_SYSCALL
},
178 { IQ2000_INSN_WBR1U
, IQ2000BF_INSN_WBR1U
, IQ2000BF_SFMT_SYSCALL
},
179 { IQ2000_INSN_WBR30
, IQ2000BF_INSN_WBR30
, IQ2000BF_SFMT_SYSCALL
},
180 { IQ2000_INSN_WBR30U
, IQ2000BF_INSN_WBR30U
, IQ2000BF_SFMT_SYSCALL
},
181 { IQ2000_INSN_WX
, IQ2000BF_INSN_WX
, IQ2000BF_SFMT_SYSCALL
},
182 { IQ2000_INSN_WXU
, IQ2000BF_INSN_WXU
, IQ2000BF_SFMT_SYSCALL
},
183 { IQ2000_INSN_WXR1
, IQ2000BF_INSN_WXR1
, IQ2000BF_SFMT_SYSCALL
},
184 { IQ2000_INSN_WXR1U
, IQ2000BF_INSN_WXR1U
, IQ2000BF_SFMT_SYSCALL
},
185 { IQ2000_INSN_WXR30
, IQ2000BF_INSN_WXR30
, IQ2000BF_SFMT_SYSCALL
},
186 { IQ2000_INSN_WXR30U
, IQ2000BF_INSN_WXR30U
, IQ2000BF_SFMT_SYSCALL
},
187 { IQ2000_INSN_LDW
, IQ2000BF_INSN_LDW
, IQ2000BF_SFMT_LDW
},
188 { IQ2000_INSN_SDW
, IQ2000BF_INSN_SDW
, IQ2000BF_SFMT_SDW
},
189 { IQ2000_INSN_J
, IQ2000BF_INSN_J
, IQ2000BF_SFMT_J
},
190 { IQ2000_INSN_JAL
, IQ2000BF_INSN_JAL
, IQ2000BF_SFMT_JAL
},
191 { IQ2000_INSN_BMB
, IQ2000BF_INSN_BMB
, IQ2000BF_SFMT_BBV
},
194 static const struct insn_sem iq2000bf_insn_sem_invalid
= {
195 VIRTUAL_INSN_X_INVALID
, IQ2000BF_INSN_X_INVALID
, IQ2000BF_SFMT_EMPTY
198 /* Initialize an IDESC from the compile-time computable parts. */
201 init_idesc (SIM_CPU
*cpu
, IDESC
*id
, const struct insn_sem
*t
)
203 const CGEN_INSN
*insn_table
= CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu
))->init_entries
;
207 if ((int) t
->type
<= 0)
208 id
->idata
= & cgen_virtual_insn_table
[- (int) t
->type
];
210 id
->idata
= & insn_table
[t
->type
];
211 id
->attrs
= CGEN_INSN_ATTRS (id
->idata
);
212 /* Oh my god, a magic number. */
213 id
->length
= CGEN_INSN_BITSIZE (id
->idata
) / 8;
215 #if WITH_PROFILE_MODEL_P
216 id
->timing
= & MODEL_TIMING (CPU_MODEL (cpu
)) [t
->index
];
218 SIM_DESC sd
= CPU_STATE (cpu
);
219 SIM_ASSERT (t
->index
== id
->timing
->num
);
223 /* Semantic pointers are initialized elsewhere. */
226 /* Initialize the instruction descriptor table. */
229 iq2000bf_init_idesc_table (SIM_CPU
*cpu
)
232 const struct insn_sem
*t
,*tend
;
233 int tabsize
= sizeof (iq2000bf_insn_data
) / sizeof (IDESC
);
234 IDESC
*table
= iq2000bf_insn_data
;
236 memset (table
, 0, tabsize
* sizeof (IDESC
));
238 /* First set all entries to the `invalid insn'. */
239 t
= & iq2000bf_insn_sem_invalid
;
240 for (id
= table
, tabend
= table
+ tabsize
; id
< tabend
; ++id
)
241 init_idesc (cpu
, id
, t
);
243 /* Now fill in the values for the chosen cpu. */
244 for (t
= iq2000bf_insn_sem
, tend
= t
+ sizeof (iq2000bf_insn_sem
) / sizeof (*t
);
247 init_idesc (cpu
, & table
[t
->index
], t
);
250 /* Link the IDESC table into the cpu. */
251 CPU_IDESC (cpu
) = table
;
254 /* Given an instruction, return a pointer to its IDESC entry. */
257 iq2000bf_decode (SIM_CPU
*current_cpu
, IADDR pc
,
258 CGEN_INSN_INT base_insn
, CGEN_INSN_INT entire_insn
,
261 /* Result of decoder. */
262 IQ2000BF_INSN_TYPE itype
;
265 CGEN_INSN_INT insn
= base_insn
;
268 unsigned int val
= (((insn
>> 26) & (63 << 0)));
273 unsigned int val
= (((insn
>> 1) & (1 << 4)) | ((insn
>> 0) & (15 << 0)));
276 case 0 : itype
= IQ2000BF_INSN_SLL
;goto extract_sfmt_sll
;
277 case 1 : itype
= IQ2000BF_INSN_SLMV
;goto extract_sfmt_slmv
;
278 case 2 : itype
= IQ2000BF_INSN_SRL
;goto extract_sfmt_sll
;
279 case 3 : itype
= IQ2000BF_INSN_SRA
;goto extract_sfmt_sll
;
280 case 4 : itype
= IQ2000BF_INSN_SLLV
;goto extract_sfmt_add
;
281 case 5 : itype
= IQ2000BF_INSN_SRMV
;goto extract_sfmt_slmv
;
282 case 6 : itype
= IQ2000BF_INSN_SRLV
;goto extract_sfmt_add
;
283 case 7 : itype
= IQ2000BF_INSN_SRAV
;goto extract_sfmt_add
;
284 case 8 : itype
= IQ2000BF_INSN_JR
;goto extract_sfmt_jr
;
285 case 9 : itype
= IQ2000BF_INSN_JALR
;goto extract_sfmt_jalr
;
286 case 10 : itype
= IQ2000BF_INSN_JCR
;goto extract_sfmt_bctxt
;
287 case 12 : itype
= IQ2000BF_INSN_SYSCALL
;goto extract_sfmt_syscall
;
288 case 13 : itype
= IQ2000BF_INSN_BREAK
;goto extract_sfmt_break
;
289 case 14 : itype
= IQ2000BF_INSN_SLEEP
;goto extract_sfmt_syscall
;
290 case 16 : itype
= IQ2000BF_INSN_ADD
;goto extract_sfmt_add
;
291 case 17 : itype
= IQ2000BF_INSN_ADDU
;goto extract_sfmt_add
;
292 case 18 : itype
= IQ2000BF_INSN_SUB
;goto extract_sfmt_add
;
293 case 19 : itype
= IQ2000BF_INSN_SUBU
;goto extract_sfmt_add
;
294 case 20 : itype
= IQ2000BF_INSN_AND
;goto extract_sfmt_add
;
295 case 21 : itype
= IQ2000BF_INSN_OR
;goto extract_sfmt_add
;
296 case 22 : itype
= IQ2000BF_INSN_XOR
;goto extract_sfmt_add
;
297 case 23 : itype
= IQ2000BF_INSN_NOR
;goto extract_sfmt_add
;
298 case 25 : itype
= IQ2000BF_INSN_ADO16
;goto extract_sfmt_ado16
;
299 case 26 : itype
= IQ2000BF_INSN_SLT
;goto extract_sfmt_slt
;
300 case 27 : itype
= IQ2000BF_INSN_SLTU
;goto extract_sfmt_slt
;
301 case 29 : itype
= IQ2000BF_INSN_MRGB
;goto extract_sfmt_mrgb
;
302 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
307 unsigned int val
= (((insn
>> 17) & (1 << 3)) | ((insn
>> 16) & (7 << 0)));
310 case 0 : itype
= IQ2000BF_INSN_BLTZ
;goto extract_sfmt_bgez
;
311 case 1 : itype
= IQ2000BF_INSN_BGEZ
;goto extract_sfmt_bgez
;
312 case 2 : itype
= IQ2000BF_INSN_BLTZL
;goto extract_sfmt_bgez
;
313 case 3 : itype
= IQ2000BF_INSN_BGEZL
;goto extract_sfmt_bgez
;
314 case 6 : itype
= IQ2000BF_INSN_BCTXT
;goto extract_sfmt_bctxt
;
315 case 8 : itype
= IQ2000BF_INSN_BLTZAL
;goto extract_sfmt_bgezal
;
316 case 9 : itype
= IQ2000BF_INSN_BGEZAL
;goto extract_sfmt_bgezal
;
317 case 10 : itype
= IQ2000BF_INSN_BLTZALL
;goto extract_sfmt_bgezal
;
318 case 11 : itype
= IQ2000BF_INSN_BGEZALL
;goto extract_sfmt_bgezal
;
319 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
322 case 2 : itype
= IQ2000BF_INSN_J
;goto extract_sfmt_j
;
323 case 3 : itype
= IQ2000BF_INSN_JAL
;goto extract_sfmt_jal
;
324 case 4 : itype
= IQ2000BF_INSN_BEQ
;goto extract_sfmt_bbv
;
325 case 5 : itype
= IQ2000BF_INSN_BNE
;goto extract_sfmt_bbv
;
326 case 6 : itype
= IQ2000BF_INSN_BLEZ
;goto extract_sfmt_bgez
;
327 case 7 : itype
= IQ2000BF_INSN_BGTZ
;goto extract_sfmt_bgez
;
328 case 8 : itype
= IQ2000BF_INSN_ADDI
;goto extract_sfmt_addi
;
329 case 9 : itype
= IQ2000BF_INSN_ADDIU
;goto extract_sfmt_addi
;
330 case 10 : itype
= IQ2000BF_INSN_SLTI
;goto extract_sfmt_slti
;
331 case 11 : itype
= IQ2000BF_INSN_SLTIU
;goto extract_sfmt_slti
;
332 case 12 : itype
= IQ2000BF_INSN_ANDI
;goto extract_sfmt_addi
;
333 case 13 : itype
= IQ2000BF_INSN_ORI
;goto extract_sfmt_addi
;
334 case 14 : itype
= IQ2000BF_INSN_XORI
;goto extract_sfmt_addi
;
335 case 15 : itype
= IQ2000BF_INSN_LUI
;goto extract_sfmt_lui
;
338 unsigned int val
= (((insn
>> 19) & (15 << 3)) | ((insn
>> 15) & (3 << 1)) | ((insn
>> 4) & (1 << 0)));
341 case 0 : /* fall through */
342 case 2 : /* fall through */
343 case 4 : /* fall through */
344 case 6 : itype
= IQ2000BF_INSN_MFC0
;goto extract_sfmt_syscall
;
345 case 8 : /* fall through */
346 case 10 : /* fall through */
347 case 12 : /* fall through */
348 case 14 : itype
= IQ2000BF_INSN_CFC0
;goto extract_sfmt_syscall
;
349 case 16 : /* fall through */
350 case 18 : /* fall through */
351 case 20 : /* fall through */
352 case 22 : itype
= IQ2000BF_INSN_MTC0
;goto extract_sfmt_syscall
;
353 case 24 : /* fall through */
354 case 26 : /* fall through */
355 case 28 : /* fall through */
356 case 30 : itype
= IQ2000BF_INSN_CTC0
;goto extract_sfmt_syscall
;
357 case 32 : /* fall through */
358 case 33 : itype
= IQ2000BF_INSN_BC0F
;goto extract_sfmt_bctxt
;
359 case 34 : /* fall through */
360 case 35 : itype
= IQ2000BF_INSN_BC0T
;goto extract_sfmt_bctxt
;
361 case 36 : /* fall through */
362 case 37 : itype
= IQ2000BF_INSN_BC0FL
;goto extract_sfmt_bctxt
;
363 case 38 : /* fall through */
364 case 39 : itype
= IQ2000BF_INSN_BC0TL
;goto extract_sfmt_bctxt
;
365 case 65 : itype
= IQ2000BF_INSN_RFE
;goto extract_sfmt_syscall
;
366 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
371 unsigned int val
= (((insn
>> 22) & (3 << 0)));
374 case 0 : itype
= IQ2000BF_INSN_MFC1
;goto extract_sfmt_syscall
;
375 case 1 : itype
= IQ2000BF_INSN_CFC1
;goto extract_sfmt_syscall
;
376 case 2 : itype
= IQ2000BF_INSN_MTC1
;goto extract_sfmt_syscall
;
377 case 3 : itype
= IQ2000BF_INSN_CTC1
;goto extract_sfmt_syscall
;
378 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
383 unsigned int val
= (((insn
>> 16) & (3 << 5)) | ((insn
>> 0) & (31 << 0)));
388 unsigned int val
= (((insn
>> 23) & (1 << 0)));
391 case 0 : itype
= IQ2000BF_INSN_MFC2
;goto extract_sfmt_syscall
;
392 case 1 : itype
= IQ2000BF_INSN_MTC2
;goto extract_sfmt_syscall
;
393 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
396 case 32 : itype
= IQ2000BF_INSN_LUULCK
;goto extract_sfmt_syscall
;
397 case 33 : itype
= IQ2000BF_INSN_LUR
;goto extract_sfmt_syscall
;
398 case 34 : itype
= IQ2000BF_INSN_LUM32
;goto extract_sfmt_syscall
;
399 case 35 : itype
= IQ2000BF_INSN_LUC32
;goto extract_sfmt_syscall
;
400 case 36 : itype
= IQ2000BF_INSN_LULCK
;goto extract_sfmt_syscall
;
401 case 37 : itype
= IQ2000BF_INSN_LURL
;goto extract_sfmt_syscall
;
402 case 38 : itype
= IQ2000BF_INSN_LUM32L
;goto extract_sfmt_syscall
;
403 case 39 : itype
= IQ2000BF_INSN_LUC32L
;goto extract_sfmt_syscall
;
404 case 40 : itype
= IQ2000BF_INSN_LUK
;goto extract_sfmt_syscall
;
405 case 42 : itype
= IQ2000BF_INSN_LUM64
;goto extract_sfmt_syscall
;
406 case 43 : itype
= IQ2000BF_INSN_LUC64
;goto extract_sfmt_syscall
;
407 case 46 : itype
= IQ2000BF_INSN_LUM64L
;goto extract_sfmt_syscall
;
408 case 47 : itype
= IQ2000BF_INSN_LUC64L
;goto extract_sfmt_syscall
;
409 case 48 : itype
= IQ2000BF_INSN_SRRD
;goto extract_sfmt_syscall
;
410 case 49 : itype
= IQ2000BF_INSN_SRWR
;goto extract_sfmt_syscall
;
411 case 52 : itype
= IQ2000BF_INSN_SRRDL
;goto extract_sfmt_syscall
;
412 case 53 : itype
= IQ2000BF_INSN_SRWRU
;goto extract_sfmt_syscall
;
413 case 54 : itype
= IQ2000BF_INSN_SRULCK
;goto extract_sfmt_syscall
;
416 unsigned int val
= (((insn
>> 23) & (1 << 0)));
419 case 0 : itype
= IQ2000BF_INSN_CFC2
;goto extract_sfmt_syscall
;
420 case 1 : itype
= IQ2000BF_INSN_CTC2
;goto extract_sfmt_syscall
;
421 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
424 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
429 unsigned int val
= (((insn
>> 19) & (31 << 2)) | ((insn
>> 0) & (3 << 0)));
432 case 0 : itype
= IQ2000BF_INSN_MFC3
;goto extract_sfmt_syscall
;
435 unsigned int val
= (((insn
>> 2) & (3 << 0)));
438 case 0 : itype
= IQ2000BF_INSN_WB
;goto extract_sfmt_syscall
;
439 case 1 : itype
= IQ2000BF_INSN_RB
;goto extract_sfmt_syscall
;
440 case 2 : itype
= IQ2000BF_INSN_TRAPQFL
;goto extract_sfmt_syscall
;
441 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
446 unsigned int val
= (((insn
>> 3) & (1 << 0)));
449 case 0 : itype
= IQ2000BF_INSN_WBU
;goto extract_sfmt_syscall
;
450 case 1 : itype
= IQ2000BF_INSN_TRAPQNE
;goto extract_sfmt_syscall
;
451 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
456 unsigned int val
= (((insn
>> 2) & (3 << 0)));
459 case 0 : itype
= IQ2000BF_INSN_WX
;goto extract_sfmt_syscall
;
460 case 1 : itype
= IQ2000BF_INSN_RX
;goto extract_sfmt_syscall
;
461 case 2 : itype
= IQ2000BF_INSN_TRAPREL
;goto extract_sfmt_syscall
;
462 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
467 unsigned int val
= (((insn
>> 2) & (1 << 0)));
470 case 0 : itype
= IQ2000BF_INSN_WXU
;goto extract_sfmt_syscall
;
471 case 1 : itype
= IQ2000BF_INSN_PKRL
;goto extract_sfmt_syscall
;
472 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
475 case 8 : itype
= IQ2000BF_INSN_CFC3
;goto extract_sfmt_syscall
;
476 case 16 : itype
= IQ2000BF_INSN_MTC3
;goto extract_sfmt_syscall
;
477 case 24 : itype
= IQ2000BF_INSN_CTC3
;goto extract_sfmt_syscall
;
478 case 32 : /* fall through */
479 case 33 : /* fall through */
480 case 34 : /* fall through */
483 unsigned int val
= (((insn
>> 16) & (3 << 0)));
486 case 0 : itype
= IQ2000BF_INSN_BC3F
;goto extract_sfmt_bctxt
;
487 case 1 : itype
= IQ2000BF_INSN_BC3T
;goto extract_sfmt_bctxt
;
488 case 2 : itype
= IQ2000BF_INSN_BC3FL
;goto extract_sfmt_bctxt
;
489 case 3 : itype
= IQ2000BF_INSN_BC3TL
;goto extract_sfmt_bctxt
;
490 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
493 case 36 : itype
= IQ2000BF_INSN_CHKHDR
;goto extract_sfmt_syscall
;
494 case 64 : /* fall through */
495 case 65 : /* fall through */
496 case 66 : /* fall through */
497 case 67 : itype
= IQ2000BF_INSN_WBR1
;goto extract_sfmt_syscall
;
498 case 68 : /* fall through */
499 case 69 : /* fall through */
500 case 70 : /* fall through */
501 case 71 : itype
= IQ2000BF_INSN_WBR1U
;goto extract_sfmt_syscall
;
502 case 72 : /* fall through */
503 case 73 : /* fall through */
504 case 74 : /* fall through */
505 case 75 : itype
= IQ2000BF_INSN_WBR30
;goto extract_sfmt_syscall
;
506 case 76 : /* fall through */
507 case 77 : /* fall through */
508 case 78 : /* fall through */
509 case 79 : itype
= IQ2000BF_INSN_WBR30U
;goto extract_sfmt_syscall
;
510 case 80 : /* fall through */
511 case 81 : /* fall through */
512 case 82 : /* fall through */
513 case 83 : itype
= IQ2000BF_INSN_WXR1
;goto extract_sfmt_syscall
;
514 case 84 : /* fall through */
515 case 85 : /* fall through */
516 case 86 : /* fall through */
517 case 87 : itype
= IQ2000BF_INSN_WXR1U
;goto extract_sfmt_syscall
;
518 case 88 : /* fall through */
519 case 89 : /* fall through */
520 case 90 : /* fall through */
521 case 91 : itype
= IQ2000BF_INSN_WXR30
;goto extract_sfmt_syscall
;
522 case 92 : /* fall through */
523 case 93 : /* fall through */
524 case 94 : /* fall through */
525 case 95 : itype
= IQ2000BF_INSN_WXR30U
;goto extract_sfmt_syscall
;
526 case 96 : /* fall through */
527 case 97 : /* fall through */
528 case 98 : /* fall through */
529 case 99 : itype
= IQ2000BF_INSN_RBR1
;goto extract_sfmt_syscall
;
530 case 104 : /* fall through */
531 case 105 : /* fall through */
532 case 106 : /* fall through */
533 case 107 : itype
= IQ2000BF_INSN_RBR30
;goto extract_sfmt_syscall
;
534 case 112 : /* fall through */
535 case 113 : /* fall through */
536 case 114 : /* fall through */
537 case 115 : itype
= IQ2000BF_INSN_RXR1
;goto extract_sfmt_syscall
;
538 case 116 : /* fall through */
539 case 117 : /* fall through */
540 case 118 : /* fall through */
541 case 119 : itype
= IQ2000BF_INSN_PKRLR1
;goto extract_sfmt_syscall
;
542 case 120 : /* fall through */
543 case 121 : /* fall through */
544 case 122 : /* fall through */
545 case 123 : itype
= IQ2000BF_INSN_RXR30
;goto extract_sfmt_syscall
;
546 case 124 : /* fall through */
547 case 125 : /* fall through */
548 case 126 : /* fall through */
549 case 127 : itype
= IQ2000BF_INSN_PKRLR30
;goto extract_sfmt_syscall
;
550 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
553 case 20 : itype
= IQ2000BF_INSN_BEQL
;goto extract_sfmt_bbv
;
554 case 21 : itype
= IQ2000BF_INSN_BNEL
;goto extract_sfmt_bbv
;
555 case 22 : itype
= IQ2000BF_INSN_BLEZL
;goto extract_sfmt_bgez
;
556 case 23 : itype
= IQ2000BF_INSN_BGTZL
;goto extract_sfmt_bgez
;
557 case 24 : itype
= IQ2000BF_INSN_BMB0
;goto extract_sfmt_bbv
;
558 case 25 : itype
= IQ2000BF_INSN_BMB1
;goto extract_sfmt_bbv
;
559 case 26 : itype
= IQ2000BF_INSN_BMB2
;goto extract_sfmt_bbv
;
560 case 27 : itype
= IQ2000BF_INSN_BMB3
;goto extract_sfmt_bbv
;
561 case 28 : itype
= IQ2000BF_INSN_BBI
;goto extract_sfmt_bbi
;
562 case 29 : itype
= IQ2000BF_INSN_BBV
;goto extract_sfmt_bbv
;
563 case 30 : itype
= IQ2000BF_INSN_BBIN
;goto extract_sfmt_bbi
;
564 case 31 : itype
= IQ2000BF_INSN_BBVN
;goto extract_sfmt_bbv
;
565 case 32 : itype
= IQ2000BF_INSN_LB
;goto extract_sfmt_lb
;
566 case 33 : itype
= IQ2000BF_INSN_LH
;goto extract_sfmt_lh
;
567 case 35 : itype
= IQ2000BF_INSN_LW
;goto extract_sfmt_lw
;
568 case 36 : itype
= IQ2000BF_INSN_LBU
;goto extract_sfmt_lb
;
569 case 37 : itype
= IQ2000BF_INSN_LHU
;goto extract_sfmt_lh
;
570 case 39 : itype
= IQ2000BF_INSN_RAM
;goto extract_sfmt_ram
;
571 case 40 : itype
= IQ2000BF_INSN_SB
;goto extract_sfmt_sb
;
572 case 41 : itype
= IQ2000BF_INSN_SH
;goto extract_sfmt_sh
;
573 case 43 : itype
= IQ2000BF_INSN_SW
;goto extract_sfmt_sw
;
574 case 44 : itype
= IQ2000BF_INSN_ANDOI
;goto extract_sfmt_addi
;
575 case 45 : itype
= IQ2000BF_INSN_BMB
;goto extract_sfmt_bbv
;
576 case 47 : itype
= IQ2000BF_INSN_ORUI
;goto extract_sfmt_andoui
;
577 case 48 : itype
= IQ2000BF_INSN_LDW
;goto extract_sfmt_ldw
;
578 case 56 : itype
= IQ2000BF_INSN_SDW
;goto extract_sfmt_sdw
;
579 case 63 : itype
= IQ2000BF_INSN_ANDOUI
;goto extract_sfmt_andoui
;
580 default : itype
= IQ2000BF_INSN_X_INVALID
; goto extract_sfmt_empty
;
585 /* The instruction has been decoded, now extract the fields. */
589 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
590 #define FLD(f) abuf->fields.fmt_empty.f
593 /* Record the fields for the semantic handler. */
594 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_empty", (char *) 0));
602 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
603 CGEN_INSN_INT insn
= entire_insn
;
604 #define FLD(f) abuf->fields.sfmt_mrgb.f
609 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
610 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
611 f_rd
= EXTRACT_LSB0_UINT (insn
, 32, 15, 5);
613 /* Record the fields for the semantic handler. */
617 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_add", "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, "f_rd 0x%x", 'x', f_rd
, (char *) 0));
625 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
626 CGEN_INSN_INT insn
= entire_insn
;
627 #define FLD(f) abuf->fields.sfmt_addi.f
632 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
633 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
634 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
636 /* Record the fields for the semantic handler. */
640 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_addi", "f_imm 0x%x", 'x', f_imm
, "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
648 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
649 CGEN_INSN_INT insn
= entire_insn
;
650 #define FLD(f) abuf->fields.sfmt_mrgb.f
655 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
656 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
657 f_rd
= EXTRACT_LSB0_UINT (insn
, 32, 15, 5);
659 /* Record the fields for the semantic handler. */
663 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_ado16", "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, "f_rd 0x%x", 'x', f_rd
, (char *) 0));
671 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
672 CGEN_INSN_INT insn
= entire_insn
;
673 #define FLD(f) abuf->fields.sfmt_ram.f
680 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
681 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
682 f_rd
= EXTRACT_LSB0_UINT (insn
, 32, 15, 5);
683 f_shamt
= EXTRACT_LSB0_UINT (insn
, 32, 10, 5);
684 f_maskl
= EXTRACT_LSB0_UINT (insn
, 32, 4, 5);
686 /* Record the fields for the semantic handler. */
687 FLD (f_maskl
) = f_maskl
;
691 FLD (f_shamt
) = f_shamt
;
692 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_ram", "f_maskl 0x%x", 'x', f_maskl
, "f_rs 0x%x", 'x', f_rs
, "f_rd 0x%x", 'x', f_rd
, "f_rt 0x%x", 'x', f_rt
, "f_shamt 0x%x", 'x', f_shamt
, (char *) 0));
700 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
701 CGEN_INSN_INT insn
= entire_insn
;
702 #define FLD(f) abuf->fields.sfmt_ram.f
707 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
708 f_rd
= EXTRACT_LSB0_UINT (insn
, 32, 15, 5);
709 f_shamt
= EXTRACT_LSB0_UINT (insn
, 32, 10, 5);
711 /* Record the fields for the semantic handler. */
713 FLD (f_shamt
) = f_shamt
;
715 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_sll", "f_rt 0x%x", 'x', f_rt
, "f_shamt 0x%x", 'x', f_shamt
, "f_rd 0x%x", 'x', f_rd
, (char *) 0));
723 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
724 CGEN_INSN_INT insn
= entire_insn
;
725 #define FLD(f) abuf->fields.sfmt_ram.f
731 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
732 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
733 f_rd
= EXTRACT_LSB0_UINT (insn
, 32, 15, 5);
734 f_shamt
= EXTRACT_LSB0_UINT (insn
, 32, 10, 5);
736 /* Record the fields for the semantic handler. */
739 FLD (f_shamt
) = f_shamt
;
741 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_slmv", "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, "f_shamt 0x%x", 'x', f_shamt
, "f_rd 0x%x", 'x', f_rd
, (char *) 0));
749 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
750 CGEN_INSN_INT insn
= entire_insn
;
751 #define FLD(f) abuf->fields.sfmt_mrgb.f
756 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
757 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
758 f_rd
= EXTRACT_LSB0_UINT (insn
, 32, 15, 5);
760 /* Record the fields for the semantic handler. */
764 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_slt", "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, "f_rd 0x%x", 'x', f_rd
, (char *) 0));
772 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
773 CGEN_INSN_INT insn
= entire_insn
;
774 #define FLD(f) abuf->fields.sfmt_addi.f
779 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
780 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
781 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
783 /* Record the fields for the semantic handler. */
787 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_slti", "f_imm 0x%x", 'x', f_imm
, "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
795 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
796 CGEN_INSN_INT insn
= entire_insn
;
797 #define FLD(f) abuf->fields.sfmt_bbi.f
802 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
803 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
804 f_offset
= ((((EXTRACT_LSB0_INT (insn
, 32, 15, 16)) << (2))) + (((pc
) + (4))));
806 /* Record the fields for the semantic handler. */
809 FLD (i_offset
) = f_offset
;
810 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_bbi", "f_rt 0x%x", 'x', f_rt
, "f_rs 0x%x", 'x', f_rs
, "offset 0x%x", 'x', f_offset
, (char *) 0));
812 #if WITH_PROFILE_MODEL_P
813 /* Record the fields for profiling. */
814 if (PROFILE_MODEL_P (current_cpu
))
824 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
825 CGEN_INSN_INT insn
= entire_insn
;
826 #define FLD(f) abuf->fields.sfmt_bbi.f
831 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
832 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
833 f_offset
= ((((EXTRACT_LSB0_INT (insn
, 32, 15, 16)) << (2))) + (((pc
) + (4))));
835 /* Record the fields for the semantic handler. */
838 FLD (i_offset
) = f_offset
;
839 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_bbv", "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, "offset 0x%x", 'x', f_offset
, (char *) 0));
841 #if WITH_PROFILE_MODEL_P
842 /* Record the fields for profiling. */
843 if (PROFILE_MODEL_P (current_cpu
))
853 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
854 CGEN_INSN_INT insn
= entire_insn
;
855 #define FLD(f) abuf->fields.sfmt_bbi.f
859 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
860 f_offset
= ((((EXTRACT_LSB0_INT (insn
, 32, 15, 16)) << (2))) + (((pc
) + (4))));
862 /* Record the fields for the semantic handler. */
864 FLD (i_offset
) = f_offset
;
865 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_bgez", "f_rs 0x%x", 'x', f_rs
, "offset 0x%x", 'x', f_offset
, (char *) 0));
867 #if WITH_PROFILE_MODEL_P
868 /* Record the fields for profiling. */
869 if (PROFILE_MODEL_P (current_cpu
))
879 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
880 CGEN_INSN_INT insn
= entire_insn
;
881 #define FLD(f) abuf->fields.sfmt_bbi.f
885 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
886 f_offset
= ((((EXTRACT_LSB0_INT (insn
, 32, 15, 16)) << (2))) + (((pc
) + (4))));
888 /* Record the fields for the semantic handler. */
890 FLD (i_offset
) = f_offset
;
891 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_bgezal", "f_rs 0x%x", 'x', f_rs
, "offset 0x%x", 'x', f_offset
, (char *) 0));
893 #if WITH_PROFILE_MODEL_P
894 /* Record the fields for profiling. */
895 if (PROFILE_MODEL_P (current_cpu
))
905 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
906 CGEN_INSN_INT insn
= entire_insn
;
907 #define FLD(f) abuf->fields.sfmt_mrgb.f
911 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
912 f_rd
= EXTRACT_LSB0_UINT (insn
, 32, 15, 5);
914 /* Record the fields for the semantic handler. */
917 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_jalr", "f_rs 0x%x", 'x', f_rs
, "f_rd 0x%x", 'x', f_rd
, (char *) 0));
919 #if WITH_PROFILE_MODEL_P
920 /* Record the fields for profiling. */
921 if (PROFILE_MODEL_P (current_cpu
))
931 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
932 CGEN_INSN_INT insn
= entire_insn
;
933 #define FLD(f) abuf->fields.sfmt_bbi.f
936 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
938 /* Record the fields for the semantic handler. */
940 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_jr", "f_rs 0x%x", 'x', f_rs
, (char *) 0));
942 #if WITH_PROFILE_MODEL_P
943 /* Record the fields for profiling. */
944 if (PROFILE_MODEL_P (current_cpu
))
954 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
955 CGEN_INSN_INT insn
= entire_insn
;
956 #define FLD(f) abuf->fields.sfmt_addi.f
961 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
962 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
963 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
965 /* Record the fields for the semantic handler. */
969 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_lb", "f_rs 0x%x", 'x', f_rs
, "f_imm 0x%x", 'x', f_imm
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
977 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
978 CGEN_INSN_INT insn
= entire_insn
;
979 #define FLD(f) abuf->fields.sfmt_addi.f
984 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
985 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
986 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
988 /* Record the fields for the semantic handler. */
992 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_lh", "f_rs 0x%x", 'x', f_rs
, "f_imm 0x%x", 'x', f_imm
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
1000 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1001 CGEN_INSN_INT insn
= entire_insn
;
1002 #define FLD(f) abuf->fields.sfmt_addi.f
1006 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1007 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
1009 /* Record the fields for the semantic handler. */
1010 FLD (f_imm
) = f_imm
;
1012 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_lui", "f_imm 0x%x", 'x', f_imm
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
1020 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1021 CGEN_INSN_INT insn
= entire_insn
;
1022 #define FLD(f) abuf->fields.sfmt_addi.f
1027 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
1028 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1029 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
1031 /* Record the fields for the semantic handler. */
1033 FLD (f_imm
) = f_imm
;
1035 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_lw", "f_rs 0x%x", 'x', f_rs
, "f_imm 0x%x", 'x', f_imm
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
1043 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1044 CGEN_INSN_INT insn
= entire_insn
;
1045 #define FLD(f) abuf->fields.sfmt_addi.f
1050 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
1051 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1052 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
1054 /* Record the fields for the semantic handler. */
1056 FLD (f_imm
) = f_imm
;
1058 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_sb", "f_rs 0x%x", 'x', f_rs
, "f_imm 0x%x", 'x', f_imm
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
1066 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1067 CGEN_INSN_INT insn
= entire_insn
;
1068 #define FLD(f) abuf->fields.sfmt_addi.f
1073 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
1074 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1075 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
1077 /* Record the fields for the semantic handler. */
1079 FLD (f_imm
) = f_imm
;
1081 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_sh", "f_rs 0x%x", 'x', f_rs
, "f_imm 0x%x", 'x', f_imm
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
1089 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1090 CGEN_INSN_INT insn
= entire_insn
;
1091 #define FLD(f) abuf->fields.sfmt_addi.f
1096 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
1097 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1098 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
1100 /* Record the fields for the semantic handler. */
1102 FLD (f_imm
) = f_imm
;
1104 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_sw", "f_rs 0x%x", 'x', f_rs
, "f_imm 0x%x", 'x', f_imm
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
1112 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1113 #define FLD(f) abuf->fields.fmt_empty.f
1116 /* Record the fields for the semantic handler. */
1117 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_break", (char *) 0));
1119 #if WITH_PROFILE_MODEL_P
1120 /* Record the fields for profiling. */
1121 if (PROFILE_MODEL_P (current_cpu
))
1129 extract_sfmt_syscall
:
1131 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1132 #define FLD(f) abuf->fields.fmt_empty.f
1135 /* Record the fields for the semantic handler. */
1136 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_syscall", (char *) 0));
1142 extract_sfmt_andoui
:
1144 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1145 CGEN_INSN_INT insn
= entire_insn
;
1146 #define FLD(f) abuf->fields.sfmt_addi.f
1151 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
1152 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1153 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
1155 /* Record the fields for the semantic handler. */
1156 FLD (f_imm
) = f_imm
;
1159 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_andoui", "f_imm 0x%x", 'x', f_imm
, "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, (char *) 0));
1167 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1168 CGEN_INSN_INT insn
= entire_insn
;
1169 #define FLD(f) abuf->fields.sfmt_mrgb.f
1175 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
1176 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1177 f_rd
= EXTRACT_LSB0_UINT (insn
, 32, 15, 5);
1178 f_mask
= EXTRACT_LSB0_UINT (insn
, 32, 9, 4);
1180 /* Record the fields for the semantic handler. */
1181 FLD (f_mask
) = f_mask
;
1185 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_mrgb", "f_mask 0x%x", 'x', f_mask
, "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, "f_rd 0x%x", 'x', f_rd
, (char *) 0));
1193 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1194 #define FLD(f) abuf->fields.fmt_empty.f
1197 /* Record the fields for the semantic handler. */
1198 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_bctxt", (char *) 0));
1206 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1207 CGEN_INSN_INT insn
= entire_insn
;
1208 #define FLD(f) abuf->fields.sfmt_addi.f
1213 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
1214 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1215 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
1217 /* Record the fields for the semantic handler. */
1220 FLD (f_imm
) = f_imm
;
1221 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_ldw", "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, "f_imm 0x%x", 'x', f_imm
, (char *) 0));
1229 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1230 CGEN_INSN_INT insn
= entire_insn
;
1231 #define FLD(f) abuf->fields.sfmt_addi.f
1236 f_rs
= EXTRACT_LSB0_UINT (insn
, 32, 25, 5);
1237 f_rt
= EXTRACT_LSB0_UINT (insn
, 32, 20, 5);
1238 f_imm
= EXTRACT_LSB0_UINT (insn
, 32, 15, 16);
1240 /* Record the fields for the semantic handler. */
1243 FLD (f_imm
) = f_imm
;
1244 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_sdw", "f_rs 0x%x", 'x', f_rs
, "f_rt 0x%x", 'x', f_rt
, "f_imm 0x%x", 'x', f_imm
, (char *) 0));
1252 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1253 CGEN_INSN_INT insn
= entire_insn
;
1254 #define FLD(f) abuf->fields.sfmt_j.f
1257 f_jtarg
= ((((pc
) & (0xf0000000))) | (((EXTRACT_LSB0_UINT (insn
, 32, 15, 16)) << (2))));
1259 /* Record the fields for the semantic handler. */
1260 FLD (i_jmptarg
) = f_jtarg
;
1261 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_j", "jmptarg 0x%x", 'x', f_jtarg
, (char *) 0));
1263 #if WITH_PROFILE_MODEL_P
1264 /* Record the fields for profiling. */
1265 if (PROFILE_MODEL_P (current_cpu
))
1275 const IDESC
*idesc
= &iq2000bf_insn_data
[itype
];
1276 CGEN_INSN_INT insn
= entire_insn
;
1277 #define FLD(f) abuf->fields.sfmt_j.f
1280 f_jtarg
= ((((pc
) & (0xf0000000))) | (((EXTRACT_LSB0_UINT (insn
, 32, 15, 16)) << (2))));
1282 /* Record the fields for the semantic handler. */
1283 FLD (i_jmptarg
) = f_jtarg
;
1284 TRACE_EXTRACT (current_cpu
, abuf
, (current_cpu
, pc
, "sfmt_jal", "jmptarg 0x%x", 'x', f_jtarg
, (char *) 0));
1286 #if WITH_PROFILE_MODEL_P
1287 /* Record the fields for profiling. */
1288 if (PROFILE_MODEL_P (current_cpu
))