1 1.1 christos /* CPU family header for m32rxf. 2 1.1 christos 3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN. 4 1.1 christos 5 1.11 christos Copyright (C) 1996-2024 Free Software Foundation, Inc. 6 1.1 christos 7 1.1 christos This file is part of the GNU simulators. 8 1.1 christos 9 1.1 christos This file is free software; you can redistribute it and/or modify 10 1.1 christos it under the terms of the GNU General Public License as published by 11 1.1 christos the Free Software Foundation; either version 3, or (at your option) 12 1.1 christos any later version. 13 1.1 christos 14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT 15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 1.1 christos License for more details. 18 1.1 christos 19 1.1 christos You should have received a copy of the GNU General Public License along 20 1.11 christos with this program; if not, write to the Free Software Foundation, Inc., 21 1.11 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 22 1.1 christos 23 1.1 christos */ 24 1.1 christos 25 1.1 christos #ifndef CPU_M32RXF_H 26 1.1 christos #define CPU_M32RXF_H 27 1.1 christos 28 1.1 christos /* Maximum number of instructions that are fetched at a time. 29 1.1 christos This is for LIW type instructions sets (e.g. m32r). */ 30 1.1 christos #define MAX_LIW_INSNS 2 31 1.1 christos 32 1.1 christos /* Maximum number of instructions that can be executed in parallel. */ 33 1.1 christos #define MAX_PARALLEL_INSNS 2 34 1.1 christos 35 1.1 christos /* The size of an "int" needed to hold an instruction word. 36 1.1 christos This is usually 32 bits, but some architectures needs 64 bits. */ 37 1.1 christos typedef CGEN_INSN_INT CGEN_INSN_WORD; 38 1.1 christos 39 1.1 christos #include "cgen-engine.h" 40 1.1 christos 41 1.1 christos /* CPU state information. */ 42 1.1 christos typedef struct { 43 1.1 christos /* Hardware elements. */ 44 1.1 christos struct { 45 1.1 christos /* program counter */ 46 1.1 christos USI h_pc; 47 1.1 christos #define GET_H_PC() CPU (h_pc) 48 1.1 christos #define SET_H_PC(x) (CPU (h_pc) = (x)) 49 1.1 christos /* general registers */ 50 1.1 christos SI h_gr[16]; 51 1.1 christos #define GET_H_GR(a1) CPU (h_gr)[a1] 52 1.1 christos #define SET_H_GR(a1, x) (CPU (h_gr)[a1] = (x)) 53 1.1 christos /* control registers */ 54 1.1 christos USI h_cr[16]; 55 1.1 christos #define GET_H_CR(index) m32rxf_h_cr_get_handler (current_cpu, index) 56 1.1 christos #define SET_H_CR(index, x) \ 57 1.1 christos do { \ 58 1.1 christos m32rxf_h_cr_set_handler (current_cpu, (index), (x));\ 59 1.1 christos ;} while (0) 60 1.1 christos /* accumulator */ 61 1.1 christos DI h_accum; 62 1.1 christos #define GET_H_ACCUM() m32rxf_h_accum_get_handler (current_cpu) 63 1.1 christos #define SET_H_ACCUM(x) \ 64 1.1 christos do { \ 65 1.1 christos m32rxf_h_accum_set_handler (current_cpu, (x));\ 66 1.1 christos ;} while (0) 67 1.1 christos /* accumulators */ 68 1.1 christos DI h_accums[2]; 69 1.1 christos #define GET_H_ACCUMS(index) m32rxf_h_accums_get_handler (current_cpu, index) 70 1.1 christos #define SET_H_ACCUMS(index, x) \ 71 1.1 christos do { \ 72 1.1 christos m32rxf_h_accums_set_handler (current_cpu, (index), (x));\ 73 1.1 christos ;} while (0) 74 1.1 christos /* condition bit */ 75 1.1 christos BI h_cond; 76 1.1 christos #define GET_H_COND() CPU (h_cond) 77 1.1 christos #define SET_H_COND(x) (CPU (h_cond) = (x)) 78 1.1 christos /* psw part of psw */ 79 1.1 christos UQI h_psw; 80 1.1 christos #define GET_H_PSW() m32rxf_h_psw_get_handler (current_cpu) 81 1.1 christos #define SET_H_PSW(x) \ 82 1.1 christos do { \ 83 1.1 christos m32rxf_h_psw_set_handler (current_cpu, (x));\ 84 1.1 christos ;} while (0) 85 1.1 christos /* backup psw */ 86 1.1 christos UQI h_bpsw; 87 1.1 christos #define GET_H_BPSW() CPU (h_bpsw) 88 1.1 christos #define SET_H_BPSW(x) (CPU (h_bpsw) = (x)) 89 1.1 christos /* backup bpsw */ 90 1.1 christos UQI h_bbpsw; 91 1.1 christos #define GET_H_BBPSW() CPU (h_bbpsw) 92 1.1 christos #define SET_H_BBPSW(x) (CPU (h_bbpsw) = (x)) 93 1.1 christos /* lock */ 94 1.1 christos BI h_lock; 95 1.1 christos #define GET_H_LOCK() CPU (h_lock) 96 1.1 christos #define SET_H_LOCK(x) (CPU (h_lock) = (x)) 97 1.1 christos } hardware; 98 1.11 christos #define CPU_CGEN_HW(cpu) (& M32R_SIM_CPU (cpu)->cpu_data.hardware) 99 1.1 christos } M32RXF_CPU_DATA; 100 1.1 christos 101 1.1 christos /* Cover fns for register access. */ 102 1.1 christos USI m32rxf_h_pc_get (SIM_CPU *); 103 1.1 christos void m32rxf_h_pc_set (SIM_CPU *, USI); 104 1.1 christos SI m32rxf_h_gr_get (SIM_CPU *, UINT); 105 1.1 christos void m32rxf_h_gr_set (SIM_CPU *, UINT, SI); 106 1.1 christos USI m32rxf_h_cr_get (SIM_CPU *, UINT); 107 1.1 christos void m32rxf_h_cr_set (SIM_CPU *, UINT, USI); 108 1.1 christos DI m32rxf_h_accum_get (SIM_CPU *); 109 1.1 christos void m32rxf_h_accum_set (SIM_CPU *, DI); 110 1.1 christos DI m32rxf_h_accums_get (SIM_CPU *, UINT); 111 1.1 christos void m32rxf_h_accums_set (SIM_CPU *, UINT, DI); 112 1.1 christos BI m32rxf_h_cond_get (SIM_CPU *); 113 1.1 christos void m32rxf_h_cond_set (SIM_CPU *, BI); 114 1.1 christos UQI m32rxf_h_psw_get (SIM_CPU *); 115 1.1 christos void m32rxf_h_psw_set (SIM_CPU *, UQI); 116 1.1 christos UQI m32rxf_h_bpsw_get (SIM_CPU *); 117 1.1 christos void m32rxf_h_bpsw_set (SIM_CPU *, UQI); 118 1.1 christos UQI m32rxf_h_bbpsw_get (SIM_CPU *); 119 1.1 christos void m32rxf_h_bbpsw_set (SIM_CPU *, UQI); 120 1.1 christos BI m32rxf_h_lock_get (SIM_CPU *); 121 1.1 christos void m32rxf_h_lock_set (SIM_CPU *, BI); 122 1.1 christos 123 1.1 christos /* These must be hand-written. */ 124 1.1 christos extern CPUREG_FETCH_FN m32rxf_fetch_register; 125 1.1 christos extern CPUREG_STORE_FN m32rxf_store_register; 126 1.1 christos 127 1.1 christos typedef struct { 128 1.1 christos int empty; 129 1.1 christos } MODEL_M32RX_DATA; 130 1.1 christos 131 1.1 christos /* Instruction argument buffer. */ 132 1.1 christos 133 1.1 christos union sem_fields { 134 1.1 christos struct { /* no operands */ 135 1.1 christos int empty; 136 1.1 christos } sfmt_empty; 137 1.1 christos struct { /* */ 138 1.1 christos UINT f_uimm8; 139 1.1 christos } sfmt_clrpsw; 140 1.1 christos struct { /* */ 141 1.1 christos UINT f_uimm4; 142 1.1 christos } sfmt_trap; 143 1.1 christos struct { /* */ 144 1.1 christos IADDR i_disp24; 145 1.1 christos unsigned char out_h_gr_SI_14; 146 1.1 christos } sfmt_bl24; 147 1.1 christos struct { /* */ 148 1.1 christos IADDR i_disp8; 149 1.1 christos unsigned char out_h_gr_SI_14; 150 1.1 christos } sfmt_bl8; 151 1.1 christos struct { /* */ 152 1.1 christos SI f_imm1; 153 1.1 christos UINT f_accd; 154 1.1 christos UINT f_accs; 155 1.1 christos } sfmt_rac_dsi; 156 1.1 christos struct { /* */ 157 1.1 christos SI* i_dr; 158 1.1 christos UINT f_hi16; 159 1.1 christos UINT f_r1; 160 1.1 christos unsigned char out_dr; 161 1.1 christos } sfmt_seth; 162 1.1 christos struct { /* */ 163 1.1 christos SI* i_src1; 164 1.1 christos UINT f_accs; 165 1.1 christos UINT f_r1; 166 1.1 christos unsigned char in_src1; 167 1.1 christos } sfmt_mvtachi_a; 168 1.1 christos struct { /* */ 169 1.1 christos SI* i_dr; 170 1.1 christos UINT f_accs; 171 1.1 christos UINT f_r1; 172 1.1 christos unsigned char out_dr; 173 1.1 christos } sfmt_mvfachi_a; 174 1.1 christos struct { /* */ 175 1.1 christos ADDR i_uimm24; 176 1.1 christos SI* i_dr; 177 1.1 christos UINT f_r1; 178 1.1 christos unsigned char out_dr; 179 1.1 christos } sfmt_ld24; 180 1.1 christos struct { /* */ 181 1.1 christos SI* i_sr; 182 1.1 christos UINT f_r2; 183 1.1 christos unsigned char in_sr; 184 1.1 christos unsigned char out_h_gr_SI_14; 185 1.1 christos } sfmt_jl; 186 1.1 christos struct { /* */ 187 1.1 christos SI* i_sr; 188 1.1 christos INT f_simm16; 189 1.1 christos UINT f_r2; 190 1.1 christos UINT f_uimm3; 191 1.1 christos unsigned char in_sr; 192 1.1 christos } sfmt_bset; 193 1.1 christos struct { /* */ 194 1.1 christos SI* i_dr; 195 1.1 christos UINT f_r1; 196 1.1 christos UINT f_uimm5; 197 1.1 christos unsigned char in_dr; 198 1.1 christos unsigned char out_dr; 199 1.1 christos } sfmt_slli; 200 1.1 christos struct { /* */ 201 1.1 christos SI* i_dr; 202 1.1 christos INT f_simm8; 203 1.1 christos UINT f_r1; 204 1.1 christos unsigned char in_dr; 205 1.1 christos unsigned char out_dr; 206 1.1 christos } sfmt_addi; 207 1.1 christos struct { /* */ 208 1.1 christos SI* i_src1; 209 1.1 christos SI* i_src2; 210 1.1 christos UINT f_r1; 211 1.1 christos UINT f_r2; 212 1.1 christos unsigned char in_src1; 213 1.1 christos unsigned char in_src2; 214 1.1 christos unsigned char out_src2; 215 1.1 christos } sfmt_st_plus; 216 1.1 christos struct { /* */ 217 1.1 christos SI* i_src1; 218 1.1 christos SI* i_src2; 219 1.1 christos INT f_simm16; 220 1.1 christos UINT f_r1; 221 1.1 christos UINT f_r2; 222 1.1 christos unsigned char in_src1; 223 1.1 christos unsigned char in_src2; 224 1.1 christos } sfmt_st_d; 225 1.1 christos struct { /* */ 226 1.1 christos SI* i_src1; 227 1.1 christos SI* i_src2; 228 1.1 christos UINT f_acc; 229 1.1 christos UINT f_r1; 230 1.1 christos UINT f_r2; 231 1.1 christos unsigned char in_src1; 232 1.1 christos unsigned char in_src2; 233 1.1 christos } sfmt_machi_a; 234 1.1 christos struct { /* */ 235 1.1 christos SI* i_dr; 236 1.1 christos SI* i_sr; 237 1.1 christos UINT f_r1; 238 1.1 christos UINT f_r2; 239 1.1 christos unsigned char in_sr; 240 1.1 christos unsigned char out_dr; 241 1.1 christos unsigned char out_sr; 242 1.1 christos } sfmt_ld_plus; 243 1.1 christos struct { /* */ 244 1.1 christos IADDR i_disp16; 245 1.1 christos SI* i_src1; 246 1.1 christos SI* i_src2; 247 1.1 christos UINT f_r1; 248 1.1 christos UINT f_r2; 249 1.1 christos unsigned char in_src1; 250 1.1 christos unsigned char in_src2; 251 1.1 christos } sfmt_beq; 252 1.1 christos struct { /* */ 253 1.1 christos SI* i_dr; 254 1.1 christos SI* i_sr; 255 1.1 christos UINT f_r1; 256 1.1 christos UINT f_r2; 257 1.1 christos UINT f_uimm16; 258 1.1 christos unsigned char in_sr; 259 1.1 christos unsigned char out_dr; 260 1.1 christos } sfmt_and3; 261 1.1 christos struct { /* */ 262 1.1 christos SI* i_dr; 263 1.1 christos SI* i_sr; 264 1.1 christos INT f_simm16; 265 1.1 christos UINT f_r1; 266 1.1 christos UINT f_r2; 267 1.1 christos unsigned char in_sr; 268 1.1 christos unsigned char out_dr; 269 1.1 christos } sfmt_add3; 270 1.1 christos struct { /* */ 271 1.1 christos SI* i_dr; 272 1.1 christos SI* i_sr; 273 1.1 christos UINT f_r1; 274 1.1 christos UINT f_r2; 275 1.1 christos unsigned char in_dr; 276 1.1 christos unsigned char in_sr; 277 1.1 christos unsigned char out_dr; 278 1.1 christos } sfmt_add; 279 1.1 christos #if WITH_SCACHE_PBB 280 1.1 christos /* Writeback handler. */ 281 1.1 christos struct { 282 1.1 christos /* Pointer to argbuf entry for insn whose results need writing back. */ 283 1.1 christos const struct argbuf *abuf; 284 1.1 christos } write; 285 1.1 christos /* x-before handler */ 286 1.1 christos struct { 287 1.1 christos /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/ 288 1.1 christos int first_p; 289 1.1 christos } before; 290 1.1 christos /* x-after handler */ 291 1.1 christos struct { 292 1.1 christos int empty; 293 1.1 christos } after; 294 1.1 christos /* This entry is used to terminate each pbb. */ 295 1.1 christos struct { 296 1.1 christos /* Number of insns in pbb. */ 297 1.1 christos int insn_count; 298 1.1 christos /* Next pbb to execute. */ 299 1.1 christos SCACHE *next; 300 1.1 christos SCACHE *branch_target; 301 1.1 christos } chain; 302 1.1 christos #endif 303 1.1 christos }; 304 1.1 christos 305 1.1 christos /* The ARGBUF struct. */ 306 1.1 christos struct argbuf { 307 1.1 christos /* These are the baseclass definitions. */ 308 1.1 christos IADDR addr; 309 1.1 christos const IDESC *idesc; 310 1.1 christos char trace_p; 311 1.1 christos char profile_p; 312 1.1 christos /* ??? Temporary hack for skip insns. */ 313 1.1 christos char skip_count; 314 1.1 christos char unused; 315 1.1 christos /* cpu specific data follows */ 316 1.1 christos union sem semantic; 317 1.1 christos int written; 318 1.1 christos union sem_fields fields; 319 1.1 christos }; 320 1.1 christos 321 1.1 christos /* A cached insn. 322 1.1 christos 323 1.1 christos ??? SCACHE used to contain more than just argbuf. We could delete the 324 1.1 christos type entirely and always just use ARGBUF, but for future concerns and as 325 1.1 christos a level of abstraction it is left in. */ 326 1.1 christos 327 1.1 christos struct scache { 328 1.1 christos struct argbuf argbuf; 329 1.1 christos }; 330 1.1 christos 331 1.1 christos /* Macros to simplify extraction, reading and semantic code. 332 1.1 christos These define and assign the local vars that contain the insn's fields. */ 333 1.1 christos 334 1.1 christos #define EXTRACT_IFMT_EMPTY_VARS \ 335 1.1 christos unsigned int length; 336 1.1 christos #define EXTRACT_IFMT_EMPTY_CODE \ 337 1.1 christos length = 0; \ 338 1.1 christos 339 1.1 christos #define EXTRACT_IFMT_ADD_VARS \ 340 1.1 christos UINT f_op1; \ 341 1.1 christos UINT f_r1; \ 342 1.1 christos UINT f_op2; \ 343 1.1 christos UINT f_r2; \ 344 1.1 christos unsigned int length; 345 1.1 christos #define EXTRACT_IFMT_ADD_CODE \ 346 1.1 christos length = 2; \ 347 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 348 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 349 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 350 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 351 1.1 christos 352 1.1 christos #define EXTRACT_IFMT_ADD3_VARS \ 353 1.1 christos UINT f_op1; \ 354 1.1 christos UINT f_r1; \ 355 1.1 christos UINT f_op2; \ 356 1.1 christos UINT f_r2; \ 357 1.1 christos INT f_simm16; \ 358 1.1 christos unsigned int length; 359 1.1 christos #define EXTRACT_IFMT_ADD3_CODE \ 360 1.1 christos length = 4; \ 361 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 362 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 363 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 364 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 365 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); \ 366 1.1 christos 367 1.1 christos #define EXTRACT_IFMT_AND3_VARS \ 368 1.1 christos UINT f_op1; \ 369 1.1 christos UINT f_r1; \ 370 1.1 christos UINT f_op2; \ 371 1.1 christos UINT f_r2; \ 372 1.1 christos UINT f_uimm16; \ 373 1.1 christos unsigned int length; 374 1.1 christos #define EXTRACT_IFMT_AND3_CODE \ 375 1.1 christos length = 4; \ 376 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 377 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 378 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 379 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 380 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); \ 381 1.1 christos 382 1.1 christos #define EXTRACT_IFMT_OR3_VARS \ 383 1.1 christos UINT f_op1; \ 384 1.1 christos UINT f_r1; \ 385 1.1 christos UINT f_op2; \ 386 1.1 christos UINT f_r2; \ 387 1.1 christos UINT f_uimm16; \ 388 1.1 christos unsigned int length; 389 1.1 christos #define EXTRACT_IFMT_OR3_CODE \ 390 1.1 christos length = 4; \ 391 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 392 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 393 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 394 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 395 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); \ 396 1.1 christos 397 1.1 christos #define EXTRACT_IFMT_ADDI_VARS \ 398 1.1 christos UINT f_op1; \ 399 1.1 christos UINT f_r1; \ 400 1.1 christos INT f_simm8; \ 401 1.1 christos unsigned int length; 402 1.1 christos #define EXTRACT_IFMT_ADDI_CODE \ 403 1.1 christos length = 2; \ 404 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 405 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 406 1.1 christos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); \ 407 1.1 christos 408 1.1 christos #define EXTRACT_IFMT_ADDV3_VARS \ 409 1.1 christos UINT f_op1; \ 410 1.1 christos UINT f_r1; \ 411 1.1 christos UINT f_op2; \ 412 1.1 christos UINT f_r2; \ 413 1.1 christos INT f_simm16; \ 414 1.1 christos unsigned int length; 415 1.1 christos #define EXTRACT_IFMT_ADDV3_CODE \ 416 1.1 christos length = 4; \ 417 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 418 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 419 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 420 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 421 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); \ 422 1.1 christos 423 1.1 christos #define EXTRACT_IFMT_BC8_VARS \ 424 1.1 christos UINT f_op1; \ 425 1.1 christos UINT f_r1; \ 426 1.1 christos SI f_disp8; \ 427 1.1 christos unsigned int length; 428 1.1 christos #define EXTRACT_IFMT_BC8_CODE \ 429 1.1 christos length = 2; \ 430 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 431 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 432 1.11 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); \ 433 1.1 christos 434 1.1 christos #define EXTRACT_IFMT_BC24_VARS \ 435 1.1 christos UINT f_op1; \ 436 1.1 christos UINT f_r1; \ 437 1.1 christos SI f_disp24; \ 438 1.1 christos unsigned int length; 439 1.1 christos #define EXTRACT_IFMT_BC24_CODE \ 440 1.1 christos length = 4; \ 441 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 442 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 443 1.11 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); \ 444 1.1 christos 445 1.1 christos #define EXTRACT_IFMT_BEQ_VARS \ 446 1.1 christos UINT f_op1; \ 447 1.1 christos UINT f_r1; \ 448 1.1 christos UINT f_op2; \ 449 1.1 christos UINT f_r2; \ 450 1.1 christos SI f_disp16; \ 451 1.1 christos unsigned int length; 452 1.1 christos #define EXTRACT_IFMT_BEQ_CODE \ 453 1.1 christos length = 4; \ 454 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 455 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 456 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 457 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 458 1.11 christos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc)); \ 459 1.1 christos 460 1.1 christos #define EXTRACT_IFMT_BEQZ_VARS \ 461 1.1 christos UINT f_op1; \ 462 1.1 christos UINT f_r1; \ 463 1.1 christos UINT f_op2; \ 464 1.1 christos UINT f_r2; \ 465 1.1 christos SI f_disp16; \ 466 1.1 christos unsigned int length; 467 1.1 christos #define EXTRACT_IFMT_BEQZ_CODE \ 468 1.1 christos length = 4; \ 469 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 470 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 471 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 472 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 473 1.11 christos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc)); \ 474 1.1 christos 475 1.1 christos #define EXTRACT_IFMT_CMP_VARS \ 476 1.1 christos UINT f_op1; \ 477 1.1 christos UINT f_r1; \ 478 1.1 christos UINT f_op2; \ 479 1.1 christos UINT f_r2; \ 480 1.1 christos unsigned int length; 481 1.1 christos #define EXTRACT_IFMT_CMP_CODE \ 482 1.1 christos length = 2; \ 483 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 484 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 485 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 486 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 487 1.1 christos 488 1.1 christos #define EXTRACT_IFMT_CMPI_VARS \ 489 1.1 christos UINT f_op1; \ 490 1.1 christos UINT f_r1; \ 491 1.1 christos UINT f_op2; \ 492 1.1 christos UINT f_r2; \ 493 1.1 christos INT f_simm16; \ 494 1.1 christos unsigned int length; 495 1.1 christos #define EXTRACT_IFMT_CMPI_CODE \ 496 1.1 christos length = 4; \ 497 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 498 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 499 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 500 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 501 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); \ 502 1.1 christos 503 1.1 christos #define EXTRACT_IFMT_CMPZ_VARS \ 504 1.1 christos UINT f_op1; \ 505 1.1 christos UINT f_r1; \ 506 1.1 christos UINT f_op2; \ 507 1.1 christos UINT f_r2; \ 508 1.1 christos unsigned int length; 509 1.1 christos #define EXTRACT_IFMT_CMPZ_CODE \ 510 1.1 christos length = 2; \ 511 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 512 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 513 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 514 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 515 1.1 christos 516 1.1 christos #define EXTRACT_IFMT_DIV_VARS \ 517 1.1 christos UINT f_op1; \ 518 1.1 christos UINT f_r1; \ 519 1.1 christos UINT f_op2; \ 520 1.1 christos UINT f_r2; \ 521 1.1 christos INT f_simm16; \ 522 1.1 christos unsigned int length; 523 1.1 christos #define EXTRACT_IFMT_DIV_CODE \ 524 1.1 christos length = 4; \ 525 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 526 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 527 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 528 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 529 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); \ 530 1.1 christos 531 1.1 christos #define EXTRACT_IFMT_JC_VARS \ 532 1.1 christos UINT f_op1; \ 533 1.1 christos UINT f_r1; \ 534 1.1 christos UINT f_op2; \ 535 1.1 christos UINT f_r2; \ 536 1.1 christos unsigned int length; 537 1.1 christos #define EXTRACT_IFMT_JC_CODE \ 538 1.1 christos length = 2; \ 539 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 540 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 541 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 542 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 543 1.1 christos 544 1.1 christos #define EXTRACT_IFMT_LD24_VARS \ 545 1.1 christos UINT f_op1; \ 546 1.1 christos UINT f_r1; \ 547 1.1 christos UINT f_uimm24; \ 548 1.1 christos unsigned int length; 549 1.1 christos #define EXTRACT_IFMT_LD24_CODE \ 550 1.1 christos length = 4; \ 551 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 552 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 553 1.1 christos f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24); \ 554 1.1 christos 555 1.1 christos #define EXTRACT_IFMT_LDI16_VARS \ 556 1.1 christos UINT f_op1; \ 557 1.1 christos UINT f_r1; \ 558 1.1 christos UINT f_op2; \ 559 1.1 christos UINT f_r2; \ 560 1.1 christos INT f_simm16; \ 561 1.1 christos unsigned int length; 562 1.1 christos #define EXTRACT_IFMT_LDI16_CODE \ 563 1.1 christos length = 4; \ 564 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 565 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 566 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 567 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 568 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); \ 569 1.1 christos 570 1.1 christos #define EXTRACT_IFMT_MACHI_A_VARS \ 571 1.1 christos UINT f_op1; \ 572 1.1 christos UINT f_r1; \ 573 1.1 christos UINT f_acc; \ 574 1.1 christos UINT f_op23; \ 575 1.1 christos UINT f_r2; \ 576 1.1 christos unsigned int length; 577 1.1 christos #define EXTRACT_IFMT_MACHI_A_CODE \ 578 1.1 christos length = 2; \ 579 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 580 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 581 1.1 christos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1); \ 582 1.1 christos f_op23 = EXTRACT_MSB0_UINT (insn, 16, 9, 3); \ 583 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 584 1.1 christos 585 1.1 christos #define EXTRACT_IFMT_MVFACHI_A_VARS \ 586 1.1 christos UINT f_op1; \ 587 1.1 christos UINT f_r1; \ 588 1.1 christos UINT f_op2; \ 589 1.1 christos UINT f_accs; \ 590 1.1 christos UINT f_op3; \ 591 1.1 christos unsigned int length; 592 1.1 christos #define EXTRACT_IFMT_MVFACHI_A_CODE \ 593 1.1 christos length = 2; \ 594 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 595 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 596 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 597 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); \ 598 1.1 christos f_op3 = EXTRACT_MSB0_UINT (insn, 16, 14, 2); \ 599 1.1 christos 600 1.1 christos #define EXTRACT_IFMT_MVFC_VARS \ 601 1.1 christos UINT f_op1; \ 602 1.1 christos UINT f_r1; \ 603 1.1 christos UINT f_op2; \ 604 1.1 christos UINT f_r2; \ 605 1.1 christos unsigned int length; 606 1.1 christos #define EXTRACT_IFMT_MVFC_CODE \ 607 1.1 christos length = 2; \ 608 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 609 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 610 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 611 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 612 1.1 christos 613 1.1 christos #define EXTRACT_IFMT_MVTACHI_A_VARS \ 614 1.1 christos UINT f_op1; \ 615 1.1 christos UINT f_r1; \ 616 1.1 christos UINT f_op2; \ 617 1.1 christos UINT f_accs; \ 618 1.1 christos UINT f_op3; \ 619 1.1 christos unsigned int length; 620 1.1 christos #define EXTRACT_IFMT_MVTACHI_A_CODE \ 621 1.1 christos length = 2; \ 622 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 623 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 624 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 625 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); \ 626 1.1 christos f_op3 = EXTRACT_MSB0_UINT (insn, 16, 14, 2); \ 627 1.1 christos 628 1.1 christos #define EXTRACT_IFMT_MVTC_VARS \ 629 1.1 christos UINT f_op1; \ 630 1.1 christos UINT f_r1; \ 631 1.1 christos UINT f_op2; \ 632 1.1 christos UINT f_r2; \ 633 1.1 christos unsigned int length; 634 1.1 christos #define EXTRACT_IFMT_MVTC_CODE \ 635 1.1 christos length = 2; \ 636 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 637 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 638 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 639 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 640 1.1 christos 641 1.1 christos #define EXTRACT_IFMT_NOP_VARS \ 642 1.1 christos UINT f_op1; \ 643 1.1 christos UINT f_r1; \ 644 1.1 christos UINT f_op2; \ 645 1.1 christos UINT f_r2; \ 646 1.1 christos unsigned int length; 647 1.1 christos #define EXTRACT_IFMT_NOP_CODE \ 648 1.1 christos length = 2; \ 649 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 650 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 651 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 652 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 653 1.1 christos 654 1.1 christos #define EXTRACT_IFMT_RAC_DSI_VARS \ 655 1.1 christos UINT f_op1; \ 656 1.1 christos UINT f_accd; \ 657 1.1 christos UINT f_bits67; \ 658 1.1 christos UINT f_op2; \ 659 1.1 christos UINT f_accs; \ 660 1.1 christos UINT f_bit14; \ 661 1.1 christos SI f_imm1; \ 662 1.1 christos unsigned int length; 663 1.1 christos #define EXTRACT_IFMT_RAC_DSI_CODE \ 664 1.1 christos length = 2; \ 665 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 666 1.1 christos f_accd = EXTRACT_MSB0_UINT (insn, 16, 4, 2); \ 667 1.1 christos f_bits67 = EXTRACT_MSB0_UINT (insn, 16, 6, 2); \ 668 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 669 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); \ 670 1.1 christos f_bit14 = EXTRACT_MSB0_UINT (insn, 16, 14, 1); \ 671 1.1 christos f_imm1 = ((EXTRACT_MSB0_UINT (insn, 16, 15, 1)) + (1)); \ 672 1.1 christos 673 1.1 christos #define EXTRACT_IFMT_SETH_VARS \ 674 1.1 christos UINT f_op1; \ 675 1.1 christos UINT f_r1; \ 676 1.1 christos UINT f_op2; \ 677 1.1 christos UINT f_r2; \ 678 1.1 christos UINT f_hi16; \ 679 1.1 christos unsigned int length; 680 1.1 christos #define EXTRACT_IFMT_SETH_CODE \ 681 1.1 christos length = 4; \ 682 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 683 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 684 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 685 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 686 1.1 christos f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); \ 687 1.1 christos 688 1.1 christos #define EXTRACT_IFMT_SLLI_VARS \ 689 1.1 christos UINT f_op1; \ 690 1.1 christos UINT f_r1; \ 691 1.1 christos UINT f_shift_op2; \ 692 1.1 christos UINT f_uimm5; \ 693 1.1 christos unsigned int length; 694 1.1 christos #define EXTRACT_IFMT_SLLI_CODE \ 695 1.1 christos length = 2; \ 696 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 697 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 698 1.1 christos f_shift_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 3); \ 699 1.1 christos f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5); \ 700 1.1 christos 701 1.1 christos #define EXTRACT_IFMT_ST_D_VARS \ 702 1.1 christos UINT f_op1; \ 703 1.1 christos UINT f_r1; \ 704 1.1 christos UINT f_op2; \ 705 1.1 christos UINT f_r2; \ 706 1.1 christos INT f_simm16; \ 707 1.1 christos unsigned int length; 708 1.1 christos #define EXTRACT_IFMT_ST_D_CODE \ 709 1.1 christos length = 4; \ 710 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 711 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 712 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 713 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 714 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); \ 715 1.1 christos 716 1.1 christos #define EXTRACT_IFMT_TRAP_VARS \ 717 1.1 christos UINT f_op1; \ 718 1.1 christos UINT f_r1; \ 719 1.1 christos UINT f_op2; \ 720 1.1 christos UINT f_uimm4; \ 721 1.1 christos unsigned int length; 722 1.1 christos #define EXTRACT_IFMT_TRAP_CODE \ 723 1.1 christos length = 2; \ 724 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 725 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 726 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 727 1.1 christos f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 728 1.1 christos 729 1.1 christos #define EXTRACT_IFMT_SATB_VARS \ 730 1.1 christos UINT f_op1; \ 731 1.1 christos UINT f_r1; \ 732 1.1 christos UINT f_op2; \ 733 1.1 christos UINT f_r2; \ 734 1.1 christos UINT f_uimm16; \ 735 1.1 christos unsigned int length; 736 1.1 christos #define EXTRACT_IFMT_SATB_CODE \ 737 1.1 christos length = 4; \ 738 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 739 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \ 740 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 741 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 742 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); \ 743 1.1 christos 744 1.1 christos #define EXTRACT_IFMT_CLRPSW_VARS \ 745 1.1 christos UINT f_op1; \ 746 1.1 christos UINT f_r1; \ 747 1.1 christos UINT f_uimm8; \ 748 1.1 christos unsigned int length; 749 1.1 christos #define EXTRACT_IFMT_CLRPSW_CODE \ 750 1.1 christos length = 2; \ 751 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 752 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \ 753 1.1 christos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \ 754 1.1 christos 755 1.1 christos #define EXTRACT_IFMT_BSET_VARS \ 756 1.1 christos UINT f_op1; \ 757 1.1 christos UINT f_bit4; \ 758 1.1 christos UINT f_uimm3; \ 759 1.1 christos UINT f_op2; \ 760 1.1 christos UINT f_r2; \ 761 1.1 christos INT f_simm16; \ 762 1.1 christos unsigned int length; 763 1.1 christos #define EXTRACT_IFMT_BSET_CODE \ 764 1.1 christos length = 4; \ 765 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \ 766 1.1 christos f_bit4 = EXTRACT_MSB0_UINT (insn, 32, 4, 1); \ 767 1.1 christos f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3); \ 768 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \ 769 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \ 770 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); \ 771 1.1 christos 772 1.1 christos #define EXTRACT_IFMT_BTST_VARS \ 773 1.1 christos UINT f_op1; \ 774 1.1 christos UINT f_bit4; \ 775 1.1 christos UINT f_uimm3; \ 776 1.1 christos UINT f_op2; \ 777 1.1 christos UINT f_r2; \ 778 1.1 christos unsigned int length; 779 1.1 christos #define EXTRACT_IFMT_BTST_CODE \ 780 1.1 christos length = 2; \ 781 1.1 christos f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \ 782 1.1 christos f_bit4 = EXTRACT_MSB0_UINT (insn, 16, 4, 1); \ 783 1.1 christos f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3); \ 784 1.1 christos f_op2 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \ 785 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \ 786 1.1 christos 787 1.1 christos /* Queued output values of an instruction. */ 788 1.1 christos 789 1.1 christos struct parexec { 790 1.1 christos union { 791 1.1 christos struct { /* empty sformat for unspecified field list */ 792 1.1 christos int empty; 793 1.1 christos } sfmt_empty; 794 1.1 christos struct { /* e.g. add $dr,$sr */ 795 1.1 christos SI dr; 796 1.1 christos } sfmt_add; 797 1.1 christos struct { /* e.g. add3 $dr,$sr,$hash$slo16 */ 798 1.1 christos SI dr; 799 1.1 christos } sfmt_add3; 800 1.1 christos struct { /* e.g. and3 $dr,$sr,$uimm16 */ 801 1.1 christos SI dr; 802 1.1 christos } sfmt_and3; 803 1.1 christos struct { /* e.g. or3 $dr,$sr,$hash$ulo16 */ 804 1.1 christos SI dr; 805 1.1 christos } sfmt_or3; 806 1.1 christos struct { /* e.g. addi $dr,$simm8 */ 807 1.1 christos SI dr; 808 1.1 christos } sfmt_addi; 809 1.1 christos struct { /* e.g. addv $dr,$sr */ 810 1.1 christos BI condbit; 811 1.1 christos SI dr; 812 1.1 christos } sfmt_addv; 813 1.1 christos struct { /* e.g. addv3 $dr,$sr,$simm16 */ 814 1.1 christos BI condbit; 815 1.1 christos SI dr; 816 1.1 christos } sfmt_addv3; 817 1.1 christos struct { /* e.g. addx $dr,$sr */ 818 1.1 christos BI condbit; 819 1.1 christos SI dr; 820 1.1 christos } sfmt_addx; 821 1.1 christos struct { /* e.g. bc.s $disp8 */ 822 1.1 christos USI pc; 823 1.1 christos } sfmt_bc8; 824 1.1 christos struct { /* e.g. bc.l $disp24 */ 825 1.1 christos USI pc; 826 1.1 christos } sfmt_bc24; 827 1.1 christos struct { /* e.g. beq $src1,$src2,$disp16 */ 828 1.1 christos USI pc; 829 1.1 christos } sfmt_beq; 830 1.1 christos struct { /* e.g. beqz $src2,$disp16 */ 831 1.1 christos USI pc; 832 1.1 christos } sfmt_beqz; 833 1.1 christos struct { /* e.g. bl.s $disp8 */ 834 1.1 christos SI h_gr_SI_14; 835 1.1 christos USI pc; 836 1.1 christos } sfmt_bl8; 837 1.1 christos struct { /* e.g. bl.l $disp24 */ 838 1.1 christos SI h_gr_SI_14; 839 1.1 christos USI pc; 840 1.1 christos } sfmt_bl24; 841 1.1 christos struct { /* e.g. bcl.s $disp8 */ 842 1.1 christos SI h_gr_SI_14; 843 1.1 christos USI pc; 844 1.1 christos } sfmt_bcl8; 845 1.1 christos struct { /* e.g. bcl.l $disp24 */ 846 1.1 christos SI h_gr_SI_14; 847 1.1 christos USI pc; 848 1.1 christos } sfmt_bcl24; 849 1.1 christos struct { /* e.g. bra.s $disp8 */ 850 1.1 christos USI pc; 851 1.1 christos } sfmt_bra8; 852 1.1 christos struct { /* e.g. bra.l $disp24 */ 853 1.1 christos USI pc; 854 1.1 christos } sfmt_bra24; 855 1.1 christos struct { /* e.g. cmp $src1,$src2 */ 856 1.1 christos BI condbit; 857 1.1 christos } sfmt_cmp; 858 1.1 christos struct { /* e.g. cmpi $src2,$simm16 */ 859 1.1 christos BI condbit; 860 1.1 christos } sfmt_cmpi; 861 1.1 christos struct { /* e.g. cmpz $src2 */ 862 1.1 christos BI condbit; 863 1.1 christos } sfmt_cmpz; 864 1.1 christos struct { /* e.g. div $dr,$sr */ 865 1.1 christos SI dr; 866 1.1 christos } sfmt_div; 867 1.1 christos struct { /* e.g. jc $sr */ 868 1.1 christos USI pc; 869 1.1 christos } sfmt_jc; 870 1.1 christos struct { /* e.g. jl $sr */ 871 1.1 christos SI h_gr_SI_14; 872 1.1 christos USI pc; 873 1.1 christos } sfmt_jl; 874 1.1 christos struct { /* e.g. jmp $sr */ 875 1.1 christos USI pc; 876 1.1 christos } sfmt_jmp; 877 1.1 christos struct { /* e.g. ld $dr,@$sr */ 878 1.1 christos SI dr; 879 1.1 christos } sfmt_ld; 880 1.1 christos struct { /* e.g. ld $dr,@($slo16,$sr) */ 881 1.1 christos SI dr; 882 1.1 christos } sfmt_ld_d; 883 1.1 christos struct { /* e.g. ldb $dr,@$sr */ 884 1.1 christos SI dr; 885 1.1 christos } sfmt_ldb; 886 1.1 christos struct { /* e.g. ldb $dr,@($slo16,$sr) */ 887 1.1 christos SI dr; 888 1.1 christos } sfmt_ldb_d; 889 1.1 christos struct { /* e.g. ldh $dr,@$sr */ 890 1.1 christos SI dr; 891 1.1 christos } sfmt_ldh; 892 1.1 christos struct { /* e.g. ldh $dr,@($slo16,$sr) */ 893 1.1 christos SI dr; 894 1.1 christos } sfmt_ldh_d; 895 1.1 christos struct { /* e.g. ld $dr,@$sr+ */ 896 1.1 christos SI dr; 897 1.1 christos SI sr; 898 1.1 christos } sfmt_ld_plus; 899 1.1 christos struct { /* e.g. ld24 $dr,$uimm24 */ 900 1.1 christos SI dr; 901 1.1 christos } sfmt_ld24; 902 1.1 christos struct { /* e.g. ldi8 $dr,$simm8 */ 903 1.1 christos SI dr; 904 1.1 christos } sfmt_ldi8; 905 1.1 christos struct { /* e.g. ldi16 $dr,$hash$slo16 */ 906 1.1 christos SI dr; 907 1.1 christos } sfmt_ldi16; 908 1.1 christos struct { /* e.g. lock $dr,@$sr */ 909 1.1 christos SI dr; 910 1.1 christos BI h_lock_BI; 911 1.1 christos } sfmt_lock; 912 1.1 christos struct { /* e.g. machi $src1,$src2,$acc */ 913 1.1 christos DI acc; 914 1.1 christos } sfmt_machi_a; 915 1.1 christos struct { /* e.g. mulhi $src1,$src2,$acc */ 916 1.1 christos DI acc; 917 1.1 christos } sfmt_mulhi_a; 918 1.1 christos struct { /* e.g. mv $dr,$sr */ 919 1.1 christos SI dr; 920 1.1 christos } sfmt_mv; 921 1.1 christos struct { /* e.g. mvfachi $dr,$accs */ 922 1.1 christos SI dr; 923 1.1 christos } sfmt_mvfachi_a; 924 1.1 christos struct { /* e.g. mvfc $dr,$scr */ 925 1.1 christos SI dr; 926 1.1 christos } sfmt_mvfc; 927 1.1 christos struct { /* e.g. mvtachi $src1,$accs */ 928 1.1 christos DI accs; 929 1.1 christos } sfmt_mvtachi_a; 930 1.1 christos struct { /* e.g. mvtc $sr,$dcr */ 931 1.1 christos USI dcr; 932 1.1 christos } sfmt_mvtc; 933 1.1 christos struct { /* e.g. nop */ 934 1.1 christos int empty; 935 1.1 christos } sfmt_nop; 936 1.1 christos struct { /* e.g. rac $accd,$accs,$imm1 */ 937 1.1 christos DI accd; 938 1.1 christos } sfmt_rac_dsi; 939 1.1 christos struct { /* e.g. rte */ 940 1.1 christos UQI h_bpsw_UQI; 941 1.1 christos USI h_cr_USI_6; 942 1.1 christos UQI h_psw_UQI; 943 1.1 christos USI pc; 944 1.1 christos } sfmt_rte; 945 1.1 christos struct { /* e.g. seth $dr,$hash$hi16 */ 946 1.1 christos SI dr; 947 1.1 christos } sfmt_seth; 948 1.1 christos struct { /* e.g. sll3 $dr,$sr,$simm16 */ 949 1.1 christos SI dr; 950 1.1 christos } sfmt_sll3; 951 1.1 christos struct { /* e.g. slli $dr,$uimm5 */ 952 1.1 christos SI dr; 953 1.1 christos } sfmt_slli; 954 1.1 christos struct { /* e.g. st $src1,@$src2 */ 955 1.1 christos SI h_memory_SI_src2; 956 1.1 christos USI h_memory_SI_src2_idx; 957 1.1 christos } sfmt_st; 958 1.1 christos struct { /* e.g. st $src1,@($slo16,$src2) */ 959 1.1 christos SI h_memory_SI_add__SI_src2_slo16; 960 1.1 christos USI h_memory_SI_add__SI_src2_slo16_idx; 961 1.1 christos } sfmt_st_d; 962 1.1 christos struct { /* e.g. stb $src1,@$src2 */ 963 1.1 christos QI h_memory_QI_src2; 964 1.1 christos USI h_memory_QI_src2_idx; 965 1.1 christos } sfmt_stb; 966 1.1 christos struct { /* e.g. stb $src1,@($slo16,$src2) */ 967 1.1 christos QI h_memory_QI_add__SI_src2_slo16; 968 1.1 christos USI h_memory_QI_add__SI_src2_slo16_idx; 969 1.1 christos } sfmt_stb_d; 970 1.1 christos struct { /* e.g. sth $src1,@$src2 */ 971 1.1 christos HI h_memory_HI_src2; 972 1.1 christos USI h_memory_HI_src2_idx; 973 1.1 christos } sfmt_sth; 974 1.1 christos struct { /* e.g. sth $src1,@($slo16,$src2) */ 975 1.1 christos HI h_memory_HI_add__SI_src2_slo16; 976 1.1 christos USI h_memory_HI_add__SI_src2_slo16_idx; 977 1.1 christos } sfmt_sth_d; 978 1.1 christos struct { /* e.g. st $src1,@+$src2 */ 979 1.1 christos SI h_memory_SI_new_src2; 980 1.1 christos USI h_memory_SI_new_src2_idx; 981 1.1 christos SI src2; 982 1.1 christos } sfmt_st_plus; 983 1.1 christos struct { /* e.g. sth $src1,@$src2+ */ 984 1.1 christos HI h_memory_HI_new_src2; 985 1.1 christos USI h_memory_HI_new_src2_idx; 986 1.1 christos SI src2; 987 1.1 christos } sfmt_sth_plus; 988 1.1 christos struct { /* e.g. stb $src1,@$src2+ */ 989 1.1 christos QI h_memory_QI_new_src2; 990 1.1 christos USI h_memory_QI_new_src2_idx; 991 1.1 christos SI src2; 992 1.1 christos } sfmt_stb_plus; 993 1.1 christos struct { /* e.g. trap $uimm4 */ 994 1.1 christos UQI h_bbpsw_UQI; 995 1.1 christos UQI h_bpsw_UQI; 996 1.1 christos USI h_cr_USI_14; 997 1.1 christos USI h_cr_USI_6; 998 1.1 christos UQI h_psw_UQI; 999 1.1 christos USI pc; 1000 1.1 christos } sfmt_trap; 1001 1.1 christos struct { /* e.g. unlock $src1,@$src2 */ 1002 1.1 christos BI h_lock_BI; 1003 1.1 christos SI h_memory_SI_src2; 1004 1.1 christos USI h_memory_SI_src2_idx; 1005 1.1 christos } sfmt_unlock; 1006 1.1 christos struct { /* e.g. satb $dr,$sr */ 1007 1.1 christos SI dr; 1008 1.1 christos } sfmt_satb; 1009 1.1 christos struct { /* e.g. sat $dr,$sr */ 1010 1.1 christos SI dr; 1011 1.1 christos } sfmt_sat; 1012 1.1 christos struct { /* e.g. sadd */ 1013 1.1 christos DI h_accums_DI_0; 1014 1.1 christos } sfmt_sadd; 1015 1.1 christos struct { /* e.g. macwu1 $src1,$src2 */ 1016 1.1 christos DI h_accums_DI_1; 1017 1.1 christos } sfmt_macwu1; 1018 1.1 christos struct { /* e.g. msblo $src1,$src2 */ 1019 1.1 christos DI accum; 1020 1.1 christos } sfmt_msblo; 1021 1.1 christos struct { /* e.g. mulwu1 $src1,$src2 */ 1022 1.1 christos DI h_accums_DI_1; 1023 1.1 christos } sfmt_mulwu1; 1024 1.1 christos struct { /* e.g. sc */ 1025 1.1 christos int empty; 1026 1.1 christos } sfmt_sc; 1027 1.1 christos struct { /* e.g. clrpsw $uimm8 */ 1028 1.1 christos USI h_cr_USI_0; 1029 1.1 christos } sfmt_clrpsw; 1030 1.1 christos struct { /* e.g. setpsw $uimm8 */ 1031 1.1 christos USI h_cr_USI_0; 1032 1.1 christos } sfmt_setpsw; 1033 1.1 christos struct { /* e.g. bset $uimm3,@($slo16,$sr) */ 1034 1.1 christos QI h_memory_QI_add__SI_sr_slo16; 1035 1.1 christos USI h_memory_QI_add__SI_sr_slo16_idx; 1036 1.1 christos } sfmt_bset; 1037 1.1 christos struct { /* e.g. btst $uimm3,$sr */ 1038 1.1 christos BI condbit; 1039 1.1 christos } sfmt_btst; 1040 1.1 christos } operands; 1041 1.1 christos /* For conditionally written operands, bitmask of which ones were. */ 1042 1.1 christos int written; 1043 1.1 christos }; 1044 1.1 christos 1045 1.1 christos /* Collection of various things for the trace handler to use. */ 1046 1.1 christos 1047 1.1 christos typedef struct trace_record { 1048 1.1 christos IADDR pc; 1049 1.1 christos /* FIXME:wip */ 1050 1.1 christos } TRACE_RECORD; 1051 1.1 christos 1052 1.1 christos #endif /* CPU_M32RXF_H */ 1053