14e98e3e1Schristos /* Simulator instruction decoder for m32rbf. 24e98e3e1Schristos 34e98e3e1Schristos THIS FILE IS MACHINE GENERATED WITH CGEN. 44e98e3e1Schristos 5*05fa0856Schristos Copyright (C) 1996-2024 Free Software Foundation, Inc. 64e98e3e1Schristos 74e98e3e1Schristos This file is part of the GNU simulators. 84e98e3e1Schristos 94e98e3e1Schristos This file is free software; you can redistribute it and/or modify 104e98e3e1Schristos it under the terms of the GNU General Public License as published by 114e98e3e1Schristos the Free Software Foundation; either version 3, or (at your option) 124e98e3e1Schristos any later version. 134e98e3e1Schristos 144e98e3e1Schristos It is distributed in the hope that it will be useful, but WITHOUT 154e98e3e1Schristos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 164e98e3e1Schristos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 174e98e3e1Schristos License for more details. 184e98e3e1Schristos 194e98e3e1Schristos You should have received a copy of the GNU General Public License along 20*05fa0856Schristos with this program; if not, write to the Free Software Foundation, Inc., 21*05fa0856Schristos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 224e98e3e1Schristos 234e98e3e1Schristos */ 244e98e3e1Schristos 254e98e3e1Schristos #define WANT_CPU m32rbf 264e98e3e1Schristos #define WANT_CPU_M32RBF 274e98e3e1Schristos 284e98e3e1Schristos #include "sim-main.h" 294e98e3e1Schristos #include "sim-assert.h" 30*05fa0856Schristos #include "cgen-mem.h" 31*05fa0856Schristos #include "cgen-ops.h" 324e98e3e1Schristos 334e98e3e1Schristos /* The instruction descriptor array. 344e98e3e1Schristos This is computed at runtime. Space for it is not malloc'd to save a 354e98e3e1Schristos teensy bit of cpu in the decoder. Moving it to malloc space is trivial 364e98e3e1Schristos but won't be done until necessary (we don't currently support the runtime 374e98e3e1Schristos addition of instructions nor an SMP machine with different cpus). */ 384e98e3e1Schristos static IDESC m32rbf_insn_data[M32RBF_INSN__MAX]; 394e98e3e1Schristos 404e98e3e1Schristos /* Commas between elements are contained in the macros. 414e98e3e1Schristos Some of these are conditionally compiled out. */ 424e98e3e1Schristos 434e98e3e1Schristos static const struct insn_sem m32rbf_insn_sem[] = 444e98e3e1Schristos { 454e98e3e1Schristos { VIRTUAL_INSN_X_INVALID, M32RBF_INSN_X_INVALID, M32RBF_SFMT_EMPTY }, 464e98e3e1Schristos { VIRTUAL_INSN_X_AFTER, M32RBF_INSN_X_AFTER, M32RBF_SFMT_EMPTY }, 474e98e3e1Schristos { VIRTUAL_INSN_X_BEFORE, M32RBF_INSN_X_BEFORE, M32RBF_SFMT_EMPTY }, 484e98e3e1Schristos { VIRTUAL_INSN_X_CTI_CHAIN, M32RBF_INSN_X_CTI_CHAIN, M32RBF_SFMT_EMPTY }, 494e98e3e1Schristos { VIRTUAL_INSN_X_CHAIN, M32RBF_INSN_X_CHAIN, M32RBF_SFMT_EMPTY }, 504e98e3e1Schristos { VIRTUAL_INSN_X_BEGIN, M32RBF_INSN_X_BEGIN, M32RBF_SFMT_EMPTY }, 514e98e3e1Schristos { M32R_INSN_ADD, M32RBF_INSN_ADD, M32RBF_SFMT_ADD }, 524e98e3e1Schristos { M32R_INSN_ADD3, M32RBF_INSN_ADD3, M32RBF_SFMT_ADD3 }, 534e98e3e1Schristos { M32R_INSN_AND, M32RBF_INSN_AND, M32RBF_SFMT_ADD }, 544e98e3e1Schristos { M32R_INSN_AND3, M32RBF_INSN_AND3, M32RBF_SFMT_AND3 }, 554e98e3e1Schristos { M32R_INSN_OR, M32RBF_INSN_OR, M32RBF_SFMT_ADD }, 564e98e3e1Schristos { M32R_INSN_OR3, M32RBF_INSN_OR3, M32RBF_SFMT_OR3 }, 574e98e3e1Schristos { M32R_INSN_XOR, M32RBF_INSN_XOR, M32RBF_SFMT_ADD }, 584e98e3e1Schristos { M32R_INSN_XOR3, M32RBF_INSN_XOR3, M32RBF_SFMT_AND3 }, 594e98e3e1Schristos { M32R_INSN_ADDI, M32RBF_INSN_ADDI, M32RBF_SFMT_ADDI }, 604e98e3e1Schristos { M32R_INSN_ADDV, M32RBF_INSN_ADDV, M32RBF_SFMT_ADDV }, 614e98e3e1Schristos { M32R_INSN_ADDV3, M32RBF_INSN_ADDV3, M32RBF_SFMT_ADDV3 }, 624e98e3e1Schristos { M32R_INSN_ADDX, M32RBF_INSN_ADDX, M32RBF_SFMT_ADDX }, 634e98e3e1Schristos { M32R_INSN_BC8, M32RBF_INSN_BC8, M32RBF_SFMT_BC8 }, 644e98e3e1Schristos { M32R_INSN_BC24, M32RBF_INSN_BC24, M32RBF_SFMT_BC24 }, 654e98e3e1Schristos { M32R_INSN_BEQ, M32RBF_INSN_BEQ, M32RBF_SFMT_BEQ }, 664e98e3e1Schristos { M32R_INSN_BEQZ, M32RBF_INSN_BEQZ, M32RBF_SFMT_BEQZ }, 674e98e3e1Schristos { M32R_INSN_BGEZ, M32RBF_INSN_BGEZ, M32RBF_SFMT_BEQZ }, 684e98e3e1Schristos { M32R_INSN_BGTZ, M32RBF_INSN_BGTZ, M32RBF_SFMT_BEQZ }, 694e98e3e1Schristos { M32R_INSN_BLEZ, M32RBF_INSN_BLEZ, M32RBF_SFMT_BEQZ }, 704e98e3e1Schristos { M32R_INSN_BLTZ, M32RBF_INSN_BLTZ, M32RBF_SFMT_BEQZ }, 714e98e3e1Schristos { M32R_INSN_BNEZ, M32RBF_INSN_BNEZ, M32RBF_SFMT_BEQZ }, 724e98e3e1Schristos { M32R_INSN_BL8, M32RBF_INSN_BL8, M32RBF_SFMT_BL8 }, 734e98e3e1Schristos { M32R_INSN_BL24, M32RBF_INSN_BL24, M32RBF_SFMT_BL24 }, 744e98e3e1Schristos { M32R_INSN_BNC8, M32RBF_INSN_BNC8, M32RBF_SFMT_BC8 }, 754e98e3e1Schristos { M32R_INSN_BNC24, M32RBF_INSN_BNC24, M32RBF_SFMT_BC24 }, 764e98e3e1Schristos { M32R_INSN_BNE, M32RBF_INSN_BNE, M32RBF_SFMT_BEQ }, 774e98e3e1Schristos { M32R_INSN_BRA8, M32RBF_INSN_BRA8, M32RBF_SFMT_BRA8 }, 784e98e3e1Schristos { M32R_INSN_BRA24, M32RBF_INSN_BRA24, M32RBF_SFMT_BRA24 }, 794e98e3e1Schristos { M32R_INSN_CMP, M32RBF_INSN_CMP, M32RBF_SFMT_CMP }, 804e98e3e1Schristos { M32R_INSN_CMPI, M32RBF_INSN_CMPI, M32RBF_SFMT_CMPI }, 814e98e3e1Schristos { M32R_INSN_CMPU, M32RBF_INSN_CMPU, M32RBF_SFMT_CMP }, 824e98e3e1Schristos { M32R_INSN_CMPUI, M32RBF_INSN_CMPUI, M32RBF_SFMT_CMPI }, 834e98e3e1Schristos { M32R_INSN_DIV, M32RBF_INSN_DIV, M32RBF_SFMT_DIV }, 844e98e3e1Schristos { M32R_INSN_DIVU, M32RBF_INSN_DIVU, M32RBF_SFMT_DIV }, 854e98e3e1Schristos { M32R_INSN_REM, M32RBF_INSN_REM, M32RBF_SFMT_DIV }, 864e98e3e1Schristos { M32R_INSN_REMU, M32RBF_INSN_REMU, M32RBF_SFMT_DIV }, 874e98e3e1Schristos { M32R_INSN_JL, M32RBF_INSN_JL, M32RBF_SFMT_JL }, 884e98e3e1Schristos { M32R_INSN_JMP, M32RBF_INSN_JMP, M32RBF_SFMT_JMP }, 894e98e3e1Schristos { M32R_INSN_LD, M32RBF_INSN_LD, M32RBF_SFMT_LD }, 904e98e3e1Schristos { M32R_INSN_LD_D, M32RBF_INSN_LD_D, M32RBF_SFMT_LD_D }, 914e98e3e1Schristos { M32R_INSN_LDB, M32RBF_INSN_LDB, M32RBF_SFMT_LDB }, 924e98e3e1Schristos { M32R_INSN_LDB_D, M32RBF_INSN_LDB_D, M32RBF_SFMT_LDB_D }, 934e98e3e1Schristos { M32R_INSN_LDH, M32RBF_INSN_LDH, M32RBF_SFMT_LDH }, 944e98e3e1Schristos { M32R_INSN_LDH_D, M32RBF_INSN_LDH_D, M32RBF_SFMT_LDH_D }, 954e98e3e1Schristos { M32R_INSN_LDUB, M32RBF_INSN_LDUB, M32RBF_SFMT_LDB }, 964e98e3e1Schristos { M32R_INSN_LDUB_D, M32RBF_INSN_LDUB_D, M32RBF_SFMT_LDB_D }, 974e98e3e1Schristos { M32R_INSN_LDUH, M32RBF_INSN_LDUH, M32RBF_SFMT_LDH }, 984e98e3e1Schristos { M32R_INSN_LDUH_D, M32RBF_INSN_LDUH_D, M32RBF_SFMT_LDH_D }, 994e98e3e1Schristos { M32R_INSN_LD_PLUS, M32RBF_INSN_LD_PLUS, M32RBF_SFMT_LD_PLUS }, 1004e98e3e1Schristos { M32R_INSN_LD24, M32RBF_INSN_LD24, M32RBF_SFMT_LD24 }, 1014e98e3e1Schristos { M32R_INSN_LDI8, M32RBF_INSN_LDI8, M32RBF_SFMT_LDI8 }, 1024e98e3e1Schristos { M32R_INSN_LDI16, M32RBF_INSN_LDI16, M32RBF_SFMT_LDI16 }, 1034e98e3e1Schristos { M32R_INSN_LOCK, M32RBF_INSN_LOCK, M32RBF_SFMT_LOCK }, 1044e98e3e1Schristos { M32R_INSN_MACHI, M32RBF_INSN_MACHI, M32RBF_SFMT_MACHI }, 1054e98e3e1Schristos { M32R_INSN_MACLO, M32RBF_INSN_MACLO, M32RBF_SFMT_MACHI }, 1064e98e3e1Schristos { M32R_INSN_MACWHI, M32RBF_INSN_MACWHI, M32RBF_SFMT_MACHI }, 1074e98e3e1Schristos { M32R_INSN_MACWLO, M32RBF_INSN_MACWLO, M32RBF_SFMT_MACHI }, 1084e98e3e1Schristos { M32R_INSN_MUL, M32RBF_INSN_MUL, M32RBF_SFMT_ADD }, 1094e98e3e1Schristos { M32R_INSN_MULHI, M32RBF_INSN_MULHI, M32RBF_SFMT_MULHI }, 1104e98e3e1Schristos { M32R_INSN_MULLO, M32RBF_INSN_MULLO, M32RBF_SFMT_MULHI }, 1114e98e3e1Schristos { M32R_INSN_MULWHI, M32RBF_INSN_MULWHI, M32RBF_SFMT_MULHI }, 1124e98e3e1Schristos { M32R_INSN_MULWLO, M32RBF_INSN_MULWLO, M32RBF_SFMT_MULHI }, 1134e98e3e1Schristos { M32R_INSN_MV, M32RBF_INSN_MV, M32RBF_SFMT_MV }, 1144e98e3e1Schristos { M32R_INSN_MVFACHI, M32RBF_INSN_MVFACHI, M32RBF_SFMT_MVFACHI }, 1154e98e3e1Schristos { M32R_INSN_MVFACLO, M32RBF_INSN_MVFACLO, M32RBF_SFMT_MVFACHI }, 1164e98e3e1Schristos { M32R_INSN_MVFACMI, M32RBF_INSN_MVFACMI, M32RBF_SFMT_MVFACHI }, 1174e98e3e1Schristos { M32R_INSN_MVFC, M32RBF_INSN_MVFC, M32RBF_SFMT_MVFC }, 1184e98e3e1Schristos { M32R_INSN_MVTACHI, M32RBF_INSN_MVTACHI, M32RBF_SFMT_MVTACHI }, 1194e98e3e1Schristos { M32R_INSN_MVTACLO, M32RBF_INSN_MVTACLO, M32RBF_SFMT_MVTACHI }, 1204e98e3e1Schristos { M32R_INSN_MVTC, M32RBF_INSN_MVTC, M32RBF_SFMT_MVTC }, 1214e98e3e1Schristos { M32R_INSN_NEG, M32RBF_INSN_NEG, M32RBF_SFMT_MV }, 1224e98e3e1Schristos { M32R_INSN_NOP, M32RBF_INSN_NOP, M32RBF_SFMT_NOP }, 1234e98e3e1Schristos { M32R_INSN_NOT, M32RBF_INSN_NOT, M32RBF_SFMT_MV }, 1244e98e3e1Schristos { M32R_INSN_RAC, M32RBF_INSN_RAC, M32RBF_SFMT_RAC }, 1254e98e3e1Schristos { M32R_INSN_RACH, M32RBF_INSN_RACH, M32RBF_SFMT_RAC }, 1264e98e3e1Schristos { M32R_INSN_RTE, M32RBF_INSN_RTE, M32RBF_SFMT_RTE }, 1274e98e3e1Schristos { M32R_INSN_SETH, M32RBF_INSN_SETH, M32RBF_SFMT_SETH }, 1284e98e3e1Schristos { M32R_INSN_SLL, M32RBF_INSN_SLL, M32RBF_SFMT_ADD }, 1294e98e3e1Schristos { M32R_INSN_SLL3, M32RBF_INSN_SLL3, M32RBF_SFMT_SLL3 }, 1304e98e3e1Schristos { M32R_INSN_SLLI, M32RBF_INSN_SLLI, M32RBF_SFMT_SLLI }, 1314e98e3e1Schristos { M32R_INSN_SRA, M32RBF_INSN_SRA, M32RBF_SFMT_ADD }, 1324e98e3e1Schristos { M32R_INSN_SRA3, M32RBF_INSN_SRA3, M32RBF_SFMT_SLL3 }, 1334e98e3e1Schristos { M32R_INSN_SRAI, M32RBF_INSN_SRAI, M32RBF_SFMT_SLLI }, 1344e98e3e1Schristos { M32R_INSN_SRL, M32RBF_INSN_SRL, M32RBF_SFMT_ADD }, 1354e98e3e1Schristos { M32R_INSN_SRL3, M32RBF_INSN_SRL3, M32RBF_SFMT_SLL3 }, 1364e98e3e1Schristos { M32R_INSN_SRLI, M32RBF_INSN_SRLI, M32RBF_SFMT_SLLI }, 1374e98e3e1Schristos { M32R_INSN_ST, M32RBF_INSN_ST, M32RBF_SFMT_ST }, 1384e98e3e1Schristos { M32R_INSN_ST_D, M32RBF_INSN_ST_D, M32RBF_SFMT_ST_D }, 1394e98e3e1Schristos { M32R_INSN_STB, M32RBF_INSN_STB, M32RBF_SFMT_STB }, 1404e98e3e1Schristos { M32R_INSN_STB_D, M32RBF_INSN_STB_D, M32RBF_SFMT_STB_D }, 1414e98e3e1Schristos { M32R_INSN_STH, M32RBF_INSN_STH, M32RBF_SFMT_STH }, 1424e98e3e1Schristos { M32R_INSN_STH_D, M32RBF_INSN_STH_D, M32RBF_SFMT_STH_D }, 1434e98e3e1Schristos { M32R_INSN_ST_PLUS, M32RBF_INSN_ST_PLUS, M32RBF_SFMT_ST_PLUS }, 1444e98e3e1Schristos { M32R_INSN_ST_MINUS, M32RBF_INSN_ST_MINUS, M32RBF_SFMT_ST_PLUS }, 1454e98e3e1Schristos { M32R_INSN_SUB, M32RBF_INSN_SUB, M32RBF_SFMT_ADD }, 1464e98e3e1Schristos { M32R_INSN_SUBV, M32RBF_INSN_SUBV, M32RBF_SFMT_ADDV }, 1474e98e3e1Schristos { M32R_INSN_SUBX, M32RBF_INSN_SUBX, M32RBF_SFMT_ADDX }, 1484e98e3e1Schristos { M32R_INSN_TRAP, M32RBF_INSN_TRAP, M32RBF_SFMT_TRAP }, 1494e98e3e1Schristos { M32R_INSN_UNLOCK, M32RBF_INSN_UNLOCK, M32RBF_SFMT_UNLOCK }, 1504e98e3e1Schristos { M32R_INSN_CLRPSW, M32RBF_INSN_CLRPSW, M32RBF_SFMT_CLRPSW }, 1514e98e3e1Schristos { M32R_INSN_SETPSW, M32RBF_INSN_SETPSW, M32RBF_SFMT_SETPSW }, 1524e98e3e1Schristos { M32R_INSN_BSET, M32RBF_INSN_BSET, M32RBF_SFMT_BSET }, 1534e98e3e1Schristos { M32R_INSN_BCLR, M32RBF_INSN_BCLR, M32RBF_SFMT_BSET }, 1544e98e3e1Schristos { M32R_INSN_BTST, M32RBF_INSN_BTST, M32RBF_SFMT_BTST }, 1554e98e3e1Schristos }; 1564e98e3e1Schristos 1574e98e3e1Schristos static const struct insn_sem m32rbf_insn_sem_invalid = 1584e98e3e1Schristos { 1594e98e3e1Schristos VIRTUAL_INSN_X_INVALID, M32RBF_INSN_X_INVALID, M32RBF_SFMT_EMPTY 1604e98e3e1Schristos }; 1614e98e3e1Schristos 1624e98e3e1Schristos /* Initialize an IDESC from the compile-time computable parts. */ 1634e98e3e1Schristos 1644e98e3e1Schristos static INLINE void 1654e98e3e1Schristos init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t) 1664e98e3e1Schristos { 1674e98e3e1Schristos const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries; 1684e98e3e1Schristos 1694e98e3e1Schristos id->num = t->index; 1704e98e3e1Schristos id->sfmt = t->sfmt; 1714e98e3e1Schristos if ((int) t->type <= 0) 1724e98e3e1Schristos id->idata = & cgen_virtual_insn_table[- (int) t->type]; 1734e98e3e1Schristos else 1744e98e3e1Schristos id->idata = & insn_table[t->type]; 1754e98e3e1Schristos id->attrs = CGEN_INSN_ATTRS (id->idata); 1764e98e3e1Schristos /* Oh my god, a magic number. */ 1774e98e3e1Schristos id->length = CGEN_INSN_BITSIZE (id->idata) / 8; 1784e98e3e1Schristos 1794e98e3e1Schristos #if WITH_PROFILE_MODEL_P 1804e98e3e1Schristos id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index]; 1814e98e3e1Schristos { 1824e98e3e1Schristos SIM_DESC sd = CPU_STATE (cpu); 1834e98e3e1Schristos SIM_ASSERT (t->index == id->timing->num); 1844e98e3e1Schristos } 1854e98e3e1Schristos #endif 1864e98e3e1Schristos 1874e98e3e1Schristos /* Semantic pointers are initialized elsewhere. */ 1884e98e3e1Schristos } 1894e98e3e1Schristos 1904e98e3e1Schristos /* Initialize the instruction descriptor table. */ 1914e98e3e1Schristos 1924e98e3e1Schristos void 1934e98e3e1Schristos m32rbf_init_idesc_table (SIM_CPU *cpu) 1944e98e3e1Schristos { 1954e98e3e1Schristos IDESC *id,*tabend; 1964e98e3e1Schristos const struct insn_sem *t,*tend; 1974e98e3e1Schristos int tabsize = M32RBF_INSN__MAX; 1984e98e3e1Schristos IDESC *table = m32rbf_insn_data; 1994e98e3e1Schristos 2004e98e3e1Schristos memset (table, 0, tabsize * sizeof (IDESC)); 2014e98e3e1Schristos 2024e98e3e1Schristos /* First set all entries to the `invalid insn'. */ 2034e98e3e1Schristos t = & m32rbf_insn_sem_invalid; 2044e98e3e1Schristos for (id = table, tabend = table + tabsize; id < tabend; ++id) 2054e98e3e1Schristos init_idesc (cpu, id, t); 2064e98e3e1Schristos 2074e98e3e1Schristos /* Now fill in the values for the chosen cpu. */ 208796c32c9Schristos for (t = m32rbf_insn_sem, tend = t + ARRAY_SIZE (m32rbf_insn_sem); 2094e98e3e1Schristos t != tend; ++t) 2104e98e3e1Schristos { 2114e98e3e1Schristos init_idesc (cpu, & table[t->index], t); 2124e98e3e1Schristos } 2134e98e3e1Schristos 2144e98e3e1Schristos /* Link the IDESC table into the cpu. */ 2154e98e3e1Schristos CPU_IDESC (cpu) = table; 2164e98e3e1Schristos } 2174e98e3e1Schristos 2184e98e3e1Schristos /* Given an instruction, return a pointer to its IDESC entry. */ 2194e98e3e1Schristos 2204e98e3e1Schristos const IDESC * 2214e98e3e1Schristos m32rbf_decode (SIM_CPU *current_cpu, IADDR pc, 2224e98e3e1Schristos CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn, 2234e98e3e1Schristos ARGBUF *abuf) 2244e98e3e1Schristos { 2254e98e3e1Schristos /* Result of decoder. */ 2264e98e3e1Schristos M32RBF_INSN_TYPE itype; 2274e98e3e1Schristos 2284e98e3e1Schristos { 2294e98e3e1Schristos CGEN_INSN_WORD insn = base_insn; 2304e98e3e1Schristos 2314e98e3e1Schristos { 232*05fa0856Schristos unsigned int val0 = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0))); 233*05fa0856Schristos switch (val0) 2344e98e3e1Schristos { 2354e98e3e1Schristos case 0: itype = M32RBF_INSN_SUBV; goto extract_sfmt_addv; 2364e98e3e1Schristos case 1: itype = M32RBF_INSN_SUBX; goto extract_sfmt_addx; 2374e98e3e1Schristos case 2: itype = M32RBF_INSN_SUB; goto extract_sfmt_add; 2384e98e3e1Schristos case 3: itype = M32RBF_INSN_NEG; goto extract_sfmt_mv; 2394e98e3e1Schristos case 4: itype = M32RBF_INSN_CMP; goto extract_sfmt_cmp; 2404e98e3e1Schristos case 5: itype = M32RBF_INSN_CMPU; goto extract_sfmt_cmp; 2414e98e3e1Schristos case 8: itype = M32RBF_INSN_ADDV; goto extract_sfmt_addv; 2424e98e3e1Schristos case 9: itype = M32RBF_INSN_ADDX; goto extract_sfmt_addx; 2434e98e3e1Schristos case 10: itype = M32RBF_INSN_ADD; goto extract_sfmt_add; 2444e98e3e1Schristos case 11: itype = M32RBF_INSN_NOT; goto extract_sfmt_mv; 2454e98e3e1Schristos case 12: itype = M32RBF_INSN_AND; goto extract_sfmt_add; 2464e98e3e1Schristos case 13: itype = M32RBF_INSN_XOR; goto extract_sfmt_add; 2474e98e3e1Schristos case 14: itype = M32RBF_INSN_OR; goto extract_sfmt_add; 2484e98e3e1Schristos case 15: 2494e98e3e1Schristos if ((entire_insn & 0xf8f0) == 0xf0) 2504e98e3e1Schristos { itype = M32RBF_INSN_BTST; goto extract_sfmt_btst; } 2514e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 2524e98e3e1Schristos case 16: itype = M32RBF_INSN_SRL; goto extract_sfmt_add; 2534e98e3e1Schristos case 18: itype = M32RBF_INSN_SRA; goto extract_sfmt_add; 2544e98e3e1Schristos case 20: itype = M32RBF_INSN_SLL; goto extract_sfmt_add; 2554e98e3e1Schristos case 22: itype = M32RBF_INSN_MUL; goto extract_sfmt_add; 2564e98e3e1Schristos case 24: itype = M32RBF_INSN_MV; goto extract_sfmt_mv; 2574e98e3e1Schristos case 25: itype = M32RBF_INSN_MVFC; goto extract_sfmt_mvfc; 2584e98e3e1Schristos case 26: itype = M32RBF_INSN_MVTC; goto extract_sfmt_mvtc; 2594e98e3e1Schristos case 28: 2604e98e3e1Schristos { 261*05fa0856Schristos unsigned int val1 = (((insn >> 8) & (1 << 0))); 262*05fa0856Schristos switch (val1) 2634e98e3e1Schristos { 2644e98e3e1Schristos case 0: 2654e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x1ec0) 2664e98e3e1Schristos { itype = M32RBF_INSN_JL; goto extract_sfmt_jl; } 2674e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 2684e98e3e1Schristos case 1: 2694e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x1fc0) 2704e98e3e1Schristos { itype = M32RBF_INSN_JMP; goto extract_sfmt_jmp; } 2714e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 2724e98e3e1Schristos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 2734e98e3e1Schristos } 2744e98e3e1Schristos } 2754e98e3e1Schristos case 29: 2764e98e3e1Schristos if ((entire_insn & 0xffff) == 0x10d6) 2774e98e3e1Schristos { itype = M32RBF_INSN_RTE; goto extract_sfmt_rte; } 2784e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 2794e98e3e1Schristos case 31: 2804e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x10f0) 2814e98e3e1Schristos { itype = M32RBF_INSN_TRAP; goto extract_sfmt_trap; } 2824e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 2834e98e3e1Schristos case 32: itype = M32RBF_INSN_STB; goto extract_sfmt_stb; 2844e98e3e1Schristos case 34: itype = M32RBF_INSN_STH; goto extract_sfmt_sth; 2854e98e3e1Schristos case 36: itype = M32RBF_INSN_ST; goto extract_sfmt_st; 2864e98e3e1Schristos case 37: itype = M32RBF_INSN_UNLOCK; goto extract_sfmt_unlock; 2874e98e3e1Schristos case 38: itype = M32RBF_INSN_ST_PLUS; goto extract_sfmt_st_plus; 2884e98e3e1Schristos case 39: itype = M32RBF_INSN_ST_MINUS; goto extract_sfmt_st_plus; 2894e98e3e1Schristos case 40: itype = M32RBF_INSN_LDB; goto extract_sfmt_ldb; 2904e98e3e1Schristos case 41: itype = M32RBF_INSN_LDUB; goto extract_sfmt_ldb; 2914e98e3e1Schristos case 42: itype = M32RBF_INSN_LDH; goto extract_sfmt_ldh; 2924e98e3e1Schristos case 43: itype = M32RBF_INSN_LDUH; goto extract_sfmt_ldh; 2934e98e3e1Schristos case 44: itype = M32RBF_INSN_LD; goto extract_sfmt_ld; 2944e98e3e1Schristos case 45: itype = M32RBF_INSN_LOCK; goto extract_sfmt_lock; 2954e98e3e1Schristos case 46: itype = M32RBF_INSN_LD_PLUS; goto extract_sfmt_ld_plus; 2964e98e3e1Schristos case 48: itype = M32RBF_INSN_MULHI; goto extract_sfmt_mulhi; 2974e98e3e1Schristos case 49: itype = M32RBF_INSN_MULLO; goto extract_sfmt_mulhi; 2984e98e3e1Schristos case 50: itype = M32RBF_INSN_MULWHI; goto extract_sfmt_mulhi; 2994e98e3e1Schristos case 51: itype = M32RBF_INSN_MULWLO; goto extract_sfmt_mulhi; 3004e98e3e1Schristos case 52: itype = M32RBF_INSN_MACHI; goto extract_sfmt_machi; 3014e98e3e1Schristos case 53: itype = M32RBF_INSN_MACLO; goto extract_sfmt_machi; 3024e98e3e1Schristos case 54: itype = M32RBF_INSN_MACWHI; goto extract_sfmt_machi; 3034e98e3e1Schristos case 55: itype = M32RBF_INSN_MACWLO; goto extract_sfmt_machi; 304*05fa0856Schristos case 64: 305*05fa0856Schristos case 65: 306*05fa0856Schristos case 66: 307*05fa0856Schristos case 67: 308*05fa0856Schristos case 68: 309*05fa0856Schristos case 69: 310*05fa0856Schristos case 70: 311*05fa0856Schristos case 71: 312*05fa0856Schristos case 72: 313*05fa0856Schristos case 73: 314*05fa0856Schristos case 74: 315*05fa0856Schristos case 75: 316*05fa0856Schristos case 76: 317*05fa0856Schristos case 77: 318*05fa0856Schristos case 78: 3194e98e3e1Schristos case 79: itype = M32RBF_INSN_ADDI; goto extract_sfmt_addi; 320*05fa0856Schristos case 80: 3214e98e3e1Schristos case 81: itype = M32RBF_INSN_SRLI; goto extract_sfmt_slli; 322*05fa0856Schristos case 82: 3234e98e3e1Schristos case 83: itype = M32RBF_INSN_SRAI; goto extract_sfmt_slli; 324*05fa0856Schristos case 84: 3254e98e3e1Schristos case 85: itype = M32RBF_INSN_SLLI; goto extract_sfmt_slli; 3264e98e3e1Schristos case 87: 3274e98e3e1Schristos { 328*05fa0856Schristos unsigned int val1 = (((insn >> 0) & (1 << 0))); 329*05fa0856Schristos switch (val1) 3304e98e3e1Schristos { 3314e98e3e1Schristos case 0: 3324e98e3e1Schristos if ((entire_insn & 0xf0ff) == 0x5070) 3334e98e3e1Schristos { itype = M32RBF_INSN_MVTACHI; goto extract_sfmt_mvtachi; } 3344e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3354e98e3e1Schristos case 1: 3364e98e3e1Schristos if ((entire_insn & 0xf0ff) == 0x5071) 3374e98e3e1Schristos { itype = M32RBF_INSN_MVTACLO; goto extract_sfmt_mvtachi; } 3384e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3394e98e3e1Schristos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3404e98e3e1Schristos } 3414e98e3e1Schristos } 3424e98e3e1Schristos case 88: 3434e98e3e1Schristos if ((entire_insn & 0xffff) == 0x5080) 3444e98e3e1Schristos { itype = M32RBF_INSN_RACH; goto extract_sfmt_rac; } 3454e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3464e98e3e1Schristos case 89: 3474e98e3e1Schristos if ((entire_insn & 0xffff) == 0x5090) 3484e98e3e1Schristos { itype = M32RBF_INSN_RAC; goto extract_sfmt_rac; } 3494e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3504e98e3e1Schristos case 95: 3514e98e3e1Schristos { 352*05fa0856Schristos unsigned int val1 = (((insn >> 0) & (3 << 0))); 353*05fa0856Schristos switch (val1) 3544e98e3e1Schristos { 3554e98e3e1Schristos case 0: 3564e98e3e1Schristos if ((entire_insn & 0xf0ff) == 0x50f0) 3574e98e3e1Schristos { itype = M32RBF_INSN_MVFACHI; goto extract_sfmt_mvfachi; } 3584e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3594e98e3e1Schristos case 1: 3604e98e3e1Schristos if ((entire_insn & 0xf0ff) == 0x50f1) 3614e98e3e1Schristos { itype = M32RBF_INSN_MVFACLO; goto extract_sfmt_mvfachi; } 3624e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3634e98e3e1Schristos case 2: 3644e98e3e1Schristos if ((entire_insn & 0xf0ff) == 0x50f2) 3654e98e3e1Schristos { itype = M32RBF_INSN_MVFACMI; goto extract_sfmt_mvfachi; } 3664e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3674e98e3e1Schristos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3684e98e3e1Schristos } 3694e98e3e1Schristos } 370*05fa0856Schristos case 96: 371*05fa0856Schristos case 97: 372*05fa0856Schristos case 98: 373*05fa0856Schristos case 99: 374*05fa0856Schristos case 100: 375*05fa0856Schristos case 101: 376*05fa0856Schristos case 102: 377*05fa0856Schristos case 103: 378*05fa0856Schristos case 104: 379*05fa0856Schristos case 105: 380*05fa0856Schristos case 106: 381*05fa0856Schristos case 107: 382*05fa0856Schristos case 108: 383*05fa0856Schristos case 109: 384*05fa0856Schristos case 110: 3854e98e3e1Schristos case 111: itype = M32RBF_INSN_LDI8; goto extract_sfmt_ldi8; 3864e98e3e1Schristos case 112: 3874e98e3e1Schristos { 388*05fa0856Schristos unsigned int val1 = (((insn >> 8) & (15 << 0))); 389*05fa0856Schristos switch (val1) 3904e98e3e1Schristos { 3914e98e3e1Schristos case 0: 3924e98e3e1Schristos if ((entire_insn & 0xffff) == 0x7000) 3934e98e3e1Schristos { itype = M32RBF_INSN_NOP; goto extract_sfmt_nop; } 3944e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 3954e98e3e1Schristos case 1: itype = M32RBF_INSN_SETPSW; goto extract_sfmt_setpsw; 3964e98e3e1Schristos case 2: itype = M32RBF_INSN_CLRPSW; goto extract_sfmt_clrpsw; 3974e98e3e1Schristos case 12: itype = M32RBF_INSN_BC8; goto extract_sfmt_bc8; 3984e98e3e1Schristos case 13: itype = M32RBF_INSN_BNC8; goto extract_sfmt_bc8; 3994e98e3e1Schristos case 14: itype = M32RBF_INSN_BL8; goto extract_sfmt_bl8; 4004e98e3e1Schristos case 15: itype = M32RBF_INSN_BRA8; goto extract_sfmt_bra8; 4014e98e3e1Schristos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4024e98e3e1Schristos } 4034e98e3e1Schristos } 404*05fa0856Schristos case 113: 405*05fa0856Schristos case 114: 406*05fa0856Schristos case 115: 407*05fa0856Schristos case 116: 408*05fa0856Schristos case 117: 409*05fa0856Schristos case 118: 410*05fa0856Schristos case 119: 411*05fa0856Schristos case 120: 412*05fa0856Schristos case 121: 413*05fa0856Schristos case 122: 414*05fa0856Schristos case 123: 415*05fa0856Schristos case 124: 416*05fa0856Schristos case 125: 417*05fa0856Schristos case 126: 4184e98e3e1Schristos case 127: 4194e98e3e1Schristos { 420*05fa0856Schristos unsigned int val1 = (((insn >> 8) & (15 << 0))); 421*05fa0856Schristos switch (val1) 4224e98e3e1Schristos { 4234e98e3e1Schristos case 1: itype = M32RBF_INSN_SETPSW; goto extract_sfmt_setpsw; 4244e98e3e1Schristos case 2: itype = M32RBF_INSN_CLRPSW; goto extract_sfmt_clrpsw; 4254e98e3e1Schristos case 12: itype = M32RBF_INSN_BC8; goto extract_sfmt_bc8; 4264e98e3e1Schristos case 13: itype = M32RBF_INSN_BNC8; goto extract_sfmt_bc8; 4274e98e3e1Schristos case 14: itype = M32RBF_INSN_BL8; goto extract_sfmt_bl8; 4284e98e3e1Schristos case 15: itype = M32RBF_INSN_BRA8; goto extract_sfmt_bra8; 4294e98e3e1Schristos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4304e98e3e1Schristos } 4314e98e3e1Schristos } 4324e98e3e1Schristos case 132: 4334e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0x80400000) 4344e98e3e1Schristos { itype = M32RBF_INSN_CMPI; goto extract_sfmt_cmpi; } 4354e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4364e98e3e1Schristos case 133: 4374e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0x80500000) 4384e98e3e1Schristos { itype = M32RBF_INSN_CMPUI; goto extract_sfmt_cmpi; } 4394e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4404e98e3e1Schristos case 136: itype = M32RBF_INSN_ADDV3; goto extract_sfmt_addv3; 4414e98e3e1Schristos case 138: itype = M32RBF_INSN_ADD3; goto extract_sfmt_add3; 4424e98e3e1Schristos case 140: itype = M32RBF_INSN_AND3; goto extract_sfmt_and3; 4434e98e3e1Schristos case 141: itype = M32RBF_INSN_XOR3; goto extract_sfmt_and3; 4444e98e3e1Schristos case 142: itype = M32RBF_INSN_OR3; goto extract_sfmt_or3; 4454e98e3e1Schristos case 144: 4464e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90000000) 4474e98e3e1Schristos { itype = M32RBF_INSN_DIV; goto extract_sfmt_div; } 4484e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4494e98e3e1Schristos case 145: 4504e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90100000) 4514e98e3e1Schristos { itype = M32RBF_INSN_DIVU; goto extract_sfmt_div; } 4524e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4534e98e3e1Schristos case 146: 4544e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90200000) 4554e98e3e1Schristos { itype = M32RBF_INSN_REM; goto extract_sfmt_div; } 4564e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4574e98e3e1Schristos case 147: 4584e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90300000) 4594e98e3e1Schristos { itype = M32RBF_INSN_REMU; goto extract_sfmt_div; } 4604e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4614e98e3e1Schristos case 152: itype = M32RBF_INSN_SRL3; goto extract_sfmt_sll3; 4624e98e3e1Schristos case 154: itype = M32RBF_INSN_SRA3; goto extract_sfmt_sll3; 4634e98e3e1Schristos case 156: itype = M32RBF_INSN_SLL3; goto extract_sfmt_sll3; 4644e98e3e1Schristos case 159: 4654e98e3e1Schristos if ((entire_insn & 0xf0ff0000) == 0x90f00000) 4664e98e3e1Schristos { itype = M32RBF_INSN_LDI16; goto extract_sfmt_ldi16; } 4674e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4684e98e3e1Schristos case 160: itype = M32RBF_INSN_STB_D; goto extract_sfmt_stb_d; 4694e98e3e1Schristos case 162: itype = M32RBF_INSN_STH_D; goto extract_sfmt_sth_d; 4704e98e3e1Schristos case 164: itype = M32RBF_INSN_ST_D; goto extract_sfmt_st_d; 4714e98e3e1Schristos case 166: 4724e98e3e1Schristos if ((entire_insn & 0xf8f00000) == 0xa0600000) 4734e98e3e1Schristos { itype = M32RBF_INSN_BSET; goto extract_sfmt_bset; } 4744e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4754e98e3e1Schristos case 167: 4764e98e3e1Schristos if ((entire_insn & 0xf8f00000) == 0xa0700000) 4774e98e3e1Schristos { itype = M32RBF_INSN_BCLR; goto extract_sfmt_bset; } 4784e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4794e98e3e1Schristos case 168: itype = M32RBF_INSN_LDB_D; goto extract_sfmt_ldb_d; 4804e98e3e1Schristos case 169: itype = M32RBF_INSN_LDUB_D; goto extract_sfmt_ldb_d; 4814e98e3e1Schristos case 170: itype = M32RBF_INSN_LDH_D; goto extract_sfmt_ldh_d; 4824e98e3e1Schristos case 171: itype = M32RBF_INSN_LDUH_D; goto extract_sfmt_ldh_d; 4834e98e3e1Schristos case 172: itype = M32RBF_INSN_LD_D; goto extract_sfmt_ld_d; 4844e98e3e1Schristos case 176: itype = M32RBF_INSN_BEQ; goto extract_sfmt_beq; 4854e98e3e1Schristos case 177: itype = M32RBF_INSN_BNE; goto extract_sfmt_beq; 4864e98e3e1Schristos case 184: 4874e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0800000) 4884e98e3e1Schristos { itype = M32RBF_INSN_BEQZ; goto extract_sfmt_beqz; } 4894e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4904e98e3e1Schristos case 185: 4914e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0900000) 4924e98e3e1Schristos { itype = M32RBF_INSN_BNEZ; goto extract_sfmt_beqz; } 4934e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4944e98e3e1Schristos case 186: 4954e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0a00000) 4964e98e3e1Schristos { itype = M32RBF_INSN_BLTZ; goto extract_sfmt_beqz; } 4974e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 4984e98e3e1Schristos case 187: 4994e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0b00000) 5004e98e3e1Schristos { itype = M32RBF_INSN_BGEZ; goto extract_sfmt_beqz; } 5014e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5024e98e3e1Schristos case 188: 5034e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0c00000) 5044e98e3e1Schristos { itype = M32RBF_INSN_BLEZ; goto extract_sfmt_beqz; } 5054e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5064e98e3e1Schristos case 189: 5074e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0d00000) 5084e98e3e1Schristos { itype = M32RBF_INSN_BGTZ; goto extract_sfmt_beqz; } 5094e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5104e98e3e1Schristos case 220: 5114e98e3e1Schristos if ((entire_insn & 0xf0ff0000) == 0xd0c00000) 5124e98e3e1Schristos { itype = M32RBF_INSN_SETH; goto extract_sfmt_seth; } 5134e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 514*05fa0856Schristos case 224: 515*05fa0856Schristos case 225: 516*05fa0856Schristos case 226: 517*05fa0856Schristos case 227: 518*05fa0856Schristos case 228: 519*05fa0856Schristos case 229: 520*05fa0856Schristos case 230: 521*05fa0856Schristos case 231: 522*05fa0856Schristos case 232: 523*05fa0856Schristos case 233: 524*05fa0856Schristos case 234: 525*05fa0856Schristos case 235: 526*05fa0856Schristos case 236: 527*05fa0856Schristos case 237: 528*05fa0856Schristos case 238: 5294e98e3e1Schristos case 239: itype = M32RBF_INSN_LD24; goto extract_sfmt_ld24; 530*05fa0856Schristos case 240: 531*05fa0856Schristos case 241: 532*05fa0856Schristos case 242: 533*05fa0856Schristos case 243: 534*05fa0856Schristos case 244: 535*05fa0856Schristos case 245: 536*05fa0856Schristos case 246: 537*05fa0856Schristos case 247: 538*05fa0856Schristos case 248: 539*05fa0856Schristos case 249: 540*05fa0856Schristos case 250: 541*05fa0856Schristos case 251: 542*05fa0856Schristos case 252: 543*05fa0856Schristos case 253: 544*05fa0856Schristos case 254: 5454e98e3e1Schristos case 255: 5464e98e3e1Schristos { 547*05fa0856Schristos unsigned int val1 = (((insn >> 8) & (3 << 0))); 548*05fa0856Schristos switch (val1) 5494e98e3e1Schristos { 5504e98e3e1Schristos case 0: 5514e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xfc000000) 5524e98e3e1Schristos { itype = M32RBF_INSN_BC24; goto extract_sfmt_bc24; } 5534e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5544e98e3e1Schristos case 1: 5554e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xfd000000) 5564e98e3e1Schristos { itype = M32RBF_INSN_BNC24; goto extract_sfmt_bc24; } 5574e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5584e98e3e1Schristos case 2: 5594e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xfe000000) 5604e98e3e1Schristos { itype = M32RBF_INSN_BL24; goto extract_sfmt_bl24; } 5614e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5624e98e3e1Schristos case 3: 5634e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xff000000) 5644e98e3e1Schristos { itype = M32RBF_INSN_BRA24; goto extract_sfmt_bra24; } 5654e98e3e1Schristos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5664e98e3e1Schristos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5674e98e3e1Schristos } 5684e98e3e1Schristos } 5694e98e3e1Schristos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty; 5704e98e3e1Schristos } 5714e98e3e1Schristos } 5724e98e3e1Schristos } 5734e98e3e1Schristos 5744e98e3e1Schristos /* The instruction has been decoded, now extract the fields. */ 5754e98e3e1Schristos 5764e98e3e1Schristos extract_sfmt_empty: 5774e98e3e1Schristos { 5784e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 5794e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 5804e98e3e1Schristos 5814e98e3e1Schristos 5824e98e3e1Schristos /* Record the fields for the semantic handler. */ 583212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0)); 5844e98e3e1Schristos 5854e98e3e1Schristos #undef FLD 5864e98e3e1Schristos return idesc; 5874e98e3e1Schristos } 5884e98e3e1Schristos 5894e98e3e1Schristos extract_sfmt_add: 5904e98e3e1Schristos { 5914e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 5924e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 5934e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 5944e98e3e1Schristos UINT f_r1; 5954e98e3e1Schristos UINT f_r2; 5964e98e3e1Schristos 5974e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 5984e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 5994e98e3e1Schristos 6004e98e3e1Schristos /* Record the fields for the semantic handler. */ 6014e98e3e1Schristos FLD (f_r1) = f_r1; 6024e98e3e1Schristos FLD (f_r2) = f_r2; 6034e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 6044e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 605212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0)); 6064e98e3e1Schristos 6074e98e3e1Schristos #if WITH_PROFILE_MODEL_P 6084e98e3e1Schristos /* Record the fields for profiling. */ 6094e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 6104e98e3e1Schristos { 6114e98e3e1Schristos FLD (in_dr) = f_r1; 6124e98e3e1Schristos FLD (in_sr) = f_r2; 6134e98e3e1Schristos FLD (out_dr) = f_r1; 6144e98e3e1Schristos } 6154e98e3e1Schristos #endif 6164e98e3e1Schristos #undef FLD 6174e98e3e1Schristos return idesc; 6184e98e3e1Schristos } 6194e98e3e1Schristos 6204e98e3e1Schristos extract_sfmt_add3: 6214e98e3e1Schristos { 6224e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 6234e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 6244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 6254e98e3e1Schristos UINT f_r1; 6264e98e3e1Schristos UINT f_r2; 6274e98e3e1Schristos INT f_simm16; 6284e98e3e1Schristos 6294e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 6304e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 6314e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 6324e98e3e1Schristos 6334e98e3e1Schristos /* Record the fields for the semantic handler. */ 6344e98e3e1Schristos FLD (f_simm16) = f_simm16; 6354e98e3e1Schristos FLD (f_r2) = f_r2; 6364e98e3e1Schristos FLD (f_r1) = f_r1; 6374e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 6384e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 639212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 6404e98e3e1Schristos 6414e98e3e1Schristos #if WITH_PROFILE_MODEL_P 6424e98e3e1Schristos /* Record the fields for profiling. */ 6434e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 6444e98e3e1Schristos { 6454e98e3e1Schristos FLD (in_sr) = f_r2; 6464e98e3e1Schristos FLD (out_dr) = f_r1; 6474e98e3e1Schristos } 6484e98e3e1Schristos #endif 6494e98e3e1Schristos #undef FLD 6504e98e3e1Schristos return idesc; 6514e98e3e1Schristos } 6524e98e3e1Schristos 6534e98e3e1Schristos extract_sfmt_and3: 6544e98e3e1Schristos { 6554e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 6564e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 6574e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 6584e98e3e1Schristos UINT f_r1; 6594e98e3e1Schristos UINT f_r2; 6604e98e3e1Schristos UINT f_uimm16; 6614e98e3e1Schristos 6624e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 6634e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 6644e98e3e1Schristos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 6654e98e3e1Schristos 6664e98e3e1Schristos /* Record the fields for the semantic handler. */ 6674e98e3e1Schristos FLD (f_r2) = f_r2; 6684e98e3e1Schristos FLD (f_uimm16) = f_uimm16; 6694e98e3e1Schristos FLD (f_r1) = f_r1; 6704e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 6714e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 672212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and3", "f_r2 0x%x", 'x', f_r2, "f_uimm16 0x%x", 'x', f_uimm16, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 6734e98e3e1Schristos 6744e98e3e1Schristos #if WITH_PROFILE_MODEL_P 6754e98e3e1Schristos /* Record the fields for profiling. */ 6764e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 6774e98e3e1Schristos { 6784e98e3e1Schristos FLD (in_sr) = f_r2; 6794e98e3e1Schristos FLD (out_dr) = f_r1; 6804e98e3e1Schristos } 6814e98e3e1Schristos #endif 6824e98e3e1Schristos #undef FLD 6834e98e3e1Schristos return idesc; 6844e98e3e1Schristos } 6854e98e3e1Schristos 6864e98e3e1Schristos extract_sfmt_or3: 6874e98e3e1Schristos { 6884e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 6894e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 6904e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 6914e98e3e1Schristos UINT f_r1; 6924e98e3e1Schristos UINT f_r2; 6934e98e3e1Schristos UINT f_uimm16; 6944e98e3e1Schristos 6954e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 6964e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 6974e98e3e1Schristos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 6984e98e3e1Schristos 6994e98e3e1Schristos /* Record the fields for the semantic handler. */ 7004e98e3e1Schristos FLD (f_r2) = f_r2; 7014e98e3e1Schristos FLD (f_uimm16) = f_uimm16; 7024e98e3e1Schristos FLD (f_r1) = f_r1; 7034e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 7044e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 705212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_or3", "f_r2 0x%x", 'x', f_r2, "f_uimm16 0x%x", 'x', f_uimm16, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 7064e98e3e1Schristos 7074e98e3e1Schristos #if WITH_PROFILE_MODEL_P 7084e98e3e1Schristos /* Record the fields for profiling. */ 7094e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 7104e98e3e1Schristos { 7114e98e3e1Schristos FLD (in_sr) = f_r2; 7124e98e3e1Schristos FLD (out_dr) = f_r1; 7134e98e3e1Schristos } 7144e98e3e1Schristos #endif 7154e98e3e1Schristos #undef FLD 7164e98e3e1Schristos return idesc; 7174e98e3e1Schristos } 7184e98e3e1Schristos 7194e98e3e1Schristos extract_sfmt_addi: 7204e98e3e1Schristos { 7214e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 7224e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 7234e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f 7244e98e3e1Schristos UINT f_r1; 7254e98e3e1Schristos INT f_simm8; 7264e98e3e1Schristos 7274e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 7284e98e3e1Schristos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); 7294e98e3e1Schristos 7304e98e3e1Schristos /* Record the fields for the semantic handler. */ 7314e98e3e1Schristos FLD (f_r1) = f_r1; 7324e98e3e1Schristos FLD (f_simm8) = f_simm8; 7334e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 734212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi", "f_r1 0x%x", 'x', f_r1, "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0)); 7354e98e3e1Schristos 7364e98e3e1Schristos #if WITH_PROFILE_MODEL_P 7374e98e3e1Schristos /* Record the fields for profiling. */ 7384e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 7394e98e3e1Schristos { 7404e98e3e1Schristos FLD (in_dr) = f_r1; 7414e98e3e1Schristos FLD (out_dr) = f_r1; 7424e98e3e1Schristos } 7434e98e3e1Schristos #endif 7444e98e3e1Schristos #undef FLD 7454e98e3e1Schristos return idesc; 7464e98e3e1Schristos } 7474e98e3e1Schristos 7484e98e3e1Schristos extract_sfmt_addv: 7494e98e3e1Schristos { 7504e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 7514e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 7524e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 7534e98e3e1Schristos UINT f_r1; 7544e98e3e1Schristos UINT f_r2; 7554e98e3e1Schristos 7564e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 7574e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 7584e98e3e1Schristos 7594e98e3e1Schristos /* Record the fields for the semantic handler. */ 7604e98e3e1Schristos FLD (f_r1) = f_r1; 7614e98e3e1Schristos FLD (f_r2) = f_r2; 7624e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 7634e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 764212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0)); 7654e98e3e1Schristos 7664e98e3e1Schristos #if WITH_PROFILE_MODEL_P 7674e98e3e1Schristos /* Record the fields for profiling. */ 7684e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 7694e98e3e1Schristos { 7704e98e3e1Schristos FLD (in_dr) = f_r1; 7714e98e3e1Schristos FLD (in_sr) = f_r2; 7724e98e3e1Schristos FLD (out_dr) = f_r1; 7734e98e3e1Schristos } 7744e98e3e1Schristos #endif 7754e98e3e1Schristos #undef FLD 7764e98e3e1Schristos return idesc; 7774e98e3e1Schristos } 7784e98e3e1Schristos 7794e98e3e1Schristos extract_sfmt_addv3: 7804e98e3e1Schristos { 7814e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 7824e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 7834e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 7844e98e3e1Schristos UINT f_r1; 7854e98e3e1Schristos UINT f_r2; 7864e98e3e1Schristos INT f_simm16; 7874e98e3e1Schristos 7884e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 7894e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 7904e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 7914e98e3e1Schristos 7924e98e3e1Schristos /* Record the fields for the semantic handler. */ 7934e98e3e1Schristos FLD (f_simm16) = f_simm16; 7944e98e3e1Schristos FLD (f_r2) = f_r2; 7954e98e3e1Schristos FLD (f_r1) = f_r1; 7964e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 7974e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 798212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 7994e98e3e1Schristos 8004e98e3e1Schristos #if WITH_PROFILE_MODEL_P 8014e98e3e1Schristos /* Record the fields for profiling. */ 8024e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 8034e98e3e1Schristos { 8044e98e3e1Schristos FLD (in_sr) = f_r2; 8054e98e3e1Schristos FLD (out_dr) = f_r1; 8064e98e3e1Schristos } 8074e98e3e1Schristos #endif 8084e98e3e1Schristos #undef FLD 8094e98e3e1Schristos return idesc; 8104e98e3e1Schristos } 8114e98e3e1Schristos 8124e98e3e1Schristos extract_sfmt_addx: 8134e98e3e1Schristos { 8144e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 8154e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 8164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 8174e98e3e1Schristos UINT f_r1; 8184e98e3e1Schristos UINT f_r2; 8194e98e3e1Schristos 8204e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 8214e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 8224e98e3e1Schristos 8234e98e3e1Schristos /* Record the fields for the semantic handler. */ 8244e98e3e1Schristos FLD (f_r1) = f_r1; 8254e98e3e1Schristos FLD (f_r2) = f_r2; 8264e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 8274e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 828212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addx", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0)); 8294e98e3e1Schristos 8304e98e3e1Schristos #if WITH_PROFILE_MODEL_P 8314e98e3e1Schristos /* Record the fields for profiling. */ 8324e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 8334e98e3e1Schristos { 8344e98e3e1Schristos FLD (in_dr) = f_r1; 8354e98e3e1Schristos FLD (in_sr) = f_r2; 8364e98e3e1Schristos FLD (out_dr) = f_r1; 8374e98e3e1Schristos } 8384e98e3e1Schristos #endif 8394e98e3e1Schristos #undef FLD 8404e98e3e1Schristos return idesc; 8414e98e3e1Schristos } 8424e98e3e1Schristos 8434e98e3e1Schristos extract_sfmt_bc8: 8444e98e3e1Schristos { 8454e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 8464e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 8474e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 8484e98e3e1Schristos SI f_disp8; 8494e98e3e1Schristos 850*05fa0856Schristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 8514e98e3e1Schristos 8524e98e3e1Schristos /* Record the fields for the semantic handler. */ 8534e98e3e1Schristos FLD (i_disp8) = f_disp8; 854212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 8554e98e3e1Schristos 8564e98e3e1Schristos #if WITH_PROFILE_MODEL_P 8574e98e3e1Schristos /* Record the fields for profiling. */ 8584e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 8594e98e3e1Schristos { 8604e98e3e1Schristos } 8614e98e3e1Schristos #endif 8624e98e3e1Schristos #undef FLD 8634e98e3e1Schristos return idesc; 8644e98e3e1Schristos } 8654e98e3e1Schristos 8664e98e3e1Schristos extract_sfmt_bc24: 8674e98e3e1Schristos { 8684e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 8694e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 8704e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 8714e98e3e1Schristos SI f_disp24; 8724e98e3e1Schristos 873*05fa0856Schristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 8744e98e3e1Schristos 8754e98e3e1Schristos /* Record the fields for the semantic handler. */ 8764e98e3e1Schristos FLD (i_disp24) = f_disp24; 877212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 8784e98e3e1Schristos 8794e98e3e1Schristos #if WITH_PROFILE_MODEL_P 8804e98e3e1Schristos /* Record the fields for profiling. */ 8814e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 8824e98e3e1Schristos { 8834e98e3e1Schristos } 8844e98e3e1Schristos #endif 8854e98e3e1Schristos #undef FLD 8864e98e3e1Schristos return idesc; 8874e98e3e1Schristos } 8884e98e3e1Schristos 8894e98e3e1Schristos extract_sfmt_beq: 8904e98e3e1Schristos { 8914e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 8924e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 8934e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 8944e98e3e1Schristos UINT f_r1; 8954e98e3e1Schristos UINT f_r2; 8964e98e3e1Schristos SI f_disp16; 8974e98e3e1Schristos 8984e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 8994e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 900*05fa0856Schristos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc)); 9014e98e3e1Schristos 9024e98e3e1Schristos /* Record the fields for the semantic handler. */ 9034e98e3e1Schristos FLD (f_r1) = f_r1; 9044e98e3e1Schristos FLD (f_r2) = f_r2; 9054e98e3e1Schristos FLD (i_disp16) = f_disp16; 9064e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 9074e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 908212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beq", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 9094e98e3e1Schristos 9104e98e3e1Schristos #if WITH_PROFILE_MODEL_P 9114e98e3e1Schristos /* Record the fields for profiling. */ 9124e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 9134e98e3e1Schristos { 9144e98e3e1Schristos FLD (in_src1) = f_r1; 9154e98e3e1Schristos FLD (in_src2) = f_r2; 9164e98e3e1Schristos } 9174e98e3e1Schristos #endif 9184e98e3e1Schristos #undef FLD 9194e98e3e1Schristos return idesc; 9204e98e3e1Schristos } 9214e98e3e1Schristos 9224e98e3e1Schristos extract_sfmt_beqz: 9234e98e3e1Schristos { 9244e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 9254e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 9264e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 9274e98e3e1Schristos UINT f_r2; 9284e98e3e1Schristos SI f_disp16; 9294e98e3e1Schristos 9304e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 931*05fa0856Schristos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc)); 9324e98e3e1Schristos 9334e98e3e1Schristos /* Record the fields for the semantic handler. */ 9344e98e3e1Schristos FLD (f_r2) = f_r2; 9354e98e3e1Schristos FLD (i_disp16) = f_disp16; 9364e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 937212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beqz", "f_r2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, "src2 0x%x", 'x', f_r2, (char *) 0)); 9384e98e3e1Schristos 9394e98e3e1Schristos #if WITH_PROFILE_MODEL_P 9404e98e3e1Schristos /* Record the fields for profiling. */ 9414e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 9424e98e3e1Schristos { 9434e98e3e1Schristos FLD (in_src2) = f_r2; 9444e98e3e1Schristos } 9454e98e3e1Schristos #endif 9464e98e3e1Schristos #undef FLD 9474e98e3e1Schristos return idesc; 9484e98e3e1Schristos } 9494e98e3e1Schristos 9504e98e3e1Schristos extract_sfmt_bl8: 9514e98e3e1Schristos { 9524e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 9534e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 9544e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 9554e98e3e1Schristos SI f_disp8; 9564e98e3e1Schristos 957*05fa0856Schristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 9584e98e3e1Schristos 9594e98e3e1Schristos /* Record the fields for the semantic handler. */ 9604e98e3e1Schristos FLD (i_disp8) = f_disp8; 961212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 9624e98e3e1Schristos 9634e98e3e1Schristos #if WITH_PROFILE_MODEL_P 9644e98e3e1Schristos /* Record the fields for profiling. */ 9654e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 9664e98e3e1Schristos { 9674e98e3e1Schristos FLD (out_h_gr_SI_14) = 14; 9684e98e3e1Schristos } 9694e98e3e1Schristos #endif 9704e98e3e1Schristos #undef FLD 9714e98e3e1Schristos return idesc; 9724e98e3e1Schristos } 9734e98e3e1Schristos 9744e98e3e1Schristos extract_sfmt_bl24: 9754e98e3e1Schristos { 9764e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 9774e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 9784e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 9794e98e3e1Schristos SI f_disp24; 9804e98e3e1Schristos 981*05fa0856Schristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 9824e98e3e1Schristos 9834e98e3e1Schristos /* Record the fields for the semantic handler. */ 9844e98e3e1Schristos FLD (i_disp24) = f_disp24; 985212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 9864e98e3e1Schristos 9874e98e3e1Schristos #if WITH_PROFILE_MODEL_P 9884e98e3e1Schristos /* Record the fields for profiling. */ 9894e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 9904e98e3e1Schristos { 9914e98e3e1Schristos FLD (out_h_gr_SI_14) = 14; 9924e98e3e1Schristos } 9934e98e3e1Schristos #endif 9944e98e3e1Schristos #undef FLD 9954e98e3e1Schristos return idesc; 9964e98e3e1Schristos } 9974e98e3e1Schristos 9984e98e3e1Schristos extract_sfmt_bra8: 9994e98e3e1Schristos { 10004e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 10014e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 10024e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 10034e98e3e1Schristos SI f_disp8; 10044e98e3e1Schristos 1005*05fa0856Schristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 10064e98e3e1Schristos 10074e98e3e1Schristos /* Record the fields for the semantic handler. */ 10084e98e3e1Schristos FLD (i_disp8) = f_disp8; 1009212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 10104e98e3e1Schristos 10114e98e3e1Schristos #if WITH_PROFILE_MODEL_P 10124e98e3e1Schristos /* Record the fields for profiling. */ 10134e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 10144e98e3e1Schristos { 10154e98e3e1Schristos } 10164e98e3e1Schristos #endif 10174e98e3e1Schristos #undef FLD 10184e98e3e1Schristos return idesc; 10194e98e3e1Schristos } 10204e98e3e1Schristos 10214e98e3e1Schristos extract_sfmt_bra24: 10224e98e3e1Schristos { 10234e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 10244e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 10254e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 10264e98e3e1Schristos SI f_disp24; 10274e98e3e1Schristos 1028*05fa0856Schristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 10294e98e3e1Schristos 10304e98e3e1Schristos /* Record the fields for the semantic handler. */ 10314e98e3e1Schristos FLD (i_disp24) = f_disp24; 1032212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 10334e98e3e1Schristos 10344e98e3e1Schristos #if WITH_PROFILE_MODEL_P 10354e98e3e1Schristos /* Record the fields for profiling. */ 10364e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 10374e98e3e1Schristos { 10384e98e3e1Schristos } 10394e98e3e1Schristos #endif 10404e98e3e1Schristos #undef FLD 10414e98e3e1Schristos return idesc; 10424e98e3e1Schristos } 10434e98e3e1Schristos 10444e98e3e1Schristos extract_sfmt_cmp: 10454e98e3e1Schristos { 10464e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 10474e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 10484e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 10494e98e3e1Schristos UINT f_r1; 10504e98e3e1Schristos UINT f_r2; 10514e98e3e1Schristos 10524e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 10534e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 10544e98e3e1Schristos 10554e98e3e1Schristos /* Record the fields for the semantic handler. */ 10564e98e3e1Schristos FLD (f_r1) = f_r1; 10574e98e3e1Schristos FLD (f_r2) = f_r2; 10584e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 10594e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1060212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 10614e98e3e1Schristos 10624e98e3e1Schristos #if WITH_PROFILE_MODEL_P 10634e98e3e1Schristos /* Record the fields for profiling. */ 10644e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 10654e98e3e1Schristos { 10664e98e3e1Schristos FLD (in_src1) = f_r1; 10674e98e3e1Schristos FLD (in_src2) = f_r2; 10684e98e3e1Schristos } 10694e98e3e1Schristos #endif 10704e98e3e1Schristos #undef FLD 10714e98e3e1Schristos return idesc; 10724e98e3e1Schristos } 10734e98e3e1Schristos 10744e98e3e1Schristos extract_sfmt_cmpi: 10754e98e3e1Schristos { 10764e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 10774e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 10784e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 10794e98e3e1Schristos UINT f_r2; 10804e98e3e1Schristos INT f_simm16; 10814e98e3e1Schristos 10824e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 10834e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 10844e98e3e1Schristos 10854e98e3e1Schristos /* Record the fields for the semantic handler. */ 10864e98e3e1Schristos FLD (f_simm16) = f_simm16; 10874e98e3e1Schristos FLD (f_r2) = f_r2; 10884e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1089212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpi", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "src2 0x%x", 'x', f_r2, (char *) 0)); 10904e98e3e1Schristos 10914e98e3e1Schristos #if WITH_PROFILE_MODEL_P 10924e98e3e1Schristos /* Record the fields for profiling. */ 10934e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 10944e98e3e1Schristos { 10954e98e3e1Schristos FLD (in_src2) = f_r2; 10964e98e3e1Schristos } 10974e98e3e1Schristos #endif 10984e98e3e1Schristos #undef FLD 10994e98e3e1Schristos return idesc; 11004e98e3e1Schristos } 11014e98e3e1Schristos 11024e98e3e1Schristos extract_sfmt_div: 11034e98e3e1Schristos { 11044e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 11054e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 11064e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 11074e98e3e1Schristos UINT f_r1; 11084e98e3e1Schristos UINT f_r2; 11094e98e3e1Schristos 11104e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 11114e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 11124e98e3e1Schristos 11134e98e3e1Schristos /* Record the fields for the semantic handler. */ 11144e98e3e1Schristos FLD (f_r1) = f_r1; 11154e98e3e1Schristos FLD (f_r2) = f_r2; 11164e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 11174e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1118212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_div", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0)); 11194e98e3e1Schristos 11204e98e3e1Schristos #if WITH_PROFILE_MODEL_P 11214e98e3e1Schristos /* Record the fields for profiling. */ 11224e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 11234e98e3e1Schristos { 11244e98e3e1Schristos FLD (in_dr) = f_r1; 11254e98e3e1Schristos FLD (in_sr) = f_r2; 11264e98e3e1Schristos FLD (out_dr) = f_r1; 11274e98e3e1Schristos } 11284e98e3e1Schristos #endif 11294e98e3e1Schristos #undef FLD 11304e98e3e1Schristos return idesc; 11314e98e3e1Schristos } 11324e98e3e1Schristos 11334e98e3e1Schristos extract_sfmt_jl: 11344e98e3e1Schristos { 11354e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 11364e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 11374e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 11384e98e3e1Schristos UINT f_r2; 11394e98e3e1Schristos 11404e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 11414e98e3e1Schristos 11424e98e3e1Schristos /* Record the fields for the semantic handler. */ 11434e98e3e1Schristos FLD (f_r2) = f_r2; 11444e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1145212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jl", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0)); 11464e98e3e1Schristos 11474e98e3e1Schristos #if WITH_PROFILE_MODEL_P 11484e98e3e1Schristos /* Record the fields for profiling. */ 11494e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 11504e98e3e1Schristos { 11514e98e3e1Schristos FLD (in_sr) = f_r2; 11524e98e3e1Schristos FLD (out_h_gr_SI_14) = 14; 11534e98e3e1Schristos } 11544e98e3e1Schristos #endif 11554e98e3e1Schristos #undef FLD 11564e98e3e1Schristos return idesc; 11574e98e3e1Schristos } 11584e98e3e1Schristos 11594e98e3e1Schristos extract_sfmt_jmp: 11604e98e3e1Schristos { 11614e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 11624e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 11634e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 11644e98e3e1Schristos UINT f_r2; 11654e98e3e1Schristos 11664e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 11674e98e3e1Schristos 11684e98e3e1Schristos /* Record the fields for the semantic handler. */ 11694e98e3e1Schristos FLD (f_r2) = f_r2; 11704e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1171212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jmp", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0)); 11724e98e3e1Schristos 11734e98e3e1Schristos #if WITH_PROFILE_MODEL_P 11744e98e3e1Schristos /* Record the fields for profiling. */ 11754e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 11764e98e3e1Schristos { 11774e98e3e1Schristos FLD (in_sr) = f_r2; 11784e98e3e1Schristos } 11794e98e3e1Schristos #endif 11804e98e3e1Schristos #undef FLD 11814e98e3e1Schristos return idesc; 11824e98e3e1Schristos } 11834e98e3e1Schristos 11844e98e3e1Schristos extract_sfmt_ld: 11854e98e3e1Schristos { 11864e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 11874e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 11884e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 11894e98e3e1Schristos UINT f_r1; 11904e98e3e1Schristos UINT f_r2; 11914e98e3e1Schristos 11924e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 11934e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 11944e98e3e1Schristos 11954e98e3e1Schristos /* Record the fields for the semantic handler. */ 11964e98e3e1Schristos FLD (f_r2) = f_r2; 11974e98e3e1Schristos FLD (f_r1) = f_r1; 11984e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 11994e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1200212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 12014e98e3e1Schristos 12024e98e3e1Schristos #if WITH_PROFILE_MODEL_P 12034e98e3e1Schristos /* Record the fields for profiling. */ 12044e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 12054e98e3e1Schristos { 12064e98e3e1Schristos FLD (in_sr) = f_r2; 12074e98e3e1Schristos FLD (out_dr) = f_r1; 12084e98e3e1Schristos } 12094e98e3e1Schristos #endif 12104e98e3e1Schristos #undef FLD 12114e98e3e1Schristos return idesc; 12124e98e3e1Schristos } 12134e98e3e1Schristos 12144e98e3e1Schristos extract_sfmt_ld_d: 12154e98e3e1Schristos { 12164e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 12174e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 12184e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 12194e98e3e1Schristos UINT f_r1; 12204e98e3e1Schristos UINT f_r2; 12214e98e3e1Schristos INT f_simm16; 12224e98e3e1Schristos 12234e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 12244e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 12254e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 12264e98e3e1Schristos 12274e98e3e1Schristos /* Record the fields for the semantic handler. */ 12284e98e3e1Schristos FLD (f_simm16) = f_simm16; 12294e98e3e1Schristos FLD (f_r2) = f_r2; 12304e98e3e1Schristos FLD (f_r1) = f_r1; 12314e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 12324e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1233212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 12344e98e3e1Schristos 12354e98e3e1Schristos #if WITH_PROFILE_MODEL_P 12364e98e3e1Schristos /* Record the fields for profiling. */ 12374e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 12384e98e3e1Schristos { 12394e98e3e1Schristos FLD (in_sr) = f_r2; 12404e98e3e1Schristos FLD (out_dr) = f_r1; 12414e98e3e1Schristos } 12424e98e3e1Schristos #endif 12434e98e3e1Schristos #undef FLD 12444e98e3e1Schristos return idesc; 12454e98e3e1Schristos } 12464e98e3e1Schristos 12474e98e3e1Schristos extract_sfmt_ldb: 12484e98e3e1Schristos { 12494e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 12504e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 12514e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 12524e98e3e1Schristos UINT f_r1; 12534e98e3e1Schristos UINT f_r2; 12544e98e3e1Schristos 12554e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 12564e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 12574e98e3e1Schristos 12584e98e3e1Schristos /* Record the fields for the semantic handler. */ 12594e98e3e1Schristos FLD (f_r2) = f_r2; 12604e98e3e1Schristos FLD (f_r1) = f_r1; 12614e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 12624e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1263212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 12644e98e3e1Schristos 12654e98e3e1Schristos #if WITH_PROFILE_MODEL_P 12664e98e3e1Schristos /* Record the fields for profiling. */ 12674e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 12684e98e3e1Schristos { 12694e98e3e1Schristos FLD (in_sr) = f_r2; 12704e98e3e1Schristos FLD (out_dr) = f_r1; 12714e98e3e1Schristos } 12724e98e3e1Schristos #endif 12734e98e3e1Schristos #undef FLD 12744e98e3e1Schristos return idesc; 12754e98e3e1Schristos } 12764e98e3e1Schristos 12774e98e3e1Schristos extract_sfmt_ldb_d: 12784e98e3e1Schristos { 12794e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 12804e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 12814e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 12824e98e3e1Schristos UINT f_r1; 12834e98e3e1Schristos UINT f_r2; 12844e98e3e1Schristos INT f_simm16; 12854e98e3e1Schristos 12864e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 12874e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 12884e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 12894e98e3e1Schristos 12904e98e3e1Schristos /* Record the fields for the semantic handler. */ 12914e98e3e1Schristos FLD (f_simm16) = f_simm16; 12924e98e3e1Schristos FLD (f_r2) = f_r2; 12934e98e3e1Schristos FLD (f_r1) = f_r1; 12944e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 12954e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1296212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 12974e98e3e1Schristos 12984e98e3e1Schristos #if WITH_PROFILE_MODEL_P 12994e98e3e1Schristos /* Record the fields for profiling. */ 13004e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 13014e98e3e1Schristos { 13024e98e3e1Schristos FLD (in_sr) = f_r2; 13034e98e3e1Schristos FLD (out_dr) = f_r1; 13044e98e3e1Schristos } 13054e98e3e1Schristos #endif 13064e98e3e1Schristos #undef FLD 13074e98e3e1Schristos return idesc; 13084e98e3e1Schristos } 13094e98e3e1Schristos 13104e98e3e1Schristos extract_sfmt_ldh: 13114e98e3e1Schristos { 13124e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 13134e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 13144e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 13154e98e3e1Schristos UINT f_r1; 13164e98e3e1Schristos UINT f_r2; 13174e98e3e1Schristos 13184e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 13194e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 13204e98e3e1Schristos 13214e98e3e1Schristos /* Record the fields for the semantic handler. */ 13224e98e3e1Schristos FLD (f_r2) = f_r2; 13234e98e3e1Schristos FLD (f_r1) = f_r1; 13244e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 13254e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1326212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 13274e98e3e1Schristos 13284e98e3e1Schristos #if WITH_PROFILE_MODEL_P 13294e98e3e1Schristos /* Record the fields for profiling. */ 13304e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 13314e98e3e1Schristos { 13324e98e3e1Schristos FLD (in_sr) = f_r2; 13334e98e3e1Schristos FLD (out_dr) = f_r1; 13344e98e3e1Schristos } 13354e98e3e1Schristos #endif 13364e98e3e1Schristos #undef FLD 13374e98e3e1Schristos return idesc; 13384e98e3e1Schristos } 13394e98e3e1Schristos 13404e98e3e1Schristos extract_sfmt_ldh_d: 13414e98e3e1Schristos { 13424e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 13434e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 13444e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 13454e98e3e1Schristos UINT f_r1; 13464e98e3e1Schristos UINT f_r2; 13474e98e3e1Schristos INT f_simm16; 13484e98e3e1Schristos 13494e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 13504e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 13514e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 13524e98e3e1Schristos 13534e98e3e1Schristos /* Record the fields for the semantic handler. */ 13544e98e3e1Schristos FLD (f_simm16) = f_simm16; 13554e98e3e1Schristos FLD (f_r2) = f_r2; 13564e98e3e1Schristos FLD (f_r1) = f_r1; 13574e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 13584e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1359212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 13604e98e3e1Schristos 13614e98e3e1Schristos #if WITH_PROFILE_MODEL_P 13624e98e3e1Schristos /* Record the fields for profiling. */ 13634e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 13644e98e3e1Schristos { 13654e98e3e1Schristos FLD (in_sr) = f_r2; 13664e98e3e1Schristos FLD (out_dr) = f_r1; 13674e98e3e1Schristos } 13684e98e3e1Schristos #endif 13694e98e3e1Schristos #undef FLD 13704e98e3e1Schristos return idesc; 13714e98e3e1Schristos } 13724e98e3e1Schristos 13734e98e3e1Schristos extract_sfmt_ld_plus: 13744e98e3e1Schristos { 13754e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 13764e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 13774e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 13784e98e3e1Schristos UINT f_r1; 13794e98e3e1Schristos UINT f_r2; 13804e98e3e1Schristos 13814e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 13824e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 13834e98e3e1Schristos 13844e98e3e1Schristos /* Record the fields for the semantic handler. */ 13854e98e3e1Schristos FLD (f_r2) = f_r2; 13864e98e3e1Schristos FLD (f_r1) = f_r1; 13874e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 13884e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1389212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_plus", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 13904e98e3e1Schristos 13914e98e3e1Schristos #if WITH_PROFILE_MODEL_P 13924e98e3e1Schristos /* Record the fields for profiling. */ 13934e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 13944e98e3e1Schristos { 13954e98e3e1Schristos FLD (in_sr) = f_r2; 13964e98e3e1Schristos FLD (out_dr) = f_r1; 13974e98e3e1Schristos FLD (out_sr) = f_r2; 13984e98e3e1Schristos } 13994e98e3e1Schristos #endif 14004e98e3e1Schristos #undef FLD 14014e98e3e1Schristos return idesc; 14024e98e3e1Schristos } 14034e98e3e1Schristos 14044e98e3e1Schristos extract_sfmt_ld24: 14054e98e3e1Schristos { 14064e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 14074e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 14084e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld24.f 14094e98e3e1Schristos UINT f_r1; 14104e98e3e1Schristos UINT f_uimm24; 14114e98e3e1Schristos 14124e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 14134e98e3e1Schristos f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24); 14144e98e3e1Schristos 14154e98e3e1Schristos /* Record the fields for the semantic handler. */ 14164e98e3e1Schristos FLD (f_r1) = f_r1; 14174e98e3e1Schristos FLD (i_uimm24) = f_uimm24; 14184e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1419212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld24", "f_r1 0x%x", 'x', f_r1, "uimm24 0x%x", 'x', f_uimm24, "dr 0x%x", 'x', f_r1, (char *) 0)); 14204e98e3e1Schristos 14214e98e3e1Schristos #if WITH_PROFILE_MODEL_P 14224e98e3e1Schristos /* Record the fields for profiling. */ 14234e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 14244e98e3e1Schristos { 14254e98e3e1Schristos FLD (out_dr) = f_r1; 14264e98e3e1Schristos } 14274e98e3e1Schristos #endif 14284e98e3e1Schristos #undef FLD 14294e98e3e1Schristos return idesc; 14304e98e3e1Schristos } 14314e98e3e1Schristos 14324e98e3e1Schristos extract_sfmt_ldi8: 14334e98e3e1Schristos { 14344e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 14354e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 14364e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f 14374e98e3e1Schristos UINT f_r1; 14384e98e3e1Schristos INT f_simm8; 14394e98e3e1Schristos 14404e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 14414e98e3e1Schristos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); 14424e98e3e1Schristos 14434e98e3e1Schristos /* Record the fields for the semantic handler. */ 14444e98e3e1Schristos FLD (f_simm8) = f_simm8; 14454e98e3e1Schristos FLD (f_r1) = f_r1; 14464e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1447212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi8", "f_simm8 0x%x", 'x', f_simm8, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0)); 14484e98e3e1Schristos 14494e98e3e1Schristos #if WITH_PROFILE_MODEL_P 14504e98e3e1Schristos /* Record the fields for profiling. */ 14514e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 14524e98e3e1Schristos { 14534e98e3e1Schristos FLD (out_dr) = f_r1; 14544e98e3e1Schristos } 14554e98e3e1Schristos #endif 14564e98e3e1Schristos #undef FLD 14574e98e3e1Schristos return idesc; 14584e98e3e1Schristos } 14594e98e3e1Schristos 14604e98e3e1Schristos extract_sfmt_ldi16: 14614e98e3e1Schristos { 14624e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 14634e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 14644e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 14654e98e3e1Schristos UINT f_r1; 14664e98e3e1Schristos INT f_simm16; 14674e98e3e1Schristos 14684e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 14694e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 14704e98e3e1Schristos 14714e98e3e1Schristos /* Record the fields for the semantic handler. */ 14724e98e3e1Schristos FLD (f_simm16) = f_simm16; 14734e98e3e1Schristos FLD (f_r1) = f_r1; 14744e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1475212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi16", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0)); 14764e98e3e1Schristos 14774e98e3e1Schristos #if WITH_PROFILE_MODEL_P 14784e98e3e1Schristos /* Record the fields for profiling. */ 14794e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 14804e98e3e1Schristos { 14814e98e3e1Schristos FLD (out_dr) = f_r1; 14824e98e3e1Schristos } 14834e98e3e1Schristos #endif 14844e98e3e1Schristos #undef FLD 14854e98e3e1Schristos return idesc; 14864e98e3e1Schristos } 14874e98e3e1Schristos 14884e98e3e1Schristos extract_sfmt_lock: 14894e98e3e1Schristos { 14904e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 14914e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 14924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 14934e98e3e1Schristos UINT f_r1; 14944e98e3e1Schristos UINT f_r2; 14954e98e3e1Schristos 14964e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 14974e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 14984e98e3e1Schristos 14994e98e3e1Schristos /* Record the fields for the semantic handler. */ 15004e98e3e1Schristos FLD (f_r2) = f_r2; 15014e98e3e1Schristos FLD (f_r1) = f_r1; 15024e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 15034e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1504212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lock", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 15054e98e3e1Schristos 15064e98e3e1Schristos #if WITH_PROFILE_MODEL_P 15074e98e3e1Schristos /* Record the fields for profiling. */ 15084e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 15094e98e3e1Schristos { 15104e98e3e1Schristos FLD (in_sr) = f_r2; 15114e98e3e1Schristos FLD (out_dr) = f_r1; 15124e98e3e1Schristos } 15134e98e3e1Schristos #endif 15144e98e3e1Schristos #undef FLD 15154e98e3e1Schristos return idesc; 15164e98e3e1Schristos } 15174e98e3e1Schristos 15184e98e3e1Schristos extract_sfmt_machi: 15194e98e3e1Schristos { 15204e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 15214e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 15224e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 15234e98e3e1Schristos UINT f_r1; 15244e98e3e1Schristos UINT f_r2; 15254e98e3e1Schristos 15264e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 15274e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 15284e98e3e1Schristos 15294e98e3e1Schristos /* Record the fields for the semantic handler. */ 15304e98e3e1Schristos FLD (f_r1) = f_r1; 15314e98e3e1Schristos FLD (f_r2) = f_r2; 15324e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 15334e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1534212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_machi", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 15354e98e3e1Schristos 15364e98e3e1Schristos #if WITH_PROFILE_MODEL_P 15374e98e3e1Schristos /* Record the fields for profiling. */ 15384e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 15394e98e3e1Schristos { 15404e98e3e1Schristos FLD (in_src1) = f_r1; 15414e98e3e1Schristos FLD (in_src2) = f_r2; 15424e98e3e1Schristos } 15434e98e3e1Schristos #endif 15444e98e3e1Schristos #undef FLD 15454e98e3e1Schristos return idesc; 15464e98e3e1Schristos } 15474e98e3e1Schristos 15484e98e3e1Schristos extract_sfmt_mulhi: 15494e98e3e1Schristos { 15504e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 15514e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 15524e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 15534e98e3e1Schristos UINT f_r1; 15544e98e3e1Schristos UINT f_r2; 15554e98e3e1Schristos 15564e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 15574e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 15584e98e3e1Schristos 15594e98e3e1Schristos /* Record the fields for the semantic handler. */ 15604e98e3e1Schristos FLD (f_r1) = f_r1; 15614e98e3e1Schristos FLD (f_r2) = f_r2; 15624e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 15634e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1564212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulhi", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 15654e98e3e1Schristos 15664e98e3e1Schristos #if WITH_PROFILE_MODEL_P 15674e98e3e1Schristos /* Record the fields for profiling. */ 15684e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 15694e98e3e1Schristos { 15704e98e3e1Schristos FLD (in_src1) = f_r1; 15714e98e3e1Schristos FLD (in_src2) = f_r2; 15724e98e3e1Schristos } 15734e98e3e1Schristos #endif 15744e98e3e1Schristos #undef FLD 15754e98e3e1Schristos return idesc; 15764e98e3e1Schristos } 15774e98e3e1Schristos 15784e98e3e1Schristos extract_sfmt_mv: 15794e98e3e1Schristos { 15804e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 15814e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 15824e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 15834e98e3e1Schristos UINT f_r1; 15844e98e3e1Schristos UINT f_r2; 15854e98e3e1Schristos 15864e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 15874e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 15884e98e3e1Schristos 15894e98e3e1Schristos /* Record the fields for the semantic handler. */ 15904e98e3e1Schristos FLD (f_r2) = f_r2; 15914e98e3e1Schristos FLD (f_r1) = f_r1; 15924e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 15934e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1594212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mv", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 15954e98e3e1Schristos 15964e98e3e1Schristos #if WITH_PROFILE_MODEL_P 15974e98e3e1Schristos /* Record the fields for profiling. */ 15984e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 15994e98e3e1Schristos { 16004e98e3e1Schristos FLD (in_sr) = f_r2; 16014e98e3e1Schristos FLD (out_dr) = f_r1; 16024e98e3e1Schristos } 16034e98e3e1Schristos #endif 16044e98e3e1Schristos #undef FLD 16054e98e3e1Schristos return idesc; 16064e98e3e1Schristos } 16074e98e3e1Schristos 16084e98e3e1Schristos extract_sfmt_mvfachi: 16094e98e3e1Schristos { 16104e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 16114e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 16124e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f 16134e98e3e1Schristos UINT f_r1; 16144e98e3e1Schristos 16154e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 16164e98e3e1Schristos 16174e98e3e1Schristos /* Record the fields for the semantic handler. */ 16184e98e3e1Schristos FLD (f_r1) = f_r1; 16194e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1620212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfachi", "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0)); 16214e98e3e1Schristos 16224e98e3e1Schristos #if WITH_PROFILE_MODEL_P 16234e98e3e1Schristos /* Record the fields for profiling. */ 16244e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 16254e98e3e1Schristos { 16264e98e3e1Schristos FLD (out_dr) = f_r1; 16274e98e3e1Schristos } 16284e98e3e1Schristos #endif 16294e98e3e1Schristos #undef FLD 16304e98e3e1Schristos return idesc; 16314e98e3e1Schristos } 16324e98e3e1Schristos 16334e98e3e1Schristos extract_sfmt_mvfc: 16344e98e3e1Schristos { 16354e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 16364e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 16374e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 16384e98e3e1Schristos UINT f_r1; 16394e98e3e1Schristos UINT f_r2; 16404e98e3e1Schristos 16414e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 16424e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 16434e98e3e1Schristos 16444e98e3e1Schristos /* Record the fields for the semantic handler. */ 16454e98e3e1Schristos FLD (f_r2) = f_r2; 16464e98e3e1Schristos FLD (f_r1) = f_r1; 16474e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1648212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfc", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0)); 16494e98e3e1Schristos 16504e98e3e1Schristos #if WITH_PROFILE_MODEL_P 16514e98e3e1Schristos /* Record the fields for profiling. */ 16524e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 16534e98e3e1Schristos { 16544e98e3e1Schristos FLD (out_dr) = f_r1; 16554e98e3e1Schristos } 16564e98e3e1Schristos #endif 16574e98e3e1Schristos #undef FLD 16584e98e3e1Schristos return idesc; 16594e98e3e1Schristos } 16604e98e3e1Schristos 16614e98e3e1Schristos extract_sfmt_mvtachi: 16624e98e3e1Schristos { 16634e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 16644e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 16654e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 16664e98e3e1Schristos UINT f_r1; 16674e98e3e1Schristos 16684e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 16694e98e3e1Schristos 16704e98e3e1Schristos /* Record the fields for the semantic handler. */ 16714e98e3e1Schristos FLD (f_r1) = f_r1; 16724e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1673212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtachi", "f_r1 0x%x", 'x', f_r1, "src1 0x%x", 'x', f_r1, (char *) 0)); 16744e98e3e1Schristos 16754e98e3e1Schristos #if WITH_PROFILE_MODEL_P 16764e98e3e1Schristos /* Record the fields for profiling. */ 16774e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 16784e98e3e1Schristos { 16794e98e3e1Schristos FLD (in_src1) = f_r1; 16804e98e3e1Schristos } 16814e98e3e1Schristos #endif 16824e98e3e1Schristos #undef FLD 16834e98e3e1Schristos return idesc; 16844e98e3e1Schristos } 16854e98e3e1Schristos 16864e98e3e1Schristos extract_sfmt_mvtc: 16874e98e3e1Schristos { 16884e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 16894e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 16904e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 16914e98e3e1Schristos UINT f_r1; 16924e98e3e1Schristos UINT f_r2; 16934e98e3e1Schristos 16944e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 16954e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 16964e98e3e1Schristos 16974e98e3e1Schristos /* Record the fields for the semantic handler. */ 16984e98e3e1Schristos FLD (f_r2) = f_r2; 16994e98e3e1Schristos FLD (f_r1) = f_r1; 17004e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1701212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtc", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0)); 17024e98e3e1Schristos 17034e98e3e1Schristos #if WITH_PROFILE_MODEL_P 17044e98e3e1Schristos /* Record the fields for profiling. */ 17054e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 17064e98e3e1Schristos { 17074e98e3e1Schristos FLD (in_sr) = f_r2; 17084e98e3e1Schristos } 17094e98e3e1Schristos #endif 17104e98e3e1Schristos #undef FLD 17114e98e3e1Schristos return idesc; 17124e98e3e1Schristos } 17134e98e3e1Schristos 17144e98e3e1Schristos extract_sfmt_nop: 17154e98e3e1Schristos { 17164e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 17174e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 17184e98e3e1Schristos 17194e98e3e1Schristos 17204e98e3e1Schristos /* Record the fields for the semantic handler. */ 1721212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0)); 17224e98e3e1Schristos 17234e98e3e1Schristos #undef FLD 17244e98e3e1Schristos return idesc; 17254e98e3e1Schristos } 17264e98e3e1Schristos 17274e98e3e1Schristos extract_sfmt_rac: 17284e98e3e1Schristos { 17294e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 17304e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 17314e98e3e1Schristos 17324e98e3e1Schristos 17334e98e3e1Schristos /* Record the fields for the semantic handler. */ 1734212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rac", (char *) 0)); 17354e98e3e1Schristos 17364e98e3e1Schristos #undef FLD 17374e98e3e1Schristos return idesc; 17384e98e3e1Schristos } 17394e98e3e1Schristos 17404e98e3e1Schristos extract_sfmt_rte: 17414e98e3e1Schristos { 17424e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 17434e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 17444e98e3e1Schristos 17454e98e3e1Schristos 17464e98e3e1Schristos /* Record the fields for the semantic handler. */ 1747212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0)); 17484e98e3e1Schristos 17494e98e3e1Schristos #if WITH_PROFILE_MODEL_P 17504e98e3e1Schristos /* Record the fields for profiling. */ 17514e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 17524e98e3e1Schristos { 17534e98e3e1Schristos } 17544e98e3e1Schristos #endif 17554e98e3e1Schristos #undef FLD 17564e98e3e1Schristos return idesc; 17574e98e3e1Schristos } 17584e98e3e1Schristos 17594e98e3e1Schristos extract_sfmt_seth: 17604e98e3e1Schristos { 17614e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 17624e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 17634e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f 17644e98e3e1Schristos UINT f_r1; 17654e98e3e1Schristos UINT f_hi16; 17664e98e3e1Schristos 17674e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 17684e98e3e1Schristos f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 17694e98e3e1Schristos 17704e98e3e1Schristos /* Record the fields for the semantic handler. */ 17714e98e3e1Schristos FLD (f_hi16) = f_hi16; 17724e98e3e1Schristos FLD (f_r1) = f_r1; 17734e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1774212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_seth", "f_hi16 0x%x", 'x', f_hi16, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0)); 17754e98e3e1Schristos 17764e98e3e1Schristos #if WITH_PROFILE_MODEL_P 17774e98e3e1Schristos /* Record the fields for profiling. */ 17784e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 17794e98e3e1Schristos { 17804e98e3e1Schristos FLD (out_dr) = f_r1; 17814e98e3e1Schristos } 17824e98e3e1Schristos #endif 17834e98e3e1Schristos #undef FLD 17844e98e3e1Schristos return idesc; 17854e98e3e1Schristos } 17864e98e3e1Schristos 17874e98e3e1Schristos extract_sfmt_sll3: 17884e98e3e1Schristos { 17894e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 17904e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 17914e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 17924e98e3e1Schristos UINT f_r1; 17934e98e3e1Schristos UINT f_r2; 17944e98e3e1Schristos INT f_simm16; 17954e98e3e1Schristos 17964e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 17974e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 17984e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 17994e98e3e1Schristos 18004e98e3e1Schristos /* Record the fields for the semantic handler. */ 18014e98e3e1Schristos FLD (f_simm16) = f_simm16; 18024e98e3e1Schristos FLD (f_r2) = f_r2; 18034e98e3e1Schristos FLD (f_r1) = f_r1; 18044e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 18054e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1806212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sll3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0)); 18074e98e3e1Schristos 18084e98e3e1Schristos #if WITH_PROFILE_MODEL_P 18094e98e3e1Schristos /* Record the fields for profiling. */ 18104e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 18114e98e3e1Schristos { 18124e98e3e1Schristos FLD (in_sr) = f_r2; 18134e98e3e1Schristos FLD (out_dr) = f_r1; 18144e98e3e1Schristos } 18154e98e3e1Schristos #endif 18164e98e3e1Schristos #undef FLD 18174e98e3e1Schristos return idesc; 18184e98e3e1Schristos } 18194e98e3e1Schristos 18204e98e3e1Schristos extract_sfmt_slli: 18214e98e3e1Schristos { 18224e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 18234e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 18244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f 18254e98e3e1Schristos UINT f_r1; 18264e98e3e1Schristos UINT f_uimm5; 18274e98e3e1Schristos 18284e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 18294e98e3e1Schristos f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5); 18304e98e3e1Schristos 18314e98e3e1Schristos /* Record the fields for the semantic handler. */ 18324e98e3e1Schristos FLD (f_r1) = f_r1; 18334e98e3e1Schristos FLD (f_uimm5) = f_uimm5; 18344e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1835212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slli", "f_r1 0x%x", 'x', f_r1, "f_uimm5 0x%x", 'x', f_uimm5, "dr 0x%x", 'x', f_r1, (char *) 0)); 18364e98e3e1Schristos 18374e98e3e1Schristos #if WITH_PROFILE_MODEL_P 18384e98e3e1Schristos /* Record the fields for profiling. */ 18394e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 18404e98e3e1Schristos { 18414e98e3e1Schristos FLD (in_dr) = f_r1; 18424e98e3e1Schristos FLD (out_dr) = f_r1; 18434e98e3e1Schristos } 18444e98e3e1Schristos #endif 18454e98e3e1Schristos #undef FLD 18464e98e3e1Schristos return idesc; 18474e98e3e1Schristos } 18484e98e3e1Schristos 18494e98e3e1Schristos extract_sfmt_st: 18504e98e3e1Schristos { 18514e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 18524e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 18534e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 18544e98e3e1Schristos UINT f_r1; 18554e98e3e1Schristos UINT f_r2; 18564e98e3e1Schristos 18574e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 18584e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 18594e98e3e1Schristos 18604e98e3e1Schristos /* Record the fields for the semantic handler. */ 18614e98e3e1Schristos FLD (f_r1) = f_r1; 18624e98e3e1Schristos FLD (f_r2) = f_r2; 18634e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 18644e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1865212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 18664e98e3e1Schristos 18674e98e3e1Schristos #if WITH_PROFILE_MODEL_P 18684e98e3e1Schristos /* Record the fields for profiling. */ 18694e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 18704e98e3e1Schristos { 18714e98e3e1Schristos FLD (in_src1) = f_r1; 18724e98e3e1Schristos FLD (in_src2) = f_r2; 18734e98e3e1Schristos } 18744e98e3e1Schristos #endif 18754e98e3e1Schristos #undef FLD 18764e98e3e1Schristos return idesc; 18774e98e3e1Schristos } 18784e98e3e1Schristos 18794e98e3e1Schristos extract_sfmt_st_d: 18804e98e3e1Schristos { 18814e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 18824e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 18834e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 18844e98e3e1Schristos UINT f_r1; 18854e98e3e1Schristos UINT f_r2; 18864e98e3e1Schristos INT f_simm16; 18874e98e3e1Schristos 18884e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 18894e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 18904e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 18914e98e3e1Schristos 18924e98e3e1Schristos /* Record the fields for the semantic handler. */ 18934e98e3e1Schristos FLD (f_simm16) = f_simm16; 18944e98e3e1Schristos FLD (f_r1) = f_r1; 18954e98e3e1Schristos FLD (f_r2) = f_r2; 18964e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 18974e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1898212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 18994e98e3e1Schristos 19004e98e3e1Schristos #if WITH_PROFILE_MODEL_P 19014e98e3e1Schristos /* Record the fields for profiling. */ 19024e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 19034e98e3e1Schristos { 19044e98e3e1Schristos FLD (in_src1) = f_r1; 19054e98e3e1Schristos FLD (in_src2) = f_r2; 19064e98e3e1Schristos } 19074e98e3e1Schristos #endif 19084e98e3e1Schristos #undef FLD 19094e98e3e1Schristos return idesc; 19104e98e3e1Schristos } 19114e98e3e1Schristos 19124e98e3e1Schristos extract_sfmt_stb: 19134e98e3e1Schristos { 19144e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 19154e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 19164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 19174e98e3e1Schristos UINT f_r1; 19184e98e3e1Schristos UINT f_r2; 19194e98e3e1Schristos 19204e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 19214e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 19224e98e3e1Schristos 19234e98e3e1Schristos /* Record the fields for the semantic handler. */ 19244e98e3e1Schristos FLD (f_r1) = f_r1; 19254e98e3e1Schristos FLD (f_r2) = f_r2; 19264e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 19274e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1928212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 19294e98e3e1Schristos 19304e98e3e1Schristos #if WITH_PROFILE_MODEL_P 19314e98e3e1Schristos /* Record the fields for profiling. */ 19324e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 19334e98e3e1Schristos { 19344e98e3e1Schristos FLD (in_src1) = f_r1; 19354e98e3e1Schristos FLD (in_src2) = f_r2; 19364e98e3e1Schristos } 19374e98e3e1Schristos #endif 19384e98e3e1Schristos #undef FLD 19394e98e3e1Schristos return idesc; 19404e98e3e1Schristos } 19414e98e3e1Schristos 19424e98e3e1Schristos extract_sfmt_stb_d: 19434e98e3e1Schristos { 19444e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 19454e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 19464e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 19474e98e3e1Schristos UINT f_r1; 19484e98e3e1Schristos UINT f_r2; 19494e98e3e1Schristos INT f_simm16; 19504e98e3e1Schristos 19514e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 19524e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 19534e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 19544e98e3e1Schristos 19554e98e3e1Schristos /* Record the fields for the semantic handler. */ 19564e98e3e1Schristos FLD (f_simm16) = f_simm16; 19574e98e3e1Schristos FLD (f_r1) = f_r1; 19584e98e3e1Schristos FLD (f_r2) = f_r2; 19594e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 19604e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1961212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 19624e98e3e1Schristos 19634e98e3e1Schristos #if WITH_PROFILE_MODEL_P 19644e98e3e1Schristos /* Record the fields for profiling. */ 19654e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 19664e98e3e1Schristos { 19674e98e3e1Schristos FLD (in_src1) = f_r1; 19684e98e3e1Schristos FLD (in_src2) = f_r2; 19694e98e3e1Schristos } 19704e98e3e1Schristos #endif 19714e98e3e1Schristos #undef FLD 19724e98e3e1Schristos return idesc; 19734e98e3e1Schristos } 19744e98e3e1Schristos 19754e98e3e1Schristos extract_sfmt_sth: 19764e98e3e1Schristos { 19774e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 19784e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 19794e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 19804e98e3e1Schristos UINT f_r1; 19814e98e3e1Schristos UINT f_r2; 19824e98e3e1Schristos 19834e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 19844e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 19854e98e3e1Schristos 19864e98e3e1Schristos /* Record the fields for the semantic handler. */ 19874e98e3e1Schristos FLD (f_r1) = f_r1; 19884e98e3e1Schristos FLD (f_r2) = f_r2; 19894e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 19904e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1991212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 19924e98e3e1Schristos 19934e98e3e1Schristos #if WITH_PROFILE_MODEL_P 19944e98e3e1Schristos /* Record the fields for profiling. */ 19954e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 19964e98e3e1Schristos { 19974e98e3e1Schristos FLD (in_src1) = f_r1; 19984e98e3e1Schristos FLD (in_src2) = f_r2; 19994e98e3e1Schristos } 20004e98e3e1Schristos #endif 20014e98e3e1Schristos #undef FLD 20024e98e3e1Schristos return idesc; 20034e98e3e1Schristos } 20044e98e3e1Schristos 20054e98e3e1Schristos extract_sfmt_sth_d: 20064e98e3e1Schristos { 20074e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 20084e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 20094e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 20104e98e3e1Schristos UINT f_r1; 20114e98e3e1Schristos UINT f_r2; 20124e98e3e1Schristos INT f_simm16; 20134e98e3e1Schristos 20144e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 20154e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 20164e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 20174e98e3e1Schristos 20184e98e3e1Schristos /* Record the fields for the semantic handler. */ 20194e98e3e1Schristos FLD (f_simm16) = f_simm16; 20204e98e3e1Schristos FLD (f_r1) = f_r1; 20214e98e3e1Schristos FLD (f_r2) = f_r2; 20224e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 20234e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2024212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 20254e98e3e1Schristos 20264e98e3e1Schristos #if WITH_PROFILE_MODEL_P 20274e98e3e1Schristos /* Record the fields for profiling. */ 20284e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 20294e98e3e1Schristos { 20304e98e3e1Schristos FLD (in_src1) = f_r1; 20314e98e3e1Schristos FLD (in_src2) = f_r2; 20324e98e3e1Schristos } 20334e98e3e1Schristos #endif 20344e98e3e1Schristos #undef FLD 20354e98e3e1Schristos return idesc; 20364e98e3e1Schristos } 20374e98e3e1Schristos 20384e98e3e1Schristos extract_sfmt_st_plus: 20394e98e3e1Schristos { 20404e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 20414e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 20424e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 20434e98e3e1Schristos UINT f_r1; 20444e98e3e1Schristos UINT f_r2; 20454e98e3e1Schristos 20464e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 20474e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 20484e98e3e1Schristos 20494e98e3e1Schristos /* Record the fields for the semantic handler. */ 20504e98e3e1Schristos FLD (f_r1) = f_r1; 20514e98e3e1Schristos FLD (f_r2) = f_r2; 20524e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 20534e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2054212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_plus", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 20554e98e3e1Schristos 20564e98e3e1Schristos #if WITH_PROFILE_MODEL_P 20574e98e3e1Schristos /* Record the fields for profiling. */ 20584e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 20594e98e3e1Schristos { 20604e98e3e1Schristos FLD (in_src1) = f_r1; 20614e98e3e1Schristos FLD (in_src2) = f_r2; 20624e98e3e1Schristos FLD (out_src2) = f_r2; 20634e98e3e1Schristos } 20644e98e3e1Schristos #endif 20654e98e3e1Schristos #undef FLD 20664e98e3e1Schristos return idesc; 20674e98e3e1Schristos } 20684e98e3e1Schristos 20694e98e3e1Schristos extract_sfmt_trap: 20704e98e3e1Schristos { 20714e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 20724e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 20734e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_trap.f 20744e98e3e1Schristos UINT f_uimm4; 20754e98e3e1Schristos 20764e98e3e1Schristos f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 20774e98e3e1Schristos 20784e98e3e1Schristos /* Record the fields for the semantic handler. */ 20794e98e3e1Schristos FLD (f_uimm4) = f_uimm4; 2080212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0)); 20814e98e3e1Schristos 20824e98e3e1Schristos #if WITH_PROFILE_MODEL_P 20834e98e3e1Schristos /* Record the fields for profiling. */ 20844e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 20854e98e3e1Schristos { 20864e98e3e1Schristos } 20874e98e3e1Schristos #endif 20884e98e3e1Schristos #undef FLD 20894e98e3e1Schristos return idesc; 20904e98e3e1Schristos } 20914e98e3e1Schristos 20924e98e3e1Schristos extract_sfmt_unlock: 20934e98e3e1Schristos { 20944e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 20954e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 20964e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 20974e98e3e1Schristos UINT f_r1; 20984e98e3e1Schristos UINT f_r2; 20994e98e3e1Schristos 21004e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 21014e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 21024e98e3e1Schristos 21034e98e3e1Schristos /* Record the fields for the semantic handler. */ 21044e98e3e1Schristos FLD (f_r1) = f_r1; 21054e98e3e1Schristos FLD (f_r2) = f_r2; 21064e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 21074e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2108212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_unlock", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 21094e98e3e1Schristos 21104e98e3e1Schristos #if WITH_PROFILE_MODEL_P 21114e98e3e1Schristos /* Record the fields for profiling. */ 21124e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 21134e98e3e1Schristos { 21144e98e3e1Schristos FLD (in_src1) = f_r1; 21154e98e3e1Schristos FLD (in_src2) = f_r2; 21164e98e3e1Schristos } 21174e98e3e1Schristos #endif 21184e98e3e1Schristos #undef FLD 21194e98e3e1Schristos return idesc; 21204e98e3e1Schristos } 21214e98e3e1Schristos 21224e98e3e1Schristos extract_sfmt_clrpsw: 21234e98e3e1Schristos { 21244e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 21254e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 21264e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 21274e98e3e1Schristos UINT f_uimm8; 21284e98e3e1Schristos 21294e98e3e1Schristos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); 21304e98e3e1Schristos 21314e98e3e1Schristos /* Record the fields for the semantic handler. */ 21324e98e3e1Schristos FLD (f_uimm8) = f_uimm8; 2133212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0)); 21344e98e3e1Schristos 21354e98e3e1Schristos #undef FLD 21364e98e3e1Schristos return idesc; 21374e98e3e1Schristos } 21384e98e3e1Schristos 21394e98e3e1Schristos extract_sfmt_setpsw: 21404e98e3e1Schristos { 21414e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 21424e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 21434e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 21444e98e3e1Schristos UINT f_uimm8; 21454e98e3e1Schristos 21464e98e3e1Schristos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); 21474e98e3e1Schristos 21484e98e3e1Schristos /* Record the fields for the semantic handler. */ 21494e98e3e1Schristos FLD (f_uimm8) = f_uimm8; 2150212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0)); 21514e98e3e1Schristos 21524e98e3e1Schristos #undef FLD 21534e98e3e1Schristos return idesc; 21544e98e3e1Schristos } 21554e98e3e1Schristos 21564e98e3e1Schristos extract_sfmt_bset: 21574e98e3e1Schristos { 21584e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 21594e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 21604e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 21614e98e3e1Schristos UINT f_uimm3; 21624e98e3e1Schristos UINT f_r2; 21634e98e3e1Schristos INT f_simm16; 21644e98e3e1Schristos 21654e98e3e1Schristos f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3); 21664e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 21674e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 21684e98e3e1Schristos 21694e98e3e1Schristos /* Record the fields for the semantic handler. */ 21704e98e3e1Schristos FLD (f_simm16) = f_simm16; 21714e98e3e1Schristos FLD (f_r2) = f_r2; 21724e98e3e1Schristos FLD (f_uimm3) = f_uimm3; 21734e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2174212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bset", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0)); 21754e98e3e1Schristos 21764e98e3e1Schristos #if WITH_PROFILE_MODEL_P 21774e98e3e1Schristos /* Record the fields for profiling. */ 21784e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 21794e98e3e1Schristos { 21804e98e3e1Schristos FLD (in_sr) = f_r2; 21814e98e3e1Schristos } 21824e98e3e1Schristos #endif 21834e98e3e1Schristos #undef FLD 21844e98e3e1Schristos return idesc; 21854e98e3e1Schristos } 21864e98e3e1Schristos 21874e98e3e1Schristos extract_sfmt_btst: 21884e98e3e1Schristos { 21894e98e3e1Schristos const IDESC *idesc = &m32rbf_insn_data[itype]; 21904e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 21914e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 21924e98e3e1Schristos UINT f_uimm3; 21934e98e3e1Schristos UINT f_r2; 21944e98e3e1Schristos 21954e98e3e1Schristos f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3); 21964e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 21974e98e3e1Schristos 21984e98e3e1Schristos /* Record the fields for the semantic handler. */ 21994e98e3e1Schristos FLD (f_r2) = f_r2; 22004e98e3e1Schristos FLD (f_uimm3) = f_uimm3; 22014e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2202212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_btst", "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0)); 22034e98e3e1Schristos 22044e98e3e1Schristos #if WITH_PROFILE_MODEL_P 22054e98e3e1Schristos /* Record the fields for profiling. */ 22064e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 22074e98e3e1Schristos { 22084e98e3e1Schristos FLD (in_sr) = f_r2; 22094e98e3e1Schristos } 22104e98e3e1Schristos #endif 22114e98e3e1Schristos #undef FLD 22124e98e3e1Schristos return idesc; 22134e98e3e1Schristos } 22144e98e3e1Schristos 22154e98e3e1Schristos } 2216