14e98e3e1Schristos /* Simulator instruction decoder for m32rxf. 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 m32rxf 264e98e3e1Schristos #define WANT_CPU_M32RXF 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 /* Insn can't be executed in parallel. 344e98e3e1Schristos Or is that "do NOt Pass to Air defense Radar"? :-) */ 354e98e3e1Schristos #define NOPAR (-1) 364e98e3e1Schristos 374e98e3e1Schristos /* The instruction descriptor array. 384e98e3e1Schristos This is computed at runtime. Space for it is not malloc'd to save a 394e98e3e1Schristos teensy bit of cpu in the decoder. Moving it to malloc space is trivial 404e98e3e1Schristos but won't be done until necessary (we don't currently support the runtime 414e98e3e1Schristos addition of instructions nor an SMP machine with different cpus). */ 424e98e3e1Schristos static IDESC m32rxf_insn_data[M32RXF_INSN__MAX]; 434e98e3e1Schristos 444e98e3e1Schristos /* Commas between elements are contained in the macros. 454e98e3e1Schristos Some of these are conditionally compiled out. */ 464e98e3e1Schristos 474e98e3e1Schristos static const struct insn_sem m32rxf_insn_sem[] = 484e98e3e1Schristos { 494e98e3e1Schristos { VIRTUAL_INSN_X_INVALID, M32RXF_INSN_X_INVALID, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 504e98e3e1Schristos { VIRTUAL_INSN_X_AFTER, M32RXF_INSN_X_AFTER, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 514e98e3e1Schristos { VIRTUAL_INSN_X_BEFORE, M32RXF_INSN_X_BEFORE, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 524e98e3e1Schristos { VIRTUAL_INSN_X_CTI_CHAIN, M32RXF_INSN_X_CTI_CHAIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 534e98e3e1Schristos { VIRTUAL_INSN_X_CHAIN, M32RXF_INSN_X_CHAIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 544e98e3e1Schristos { VIRTUAL_INSN_X_BEGIN, M32RXF_INSN_X_BEGIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 554e98e3e1Schristos { M32R_INSN_ADD, M32RXF_INSN_ADD, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_ADD, M32RXF_INSN_WRITE_ADD }, 564e98e3e1Schristos { M32R_INSN_ADD3, M32RXF_INSN_ADD3, M32RXF_SFMT_ADD3, NOPAR, NOPAR }, 574e98e3e1Schristos { M32R_INSN_AND, M32RXF_INSN_AND, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_AND, M32RXF_INSN_WRITE_AND }, 584e98e3e1Schristos { M32R_INSN_AND3, M32RXF_INSN_AND3, M32RXF_SFMT_AND3, NOPAR, NOPAR }, 594e98e3e1Schristos { M32R_INSN_OR, M32RXF_INSN_OR, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_OR, M32RXF_INSN_WRITE_OR }, 604e98e3e1Schristos { M32R_INSN_OR3, M32RXF_INSN_OR3, M32RXF_SFMT_OR3, NOPAR, NOPAR }, 614e98e3e1Schristos { M32R_INSN_XOR, M32RXF_INSN_XOR, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_XOR, M32RXF_INSN_WRITE_XOR }, 624e98e3e1Schristos { M32R_INSN_XOR3, M32RXF_INSN_XOR3, M32RXF_SFMT_AND3, NOPAR, NOPAR }, 634e98e3e1Schristos { M32R_INSN_ADDI, M32RXF_INSN_ADDI, M32RXF_SFMT_ADDI, M32RXF_INSN_PAR_ADDI, M32RXF_INSN_WRITE_ADDI }, 644e98e3e1Schristos { M32R_INSN_ADDV, M32RXF_INSN_ADDV, M32RXF_SFMT_ADDV, M32RXF_INSN_PAR_ADDV, M32RXF_INSN_WRITE_ADDV }, 654e98e3e1Schristos { M32R_INSN_ADDV3, M32RXF_INSN_ADDV3, M32RXF_SFMT_ADDV3, NOPAR, NOPAR }, 664e98e3e1Schristos { M32R_INSN_ADDX, M32RXF_INSN_ADDX, M32RXF_SFMT_ADDX, M32RXF_INSN_PAR_ADDX, M32RXF_INSN_WRITE_ADDX }, 674e98e3e1Schristos { M32R_INSN_BC8, M32RXF_INSN_BC8, M32RXF_SFMT_BC8, M32RXF_INSN_PAR_BC8, M32RXF_INSN_WRITE_BC8 }, 684e98e3e1Schristos { M32R_INSN_BC24, M32RXF_INSN_BC24, M32RXF_SFMT_BC24, NOPAR, NOPAR }, 694e98e3e1Schristos { M32R_INSN_BEQ, M32RXF_INSN_BEQ, M32RXF_SFMT_BEQ, NOPAR, NOPAR }, 704e98e3e1Schristos { M32R_INSN_BEQZ, M32RXF_INSN_BEQZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 714e98e3e1Schristos { M32R_INSN_BGEZ, M32RXF_INSN_BGEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 724e98e3e1Schristos { M32R_INSN_BGTZ, M32RXF_INSN_BGTZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 734e98e3e1Schristos { M32R_INSN_BLEZ, M32RXF_INSN_BLEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 744e98e3e1Schristos { M32R_INSN_BLTZ, M32RXF_INSN_BLTZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 754e98e3e1Schristos { M32R_INSN_BNEZ, M32RXF_INSN_BNEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 764e98e3e1Schristos { M32R_INSN_BL8, M32RXF_INSN_BL8, M32RXF_SFMT_BL8, M32RXF_INSN_PAR_BL8, M32RXF_INSN_WRITE_BL8 }, 774e98e3e1Schristos { M32R_INSN_BL24, M32RXF_INSN_BL24, M32RXF_SFMT_BL24, NOPAR, NOPAR }, 784e98e3e1Schristos { M32R_INSN_BCL8, M32RXF_INSN_BCL8, M32RXF_SFMT_BCL8, M32RXF_INSN_PAR_BCL8, M32RXF_INSN_WRITE_BCL8 }, 794e98e3e1Schristos { M32R_INSN_BCL24, M32RXF_INSN_BCL24, M32RXF_SFMT_BCL24, NOPAR, NOPAR }, 804e98e3e1Schristos { M32R_INSN_BNC8, M32RXF_INSN_BNC8, M32RXF_SFMT_BC8, M32RXF_INSN_PAR_BNC8, M32RXF_INSN_WRITE_BNC8 }, 814e98e3e1Schristos { M32R_INSN_BNC24, M32RXF_INSN_BNC24, M32RXF_SFMT_BC24, NOPAR, NOPAR }, 824e98e3e1Schristos { M32R_INSN_BNE, M32RXF_INSN_BNE, M32RXF_SFMT_BEQ, NOPAR, NOPAR }, 834e98e3e1Schristos { M32R_INSN_BRA8, M32RXF_INSN_BRA8, M32RXF_SFMT_BRA8, M32RXF_INSN_PAR_BRA8, M32RXF_INSN_WRITE_BRA8 }, 844e98e3e1Schristos { M32R_INSN_BRA24, M32RXF_INSN_BRA24, M32RXF_SFMT_BRA24, NOPAR, NOPAR }, 854e98e3e1Schristos { M32R_INSN_BNCL8, M32RXF_INSN_BNCL8, M32RXF_SFMT_BCL8, M32RXF_INSN_PAR_BNCL8, M32RXF_INSN_WRITE_BNCL8 }, 864e98e3e1Schristos { M32R_INSN_BNCL24, M32RXF_INSN_BNCL24, M32RXF_SFMT_BCL24, NOPAR, NOPAR }, 874e98e3e1Schristos { M32R_INSN_CMP, M32RXF_INSN_CMP, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMP, M32RXF_INSN_WRITE_CMP }, 884e98e3e1Schristos { M32R_INSN_CMPI, M32RXF_INSN_CMPI, M32RXF_SFMT_CMPI, NOPAR, NOPAR }, 894e98e3e1Schristos { M32R_INSN_CMPU, M32RXF_INSN_CMPU, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMPU, M32RXF_INSN_WRITE_CMPU }, 904e98e3e1Schristos { M32R_INSN_CMPUI, M32RXF_INSN_CMPUI, M32RXF_SFMT_CMPI, NOPAR, NOPAR }, 914e98e3e1Schristos { M32R_INSN_CMPEQ, M32RXF_INSN_CMPEQ, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMPEQ, M32RXF_INSN_WRITE_CMPEQ }, 924e98e3e1Schristos { M32R_INSN_CMPZ, M32RXF_INSN_CMPZ, M32RXF_SFMT_CMPZ, M32RXF_INSN_PAR_CMPZ, M32RXF_INSN_WRITE_CMPZ }, 934e98e3e1Schristos { M32R_INSN_DIV, M32RXF_INSN_DIV, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 944e98e3e1Schristos { M32R_INSN_DIVU, M32RXF_INSN_DIVU, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 954e98e3e1Schristos { M32R_INSN_REM, M32RXF_INSN_REM, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 964e98e3e1Schristos { M32R_INSN_REMU, M32RXF_INSN_REMU, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 974e98e3e1Schristos { M32R_INSN_DIVH, M32RXF_INSN_DIVH, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 984e98e3e1Schristos { M32R_INSN_JC, M32RXF_INSN_JC, M32RXF_SFMT_JC, M32RXF_INSN_PAR_JC, M32RXF_INSN_WRITE_JC }, 994e98e3e1Schristos { M32R_INSN_JNC, M32RXF_INSN_JNC, M32RXF_SFMT_JC, M32RXF_INSN_PAR_JNC, M32RXF_INSN_WRITE_JNC }, 1004e98e3e1Schristos { M32R_INSN_JL, M32RXF_INSN_JL, M32RXF_SFMT_JL, M32RXF_INSN_PAR_JL, M32RXF_INSN_WRITE_JL }, 1014e98e3e1Schristos { M32R_INSN_JMP, M32RXF_INSN_JMP, M32RXF_SFMT_JMP, M32RXF_INSN_PAR_JMP, M32RXF_INSN_WRITE_JMP }, 1024e98e3e1Schristos { M32R_INSN_LD, M32RXF_INSN_LD, M32RXF_SFMT_LD, M32RXF_INSN_PAR_LD, M32RXF_INSN_WRITE_LD }, 1034e98e3e1Schristos { M32R_INSN_LD_D, M32RXF_INSN_LD_D, M32RXF_SFMT_LD_D, NOPAR, NOPAR }, 1044e98e3e1Schristos { M32R_INSN_LDB, M32RXF_INSN_LDB, M32RXF_SFMT_LDB, M32RXF_INSN_PAR_LDB, M32RXF_INSN_WRITE_LDB }, 1054e98e3e1Schristos { M32R_INSN_LDB_D, M32RXF_INSN_LDB_D, M32RXF_SFMT_LDB_D, NOPAR, NOPAR }, 1064e98e3e1Schristos { M32R_INSN_LDH, M32RXF_INSN_LDH, M32RXF_SFMT_LDH, M32RXF_INSN_PAR_LDH, M32RXF_INSN_WRITE_LDH }, 1074e98e3e1Schristos { M32R_INSN_LDH_D, M32RXF_INSN_LDH_D, M32RXF_SFMT_LDH_D, NOPAR, NOPAR }, 1084e98e3e1Schristos { M32R_INSN_LDUB, M32RXF_INSN_LDUB, M32RXF_SFMT_LDB, M32RXF_INSN_PAR_LDUB, M32RXF_INSN_WRITE_LDUB }, 1094e98e3e1Schristos { M32R_INSN_LDUB_D, M32RXF_INSN_LDUB_D, M32RXF_SFMT_LDB_D, NOPAR, NOPAR }, 1104e98e3e1Schristos { M32R_INSN_LDUH, M32RXF_INSN_LDUH, M32RXF_SFMT_LDH, M32RXF_INSN_PAR_LDUH, M32RXF_INSN_WRITE_LDUH }, 1114e98e3e1Schristos { M32R_INSN_LDUH_D, M32RXF_INSN_LDUH_D, M32RXF_SFMT_LDH_D, NOPAR, NOPAR }, 1124e98e3e1Schristos { M32R_INSN_LD_PLUS, M32RXF_INSN_LD_PLUS, M32RXF_SFMT_LD_PLUS, M32RXF_INSN_PAR_LD_PLUS, M32RXF_INSN_WRITE_LD_PLUS }, 1134e98e3e1Schristos { M32R_INSN_LD24, M32RXF_INSN_LD24, M32RXF_SFMT_LD24, NOPAR, NOPAR }, 1144e98e3e1Schristos { M32R_INSN_LDI8, M32RXF_INSN_LDI8, M32RXF_SFMT_LDI8, M32RXF_INSN_PAR_LDI8, M32RXF_INSN_WRITE_LDI8 }, 1154e98e3e1Schristos { M32R_INSN_LDI16, M32RXF_INSN_LDI16, M32RXF_SFMT_LDI16, NOPAR, NOPAR }, 1164e98e3e1Schristos { M32R_INSN_LOCK, M32RXF_INSN_LOCK, M32RXF_SFMT_LOCK, M32RXF_INSN_PAR_LOCK, M32RXF_INSN_WRITE_LOCK }, 1174e98e3e1Schristos { M32R_INSN_MACHI_A, M32RXF_INSN_MACHI_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACHI_A, M32RXF_INSN_WRITE_MACHI_A }, 1184e98e3e1Schristos { M32R_INSN_MACLO_A, M32RXF_INSN_MACLO_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACLO_A, M32RXF_INSN_WRITE_MACLO_A }, 1194e98e3e1Schristos { M32R_INSN_MACWHI_A, M32RXF_INSN_MACWHI_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACWHI_A, M32RXF_INSN_WRITE_MACWHI_A }, 1204e98e3e1Schristos { M32R_INSN_MACWLO_A, M32RXF_INSN_MACWLO_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACWLO_A, M32RXF_INSN_WRITE_MACWLO_A }, 1214e98e3e1Schristos { M32R_INSN_MUL, M32RXF_INSN_MUL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_MUL, M32RXF_INSN_WRITE_MUL }, 1224e98e3e1Schristos { M32R_INSN_MULHI_A, M32RXF_INSN_MULHI_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULHI_A, M32RXF_INSN_WRITE_MULHI_A }, 1234e98e3e1Schristos { M32R_INSN_MULLO_A, M32RXF_INSN_MULLO_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULLO_A, M32RXF_INSN_WRITE_MULLO_A }, 1244e98e3e1Schristos { M32R_INSN_MULWHI_A, M32RXF_INSN_MULWHI_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULWHI_A, M32RXF_INSN_WRITE_MULWHI_A }, 1254e98e3e1Schristos { M32R_INSN_MULWLO_A, M32RXF_INSN_MULWLO_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULWLO_A, M32RXF_INSN_WRITE_MULWLO_A }, 1264e98e3e1Schristos { M32R_INSN_MV, M32RXF_INSN_MV, M32RXF_SFMT_MV, M32RXF_INSN_PAR_MV, M32RXF_INSN_WRITE_MV }, 1274e98e3e1Schristos { M32R_INSN_MVFACHI_A, M32RXF_INSN_MVFACHI_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACHI_A, M32RXF_INSN_WRITE_MVFACHI_A }, 1284e98e3e1Schristos { M32R_INSN_MVFACLO_A, M32RXF_INSN_MVFACLO_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACLO_A, M32RXF_INSN_WRITE_MVFACLO_A }, 1294e98e3e1Schristos { M32R_INSN_MVFACMI_A, M32RXF_INSN_MVFACMI_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACMI_A, M32RXF_INSN_WRITE_MVFACMI_A }, 1304e98e3e1Schristos { M32R_INSN_MVFC, M32RXF_INSN_MVFC, M32RXF_SFMT_MVFC, M32RXF_INSN_PAR_MVFC, M32RXF_INSN_WRITE_MVFC }, 1314e98e3e1Schristos { M32R_INSN_MVTACHI_A, M32RXF_INSN_MVTACHI_A, M32RXF_SFMT_MVTACHI_A, M32RXF_INSN_PAR_MVTACHI_A, M32RXF_INSN_WRITE_MVTACHI_A }, 1324e98e3e1Schristos { M32R_INSN_MVTACLO_A, M32RXF_INSN_MVTACLO_A, M32RXF_SFMT_MVTACHI_A, M32RXF_INSN_PAR_MVTACLO_A, M32RXF_INSN_WRITE_MVTACLO_A }, 1334e98e3e1Schristos { M32R_INSN_MVTC, M32RXF_INSN_MVTC, M32RXF_SFMT_MVTC, M32RXF_INSN_PAR_MVTC, M32RXF_INSN_WRITE_MVTC }, 1344e98e3e1Schristos { M32R_INSN_NEG, M32RXF_INSN_NEG, M32RXF_SFMT_MV, M32RXF_INSN_PAR_NEG, M32RXF_INSN_WRITE_NEG }, 1354e98e3e1Schristos { M32R_INSN_NOP, M32RXF_INSN_NOP, M32RXF_SFMT_NOP, M32RXF_INSN_PAR_NOP, M32RXF_INSN_WRITE_NOP }, 1364e98e3e1Schristos { M32R_INSN_NOT, M32RXF_INSN_NOT, M32RXF_SFMT_MV, M32RXF_INSN_PAR_NOT, M32RXF_INSN_WRITE_NOT }, 1374e98e3e1Schristos { M32R_INSN_RAC_DSI, M32RXF_INSN_RAC_DSI, M32RXF_SFMT_RAC_DSI, M32RXF_INSN_PAR_RAC_DSI, M32RXF_INSN_WRITE_RAC_DSI }, 1384e98e3e1Schristos { M32R_INSN_RACH_DSI, M32RXF_INSN_RACH_DSI, M32RXF_SFMT_RAC_DSI, M32RXF_INSN_PAR_RACH_DSI, M32RXF_INSN_WRITE_RACH_DSI }, 1394e98e3e1Schristos { M32R_INSN_RTE, M32RXF_INSN_RTE, M32RXF_SFMT_RTE, M32RXF_INSN_PAR_RTE, M32RXF_INSN_WRITE_RTE }, 1404e98e3e1Schristos { M32R_INSN_SETH, M32RXF_INSN_SETH, M32RXF_SFMT_SETH, NOPAR, NOPAR }, 1414e98e3e1Schristos { M32R_INSN_SLL, M32RXF_INSN_SLL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SLL, M32RXF_INSN_WRITE_SLL }, 1424e98e3e1Schristos { M32R_INSN_SLL3, M32RXF_INSN_SLL3, M32RXF_SFMT_SLL3, NOPAR, NOPAR }, 1434e98e3e1Schristos { M32R_INSN_SLLI, M32RXF_INSN_SLLI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SLLI, M32RXF_INSN_WRITE_SLLI }, 1444e98e3e1Schristos { M32R_INSN_SRA, M32RXF_INSN_SRA, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SRA, M32RXF_INSN_WRITE_SRA }, 1454e98e3e1Schristos { M32R_INSN_SRA3, M32RXF_INSN_SRA3, M32RXF_SFMT_SLL3, NOPAR, NOPAR }, 1464e98e3e1Schristos { M32R_INSN_SRAI, M32RXF_INSN_SRAI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SRAI, M32RXF_INSN_WRITE_SRAI }, 1474e98e3e1Schristos { M32R_INSN_SRL, M32RXF_INSN_SRL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SRL, M32RXF_INSN_WRITE_SRL }, 1484e98e3e1Schristos { M32R_INSN_SRL3, M32RXF_INSN_SRL3, M32RXF_SFMT_SLL3, NOPAR, NOPAR }, 1494e98e3e1Schristos { M32R_INSN_SRLI, M32RXF_INSN_SRLI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SRLI, M32RXF_INSN_WRITE_SRLI }, 1504e98e3e1Schristos { M32R_INSN_ST, M32RXF_INSN_ST, M32RXF_SFMT_ST, M32RXF_INSN_PAR_ST, M32RXF_INSN_WRITE_ST }, 1514e98e3e1Schristos { M32R_INSN_ST_D, M32RXF_INSN_ST_D, M32RXF_SFMT_ST_D, NOPAR, NOPAR }, 1524e98e3e1Schristos { M32R_INSN_STB, M32RXF_INSN_STB, M32RXF_SFMT_STB, M32RXF_INSN_PAR_STB, M32RXF_INSN_WRITE_STB }, 1534e98e3e1Schristos { M32R_INSN_STB_D, M32RXF_INSN_STB_D, M32RXF_SFMT_STB_D, NOPAR, NOPAR }, 1544e98e3e1Schristos { M32R_INSN_STH, M32RXF_INSN_STH, M32RXF_SFMT_STH, M32RXF_INSN_PAR_STH, M32RXF_INSN_WRITE_STH }, 1554e98e3e1Schristos { M32R_INSN_STH_D, M32RXF_INSN_STH_D, M32RXF_SFMT_STH_D, NOPAR, NOPAR }, 1564e98e3e1Schristos { M32R_INSN_ST_PLUS, M32RXF_INSN_ST_PLUS, M32RXF_SFMT_ST_PLUS, M32RXF_INSN_PAR_ST_PLUS, M32RXF_INSN_WRITE_ST_PLUS }, 1574e98e3e1Schristos { M32R_INSN_STH_PLUS, M32RXF_INSN_STH_PLUS, M32RXF_SFMT_STH_PLUS, M32RXF_INSN_PAR_STH_PLUS, M32RXF_INSN_WRITE_STH_PLUS }, 1584e98e3e1Schristos { M32R_INSN_STB_PLUS, M32RXF_INSN_STB_PLUS, M32RXF_SFMT_STB_PLUS, M32RXF_INSN_PAR_STB_PLUS, M32RXF_INSN_WRITE_STB_PLUS }, 1594e98e3e1Schristos { M32R_INSN_ST_MINUS, M32RXF_INSN_ST_MINUS, M32RXF_SFMT_ST_PLUS, M32RXF_INSN_PAR_ST_MINUS, M32RXF_INSN_WRITE_ST_MINUS }, 1604e98e3e1Schristos { M32R_INSN_SUB, M32RXF_INSN_SUB, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SUB, M32RXF_INSN_WRITE_SUB }, 1614e98e3e1Schristos { M32R_INSN_SUBV, M32RXF_INSN_SUBV, M32RXF_SFMT_ADDV, M32RXF_INSN_PAR_SUBV, M32RXF_INSN_WRITE_SUBV }, 1624e98e3e1Schristos { M32R_INSN_SUBX, M32RXF_INSN_SUBX, M32RXF_SFMT_ADDX, M32RXF_INSN_PAR_SUBX, M32RXF_INSN_WRITE_SUBX }, 1634e98e3e1Schristos { M32R_INSN_TRAP, M32RXF_INSN_TRAP, M32RXF_SFMT_TRAP, M32RXF_INSN_PAR_TRAP, M32RXF_INSN_WRITE_TRAP }, 1644e98e3e1Schristos { M32R_INSN_UNLOCK, M32RXF_INSN_UNLOCK, M32RXF_SFMT_UNLOCK, M32RXF_INSN_PAR_UNLOCK, M32RXF_INSN_WRITE_UNLOCK }, 1654e98e3e1Schristos { M32R_INSN_SATB, M32RXF_INSN_SATB, M32RXF_SFMT_SATB, NOPAR, NOPAR }, 1664e98e3e1Schristos { M32R_INSN_SATH, M32RXF_INSN_SATH, M32RXF_SFMT_SATB, NOPAR, NOPAR }, 1674e98e3e1Schristos { M32R_INSN_SAT, M32RXF_INSN_SAT, M32RXF_SFMT_SAT, NOPAR, NOPAR }, 1684e98e3e1Schristos { M32R_INSN_PCMPBZ, M32RXF_INSN_PCMPBZ, M32RXF_SFMT_CMPZ, M32RXF_INSN_PAR_PCMPBZ, M32RXF_INSN_WRITE_PCMPBZ }, 1694e98e3e1Schristos { M32R_INSN_SADD, M32RXF_INSN_SADD, M32RXF_SFMT_SADD, M32RXF_INSN_PAR_SADD, M32RXF_INSN_WRITE_SADD }, 1704e98e3e1Schristos { M32R_INSN_MACWU1, M32RXF_INSN_MACWU1, M32RXF_SFMT_MACWU1, M32RXF_INSN_PAR_MACWU1, M32RXF_INSN_WRITE_MACWU1 }, 1714e98e3e1Schristos { M32R_INSN_MSBLO, M32RXF_INSN_MSBLO, M32RXF_SFMT_MSBLO, M32RXF_INSN_PAR_MSBLO, M32RXF_INSN_WRITE_MSBLO }, 1724e98e3e1Schristos { M32R_INSN_MULWU1, M32RXF_INSN_MULWU1, M32RXF_SFMT_MULWU1, M32RXF_INSN_PAR_MULWU1, M32RXF_INSN_WRITE_MULWU1 }, 1734e98e3e1Schristos { M32R_INSN_MACLH1, M32RXF_INSN_MACLH1, M32RXF_SFMT_MACWU1, M32RXF_INSN_PAR_MACLH1, M32RXF_INSN_WRITE_MACLH1 }, 1744e98e3e1Schristos { M32R_INSN_SC, M32RXF_INSN_SC, M32RXF_SFMT_SC, M32RXF_INSN_PAR_SC, M32RXF_INSN_WRITE_SC }, 1754e98e3e1Schristos { M32R_INSN_SNC, M32RXF_INSN_SNC, M32RXF_SFMT_SC, M32RXF_INSN_PAR_SNC, M32RXF_INSN_WRITE_SNC }, 1764e98e3e1Schristos { M32R_INSN_CLRPSW, M32RXF_INSN_CLRPSW, M32RXF_SFMT_CLRPSW, M32RXF_INSN_PAR_CLRPSW, M32RXF_INSN_WRITE_CLRPSW }, 1774e98e3e1Schristos { M32R_INSN_SETPSW, M32RXF_INSN_SETPSW, M32RXF_SFMT_SETPSW, M32RXF_INSN_PAR_SETPSW, M32RXF_INSN_WRITE_SETPSW }, 1784e98e3e1Schristos { M32R_INSN_BSET, M32RXF_INSN_BSET, M32RXF_SFMT_BSET, NOPAR, NOPAR }, 1794e98e3e1Schristos { M32R_INSN_BCLR, M32RXF_INSN_BCLR, M32RXF_SFMT_BSET, NOPAR, NOPAR }, 1804e98e3e1Schristos { M32R_INSN_BTST, M32RXF_INSN_BTST, M32RXF_SFMT_BTST, M32RXF_INSN_PAR_BTST, M32RXF_INSN_WRITE_BTST }, 1814e98e3e1Schristos }; 1824e98e3e1Schristos 1834e98e3e1Schristos static const struct insn_sem m32rxf_insn_sem_invalid = 1844e98e3e1Schristos { 1854e98e3e1Schristos VIRTUAL_INSN_X_INVALID, M32RXF_INSN_X_INVALID, M32RXF_SFMT_EMPTY, NOPAR, NOPAR 1864e98e3e1Schristos }; 1874e98e3e1Schristos 1884e98e3e1Schristos /* Initialize an IDESC from the compile-time computable parts. */ 1894e98e3e1Schristos 1904e98e3e1Schristos static INLINE void 1914e98e3e1Schristos init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t) 1924e98e3e1Schristos { 1934e98e3e1Schristos const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries; 1944e98e3e1Schristos 1954e98e3e1Schristos id->num = t->index; 1964e98e3e1Schristos id->sfmt = t->sfmt; 1974e98e3e1Schristos if ((int) t->type <= 0) 1984e98e3e1Schristos id->idata = & cgen_virtual_insn_table[- (int) t->type]; 1994e98e3e1Schristos else 2004e98e3e1Schristos id->idata = & insn_table[t->type]; 2014e98e3e1Schristos id->attrs = CGEN_INSN_ATTRS (id->idata); 2024e98e3e1Schristos /* Oh my god, a magic number. */ 2034e98e3e1Schristos id->length = CGEN_INSN_BITSIZE (id->idata) / 8; 2044e98e3e1Schristos 2054e98e3e1Schristos #if WITH_PROFILE_MODEL_P 2064e98e3e1Schristos id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index]; 2074e98e3e1Schristos { 2084e98e3e1Schristos SIM_DESC sd = CPU_STATE (cpu); 2094e98e3e1Schristos SIM_ASSERT (t->index == id->timing->num); 2104e98e3e1Schristos } 2114e98e3e1Schristos #endif 2124e98e3e1Schristos 2134e98e3e1Schristos /* Semantic pointers are initialized elsewhere. */ 2144e98e3e1Schristos } 2154e98e3e1Schristos 2164e98e3e1Schristos /* Initialize the instruction descriptor table. */ 2174e98e3e1Schristos 2184e98e3e1Schristos void 2194e98e3e1Schristos m32rxf_init_idesc_table (SIM_CPU *cpu) 2204e98e3e1Schristos { 2214e98e3e1Schristos IDESC *id,*tabend; 2224e98e3e1Schristos const struct insn_sem *t,*tend; 2234e98e3e1Schristos int tabsize = M32RXF_INSN__MAX; 2244e98e3e1Schristos IDESC *table = m32rxf_insn_data; 2254e98e3e1Schristos 2264e98e3e1Schristos memset (table, 0, tabsize * sizeof (IDESC)); 2274e98e3e1Schristos 2284e98e3e1Schristos /* First set all entries to the `invalid insn'. */ 2294e98e3e1Schristos t = & m32rxf_insn_sem_invalid; 2304e98e3e1Schristos for (id = table, tabend = table + tabsize; id < tabend; ++id) 2314e98e3e1Schristos init_idesc (cpu, id, t); 2324e98e3e1Schristos 2334e98e3e1Schristos /* Now fill in the values for the chosen cpu. */ 234796c32c9Schristos for (t = m32rxf_insn_sem, tend = t + ARRAY_SIZE (m32rxf_insn_sem); 2354e98e3e1Schristos t != tend; ++t) 2364e98e3e1Schristos { 2374e98e3e1Schristos init_idesc (cpu, & table[t->index], t); 2384e98e3e1Schristos if (t->par_index != NOPAR) 2394e98e3e1Schristos { 2404e98e3e1Schristos init_idesc (cpu, &table[t->par_index], t); 2414e98e3e1Schristos table[t->index].par_idesc = &table[t->par_index]; 2424e98e3e1Schristos } 2434e98e3e1Schristos if (t->par_index != NOPAR) 2444e98e3e1Schristos { 2454e98e3e1Schristos init_idesc (cpu, &table[t->write_index], t); 2464e98e3e1Schristos table[t->par_index].par_idesc = &table[t->write_index]; 2474e98e3e1Schristos } 2484e98e3e1Schristos } 2494e98e3e1Schristos 2504e98e3e1Schristos /* Link the IDESC table into the cpu. */ 2514e98e3e1Schristos CPU_IDESC (cpu) = table; 2524e98e3e1Schristos } 2534e98e3e1Schristos 2544e98e3e1Schristos /* Given an instruction, return a pointer to its IDESC entry. */ 2554e98e3e1Schristos 2564e98e3e1Schristos const IDESC * 2574e98e3e1Schristos m32rxf_decode (SIM_CPU *current_cpu, IADDR pc, 2584e98e3e1Schristos CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn, 2594e98e3e1Schristos ARGBUF *abuf) 2604e98e3e1Schristos { 2614e98e3e1Schristos /* Result of decoder. */ 2624e98e3e1Schristos M32RXF_INSN_TYPE itype; 2634e98e3e1Schristos 2644e98e3e1Schristos { 2654e98e3e1Schristos CGEN_INSN_WORD insn = base_insn; 2664e98e3e1Schristos 2674e98e3e1Schristos { 268*05fa0856Schristos unsigned int val0 = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0))); 269*05fa0856Schristos switch (val0) 2704e98e3e1Schristos { 2714e98e3e1Schristos case 0: itype = M32RXF_INSN_SUBV; goto extract_sfmt_addv; 2724e98e3e1Schristos case 1: itype = M32RXF_INSN_SUBX; goto extract_sfmt_addx; 2734e98e3e1Schristos case 2: itype = M32RXF_INSN_SUB; goto extract_sfmt_add; 2744e98e3e1Schristos case 3: itype = M32RXF_INSN_NEG; goto extract_sfmt_mv; 2754e98e3e1Schristos case 4: itype = M32RXF_INSN_CMP; goto extract_sfmt_cmp; 2764e98e3e1Schristos case 5: itype = M32RXF_INSN_CMPU; goto extract_sfmt_cmp; 2774e98e3e1Schristos case 6: itype = M32RXF_INSN_CMPEQ; goto extract_sfmt_cmp; 2784e98e3e1Schristos case 7: 2794e98e3e1Schristos { 280*05fa0856Schristos unsigned int val1 = (((insn >> 8) & (3 << 0))); 281*05fa0856Schristos switch (val1) 2824e98e3e1Schristos { 2834e98e3e1Schristos case 0: 2844e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x70) 2854e98e3e1Schristos { itype = M32RXF_INSN_CMPZ; goto extract_sfmt_cmpz; } 2864e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 2874e98e3e1Schristos case 3: 2884e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x370) 2894e98e3e1Schristos { itype = M32RXF_INSN_PCMPBZ; goto extract_sfmt_cmpz; } 2904e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 2914e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 2924e98e3e1Schristos } 2934e98e3e1Schristos } 2944e98e3e1Schristos case 8: itype = M32RXF_INSN_ADDV; goto extract_sfmt_addv; 2954e98e3e1Schristos case 9: itype = M32RXF_INSN_ADDX; goto extract_sfmt_addx; 2964e98e3e1Schristos case 10: itype = M32RXF_INSN_ADD; goto extract_sfmt_add; 2974e98e3e1Schristos case 11: itype = M32RXF_INSN_NOT; goto extract_sfmt_mv; 2984e98e3e1Schristos case 12: itype = M32RXF_INSN_AND; goto extract_sfmt_add; 2994e98e3e1Schristos case 13: itype = M32RXF_INSN_XOR; goto extract_sfmt_add; 3004e98e3e1Schristos case 14: itype = M32RXF_INSN_OR; goto extract_sfmt_add; 3014e98e3e1Schristos case 15: 3024e98e3e1Schristos if ((entire_insn & 0xf8f0) == 0xf0) 3034e98e3e1Schristos { itype = M32RXF_INSN_BTST; goto extract_sfmt_btst; } 3044e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 3054e98e3e1Schristos case 16: itype = M32RXF_INSN_SRL; goto extract_sfmt_add; 3064e98e3e1Schristos case 18: itype = M32RXF_INSN_SRA; goto extract_sfmt_add; 3074e98e3e1Schristos case 20: itype = M32RXF_INSN_SLL; goto extract_sfmt_add; 3084e98e3e1Schristos case 22: itype = M32RXF_INSN_MUL; goto extract_sfmt_add; 3094e98e3e1Schristos case 24: itype = M32RXF_INSN_MV; goto extract_sfmt_mv; 3104e98e3e1Schristos case 25: itype = M32RXF_INSN_MVFC; goto extract_sfmt_mvfc; 3114e98e3e1Schristos case 26: itype = M32RXF_INSN_MVTC; goto extract_sfmt_mvtc; 3124e98e3e1Schristos case 28: 3134e98e3e1Schristos { 314*05fa0856Schristos unsigned int val1 = (((insn >> 8) & (3 << 0))); 315*05fa0856Schristos switch (val1) 3164e98e3e1Schristos { 3174e98e3e1Schristos case 0: 3184e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x1cc0) 3194e98e3e1Schristos { itype = M32RXF_INSN_JC; goto extract_sfmt_jc; } 3204e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 3214e98e3e1Schristos case 1: 3224e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x1dc0) 3234e98e3e1Schristos { itype = M32RXF_INSN_JNC; goto extract_sfmt_jc; } 3244e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 3254e98e3e1Schristos case 2: 3264e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x1ec0) 3274e98e3e1Schristos { itype = M32RXF_INSN_JL; goto extract_sfmt_jl; } 3284e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 3294e98e3e1Schristos case 3: 3304e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x1fc0) 3314e98e3e1Schristos { itype = M32RXF_INSN_JMP; goto extract_sfmt_jmp; } 3324e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 3334e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 3344e98e3e1Schristos } 3354e98e3e1Schristos } 3364e98e3e1Schristos case 29: 3374e98e3e1Schristos if ((entire_insn & 0xffff) == 0x10d6) 3384e98e3e1Schristos { itype = M32RXF_INSN_RTE; goto extract_sfmt_rte; } 3394e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 3404e98e3e1Schristos case 31: 3414e98e3e1Schristos if ((entire_insn & 0xfff0) == 0x10f0) 3424e98e3e1Schristos { itype = M32RXF_INSN_TRAP; goto extract_sfmt_trap; } 3434e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 3444e98e3e1Schristos case 32: itype = M32RXF_INSN_STB; goto extract_sfmt_stb; 3454e98e3e1Schristos case 33: itype = M32RXF_INSN_STB_PLUS; goto extract_sfmt_stb_plus; 3464e98e3e1Schristos case 34: itype = M32RXF_INSN_STH; goto extract_sfmt_sth; 3474e98e3e1Schristos case 35: itype = M32RXF_INSN_STH_PLUS; goto extract_sfmt_sth_plus; 3484e98e3e1Schristos case 36: itype = M32RXF_INSN_ST; goto extract_sfmt_st; 3494e98e3e1Schristos case 37: itype = M32RXF_INSN_UNLOCK; goto extract_sfmt_unlock; 3504e98e3e1Schristos case 38: itype = M32RXF_INSN_ST_PLUS; goto extract_sfmt_st_plus; 3514e98e3e1Schristos case 39: itype = M32RXF_INSN_ST_MINUS; goto extract_sfmt_st_plus; 3524e98e3e1Schristos case 40: itype = M32RXF_INSN_LDB; goto extract_sfmt_ldb; 3534e98e3e1Schristos case 41: itype = M32RXF_INSN_LDUB; goto extract_sfmt_ldb; 3544e98e3e1Schristos case 42: itype = M32RXF_INSN_LDH; goto extract_sfmt_ldh; 3554e98e3e1Schristos case 43: itype = M32RXF_INSN_LDUH; goto extract_sfmt_ldh; 3564e98e3e1Schristos case 44: itype = M32RXF_INSN_LD; goto extract_sfmt_ld; 3574e98e3e1Schristos case 45: itype = M32RXF_INSN_LOCK; goto extract_sfmt_lock; 3584e98e3e1Schristos case 46: itype = M32RXF_INSN_LD_PLUS; goto extract_sfmt_ld_plus; 359*05fa0856Schristos case 48: 3604e98e3e1Schristos case 56: itype = M32RXF_INSN_MULHI_A; goto extract_sfmt_mulhi_a; 361*05fa0856Schristos case 49: 3624e98e3e1Schristos case 57: itype = M32RXF_INSN_MULLO_A; goto extract_sfmt_mulhi_a; 363*05fa0856Schristos case 50: 3644e98e3e1Schristos case 58: itype = M32RXF_INSN_MULWHI_A; goto extract_sfmt_mulhi_a; 365*05fa0856Schristos case 51: 3664e98e3e1Schristos case 59: itype = M32RXF_INSN_MULWLO_A; goto extract_sfmt_mulhi_a; 367*05fa0856Schristos case 52: 3684e98e3e1Schristos case 60: itype = M32RXF_INSN_MACHI_A; goto extract_sfmt_machi_a; 369*05fa0856Schristos case 53: 3704e98e3e1Schristos case 61: itype = M32RXF_INSN_MACLO_A; goto extract_sfmt_machi_a; 371*05fa0856Schristos case 54: 3724e98e3e1Schristos case 62: itype = M32RXF_INSN_MACWHI_A; goto extract_sfmt_machi_a; 373*05fa0856Schristos case 55: 3744e98e3e1Schristos case 63: itype = M32RXF_INSN_MACWLO_A; goto extract_sfmt_machi_a; 375*05fa0856Schristos case 64: 376*05fa0856Schristos case 65: 377*05fa0856Schristos case 66: 378*05fa0856Schristos case 67: 379*05fa0856Schristos case 68: 380*05fa0856Schristos case 69: 381*05fa0856Schristos case 70: 382*05fa0856Schristos case 71: 383*05fa0856Schristos case 72: 384*05fa0856Schristos case 73: 385*05fa0856Schristos case 74: 386*05fa0856Schristos case 75: 387*05fa0856Schristos case 76: 388*05fa0856Schristos case 77: 389*05fa0856Schristos case 78: 3904e98e3e1Schristos case 79: itype = M32RXF_INSN_ADDI; goto extract_sfmt_addi; 391*05fa0856Schristos case 80: 3924e98e3e1Schristos case 81: itype = M32RXF_INSN_SRLI; goto extract_sfmt_slli; 393*05fa0856Schristos case 82: 3944e98e3e1Schristos case 83: itype = M32RXF_INSN_SRAI; goto extract_sfmt_slli; 395*05fa0856Schristos case 84: 3964e98e3e1Schristos case 85: itype = M32RXF_INSN_SLLI; goto extract_sfmt_slli; 3974e98e3e1Schristos case 87: 3984e98e3e1Schristos { 399*05fa0856Schristos unsigned int val1 = (((insn >> 0) & (1 << 0))); 400*05fa0856Schristos switch (val1) 4014e98e3e1Schristos { 4024e98e3e1Schristos case 0: 4034e98e3e1Schristos if ((entire_insn & 0xf0f3) == 0x5070) 4044e98e3e1Schristos { itype = M32RXF_INSN_MVTACHI_A; goto extract_sfmt_mvtachi_a; } 4054e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4064e98e3e1Schristos case 1: 4074e98e3e1Schristos if ((entire_insn & 0xf0f3) == 0x5071) 4084e98e3e1Schristos { itype = M32RXF_INSN_MVTACLO_A; goto extract_sfmt_mvtachi_a; } 4094e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4104e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4114e98e3e1Schristos } 4124e98e3e1Schristos } 4134e98e3e1Schristos case 88: 4144e98e3e1Schristos if ((entire_insn & 0xf3f2) == 0x5080) 4154e98e3e1Schristos { itype = M32RXF_INSN_RACH_DSI; goto extract_sfmt_rac_dsi; } 4164e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4174e98e3e1Schristos case 89: 4184e98e3e1Schristos if ((entire_insn & 0xf3f2) == 0x5090) 4194e98e3e1Schristos { itype = M32RXF_INSN_RAC_DSI; goto extract_sfmt_rac_dsi; } 4204e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4214e98e3e1Schristos case 90: itype = M32RXF_INSN_MULWU1; goto extract_sfmt_mulwu1; 4224e98e3e1Schristos case 91: itype = M32RXF_INSN_MACWU1; goto extract_sfmt_macwu1; 4234e98e3e1Schristos case 92: itype = M32RXF_INSN_MACLH1; goto extract_sfmt_macwu1; 4244e98e3e1Schristos case 93: itype = M32RXF_INSN_MSBLO; goto extract_sfmt_msblo; 4254e98e3e1Schristos case 94: 4264e98e3e1Schristos if ((entire_insn & 0xffff) == 0x50e4) 4274e98e3e1Schristos { itype = M32RXF_INSN_SADD; goto extract_sfmt_sadd; } 4284e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4294e98e3e1Schristos case 95: 4304e98e3e1Schristos { 431*05fa0856Schristos unsigned int val1 = (((insn >> 0) & (3 << 0))); 432*05fa0856Schristos switch (val1) 4334e98e3e1Schristos { 4344e98e3e1Schristos case 0: itype = M32RXF_INSN_MVFACHI_A; goto extract_sfmt_mvfachi_a; 4354e98e3e1Schristos case 1: itype = M32RXF_INSN_MVFACLO_A; goto extract_sfmt_mvfachi_a; 4364e98e3e1Schristos case 2: itype = M32RXF_INSN_MVFACMI_A; goto extract_sfmt_mvfachi_a; 4374e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4384e98e3e1Schristos } 4394e98e3e1Schristos } 440*05fa0856Schristos case 96: 441*05fa0856Schristos case 97: 442*05fa0856Schristos case 98: 443*05fa0856Schristos case 99: 444*05fa0856Schristos case 100: 445*05fa0856Schristos case 101: 446*05fa0856Schristos case 102: 447*05fa0856Schristos case 103: 448*05fa0856Schristos case 104: 449*05fa0856Schristos case 105: 450*05fa0856Schristos case 106: 451*05fa0856Schristos case 107: 452*05fa0856Schristos case 108: 453*05fa0856Schristos case 109: 454*05fa0856Schristos case 110: 4554e98e3e1Schristos case 111: itype = M32RXF_INSN_LDI8; goto extract_sfmt_ldi8; 4564e98e3e1Schristos case 112: 4574e98e3e1Schristos { 458*05fa0856Schristos unsigned int val1 = (((insn >> 7) & (15 << 1)) | ((insn >> 0) & (1 << 0))); 459*05fa0856Schristos switch (val1) 4604e98e3e1Schristos { 4614e98e3e1Schristos case 0: 4624e98e3e1Schristos if ((entire_insn & 0xffff) == 0x7000) 4634e98e3e1Schristos { itype = M32RXF_INSN_NOP; goto extract_sfmt_nop; } 4644e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 465*05fa0856Schristos case 2: 4664e98e3e1Schristos case 3: itype = M32RXF_INSN_SETPSW; goto extract_sfmt_setpsw; 467*05fa0856Schristos case 4: 4684e98e3e1Schristos case 5: itype = M32RXF_INSN_CLRPSW; goto extract_sfmt_clrpsw; 4694e98e3e1Schristos case 9: 4704e98e3e1Schristos if ((entire_insn & 0xffff) == 0x7401) 4714e98e3e1Schristos { itype = M32RXF_INSN_SC; goto extract_sfmt_sc; } 4724e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4734e98e3e1Schristos case 11: 4744e98e3e1Schristos if ((entire_insn & 0xffff) == 0x7501) 4754e98e3e1Schristos { itype = M32RXF_INSN_SNC; goto extract_sfmt_sc; } 4764e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 477*05fa0856Schristos case 16: 4784e98e3e1Schristos case 17: itype = M32RXF_INSN_BCL8; goto extract_sfmt_bcl8; 479*05fa0856Schristos case 18: 4804e98e3e1Schristos case 19: itype = M32RXF_INSN_BNCL8; goto extract_sfmt_bcl8; 481*05fa0856Schristos case 24: 4824e98e3e1Schristos case 25: itype = M32RXF_INSN_BC8; goto extract_sfmt_bc8; 483*05fa0856Schristos case 26: 4844e98e3e1Schristos case 27: itype = M32RXF_INSN_BNC8; goto extract_sfmt_bc8; 485*05fa0856Schristos case 28: 4864e98e3e1Schristos case 29: itype = M32RXF_INSN_BL8; goto extract_sfmt_bl8; 487*05fa0856Schristos case 30: 4884e98e3e1Schristos case 31: itype = M32RXF_INSN_BRA8; goto extract_sfmt_bra8; 4894e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 4904e98e3e1Schristos } 4914e98e3e1Schristos } 492*05fa0856Schristos case 113: 493*05fa0856Schristos case 114: 494*05fa0856Schristos case 115: 495*05fa0856Schristos case 116: 496*05fa0856Schristos case 117: 497*05fa0856Schristos case 118: 498*05fa0856Schristos case 119: 499*05fa0856Schristos case 120: 500*05fa0856Schristos case 121: 501*05fa0856Schristos case 122: 502*05fa0856Schristos case 123: 503*05fa0856Schristos case 124: 504*05fa0856Schristos case 125: 505*05fa0856Schristos case 126: 5064e98e3e1Schristos case 127: 5074e98e3e1Schristos { 508*05fa0856Schristos unsigned int val1 = (((insn >> 8) & (15 << 0))); 509*05fa0856Schristos switch (val1) 5104e98e3e1Schristos { 5114e98e3e1Schristos case 1: itype = M32RXF_INSN_SETPSW; goto extract_sfmt_setpsw; 5124e98e3e1Schristos case 2: itype = M32RXF_INSN_CLRPSW; goto extract_sfmt_clrpsw; 5134e98e3e1Schristos case 8: itype = M32RXF_INSN_BCL8; goto extract_sfmt_bcl8; 5144e98e3e1Schristos case 9: itype = M32RXF_INSN_BNCL8; goto extract_sfmt_bcl8; 5154e98e3e1Schristos case 12: itype = M32RXF_INSN_BC8; goto extract_sfmt_bc8; 5164e98e3e1Schristos case 13: itype = M32RXF_INSN_BNC8; goto extract_sfmt_bc8; 5174e98e3e1Schristos case 14: itype = M32RXF_INSN_BL8; goto extract_sfmt_bl8; 5184e98e3e1Schristos case 15: itype = M32RXF_INSN_BRA8; goto extract_sfmt_bra8; 5194e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5204e98e3e1Schristos } 5214e98e3e1Schristos } 5224e98e3e1Schristos case 132: 5234e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0x80400000) 5244e98e3e1Schristos { itype = M32RXF_INSN_CMPI; goto extract_sfmt_cmpi; } 5254e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5264e98e3e1Schristos case 133: 5274e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0x80500000) 5284e98e3e1Schristos { itype = M32RXF_INSN_CMPUI; goto extract_sfmt_cmpi; } 5294e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5304e98e3e1Schristos case 134: 5314e98e3e1Schristos { 532*05fa0856Schristos unsigned int val1 = (((entire_insn >> 8) & (3 << 0))); 533*05fa0856Schristos switch (val1) 5344e98e3e1Schristos { 5354e98e3e1Schristos case 0: 5364e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x80600000) 5374e98e3e1Schristos { itype = M32RXF_INSN_SAT; goto extract_sfmt_sat; } 5384e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5394e98e3e1Schristos case 2: 5404e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x80600200) 5414e98e3e1Schristos { itype = M32RXF_INSN_SATH; goto extract_sfmt_satb; } 5424e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5434e98e3e1Schristos case 3: 5444e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x80600300) 5454e98e3e1Schristos { itype = M32RXF_INSN_SATB; goto extract_sfmt_satb; } 5464e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5474e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5484e98e3e1Schristos } 5494e98e3e1Schristos } 5504e98e3e1Schristos case 136: itype = M32RXF_INSN_ADDV3; goto extract_sfmt_addv3; 5514e98e3e1Schristos case 138: itype = M32RXF_INSN_ADD3; goto extract_sfmt_add3; 5524e98e3e1Schristos case 140: itype = M32RXF_INSN_AND3; goto extract_sfmt_and3; 5534e98e3e1Schristos case 141: itype = M32RXF_INSN_XOR3; goto extract_sfmt_and3; 5544e98e3e1Schristos case 142: itype = M32RXF_INSN_OR3; goto extract_sfmt_or3; 5554e98e3e1Schristos case 144: 5564e98e3e1Schristos { 557*05fa0856Schristos unsigned int val1 = (((entire_insn >> 4) & (1 << 0))); 558*05fa0856Schristos switch (val1) 5594e98e3e1Schristos { 5604e98e3e1Schristos case 0: 5614e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90000000) 5624e98e3e1Schristos { itype = M32RXF_INSN_DIV; goto extract_sfmt_div; } 5634e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5644e98e3e1Schristos case 1: 5654e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90000010) 5664e98e3e1Schristos { itype = M32RXF_INSN_DIVH; goto extract_sfmt_div; } 5674e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5684e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5694e98e3e1Schristos } 5704e98e3e1Schristos } 5714e98e3e1Schristos case 145: 5724e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90100000) 5734e98e3e1Schristos { itype = M32RXF_INSN_DIVU; goto extract_sfmt_div; } 5744e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5754e98e3e1Schristos case 146: 5764e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90200000) 5774e98e3e1Schristos { itype = M32RXF_INSN_REM; goto extract_sfmt_div; } 5784e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5794e98e3e1Schristos case 147: 5804e98e3e1Schristos if ((entire_insn & 0xf0f0ffff) == 0x90300000) 5814e98e3e1Schristos { itype = M32RXF_INSN_REMU; goto extract_sfmt_div; } 5824e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5834e98e3e1Schristos case 152: itype = M32RXF_INSN_SRL3; goto extract_sfmt_sll3; 5844e98e3e1Schristos case 154: itype = M32RXF_INSN_SRA3; goto extract_sfmt_sll3; 5854e98e3e1Schristos case 156: itype = M32RXF_INSN_SLL3; goto extract_sfmt_sll3; 5864e98e3e1Schristos case 159: 5874e98e3e1Schristos if ((entire_insn & 0xf0ff0000) == 0x90f00000) 5884e98e3e1Schristos { itype = M32RXF_INSN_LDI16; goto extract_sfmt_ldi16; } 5894e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5904e98e3e1Schristos case 160: itype = M32RXF_INSN_STB_D; goto extract_sfmt_stb_d; 5914e98e3e1Schristos case 162: itype = M32RXF_INSN_STH_D; goto extract_sfmt_sth_d; 5924e98e3e1Schristos case 164: itype = M32RXF_INSN_ST_D; goto extract_sfmt_st_d; 5934e98e3e1Schristos case 166: 5944e98e3e1Schristos if ((entire_insn & 0xf8f00000) == 0xa0600000) 5954e98e3e1Schristos { itype = M32RXF_INSN_BSET; goto extract_sfmt_bset; } 5964e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 5974e98e3e1Schristos case 167: 5984e98e3e1Schristos if ((entire_insn & 0xf8f00000) == 0xa0700000) 5994e98e3e1Schristos { itype = M32RXF_INSN_BCLR; goto extract_sfmt_bset; } 6004e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6014e98e3e1Schristos case 168: itype = M32RXF_INSN_LDB_D; goto extract_sfmt_ldb_d; 6024e98e3e1Schristos case 169: itype = M32RXF_INSN_LDUB_D; goto extract_sfmt_ldb_d; 6034e98e3e1Schristos case 170: itype = M32RXF_INSN_LDH_D; goto extract_sfmt_ldh_d; 6044e98e3e1Schristos case 171: itype = M32RXF_INSN_LDUH_D; goto extract_sfmt_ldh_d; 6054e98e3e1Schristos case 172: itype = M32RXF_INSN_LD_D; goto extract_sfmt_ld_d; 6064e98e3e1Schristos case 176: itype = M32RXF_INSN_BEQ; goto extract_sfmt_beq; 6074e98e3e1Schristos case 177: itype = M32RXF_INSN_BNE; goto extract_sfmt_beq; 6084e98e3e1Schristos case 184: 6094e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0800000) 6104e98e3e1Schristos { itype = M32RXF_INSN_BEQZ; goto extract_sfmt_beqz; } 6114e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6124e98e3e1Schristos case 185: 6134e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0900000) 6144e98e3e1Schristos { itype = M32RXF_INSN_BNEZ; goto extract_sfmt_beqz; } 6154e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6164e98e3e1Schristos case 186: 6174e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0a00000) 6184e98e3e1Schristos { itype = M32RXF_INSN_BLTZ; goto extract_sfmt_beqz; } 6194e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6204e98e3e1Schristos case 187: 6214e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0b00000) 6224e98e3e1Schristos { itype = M32RXF_INSN_BGEZ; goto extract_sfmt_beqz; } 6234e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6244e98e3e1Schristos case 188: 6254e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0c00000) 6264e98e3e1Schristos { itype = M32RXF_INSN_BLEZ; goto extract_sfmt_beqz; } 6274e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6284e98e3e1Schristos case 189: 6294e98e3e1Schristos if ((entire_insn & 0xfff00000) == 0xb0d00000) 6304e98e3e1Schristos { itype = M32RXF_INSN_BGTZ; goto extract_sfmt_beqz; } 6314e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6324e98e3e1Schristos case 220: 6334e98e3e1Schristos if ((entire_insn & 0xf0ff0000) == 0xd0c00000) 6344e98e3e1Schristos { itype = M32RXF_INSN_SETH; goto extract_sfmt_seth; } 6354e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 636*05fa0856Schristos case 224: 637*05fa0856Schristos case 225: 638*05fa0856Schristos case 226: 639*05fa0856Schristos case 227: 640*05fa0856Schristos case 228: 641*05fa0856Schristos case 229: 642*05fa0856Schristos case 230: 643*05fa0856Schristos case 231: 644*05fa0856Schristos case 232: 645*05fa0856Schristos case 233: 646*05fa0856Schristos case 234: 647*05fa0856Schristos case 235: 648*05fa0856Schristos case 236: 649*05fa0856Schristos case 237: 650*05fa0856Schristos case 238: 6514e98e3e1Schristos case 239: itype = M32RXF_INSN_LD24; goto extract_sfmt_ld24; 652*05fa0856Schristos case 240: 653*05fa0856Schristos case 241: 654*05fa0856Schristos case 242: 655*05fa0856Schristos case 243: 656*05fa0856Schristos case 244: 657*05fa0856Schristos case 245: 658*05fa0856Schristos case 246: 659*05fa0856Schristos case 247: 660*05fa0856Schristos case 248: 661*05fa0856Schristos case 249: 662*05fa0856Schristos case 250: 663*05fa0856Schristos case 251: 664*05fa0856Schristos case 252: 665*05fa0856Schristos case 253: 666*05fa0856Schristos case 254: 6674e98e3e1Schristos case 255: 6684e98e3e1Schristos { 669*05fa0856Schristos unsigned int val1 = (((insn >> 8) & (7 << 0))); 670*05fa0856Schristos switch (val1) 6714e98e3e1Schristos { 6724e98e3e1Schristos case 0: 6734e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xf8000000) 6744e98e3e1Schristos { itype = M32RXF_INSN_BCL24; goto extract_sfmt_bcl24; } 6754e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6764e98e3e1Schristos case 1: 6774e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xf9000000) 6784e98e3e1Schristos { itype = M32RXF_INSN_BNCL24; goto extract_sfmt_bcl24; } 6794e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6804e98e3e1Schristos case 4: 6814e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xfc000000) 6824e98e3e1Schristos { itype = M32RXF_INSN_BC24; goto extract_sfmt_bc24; } 6834e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6844e98e3e1Schristos case 5: 6854e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xfd000000) 6864e98e3e1Schristos { itype = M32RXF_INSN_BNC24; goto extract_sfmt_bc24; } 6874e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6884e98e3e1Schristos case 6: 6894e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xfe000000) 6904e98e3e1Schristos { itype = M32RXF_INSN_BL24; goto extract_sfmt_bl24; } 6914e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6924e98e3e1Schristos case 7: 6934e98e3e1Schristos if ((entire_insn & 0xff000000) == 0xff000000) 6944e98e3e1Schristos { itype = M32RXF_INSN_BRA24; goto extract_sfmt_bra24; } 6954e98e3e1Schristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6964e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 6974e98e3e1Schristos } 6984e98e3e1Schristos } 6994e98e3e1Schristos default: itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 7004e98e3e1Schristos } 7014e98e3e1Schristos } 7024e98e3e1Schristos } 7034e98e3e1Schristos 7044e98e3e1Schristos /* The instruction has been decoded, now extract the fields. */ 7054e98e3e1Schristos 7064e98e3e1Schristos extract_sfmt_empty: 7074e98e3e1Schristos { 7084e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 7094e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 7104e98e3e1Schristos 7114e98e3e1Schristos 7124e98e3e1Schristos /* Record the fields for the semantic handler. */ 713212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0)); 7144e98e3e1Schristos 7154e98e3e1Schristos #undef FLD 7164e98e3e1Schristos return idesc; 7174e98e3e1Schristos } 7184e98e3e1Schristos 7194e98e3e1Schristos extract_sfmt_add: 7204e98e3e1Schristos { 7214e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 7224e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 7234e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 7244e98e3e1Schristos UINT f_r1; 7254e98e3e1Schristos UINT f_r2; 7264e98e3e1Schristos 7274e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 7284e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 7294e98e3e1Schristos 7304e98e3e1Schristos /* Record the fields for the semantic handler. */ 7314e98e3e1Schristos FLD (f_r1) = f_r1; 7324e98e3e1Schristos FLD (f_r2) = f_r2; 7334e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 7344e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 735212397c6Schristos 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)); 7364e98e3e1Schristos 7374e98e3e1Schristos #if WITH_PROFILE_MODEL_P 7384e98e3e1Schristos /* Record the fields for profiling. */ 7394e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 7404e98e3e1Schristos { 7414e98e3e1Schristos FLD (in_dr) = f_r1; 7424e98e3e1Schristos FLD (in_sr) = f_r2; 7434e98e3e1Schristos FLD (out_dr) = f_r1; 7444e98e3e1Schristos } 7454e98e3e1Schristos #endif 7464e98e3e1Schristos #undef FLD 7474e98e3e1Schristos return idesc; 7484e98e3e1Schristos } 7494e98e3e1Schristos 7504e98e3e1Schristos extract_sfmt_add3: 7514e98e3e1Schristos { 7524e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 7534e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 7544e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 7554e98e3e1Schristos UINT f_r1; 7564e98e3e1Schristos UINT f_r2; 7574e98e3e1Schristos INT f_simm16; 7584e98e3e1Schristos 7594e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 7604e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 7614e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 7624e98e3e1Schristos 7634e98e3e1Schristos /* Record the fields for the semantic handler. */ 7644e98e3e1Schristos FLD (f_simm16) = f_simm16; 7654e98e3e1Schristos FLD (f_r2) = f_r2; 7664e98e3e1Schristos FLD (f_r1) = f_r1; 7674e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 7684e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 769212397c6Schristos 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)); 7704e98e3e1Schristos 7714e98e3e1Schristos #if WITH_PROFILE_MODEL_P 7724e98e3e1Schristos /* Record the fields for profiling. */ 7734e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 7744e98e3e1Schristos { 7754e98e3e1Schristos FLD (in_sr) = f_r2; 7764e98e3e1Schristos FLD (out_dr) = f_r1; 7774e98e3e1Schristos } 7784e98e3e1Schristos #endif 7794e98e3e1Schristos #undef FLD 7804e98e3e1Schristos return idesc; 7814e98e3e1Schristos } 7824e98e3e1Schristos 7834e98e3e1Schristos extract_sfmt_and3: 7844e98e3e1Schristos { 7854e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 7864e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 7874e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 7884e98e3e1Schristos UINT f_r1; 7894e98e3e1Schristos UINT f_r2; 7904e98e3e1Schristos UINT f_uimm16; 7914e98e3e1Schristos 7924e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 7934e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 7944e98e3e1Schristos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 7954e98e3e1Schristos 7964e98e3e1Schristos /* Record the fields for the semantic handler. */ 7974e98e3e1Schristos FLD (f_r2) = f_r2; 7984e98e3e1Schristos FLD (f_uimm16) = f_uimm16; 7994e98e3e1Schristos FLD (f_r1) = f_r1; 8004e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 8014e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 802212397c6Schristos 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)); 8034e98e3e1Schristos 8044e98e3e1Schristos #if WITH_PROFILE_MODEL_P 8054e98e3e1Schristos /* Record the fields for profiling. */ 8064e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 8074e98e3e1Schristos { 8084e98e3e1Schristos FLD (in_sr) = f_r2; 8094e98e3e1Schristos FLD (out_dr) = f_r1; 8104e98e3e1Schristos } 8114e98e3e1Schristos #endif 8124e98e3e1Schristos #undef FLD 8134e98e3e1Schristos return idesc; 8144e98e3e1Schristos } 8154e98e3e1Schristos 8164e98e3e1Schristos extract_sfmt_or3: 8174e98e3e1Schristos { 8184e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 8194e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 8204e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 8214e98e3e1Schristos UINT f_r1; 8224e98e3e1Schristos UINT f_r2; 8234e98e3e1Schristos UINT f_uimm16; 8244e98e3e1Schristos 8254e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 8264e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 8274e98e3e1Schristos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 8284e98e3e1Schristos 8294e98e3e1Schristos /* Record the fields for the semantic handler. */ 8304e98e3e1Schristos FLD (f_r2) = f_r2; 8314e98e3e1Schristos FLD (f_uimm16) = f_uimm16; 8324e98e3e1Schristos FLD (f_r1) = f_r1; 8334e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 8344e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 835212397c6Schristos 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)); 8364e98e3e1Schristos 8374e98e3e1Schristos #if WITH_PROFILE_MODEL_P 8384e98e3e1Schristos /* Record the fields for profiling. */ 8394e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 8404e98e3e1Schristos { 8414e98e3e1Schristos FLD (in_sr) = f_r2; 8424e98e3e1Schristos FLD (out_dr) = f_r1; 8434e98e3e1Schristos } 8444e98e3e1Schristos #endif 8454e98e3e1Schristos #undef FLD 8464e98e3e1Schristos return idesc; 8474e98e3e1Schristos } 8484e98e3e1Schristos 8494e98e3e1Schristos extract_sfmt_addi: 8504e98e3e1Schristos { 8514e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 8524e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 8534e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f 8544e98e3e1Schristos UINT f_r1; 8554e98e3e1Schristos INT f_simm8; 8564e98e3e1Schristos 8574e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 8584e98e3e1Schristos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); 8594e98e3e1Schristos 8604e98e3e1Schristos /* Record the fields for the semantic handler. */ 8614e98e3e1Schristos FLD (f_r1) = f_r1; 8624e98e3e1Schristos FLD (f_simm8) = f_simm8; 8634e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 864212397c6Schristos 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)); 8654e98e3e1Schristos 8664e98e3e1Schristos #if WITH_PROFILE_MODEL_P 8674e98e3e1Schristos /* Record the fields for profiling. */ 8684e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 8694e98e3e1Schristos { 8704e98e3e1Schristos FLD (in_dr) = f_r1; 8714e98e3e1Schristos FLD (out_dr) = f_r1; 8724e98e3e1Schristos } 8734e98e3e1Schristos #endif 8744e98e3e1Schristos #undef FLD 8754e98e3e1Schristos return idesc; 8764e98e3e1Schristos } 8774e98e3e1Schristos 8784e98e3e1Schristos extract_sfmt_addv: 8794e98e3e1Schristos { 8804e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 8814e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 8824e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 8834e98e3e1Schristos UINT f_r1; 8844e98e3e1Schristos UINT f_r2; 8854e98e3e1Schristos 8864e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 8874e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 8884e98e3e1Schristos 8894e98e3e1Schristos /* Record the fields for the semantic handler. */ 8904e98e3e1Schristos FLD (f_r1) = f_r1; 8914e98e3e1Schristos FLD (f_r2) = f_r2; 8924e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 8934e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 894212397c6Schristos 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)); 8954e98e3e1Schristos 8964e98e3e1Schristos #if WITH_PROFILE_MODEL_P 8974e98e3e1Schristos /* Record the fields for profiling. */ 8984e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 8994e98e3e1Schristos { 9004e98e3e1Schristos FLD (in_dr) = f_r1; 9014e98e3e1Schristos FLD (in_sr) = f_r2; 9024e98e3e1Schristos FLD (out_dr) = f_r1; 9034e98e3e1Schristos } 9044e98e3e1Schristos #endif 9054e98e3e1Schristos #undef FLD 9064e98e3e1Schristos return idesc; 9074e98e3e1Schristos } 9084e98e3e1Schristos 9094e98e3e1Schristos extract_sfmt_addv3: 9104e98e3e1Schristos { 9114e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 9124e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 9134e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 9144e98e3e1Schristos UINT f_r1; 9154e98e3e1Schristos UINT f_r2; 9164e98e3e1Schristos INT f_simm16; 9174e98e3e1Schristos 9184e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 9194e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 9204e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 9214e98e3e1Schristos 9224e98e3e1Schristos /* Record the fields for the semantic handler. */ 9234e98e3e1Schristos FLD (f_simm16) = f_simm16; 9244e98e3e1Schristos FLD (f_r2) = f_r2; 9254e98e3e1Schristos FLD (f_r1) = f_r1; 9264e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 9274e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 928212397c6Schristos 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)); 9294e98e3e1Schristos 9304e98e3e1Schristos #if WITH_PROFILE_MODEL_P 9314e98e3e1Schristos /* Record the fields for profiling. */ 9324e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 9334e98e3e1Schristos { 9344e98e3e1Schristos FLD (in_sr) = f_r2; 9354e98e3e1Schristos FLD (out_dr) = f_r1; 9364e98e3e1Schristos } 9374e98e3e1Schristos #endif 9384e98e3e1Schristos #undef FLD 9394e98e3e1Schristos return idesc; 9404e98e3e1Schristos } 9414e98e3e1Schristos 9424e98e3e1Schristos extract_sfmt_addx: 9434e98e3e1Schristos { 9444e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 9454e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 9464e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 9474e98e3e1Schristos UINT f_r1; 9484e98e3e1Schristos UINT f_r2; 9494e98e3e1Schristos 9504e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 9514e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 9524e98e3e1Schristos 9534e98e3e1Schristos /* Record the fields for the semantic handler. */ 9544e98e3e1Schristos FLD (f_r1) = f_r1; 9554e98e3e1Schristos FLD (f_r2) = f_r2; 9564e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 9574e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 958212397c6Schristos 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)); 9594e98e3e1Schristos 9604e98e3e1Schristos #if WITH_PROFILE_MODEL_P 9614e98e3e1Schristos /* Record the fields for profiling. */ 9624e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 9634e98e3e1Schristos { 9644e98e3e1Schristos FLD (in_dr) = f_r1; 9654e98e3e1Schristos FLD (in_sr) = f_r2; 9664e98e3e1Schristos FLD (out_dr) = f_r1; 9674e98e3e1Schristos } 9684e98e3e1Schristos #endif 9694e98e3e1Schristos #undef FLD 9704e98e3e1Schristos return idesc; 9714e98e3e1Schristos } 9724e98e3e1Schristos 9734e98e3e1Schristos extract_sfmt_bc8: 9744e98e3e1Schristos { 9754e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 9764e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 9774e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 9784e98e3e1Schristos SI f_disp8; 9794e98e3e1Schristos 980*05fa0856Schristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 9814e98e3e1Schristos 9824e98e3e1Schristos /* Record the fields for the semantic handler. */ 9834e98e3e1Schristos FLD (i_disp8) = f_disp8; 984212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 9854e98e3e1Schristos 9864e98e3e1Schristos #if WITH_PROFILE_MODEL_P 9874e98e3e1Schristos /* Record the fields for profiling. */ 9884e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 9894e98e3e1Schristos { 9904e98e3e1Schristos } 9914e98e3e1Schristos #endif 9924e98e3e1Schristos #undef FLD 9934e98e3e1Schristos return idesc; 9944e98e3e1Schristos } 9954e98e3e1Schristos 9964e98e3e1Schristos extract_sfmt_bc24: 9974e98e3e1Schristos { 9984e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 9994e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 10004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 10014e98e3e1Schristos SI f_disp24; 10024e98e3e1Schristos 1003*05fa0856Schristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 10044e98e3e1Schristos 10054e98e3e1Schristos /* Record the fields for the semantic handler. */ 10064e98e3e1Schristos FLD (i_disp24) = f_disp24; 1007212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 10084e98e3e1Schristos 10094e98e3e1Schristos #if WITH_PROFILE_MODEL_P 10104e98e3e1Schristos /* Record the fields for profiling. */ 10114e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 10124e98e3e1Schristos { 10134e98e3e1Schristos } 10144e98e3e1Schristos #endif 10154e98e3e1Schristos #undef FLD 10164e98e3e1Schristos return idesc; 10174e98e3e1Schristos } 10184e98e3e1Schristos 10194e98e3e1Schristos extract_sfmt_beq: 10204e98e3e1Schristos { 10214e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 10224e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 10234e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 10244e98e3e1Schristos UINT f_r1; 10254e98e3e1Schristos UINT f_r2; 10264e98e3e1Schristos SI f_disp16; 10274e98e3e1Schristos 10284e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 10294e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1030*05fa0856Schristos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc)); 10314e98e3e1Schristos 10324e98e3e1Schristos /* Record the fields for the semantic handler. */ 10334e98e3e1Schristos FLD (f_r1) = f_r1; 10344e98e3e1Schristos FLD (f_r2) = f_r2; 10354e98e3e1Schristos FLD (i_disp16) = f_disp16; 10364e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 10374e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1038212397c6Schristos 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)); 10394e98e3e1Schristos 10404e98e3e1Schristos #if WITH_PROFILE_MODEL_P 10414e98e3e1Schristos /* Record the fields for profiling. */ 10424e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 10434e98e3e1Schristos { 10444e98e3e1Schristos FLD (in_src1) = f_r1; 10454e98e3e1Schristos FLD (in_src2) = f_r2; 10464e98e3e1Schristos } 10474e98e3e1Schristos #endif 10484e98e3e1Schristos #undef FLD 10494e98e3e1Schristos return idesc; 10504e98e3e1Schristos } 10514e98e3e1Schristos 10524e98e3e1Schristos extract_sfmt_beqz: 10534e98e3e1Schristos { 10544e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 10554e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 10564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 10574e98e3e1Schristos UINT f_r2; 10584e98e3e1Schristos SI f_disp16; 10594e98e3e1Schristos 10604e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1061*05fa0856Schristos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc)); 10624e98e3e1Schristos 10634e98e3e1Schristos /* Record the fields for the semantic handler. */ 10644e98e3e1Schristos FLD (f_r2) = f_r2; 10654e98e3e1Schristos FLD (i_disp16) = f_disp16; 10664e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1067212397c6Schristos 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)); 10684e98e3e1Schristos 10694e98e3e1Schristos #if WITH_PROFILE_MODEL_P 10704e98e3e1Schristos /* Record the fields for profiling. */ 10714e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 10724e98e3e1Schristos { 10734e98e3e1Schristos FLD (in_src2) = f_r2; 10744e98e3e1Schristos } 10754e98e3e1Schristos #endif 10764e98e3e1Schristos #undef FLD 10774e98e3e1Schristos return idesc; 10784e98e3e1Schristos } 10794e98e3e1Schristos 10804e98e3e1Schristos extract_sfmt_bl8: 10814e98e3e1Schristos { 10824e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 10834e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 10844e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 10854e98e3e1Schristos SI f_disp8; 10864e98e3e1Schristos 1087*05fa0856Schristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 10884e98e3e1Schristos 10894e98e3e1Schristos /* Record the fields for the semantic handler. */ 10904e98e3e1Schristos FLD (i_disp8) = f_disp8; 1091212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 10924e98e3e1Schristos 10934e98e3e1Schristos #if WITH_PROFILE_MODEL_P 10944e98e3e1Schristos /* Record the fields for profiling. */ 10954e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 10964e98e3e1Schristos { 10974e98e3e1Schristos FLD (out_h_gr_SI_14) = 14; 10984e98e3e1Schristos } 10994e98e3e1Schristos #endif 11004e98e3e1Schristos #undef FLD 11014e98e3e1Schristos return idesc; 11024e98e3e1Schristos } 11034e98e3e1Schristos 11044e98e3e1Schristos extract_sfmt_bl24: 11054e98e3e1Schristos { 11064e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 11074e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 11084e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 11094e98e3e1Schristos SI f_disp24; 11104e98e3e1Schristos 1111*05fa0856Schristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 11124e98e3e1Schristos 11134e98e3e1Schristos /* Record the fields for the semantic handler. */ 11144e98e3e1Schristos FLD (i_disp24) = f_disp24; 1115212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 11164e98e3e1Schristos 11174e98e3e1Schristos #if WITH_PROFILE_MODEL_P 11184e98e3e1Schristos /* Record the fields for profiling. */ 11194e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 11204e98e3e1Schristos { 11214e98e3e1Schristos FLD (out_h_gr_SI_14) = 14; 11224e98e3e1Schristos } 11234e98e3e1Schristos #endif 11244e98e3e1Schristos #undef FLD 11254e98e3e1Schristos return idesc; 11264e98e3e1Schristos } 11274e98e3e1Schristos 11284e98e3e1Schristos extract_sfmt_bcl8: 11294e98e3e1Schristos { 11304e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 11314e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 11324e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 11334e98e3e1Schristos SI f_disp8; 11344e98e3e1Schristos 1135*05fa0856Schristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 11364e98e3e1Schristos 11374e98e3e1Schristos /* Record the fields for the semantic handler. */ 11384e98e3e1Schristos FLD (i_disp8) = f_disp8; 1139212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 11404e98e3e1Schristos 11414e98e3e1Schristos #if WITH_PROFILE_MODEL_P 11424e98e3e1Schristos /* Record the fields for profiling. */ 11434e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 11444e98e3e1Schristos { 11454e98e3e1Schristos FLD (out_h_gr_SI_14) = 14; 11464e98e3e1Schristos } 11474e98e3e1Schristos #endif 11484e98e3e1Schristos #undef FLD 11494e98e3e1Schristos return idesc; 11504e98e3e1Schristos } 11514e98e3e1Schristos 11524e98e3e1Schristos extract_sfmt_bcl24: 11534e98e3e1Schristos { 11544e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 11554e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 11564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 11574e98e3e1Schristos SI f_disp24; 11584e98e3e1Schristos 1159*05fa0856Schristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 11604e98e3e1Schristos 11614e98e3e1Schristos /* Record the fields for the semantic handler. */ 11624e98e3e1Schristos FLD (i_disp24) = f_disp24; 1163212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 11644e98e3e1Schristos 11654e98e3e1Schristos #if WITH_PROFILE_MODEL_P 11664e98e3e1Schristos /* Record the fields for profiling. */ 11674e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 11684e98e3e1Schristos { 11694e98e3e1Schristos FLD (out_h_gr_SI_14) = 14; 11704e98e3e1Schristos } 11714e98e3e1Schristos #endif 11724e98e3e1Schristos #undef FLD 11734e98e3e1Schristos return idesc; 11744e98e3e1Schristos } 11754e98e3e1Schristos 11764e98e3e1Schristos extract_sfmt_bra8: 11774e98e3e1Schristos { 11784e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 11794e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 11804e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 11814e98e3e1Schristos SI f_disp8; 11824e98e3e1Schristos 1183*05fa0856Schristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 11844e98e3e1Schristos 11854e98e3e1Schristos /* Record the fields for the semantic handler. */ 11864e98e3e1Schristos FLD (i_disp8) = f_disp8; 1187212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 11884e98e3e1Schristos 11894e98e3e1Schristos #if WITH_PROFILE_MODEL_P 11904e98e3e1Schristos /* Record the fields for profiling. */ 11914e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 11924e98e3e1Schristos { 11934e98e3e1Schristos } 11944e98e3e1Schristos #endif 11954e98e3e1Schristos #undef FLD 11964e98e3e1Schristos return idesc; 11974e98e3e1Schristos } 11984e98e3e1Schristos 11994e98e3e1Schristos extract_sfmt_bra24: 12004e98e3e1Schristos { 12014e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 12024e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 12034e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 12044e98e3e1Schristos SI f_disp24; 12054e98e3e1Schristos 1206*05fa0856Schristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 12074e98e3e1Schristos 12084e98e3e1Schristos /* Record the fields for the semantic handler. */ 12094e98e3e1Schristos FLD (i_disp24) = f_disp24; 1210212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 12114e98e3e1Schristos 12124e98e3e1Schristos #if WITH_PROFILE_MODEL_P 12134e98e3e1Schristos /* Record the fields for profiling. */ 12144e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 12154e98e3e1Schristos { 12164e98e3e1Schristos } 12174e98e3e1Schristos #endif 12184e98e3e1Schristos #undef FLD 12194e98e3e1Schristos return idesc; 12204e98e3e1Schristos } 12214e98e3e1Schristos 12224e98e3e1Schristos extract_sfmt_cmp: 12234e98e3e1Schristos { 12244e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 12254e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 12264e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 12274e98e3e1Schristos UINT f_r1; 12284e98e3e1Schristos UINT f_r2; 12294e98e3e1Schristos 12304e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 12314e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 12324e98e3e1Schristos 12334e98e3e1Schristos /* Record the fields for the semantic handler. */ 12344e98e3e1Schristos FLD (f_r1) = f_r1; 12354e98e3e1Schristos FLD (f_r2) = f_r2; 12364e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 12374e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1238212397c6Schristos 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)); 12394e98e3e1Schristos 12404e98e3e1Schristos #if WITH_PROFILE_MODEL_P 12414e98e3e1Schristos /* Record the fields for profiling. */ 12424e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 12434e98e3e1Schristos { 12444e98e3e1Schristos FLD (in_src1) = f_r1; 12454e98e3e1Schristos FLD (in_src2) = f_r2; 12464e98e3e1Schristos } 12474e98e3e1Schristos #endif 12484e98e3e1Schristos #undef FLD 12494e98e3e1Schristos return idesc; 12504e98e3e1Schristos } 12514e98e3e1Schristos 12524e98e3e1Schristos extract_sfmt_cmpi: 12534e98e3e1Schristos { 12544e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 12554e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 12564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 12574e98e3e1Schristos UINT f_r2; 12584e98e3e1Schristos INT f_simm16; 12594e98e3e1Schristos 12604e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 12614e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 12624e98e3e1Schristos 12634e98e3e1Schristos /* Record the fields for the semantic handler. */ 12644e98e3e1Schristos FLD (f_simm16) = f_simm16; 12654e98e3e1Schristos FLD (f_r2) = f_r2; 12664e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1267212397c6Schristos 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)); 12684e98e3e1Schristos 12694e98e3e1Schristos #if WITH_PROFILE_MODEL_P 12704e98e3e1Schristos /* Record the fields for profiling. */ 12714e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 12724e98e3e1Schristos { 12734e98e3e1Schristos FLD (in_src2) = f_r2; 12744e98e3e1Schristos } 12754e98e3e1Schristos #endif 12764e98e3e1Schristos #undef FLD 12774e98e3e1Schristos return idesc; 12784e98e3e1Schristos } 12794e98e3e1Schristos 12804e98e3e1Schristos extract_sfmt_cmpz: 12814e98e3e1Schristos { 12824e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 12834e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 12844e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 12854e98e3e1Schristos UINT f_r2; 12864e98e3e1Schristos 12874e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 12884e98e3e1Schristos 12894e98e3e1Schristos /* Record the fields for the semantic handler. */ 12904e98e3e1Schristos FLD (f_r2) = f_r2; 12914e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1292212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpz", "f_r2 0x%x", 'x', f_r2, "src2 0x%x", 'x', f_r2, (char *) 0)); 12934e98e3e1Schristos 12944e98e3e1Schristos #if WITH_PROFILE_MODEL_P 12954e98e3e1Schristos /* Record the fields for profiling. */ 12964e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 12974e98e3e1Schristos { 12984e98e3e1Schristos FLD (in_src2) = f_r2; 12994e98e3e1Schristos } 13004e98e3e1Schristos #endif 13014e98e3e1Schristos #undef FLD 13024e98e3e1Schristos return idesc; 13034e98e3e1Schristos } 13044e98e3e1Schristos 13054e98e3e1Schristos extract_sfmt_div: 13064e98e3e1Schristos { 13074e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 13084e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 13094e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 13104e98e3e1Schristos UINT f_r1; 13114e98e3e1Schristos UINT f_r2; 13124e98e3e1Schristos 13134e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 13144e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 13154e98e3e1Schristos 13164e98e3e1Schristos /* Record the fields for the semantic handler. */ 13174e98e3e1Schristos FLD (f_r1) = f_r1; 13184e98e3e1Schristos FLD (f_r2) = f_r2; 13194e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 13204e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1321212397c6Schristos 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)); 13224e98e3e1Schristos 13234e98e3e1Schristos #if WITH_PROFILE_MODEL_P 13244e98e3e1Schristos /* Record the fields for profiling. */ 13254e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 13264e98e3e1Schristos { 13274e98e3e1Schristos FLD (in_dr) = f_r1; 13284e98e3e1Schristos FLD (in_sr) = f_r2; 13294e98e3e1Schristos FLD (out_dr) = f_r1; 13304e98e3e1Schristos } 13314e98e3e1Schristos #endif 13324e98e3e1Schristos #undef FLD 13334e98e3e1Schristos return idesc; 13344e98e3e1Schristos } 13354e98e3e1Schristos 13364e98e3e1Schristos extract_sfmt_jc: 13374e98e3e1Schristos { 13384e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 13394e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 13404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 13414e98e3e1Schristos UINT f_r2; 13424e98e3e1Schristos 13434e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 13444e98e3e1Schristos 13454e98e3e1Schristos /* Record the fields for the semantic handler. */ 13464e98e3e1Schristos FLD (f_r2) = f_r2; 13474e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1348212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jc", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0)); 13494e98e3e1Schristos 13504e98e3e1Schristos #if WITH_PROFILE_MODEL_P 13514e98e3e1Schristos /* Record the fields for profiling. */ 13524e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 13534e98e3e1Schristos { 13544e98e3e1Schristos FLD (in_sr) = f_r2; 13554e98e3e1Schristos } 13564e98e3e1Schristos #endif 13574e98e3e1Schristos #undef FLD 13584e98e3e1Schristos return idesc; 13594e98e3e1Schristos } 13604e98e3e1Schristos 13614e98e3e1Schristos extract_sfmt_jl: 13624e98e3e1Schristos { 13634e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 13644e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 13654e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 13664e98e3e1Schristos UINT f_r2; 13674e98e3e1Schristos 13684e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 13694e98e3e1Schristos 13704e98e3e1Schristos /* Record the fields for the semantic handler. */ 13714e98e3e1Schristos FLD (f_r2) = f_r2; 13724e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1373212397c6Schristos 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)); 13744e98e3e1Schristos 13754e98e3e1Schristos #if WITH_PROFILE_MODEL_P 13764e98e3e1Schristos /* Record the fields for profiling. */ 13774e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 13784e98e3e1Schristos { 13794e98e3e1Schristos FLD (in_sr) = f_r2; 13804e98e3e1Schristos FLD (out_h_gr_SI_14) = 14; 13814e98e3e1Schristos } 13824e98e3e1Schristos #endif 13834e98e3e1Schristos #undef FLD 13844e98e3e1Schristos return idesc; 13854e98e3e1Schristos } 13864e98e3e1Schristos 13874e98e3e1Schristos extract_sfmt_jmp: 13884e98e3e1Schristos { 13894e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 13904e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 13914e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 13924e98e3e1Schristos UINT f_r2; 13934e98e3e1Schristos 13944e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 13954e98e3e1Schristos 13964e98e3e1Schristos /* Record the fields for the semantic handler. */ 13974e98e3e1Schristos FLD (f_r2) = f_r2; 13984e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1399212397c6Schristos 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)); 14004e98e3e1Schristos 14014e98e3e1Schristos #if WITH_PROFILE_MODEL_P 14024e98e3e1Schristos /* Record the fields for profiling. */ 14034e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 14044e98e3e1Schristos { 14054e98e3e1Schristos FLD (in_sr) = f_r2; 14064e98e3e1Schristos } 14074e98e3e1Schristos #endif 14084e98e3e1Schristos #undef FLD 14094e98e3e1Schristos return idesc; 14104e98e3e1Schristos } 14114e98e3e1Schristos 14124e98e3e1Schristos extract_sfmt_ld: 14134e98e3e1Schristos { 14144e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 14154e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 14164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 14174e98e3e1Schristos UINT f_r1; 14184e98e3e1Schristos UINT f_r2; 14194e98e3e1Schristos 14204e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 14214e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 14224e98e3e1Schristos 14234e98e3e1Schristos /* Record the fields for the semantic handler. */ 14244e98e3e1Schristos FLD (f_r2) = f_r2; 14254e98e3e1Schristos FLD (f_r1) = f_r1; 14264e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 14274e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1428212397c6Schristos 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)); 14294e98e3e1Schristos 14304e98e3e1Schristos #if WITH_PROFILE_MODEL_P 14314e98e3e1Schristos /* Record the fields for profiling. */ 14324e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 14334e98e3e1Schristos { 14344e98e3e1Schristos FLD (in_sr) = f_r2; 14354e98e3e1Schristos FLD (out_dr) = f_r1; 14364e98e3e1Schristos } 14374e98e3e1Schristos #endif 14384e98e3e1Schristos #undef FLD 14394e98e3e1Schristos return idesc; 14404e98e3e1Schristos } 14414e98e3e1Schristos 14424e98e3e1Schristos extract_sfmt_ld_d: 14434e98e3e1Schristos { 14444e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 14454e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 14464e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 14474e98e3e1Schristos UINT f_r1; 14484e98e3e1Schristos UINT f_r2; 14494e98e3e1Schristos INT f_simm16; 14504e98e3e1Schristos 14514e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 14524e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 14534e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 14544e98e3e1Schristos 14554e98e3e1Schristos /* Record the fields for the semantic handler. */ 14564e98e3e1Schristos FLD (f_simm16) = f_simm16; 14574e98e3e1Schristos FLD (f_r2) = f_r2; 14584e98e3e1Schristos FLD (f_r1) = f_r1; 14594e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 14604e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1461212397c6Schristos 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)); 14624e98e3e1Schristos 14634e98e3e1Schristos #if WITH_PROFILE_MODEL_P 14644e98e3e1Schristos /* Record the fields for profiling. */ 14654e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 14664e98e3e1Schristos { 14674e98e3e1Schristos FLD (in_sr) = f_r2; 14684e98e3e1Schristos FLD (out_dr) = f_r1; 14694e98e3e1Schristos } 14704e98e3e1Schristos #endif 14714e98e3e1Schristos #undef FLD 14724e98e3e1Schristos return idesc; 14734e98e3e1Schristos } 14744e98e3e1Schristos 14754e98e3e1Schristos extract_sfmt_ldb: 14764e98e3e1Schristos { 14774e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 14784e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 14794e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 14804e98e3e1Schristos UINT f_r1; 14814e98e3e1Schristos UINT f_r2; 14824e98e3e1Schristos 14834e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 14844e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 14854e98e3e1Schristos 14864e98e3e1Schristos /* Record the fields for the semantic handler. */ 14874e98e3e1Schristos FLD (f_r2) = f_r2; 14884e98e3e1Schristos FLD (f_r1) = f_r1; 14894e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 14904e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1491212397c6Schristos 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)); 14924e98e3e1Schristos 14934e98e3e1Schristos #if WITH_PROFILE_MODEL_P 14944e98e3e1Schristos /* Record the fields for profiling. */ 14954e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 14964e98e3e1Schristos { 14974e98e3e1Schristos FLD (in_sr) = f_r2; 14984e98e3e1Schristos FLD (out_dr) = f_r1; 14994e98e3e1Schristos } 15004e98e3e1Schristos #endif 15014e98e3e1Schristos #undef FLD 15024e98e3e1Schristos return idesc; 15034e98e3e1Schristos } 15044e98e3e1Schristos 15054e98e3e1Schristos extract_sfmt_ldb_d: 15064e98e3e1Schristos { 15074e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 15084e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 15094e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 15104e98e3e1Schristos UINT f_r1; 15114e98e3e1Schristos UINT f_r2; 15124e98e3e1Schristos INT f_simm16; 15134e98e3e1Schristos 15144e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 15154e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 15164e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 15174e98e3e1Schristos 15184e98e3e1Schristos /* Record the fields for the semantic handler. */ 15194e98e3e1Schristos FLD (f_simm16) = f_simm16; 15204e98e3e1Schristos FLD (f_r2) = f_r2; 15214e98e3e1Schristos FLD (f_r1) = f_r1; 15224e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 15234e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1524212397c6Schristos 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)); 15254e98e3e1Schristos 15264e98e3e1Schristos #if WITH_PROFILE_MODEL_P 15274e98e3e1Schristos /* Record the fields for profiling. */ 15284e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 15294e98e3e1Schristos { 15304e98e3e1Schristos FLD (in_sr) = f_r2; 15314e98e3e1Schristos FLD (out_dr) = f_r1; 15324e98e3e1Schristos } 15334e98e3e1Schristos #endif 15344e98e3e1Schristos #undef FLD 15354e98e3e1Schristos return idesc; 15364e98e3e1Schristos } 15374e98e3e1Schristos 15384e98e3e1Schristos extract_sfmt_ldh: 15394e98e3e1Schristos { 15404e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 15414e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 15424e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 15434e98e3e1Schristos UINT f_r1; 15444e98e3e1Schristos UINT f_r2; 15454e98e3e1Schristos 15464e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 15474e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 15484e98e3e1Schristos 15494e98e3e1Schristos /* Record the fields for the semantic handler. */ 15504e98e3e1Schristos FLD (f_r2) = f_r2; 15514e98e3e1Schristos FLD (f_r1) = f_r1; 15524e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 15534e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1554212397c6Schristos 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)); 15554e98e3e1Schristos 15564e98e3e1Schristos #if WITH_PROFILE_MODEL_P 15574e98e3e1Schristos /* Record the fields for profiling. */ 15584e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 15594e98e3e1Schristos { 15604e98e3e1Schristos FLD (in_sr) = f_r2; 15614e98e3e1Schristos FLD (out_dr) = f_r1; 15624e98e3e1Schristos } 15634e98e3e1Schristos #endif 15644e98e3e1Schristos #undef FLD 15654e98e3e1Schristos return idesc; 15664e98e3e1Schristos } 15674e98e3e1Schristos 15684e98e3e1Schristos extract_sfmt_ldh_d: 15694e98e3e1Schristos { 15704e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 15714e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 15724e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 15734e98e3e1Schristos UINT f_r1; 15744e98e3e1Schristos UINT f_r2; 15754e98e3e1Schristos INT f_simm16; 15764e98e3e1Schristos 15774e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 15784e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 15794e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 15804e98e3e1Schristos 15814e98e3e1Schristos /* Record the fields for the semantic handler. */ 15824e98e3e1Schristos FLD (f_simm16) = f_simm16; 15834e98e3e1Schristos FLD (f_r2) = f_r2; 15844e98e3e1Schristos FLD (f_r1) = f_r1; 15854e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 15864e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1587212397c6Schristos 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)); 15884e98e3e1Schristos 15894e98e3e1Schristos #if WITH_PROFILE_MODEL_P 15904e98e3e1Schristos /* Record the fields for profiling. */ 15914e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 15924e98e3e1Schristos { 15934e98e3e1Schristos FLD (in_sr) = f_r2; 15944e98e3e1Schristos FLD (out_dr) = f_r1; 15954e98e3e1Schristos } 15964e98e3e1Schristos #endif 15974e98e3e1Schristos #undef FLD 15984e98e3e1Schristos return idesc; 15994e98e3e1Schristos } 16004e98e3e1Schristos 16014e98e3e1Schristos extract_sfmt_ld_plus: 16024e98e3e1Schristos { 16034e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 16044e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 16054e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 16064e98e3e1Schristos UINT f_r1; 16074e98e3e1Schristos UINT f_r2; 16084e98e3e1Schristos 16094e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 16104e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 16114e98e3e1Schristos 16124e98e3e1Schristos /* Record the fields for the semantic handler. */ 16134e98e3e1Schristos FLD (f_r2) = f_r2; 16144e98e3e1Schristos FLD (f_r1) = f_r1; 16154e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 16164e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1617212397c6Schristos 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)); 16184e98e3e1Schristos 16194e98e3e1Schristos #if WITH_PROFILE_MODEL_P 16204e98e3e1Schristos /* Record the fields for profiling. */ 16214e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 16224e98e3e1Schristos { 16234e98e3e1Schristos FLD (in_sr) = f_r2; 16244e98e3e1Schristos FLD (out_dr) = f_r1; 16254e98e3e1Schristos FLD (out_sr) = f_r2; 16264e98e3e1Schristos } 16274e98e3e1Schristos #endif 16284e98e3e1Schristos #undef FLD 16294e98e3e1Schristos return idesc; 16304e98e3e1Schristos } 16314e98e3e1Schristos 16324e98e3e1Schristos extract_sfmt_ld24: 16334e98e3e1Schristos { 16344e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 16354e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 16364e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld24.f 16374e98e3e1Schristos UINT f_r1; 16384e98e3e1Schristos UINT f_uimm24; 16394e98e3e1Schristos 16404e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 16414e98e3e1Schristos f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24); 16424e98e3e1Schristos 16434e98e3e1Schristos /* Record the fields for the semantic handler. */ 16444e98e3e1Schristos FLD (f_r1) = f_r1; 16454e98e3e1Schristos FLD (i_uimm24) = f_uimm24; 16464e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1647212397c6Schristos 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)); 16484e98e3e1Schristos 16494e98e3e1Schristos #if WITH_PROFILE_MODEL_P 16504e98e3e1Schristos /* Record the fields for profiling. */ 16514e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 16524e98e3e1Schristos { 16534e98e3e1Schristos FLD (out_dr) = f_r1; 16544e98e3e1Schristos } 16554e98e3e1Schristos #endif 16564e98e3e1Schristos #undef FLD 16574e98e3e1Schristos return idesc; 16584e98e3e1Schristos } 16594e98e3e1Schristos 16604e98e3e1Schristos extract_sfmt_ldi8: 16614e98e3e1Schristos { 16624e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 16634e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 16644e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f 16654e98e3e1Schristos UINT f_r1; 16664e98e3e1Schristos INT f_simm8; 16674e98e3e1Schristos 16684e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 16694e98e3e1Schristos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); 16704e98e3e1Schristos 16714e98e3e1Schristos /* Record the fields for the semantic handler. */ 16724e98e3e1Schristos FLD (f_simm8) = f_simm8; 16734e98e3e1Schristos FLD (f_r1) = f_r1; 16744e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1675212397c6Schristos 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)); 16764e98e3e1Schristos 16774e98e3e1Schristos #if WITH_PROFILE_MODEL_P 16784e98e3e1Schristos /* Record the fields for profiling. */ 16794e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 16804e98e3e1Schristos { 16814e98e3e1Schristos FLD (out_dr) = f_r1; 16824e98e3e1Schristos } 16834e98e3e1Schristos #endif 16844e98e3e1Schristos #undef FLD 16854e98e3e1Schristos return idesc; 16864e98e3e1Schristos } 16874e98e3e1Schristos 16884e98e3e1Schristos extract_sfmt_ldi16: 16894e98e3e1Schristos { 16904e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 16914e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 16924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 16934e98e3e1Schristos UINT f_r1; 16944e98e3e1Schristos INT f_simm16; 16954e98e3e1Schristos 16964e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 16974e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 16984e98e3e1Schristos 16994e98e3e1Schristos /* Record the fields for the semantic handler. */ 17004e98e3e1Schristos FLD (f_simm16) = f_simm16; 17014e98e3e1Schristos FLD (f_r1) = f_r1; 17024e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1703212397c6Schristos 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)); 17044e98e3e1Schristos 17054e98e3e1Schristos #if WITH_PROFILE_MODEL_P 17064e98e3e1Schristos /* Record the fields for profiling. */ 17074e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 17084e98e3e1Schristos { 17094e98e3e1Schristos FLD (out_dr) = f_r1; 17104e98e3e1Schristos } 17114e98e3e1Schristos #endif 17124e98e3e1Schristos #undef FLD 17134e98e3e1Schristos return idesc; 17144e98e3e1Schristos } 17154e98e3e1Schristos 17164e98e3e1Schristos extract_sfmt_lock: 17174e98e3e1Schristos { 17184e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 17194e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 17204e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 17214e98e3e1Schristos UINT f_r1; 17224e98e3e1Schristos UINT f_r2; 17234e98e3e1Schristos 17244e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 17254e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 17264e98e3e1Schristos 17274e98e3e1Schristos /* Record the fields for the semantic handler. */ 17284e98e3e1Schristos FLD (f_r2) = f_r2; 17294e98e3e1Schristos FLD (f_r1) = f_r1; 17304e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 17314e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1732212397c6Schristos 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)); 17334e98e3e1Schristos 17344e98e3e1Schristos #if WITH_PROFILE_MODEL_P 17354e98e3e1Schristos /* Record the fields for profiling. */ 17364e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 17374e98e3e1Schristos { 17384e98e3e1Schristos FLD (in_sr) = f_r2; 17394e98e3e1Schristos FLD (out_dr) = f_r1; 17404e98e3e1Schristos } 17414e98e3e1Schristos #endif 17424e98e3e1Schristos #undef FLD 17434e98e3e1Schristos return idesc; 17444e98e3e1Schristos } 17454e98e3e1Schristos 17464e98e3e1Schristos extract_sfmt_machi_a: 17474e98e3e1Schristos { 17484e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 17494e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 17504e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 17514e98e3e1Schristos UINT f_r1; 17524e98e3e1Schristos UINT f_acc; 17534e98e3e1Schristos UINT f_r2; 17544e98e3e1Schristos 17554e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 17564e98e3e1Schristos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1); 17574e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 17584e98e3e1Schristos 17594e98e3e1Schristos /* Record the fields for the semantic handler. */ 17604e98e3e1Schristos FLD (f_acc) = f_acc; 17614e98e3e1Schristos FLD (f_r1) = f_r1; 17624e98e3e1Schristos FLD (f_r2) = f_r2; 17634e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 17644e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1765212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_machi_a", "f_acc 0x%x", 'x', f_acc, "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)); 17664e98e3e1Schristos 17674e98e3e1Schristos #if WITH_PROFILE_MODEL_P 17684e98e3e1Schristos /* Record the fields for profiling. */ 17694e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 17704e98e3e1Schristos { 17714e98e3e1Schristos FLD (in_src1) = f_r1; 17724e98e3e1Schristos FLD (in_src2) = f_r2; 17734e98e3e1Schristos } 17744e98e3e1Schristos #endif 17754e98e3e1Schristos #undef FLD 17764e98e3e1Schristos return idesc; 17774e98e3e1Schristos } 17784e98e3e1Schristos 17794e98e3e1Schristos extract_sfmt_mulhi_a: 17804e98e3e1Schristos { 17814e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 17824e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 17834e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 17844e98e3e1Schristos UINT f_r1; 17854e98e3e1Schristos UINT f_acc; 17864e98e3e1Schristos UINT f_r2; 17874e98e3e1Schristos 17884e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 17894e98e3e1Schristos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1); 17904e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 17914e98e3e1Schristos 17924e98e3e1Schristos /* Record the fields for the semantic handler. */ 17934e98e3e1Schristos FLD (f_r1) = f_r1; 17944e98e3e1Schristos FLD (f_r2) = f_r2; 17954e98e3e1Schristos FLD (f_acc) = f_acc; 17964e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 17974e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1798212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulhi_a", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "f_acc 0x%x", 'x', f_acc, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0)); 17994e98e3e1Schristos 18004e98e3e1Schristos #if WITH_PROFILE_MODEL_P 18014e98e3e1Schristos /* Record the fields for profiling. */ 18024e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 18034e98e3e1Schristos { 18044e98e3e1Schristos FLD (in_src1) = f_r1; 18054e98e3e1Schristos FLD (in_src2) = f_r2; 18064e98e3e1Schristos } 18074e98e3e1Schristos #endif 18084e98e3e1Schristos #undef FLD 18094e98e3e1Schristos return idesc; 18104e98e3e1Schristos } 18114e98e3e1Schristos 18124e98e3e1Schristos extract_sfmt_mv: 18134e98e3e1Schristos { 18144e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 18154e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 18164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 18174e98e3e1Schristos UINT f_r1; 18184e98e3e1Schristos UINT f_r2; 18194e98e3e1Schristos 18204e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 18214e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 18224e98e3e1Schristos 18234e98e3e1Schristos /* Record the fields for the semantic handler. */ 18244e98e3e1Schristos FLD (f_r2) = f_r2; 18254e98e3e1Schristos FLD (f_r1) = f_r1; 18264e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 18274e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1828212397c6Schristos 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)); 18294e98e3e1Schristos 18304e98e3e1Schristos #if WITH_PROFILE_MODEL_P 18314e98e3e1Schristos /* Record the fields for profiling. */ 18324e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 18334e98e3e1Schristos { 18344e98e3e1Schristos FLD (in_sr) = f_r2; 18354e98e3e1Schristos FLD (out_dr) = f_r1; 18364e98e3e1Schristos } 18374e98e3e1Schristos #endif 18384e98e3e1Schristos #undef FLD 18394e98e3e1Schristos return idesc; 18404e98e3e1Schristos } 18414e98e3e1Schristos 18424e98e3e1Schristos extract_sfmt_mvfachi_a: 18434e98e3e1Schristos { 18444e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 18454e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 18464e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 18474e98e3e1Schristos UINT f_r1; 18484e98e3e1Schristos UINT f_accs; 18494e98e3e1Schristos 18504e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 18514e98e3e1Schristos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 18524e98e3e1Schristos 18534e98e3e1Schristos /* Record the fields for the semantic handler. */ 18544e98e3e1Schristos FLD (f_accs) = f_accs; 18554e98e3e1Schristos FLD (f_r1) = f_r1; 18564e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1857212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfachi_a", "f_accs 0x%x", 'x', f_accs, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0)); 18584e98e3e1Schristos 18594e98e3e1Schristos #if WITH_PROFILE_MODEL_P 18604e98e3e1Schristos /* Record the fields for profiling. */ 18614e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 18624e98e3e1Schristos { 18634e98e3e1Schristos FLD (out_dr) = f_r1; 18644e98e3e1Schristos } 18654e98e3e1Schristos #endif 18664e98e3e1Schristos #undef FLD 18674e98e3e1Schristos return idesc; 18684e98e3e1Schristos } 18694e98e3e1Schristos 18704e98e3e1Schristos extract_sfmt_mvfc: 18714e98e3e1Schristos { 18724e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 18734e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 18744e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 18754e98e3e1Schristos UINT f_r1; 18764e98e3e1Schristos UINT f_r2; 18774e98e3e1Schristos 18784e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 18794e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 18804e98e3e1Schristos 18814e98e3e1Schristos /* Record the fields for the semantic handler. */ 18824e98e3e1Schristos FLD (f_r2) = f_r2; 18834e98e3e1Schristos FLD (f_r1) = f_r1; 18844e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1885212397c6Schristos 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)); 18864e98e3e1Schristos 18874e98e3e1Schristos #if WITH_PROFILE_MODEL_P 18884e98e3e1Schristos /* Record the fields for profiling. */ 18894e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 18904e98e3e1Schristos { 18914e98e3e1Schristos FLD (out_dr) = f_r1; 18924e98e3e1Schristos } 18934e98e3e1Schristos #endif 18944e98e3e1Schristos #undef FLD 18954e98e3e1Schristos return idesc; 18964e98e3e1Schristos } 18974e98e3e1Schristos 18984e98e3e1Schristos extract_sfmt_mvtachi_a: 18994e98e3e1Schristos { 19004e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 19014e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 19024e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 19034e98e3e1Schristos UINT f_r1; 19044e98e3e1Schristos UINT f_accs; 19054e98e3e1Schristos 19064e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 19074e98e3e1Schristos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 19084e98e3e1Schristos 19094e98e3e1Schristos /* Record the fields for the semantic handler. */ 19104e98e3e1Schristos FLD (f_accs) = f_accs; 19114e98e3e1Schristos FLD (f_r1) = f_r1; 19124e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1913212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtachi_a", "f_accs 0x%x", 'x', f_accs, "f_r1 0x%x", 'x', f_r1, "src1 0x%x", 'x', f_r1, (char *) 0)); 19144e98e3e1Schristos 19154e98e3e1Schristos #if WITH_PROFILE_MODEL_P 19164e98e3e1Schristos /* Record the fields for profiling. */ 19174e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 19184e98e3e1Schristos { 19194e98e3e1Schristos FLD (in_src1) = f_r1; 19204e98e3e1Schristos } 19214e98e3e1Schristos #endif 19224e98e3e1Schristos #undef FLD 19234e98e3e1Schristos return idesc; 19244e98e3e1Schristos } 19254e98e3e1Schristos 19264e98e3e1Schristos extract_sfmt_mvtc: 19274e98e3e1Schristos { 19284e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 19294e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 19304e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 19314e98e3e1Schristos UINT f_r1; 19324e98e3e1Schristos UINT f_r2; 19334e98e3e1Schristos 19344e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 19354e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 19364e98e3e1Schristos 19374e98e3e1Schristos /* Record the fields for the semantic handler. */ 19384e98e3e1Schristos FLD (f_r2) = f_r2; 19394e98e3e1Schristos FLD (f_r1) = f_r1; 19404e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1941212397c6Schristos 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)); 19424e98e3e1Schristos 19434e98e3e1Schristos #if WITH_PROFILE_MODEL_P 19444e98e3e1Schristos /* Record the fields for profiling. */ 19454e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 19464e98e3e1Schristos { 19474e98e3e1Schristos FLD (in_sr) = f_r2; 19484e98e3e1Schristos } 19494e98e3e1Schristos #endif 19504e98e3e1Schristos #undef FLD 19514e98e3e1Schristos return idesc; 19524e98e3e1Schristos } 19534e98e3e1Schristos 19544e98e3e1Schristos extract_sfmt_nop: 19554e98e3e1Schristos { 19564e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 19574e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 19584e98e3e1Schristos 19594e98e3e1Schristos 19604e98e3e1Schristos /* Record the fields for the semantic handler. */ 1961212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0)); 19624e98e3e1Schristos 19634e98e3e1Schristos #undef FLD 19644e98e3e1Schristos return idesc; 19654e98e3e1Schristos } 19664e98e3e1Schristos 19674e98e3e1Schristos extract_sfmt_rac_dsi: 19684e98e3e1Schristos { 19694e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 19704e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 19714e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 19724e98e3e1Schristos UINT f_accd; 19734e98e3e1Schristos UINT f_accs; 19744e98e3e1Schristos SI f_imm1; 19754e98e3e1Schristos 19764e98e3e1Schristos f_accd = EXTRACT_MSB0_UINT (insn, 16, 4, 2); 19774e98e3e1Schristos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 19784e98e3e1Schristos f_imm1 = ((EXTRACT_MSB0_UINT (insn, 16, 15, 1)) + (1)); 19794e98e3e1Schristos 19804e98e3e1Schristos /* Record the fields for the semantic handler. */ 19814e98e3e1Schristos FLD (f_accs) = f_accs; 19824e98e3e1Schristos FLD (f_imm1) = f_imm1; 19834e98e3e1Schristos FLD (f_accd) = f_accd; 1984212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rac_dsi", "f_accs 0x%x", 'x', f_accs, "f_imm1 0x%x", 'x', f_imm1, "f_accd 0x%x", 'x', f_accd, (char *) 0)); 19854e98e3e1Schristos 19864e98e3e1Schristos #undef FLD 19874e98e3e1Schristos return idesc; 19884e98e3e1Schristos } 19894e98e3e1Schristos 19904e98e3e1Schristos extract_sfmt_rte: 19914e98e3e1Schristos { 19924e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 19934e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 19944e98e3e1Schristos 19954e98e3e1Schristos 19964e98e3e1Schristos /* Record the fields for the semantic handler. */ 1997212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0)); 19984e98e3e1Schristos 19994e98e3e1Schristos #if WITH_PROFILE_MODEL_P 20004e98e3e1Schristos /* Record the fields for profiling. */ 20014e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 20024e98e3e1Schristos { 20034e98e3e1Schristos } 20044e98e3e1Schristos #endif 20054e98e3e1Schristos #undef FLD 20064e98e3e1Schristos return idesc; 20074e98e3e1Schristos } 20084e98e3e1Schristos 20094e98e3e1Schristos extract_sfmt_seth: 20104e98e3e1Schristos { 20114e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 20124e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 20134e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f 20144e98e3e1Schristos UINT f_r1; 20154e98e3e1Schristos UINT f_hi16; 20164e98e3e1Schristos 20174e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 20184e98e3e1Schristos f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 20194e98e3e1Schristos 20204e98e3e1Schristos /* Record the fields for the semantic handler. */ 20214e98e3e1Schristos FLD (f_hi16) = f_hi16; 20224e98e3e1Schristos FLD (f_r1) = f_r1; 20234e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2024212397c6Schristos 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)); 20254e98e3e1Schristos 20264e98e3e1Schristos #if WITH_PROFILE_MODEL_P 20274e98e3e1Schristos /* Record the fields for profiling. */ 20284e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 20294e98e3e1Schristos { 20304e98e3e1Schristos FLD (out_dr) = f_r1; 20314e98e3e1Schristos } 20324e98e3e1Schristos #endif 20334e98e3e1Schristos #undef FLD 20344e98e3e1Schristos return idesc; 20354e98e3e1Schristos } 20364e98e3e1Schristos 20374e98e3e1Schristos extract_sfmt_sll3: 20384e98e3e1Schristos { 20394e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 20404e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 20414e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 20424e98e3e1Schristos UINT f_r1; 20434e98e3e1Schristos UINT f_r2; 20444e98e3e1Schristos INT f_simm16; 20454e98e3e1Schristos 20464e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 20474e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 20484e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 20494e98e3e1Schristos 20504e98e3e1Schristos /* Record the fields for the semantic handler. */ 20514e98e3e1Schristos FLD (f_simm16) = f_simm16; 20524e98e3e1Schristos FLD (f_r2) = f_r2; 20534e98e3e1Schristos FLD (f_r1) = f_r1; 20544e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 20554e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2056212397c6Schristos 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)); 20574e98e3e1Schristos 20584e98e3e1Schristos #if WITH_PROFILE_MODEL_P 20594e98e3e1Schristos /* Record the fields for profiling. */ 20604e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 20614e98e3e1Schristos { 20624e98e3e1Schristos FLD (in_sr) = f_r2; 20634e98e3e1Schristos FLD (out_dr) = f_r1; 20644e98e3e1Schristos } 20654e98e3e1Schristos #endif 20664e98e3e1Schristos #undef FLD 20674e98e3e1Schristos return idesc; 20684e98e3e1Schristos } 20694e98e3e1Schristos 20704e98e3e1Schristos extract_sfmt_slli: 20714e98e3e1Schristos { 20724e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 20734e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 20744e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f 20754e98e3e1Schristos UINT f_r1; 20764e98e3e1Schristos UINT f_uimm5; 20774e98e3e1Schristos 20784e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 20794e98e3e1Schristos f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5); 20804e98e3e1Schristos 20814e98e3e1Schristos /* Record the fields for the semantic handler. */ 20824e98e3e1Schristos FLD (f_r1) = f_r1; 20834e98e3e1Schristos FLD (f_uimm5) = f_uimm5; 20844e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2085212397c6Schristos 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)); 20864e98e3e1Schristos 20874e98e3e1Schristos #if WITH_PROFILE_MODEL_P 20884e98e3e1Schristos /* Record the fields for profiling. */ 20894e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 20904e98e3e1Schristos { 20914e98e3e1Schristos FLD (in_dr) = f_r1; 20924e98e3e1Schristos FLD (out_dr) = f_r1; 20934e98e3e1Schristos } 20944e98e3e1Schristos #endif 20954e98e3e1Schristos #undef FLD 20964e98e3e1Schristos return idesc; 20974e98e3e1Schristos } 20984e98e3e1Schristos 20994e98e3e1Schristos extract_sfmt_st: 21004e98e3e1Schristos { 21014e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 21024e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 21034e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 21044e98e3e1Schristos UINT f_r1; 21054e98e3e1Schristos UINT f_r2; 21064e98e3e1Schristos 21074e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 21084e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 21094e98e3e1Schristos 21104e98e3e1Schristos /* Record the fields for the semantic handler. */ 21114e98e3e1Schristos FLD (f_r1) = f_r1; 21124e98e3e1Schristos FLD (f_r2) = f_r2; 21134e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 21144e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2115212397c6Schristos 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)); 21164e98e3e1Schristos 21174e98e3e1Schristos #if WITH_PROFILE_MODEL_P 21184e98e3e1Schristos /* Record the fields for profiling. */ 21194e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 21204e98e3e1Schristos { 21214e98e3e1Schristos FLD (in_src1) = f_r1; 21224e98e3e1Schristos FLD (in_src2) = f_r2; 21234e98e3e1Schristos } 21244e98e3e1Schristos #endif 21254e98e3e1Schristos #undef FLD 21264e98e3e1Schristos return idesc; 21274e98e3e1Schristos } 21284e98e3e1Schristos 21294e98e3e1Schristos extract_sfmt_st_d: 21304e98e3e1Schristos { 21314e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 21324e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 21334e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 21344e98e3e1Schristos UINT f_r1; 21354e98e3e1Schristos UINT f_r2; 21364e98e3e1Schristos INT f_simm16; 21374e98e3e1Schristos 21384e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 21394e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 21404e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 21414e98e3e1Schristos 21424e98e3e1Schristos /* Record the fields for the semantic handler. */ 21434e98e3e1Schristos FLD (f_simm16) = f_simm16; 21444e98e3e1Schristos FLD (f_r1) = f_r1; 21454e98e3e1Schristos FLD (f_r2) = f_r2; 21464e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 21474e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2148212397c6Schristos 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)); 21494e98e3e1Schristos 21504e98e3e1Schristos #if WITH_PROFILE_MODEL_P 21514e98e3e1Schristos /* Record the fields for profiling. */ 21524e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 21534e98e3e1Schristos { 21544e98e3e1Schristos FLD (in_src1) = f_r1; 21554e98e3e1Schristos FLD (in_src2) = f_r2; 21564e98e3e1Schristos } 21574e98e3e1Schristos #endif 21584e98e3e1Schristos #undef FLD 21594e98e3e1Schristos return idesc; 21604e98e3e1Schristos } 21614e98e3e1Schristos 21624e98e3e1Schristos extract_sfmt_stb: 21634e98e3e1Schristos { 21644e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 21654e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 21664e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 21674e98e3e1Schristos UINT f_r1; 21684e98e3e1Schristos UINT f_r2; 21694e98e3e1Schristos 21704e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 21714e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 21724e98e3e1Schristos 21734e98e3e1Schristos /* Record the fields for the semantic handler. */ 21744e98e3e1Schristos FLD (f_r1) = f_r1; 21754e98e3e1Schristos FLD (f_r2) = f_r2; 21764e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 21774e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2178212397c6Schristos 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)); 21794e98e3e1Schristos 21804e98e3e1Schristos #if WITH_PROFILE_MODEL_P 21814e98e3e1Schristos /* Record the fields for profiling. */ 21824e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 21834e98e3e1Schristos { 21844e98e3e1Schristos FLD (in_src1) = f_r1; 21854e98e3e1Schristos FLD (in_src2) = f_r2; 21864e98e3e1Schristos } 21874e98e3e1Schristos #endif 21884e98e3e1Schristos #undef FLD 21894e98e3e1Schristos return idesc; 21904e98e3e1Schristos } 21914e98e3e1Schristos 21924e98e3e1Schristos extract_sfmt_stb_d: 21934e98e3e1Schristos { 21944e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 21954e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 21964e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 21974e98e3e1Schristos UINT f_r1; 21984e98e3e1Schristos UINT f_r2; 21994e98e3e1Schristos INT f_simm16; 22004e98e3e1Schristos 22014e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 22024e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 22034e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 22044e98e3e1Schristos 22054e98e3e1Schristos /* Record the fields for the semantic handler. */ 22064e98e3e1Schristos FLD (f_simm16) = f_simm16; 22074e98e3e1Schristos FLD (f_r1) = f_r1; 22084e98e3e1Schristos FLD (f_r2) = f_r2; 22094e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 22104e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2211212397c6Schristos 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)); 22124e98e3e1Schristos 22134e98e3e1Schristos #if WITH_PROFILE_MODEL_P 22144e98e3e1Schristos /* Record the fields for profiling. */ 22154e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 22164e98e3e1Schristos { 22174e98e3e1Schristos FLD (in_src1) = f_r1; 22184e98e3e1Schristos FLD (in_src2) = f_r2; 22194e98e3e1Schristos } 22204e98e3e1Schristos #endif 22214e98e3e1Schristos #undef FLD 22224e98e3e1Schristos return idesc; 22234e98e3e1Schristos } 22244e98e3e1Schristos 22254e98e3e1Schristos extract_sfmt_sth: 22264e98e3e1Schristos { 22274e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 22284e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 22294e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 22304e98e3e1Schristos UINT f_r1; 22314e98e3e1Schristos UINT f_r2; 22324e98e3e1Schristos 22334e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 22344e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 22354e98e3e1Schristos 22364e98e3e1Schristos /* Record the fields for the semantic handler. */ 22374e98e3e1Schristos FLD (f_r1) = f_r1; 22384e98e3e1Schristos FLD (f_r2) = f_r2; 22394e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 22404e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2241212397c6Schristos 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)); 22424e98e3e1Schristos 22434e98e3e1Schristos #if WITH_PROFILE_MODEL_P 22444e98e3e1Schristos /* Record the fields for profiling. */ 22454e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 22464e98e3e1Schristos { 22474e98e3e1Schristos FLD (in_src1) = f_r1; 22484e98e3e1Schristos FLD (in_src2) = f_r2; 22494e98e3e1Schristos } 22504e98e3e1Schristos #endif 22514e98e3e1Schristos #undef FLD 22524e98e3e1Schristos return idesc; 22534e98e3e1Schristos } 22544e98e3e1Schristos 22554e98e3e1Schristos extract_sfmt_sth_d: 22564e98e3e1Schristos { 22574e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 22584e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 22594e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 22604e98e3e1Schristos UINT f_r1; 22614e98e3e1Schristos UINT f_r2; 22624e98e3e1Schristos INT f_simm16; 22634e98e3e1Schristos 22644e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 22654e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 22664e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 22674e98e3e1Schristos 22684e98e3e1Schristos /* Record the fields for the semantic handler. */ 22694e98e3e1Schristos FLD (f_simm16) = f_simm16; 22704e98e3e1Schristos FLD (f_r1) = f_r1; 22714e98e3e1Schristos FLD (f_r2) = f_r2; 22724e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 22734e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2274212397c6Schristos 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)); 22754e98e3e1Schristos 22764e98e3e1Schristos #if WITH_PROFILE_MODEL_P 22774e98e3e1Schristos /* Record the fields for profiling. */ 22784e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 22794e98e3e1Schristos { 22804e98e3e1Schristos FLD (in_src1) = f_r1; 22814e98e3e1Schristos FLD (in_src2) = f_r2; 22824e98e3e1Schristos } 22834e98e3e1Schristos #endif 22844e98e3e1Schristos #undef FLD 22854e98e3e1Schristos return idesc; 22864e98e3e1Schristos } 22874e98e3e1Schristos 22884e98e3e1Schristos extract_sfmt_st_plus: 22894e98e3e1Schristos { 22904e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 22914e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 22924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 22934e98e3e1Schristos UINT f_r1; 22944e98e3e1Schristos UINT f_r2; 22954e98e3e1Schristos 22964e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 22974e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 22984e98e3e1Schristos 22994e98e3e1Schristos /* Record the fields for the semantic handler. */ 23004e98e3e1Schristos FLD (f_r1) = f_r1; 23014e98e3e1Schristos FLD (f_r2) = f_r2; 23024e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 23034e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2304212397c6Schristos 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)); 23054e98e3e1Schristos 23064e98e3e1Schristos #if WITH_PROFILE_MODEL_P 23074e98e3e1Schristos /* Record the fields for profiling. */ 23084e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 23094e98e3e1Schristos { 23104e98e3e1Schristos FLD (in_src1) = f_r1; 23114e98e3e1Schristos FLD (in_src2) = f_r2; 23124e98e3e1Schristos FLD (out_src2) = f_r2; 23134e98e3e1Schristos } 23144e98e3e1Schristos #endif 23154e98e3e1Schristos #undef FLD 23164e98e3e1Schristos return idesc; 23174e98e3e1Schristos } 23184e98e3e1Schristos 23194e98e3e1Schristos extract_sfmt_sth_plus: 23204e98e3e1Schristos { 23214e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 23224e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 23234e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 23244e98e3e1Schristos UINT f_r1; 23254e98e3e1Schristos UINT f_r2; 23264e98e3e1Schristos 23274e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 23284e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 23294e98e3e1Schristos 23304e98e3e1Schristos /* Record the fields for the semantic handler. */ 23314e98e3e1Schristos FLD (f_r1) = f_r1; 23324e98e3e1Schristos FLD (f_r2) = f_r2; 23334e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 23344e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2335212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth_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)); 23364e98e3e1Schristos 23374e98e3e1Schristos #if WITH_PROFILE_MODEL_P 23384e98e3e1Schristos /* Record the fields for profiling. */ 23394e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 23404e98e3e1Schristos { 23414e98e3e1Schristos FLD (in_src1) = f_r1; 23424e98e3e1Schristos FLD (in_src2) = f_r2; 23434e98e3e1Schristos FLD (out_src2) = f_r2; 23444e98e3e1Schristos } 23454e98e3e1Schristos #endif 23464e98e3e1Schristos #undef FLD 23474e98e3e1Schristos return idesc; 23484e98e3e1Schristos } 23494e98e3e1Schristos 23504e98e3e1Schristos extract_sfmt_stb_plus: 23514e98e3e1Schristos { 23524e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 23534e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 23544e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 23554e98e3e1Schristos UINT f_r1; 23564e98e3e1Schristos UINT f_r2; 23574e98e3e1Schristos 23584e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 23594e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 23604e98e3e1Schristos 23614e98e3e1Schristos /* Record the fields for the semantic handler. */ 23624e98e3e1Schristos FLD (f_r1) = f_r1; 23634e98e3e1Schristos FLD (f_r2) = f_r2; 23644e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 23654e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2366212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb_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)); 23674e98e3e1Schristos 23684e98e3e1Schristos #if WITH_PROFILE_MODEL_P 23694e98e3e1Schristos /* Record the fields for profiling. */ 23704e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 23714e98e3e1Schristos { 23724e98e3e1Schristos FLD (in_src1) = f_r1; 23734e98e3e1Schristos FLD (in_src2) = f_r2; 23744e98e3e1Schristos FLD (out_src2) = f_r2; 23754e98e3e1Schristos } 23764e98e3e1Schristos #endif 23774e98e3e1Schristos #undef FLD 23784e98e3e1Schristos return idesc; 23794e98e3e1Schristos } 23804e98e3e1Schristos 23814e98e3e1Schristos extract_sfmt_trap: 23824e98e3e1Schristos { 23834e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 23844e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 23854e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_trap.f 23864e98e3e1Schristos UINT f_uimm4; 23874e98e3e1Schristos 23884e98e3e1Schristos f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 23894e98e3e1Schristos 23904e98e3e1Schristos /* Record the fields for the semantic handler. */ 23914e98e3e1Schristos FLD (f_uimm4) = f_uimm4; 2392212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0)); 23934e98e3e1Schristos 23944e98e3e1Schristos #if WITH_PROFILE_MODEL_P 23954e98e3e1Schristos /* Record the fields for profiling. */ 23964e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 23974e98e3e1Schristos { 23984e98e3e1Schristos } 23994e98e3e1Schristos #endif 24004e98e3e1Schristos #undef FLD 24014e98e3e1Schristos return idesc; 24024e98e3e1Schristos } 24034e98e3e1Schristos 24044e98e3e1Schristos extract_sfmt_unlock: 24054e98e3e1Schristos { 24064e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 24074e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 24084e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 24094e98e3e1Schristos UINT f_r1; 24104e98e3e1Schristos UINT f_r2; 24114e98e3e1Schristos 24124e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 24134e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 24144e98e3e1Schristos 24154e98e3e1Schristos /* Record the fields for the semantic handler. */ 24164e98e3e1Schristos FLD (f_r1) = f_r1; 24174e98e3e1Schristos FLD (f_r2) = f_r2; 24184e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 24194e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2420212397c6Schristos 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)); 24214e98e3e1Schristos 24224e98e3e1Schristos #if WITH_PROFILE_MODEL_P 24234e98e3e1Schristos /* Record the fields for profiling. */ 24244e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 24254e98e3e1Schristos { 24264e98e3e1Schristos FLD (in_src1) = f_r1; 24274e98e3e1Schristos FLD (in_src2) = f_r2; 24284e98e3e1Schristos } 24294e98e3e1Schristos #endif 24304e98e3e1Schristos #undef FLD 24314e98e3e1Schristos return idesc; 24324e98e3e1Schristos } 24334e98e3e1Schristos 24344e98e3e1Schristos extract_sfmt_satb: 24354e98e3e1Schristos { 24364e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 24374e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 24384e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 24394e98e3e1Schristos UINT f_r1; 24404e98e3e1Schristos UINT f_r2; 24414e98e3e1Schristos 24424e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 24434e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 24444e98e3e1Schristos 24454e98e3e1Schristos /* Record the fields for the semantic handler. */ 24464e98e3e1Schristos FLD (f_r2) = f_r2; 24474e98e3e1Schristos FLD (f_r1) = f_r1; 24484e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 24494e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2450212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_satb", "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)); 24514e98e3e1Schristos 24524e98e3e1Schristos #if WITH_PROFILE_MODEL_P 24534e98e3e1Schristos /* Record the fields for profiling. */ 24544e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 24554e98e3e1Schristos { 24564e98e3e1Schristos FLD (in_sr) = f_r2; 24574e98e3e1Schristos FLD (out_dr) = f_r1; 24584e98e3e1Schristos } 24594e98e3e1Schristos #endif 24604e98e3e1Schristos #undef FLD 24614e98e3e1Schristos return idesc; 24624e98e3e1Schristos } 24634e98e3e1Schristos 24644e98e3e1Schristos extract_sfmt_sat: 24654e98e3e1Schristos { 24664e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 24674e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 24684e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 24694e98e3e1Schristos UINT f_r1; 24704e98e3e1Schristos UINT f_r2; 24714e98e3e1Schristos 24724e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 24734e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 24744e98e3e1Schristos 24754e98e3e1Schristos /* Record the fields for the semantic handler. */ 24764e98e3e1Schristos FLD (f_r2) = f_r2; 24774e98e3e1Schristos FLD (f_r1) = f_r1; 24784e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 24794e98e3e1Schristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2480212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sat", "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)); 24814e98e3e1Schristos 24824e98e3e1Schristos #if WITH_PROFILE_MODEL_P 24834e98e3e1Schristos /* Record the fields for profiling. */ 24844e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 24854e98e3e1Schristos { 24864e98e3e1Schristos FLD (in_sr) = f_r2; 24874e98e3e1Schristos FLD (out_dr) = f_r1; 24884e98e3e1Schristos } 24894e98e3e1Schristos #endif 24904e98e3e1Schristos #undef FLD 24914e98e3e1Schristos return idesc; 24924e98e3e1Schristos } 24934e98e3e1Schristos 24944e98e3e1Schristos extract_sfmt_sadd: 24954e98e3e1Schristos { 24964e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 24974e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 24984e98e3e1Schristos 24994e98e3e1Schristos 25004e98e3e1Schristos /* Record the fields for the semantic handler. */ 2501212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sadd", (char *) 0)); 25024e98e3e1Schristos 25034e98e3e1Schristos #undef FLD 25044e98e3e1Schristos return idesc; 25054e98e3e1Schristos } 25064e98e3e1Schristos 25074e98e3e1Schristos extract_sfmt_macwu1: 25084e98e3e1Schristos { 25094e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 25104e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 25114e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 25124e98e3e1Schristos UINT f_r1; 25134e98e3e1Schristos UINT f_r2; 25144e98e3e1Schristos 25154e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 25164e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 25174e98e3e1Schristos 25184e98e3e1Schristos /* Record the fields for the semantic handler. */ 25194e98e3e1Schristos FLD (f_r1) = f_r1; 25204e98e3e1Schristos FLD (f_r2) = f_r2; 25214e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 25224e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2523212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_macwu1", "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)); 25244e98e3e1Schristos 25254e98e3e1Schristos #if WITH_PROFILE_MODEL_P 25264e98e3e1Schristos /* Record the fields for profiling. */ 25274e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 25284e98e3e1Schristos { 25294e98e3e1Schristos FLD (in_src1) = f_r1; 25304e98e3e1Schristos FLD (in_src2) = f_r2; 25314e98e3e1Schristos } 25324e98e3e1Schristos #endif 25334e98e3e1Schristos #undef FLD 25344e98e3e1Schristos return idesc; 25354e98e3e1Schristos } 25364e98e3e1Schristos 25374e98e3e1Schristos extract_sfmt_msblo: 25384e98e3e1Schristos { 25394e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 25404e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 25414e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 25424e98e3e1Schristos UINT f_r1; 25434e98e3e1Schristos UINT f_r2; 25444e98e3e1Schristos 25454e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 25464e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 25474e98e3e1Schristos 25484e98e3e1Schristos /* Record the fields for the semantic handler. */ 25494e98e3e1Schristos FLD (f_r1) = f_r1; 25504e98e3e1Schristos FLD (f_r2) = f_r2; 25514e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 25524e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2553212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_msblo", "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)); 25544e98e3e1Schristos 25554e98e3e1Schristos #if WITH_PROFILE_MODEL_P 25564e98e3e1Schristos /* Record the fields for profiling. */ 25574e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 25584e98e3e1Schristos { 25594e98e3e1Schristos FLD (in_src1) = f_r1; 25604e98e3e1Schristos FLD (in_src2) = f_r2; 25614e98e3e1Schristos } 25624e98e3e1Schristos #endif 25634e98e3e1Schristos #undef FLD 25644e98e3e1Schristos return idesc; 25654e98e3e1Schristos } 25664e98e3e1Schristos 25674e98e3e1Schristos extract_sfmt_mulwu1: 25684e98e3e1Schristos { 25694e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 25704e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 25714e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 25724e98e3e1Schristos UINT f_r1; 25734e98e3e1Schristos UINT f_r2; 25744e98e3e1Schristos 25754e98e3e1Schristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 25764e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 25774e98e3e1Schristos 25784e98e3e1Schristos /* Record the fields for the semantic handler. */ 25794e98e3e1Schristos FLD (f_r1) = f_r1; 25804e98e3e1Schristos FLD (f_r2) = f_r2; 25814e98e3e1Schristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 25824e98e3e1Schristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2583212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulwu1", "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)); 25844e98e3e1Schristos 25854e98e3e1Schristos #if WITH_PROFILE_MODEL_P 25864e98e3e1Schristos /* Record the fields for profiling. */ 25874e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 25884e98e3e1Schristos { 25894e98e3e1Schristos FLD (in_src1) = f_r1; 25904e98e3e1Schristos FLD (in_src2) = f_r2; 25914e98e3e1Schristos } 25924e98e3e1Schristos #endif 25934e98e3e1Schristos #undef FLD 25944e98e3e1Schristos return idesc; 25954e98e3e1Schristos } 25964e98e3e1Schristos 25974e98e3e1Schristos extract_sfmt_sc: 25984e98e3e1Schristos { 25994e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 26004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 26014e98e3e1Schristos 26024e98e3e1Schristos 26034e98e3e1Schristos /* Record the fields for the semantic handler. */ 2604212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sc", (char *) 0)); 26054e98e3e1Schristos 26064e98e3e1Schristos #undef FLD 26074e98e3e1Schristos return idesc; 26084e98e3e1Schristos } 26094e98e3e1Schristos 26104e98e3e1Schristos extract_sfmt_clrpsw: 26114e98e3e1Schristos { 26124e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 26134e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 26144e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 26154e98e3e1Schristos UINT f_uimm8; 26164e98e3e1Schristos 26174e98e3e1Schristos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); 26184e98e3e1Schristos 26194e98e3e1Schristos /* Record the fields for the semantic handler. */ 26204e98e3e1Schristos FLD (f_uimm8) = f_uimm8; 2621212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0)); 26224e98e3e1Schristos 26234e98e3e1Schristos #undef FLD 26244e98e3e1Schristos return idesc; 26254e98e3e1Schristos } 26264e98e3e1Schristos 26274e98e3e1Schristos extract_sfmt_setpsw: 26284e98e3e1Schristos { 26294e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 26304e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 26314e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 26324e98e3e1Schristos UINT f_uimm8; 26334e98e3e1Schristos 26344e98e3e1Schristos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); 26354e98e3e1Schristos 26364e98e3e1Schristos /* Record the fields for the semantic handler. */ 26374e98e3e1Schristos FLD (f_uimm8) = f_uimm8; 2638212397c6Schristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0)); 26394e98e3e1Schristos 26404e98e3e1Schristos #undef FLD 26414e98e3e1Schristos return idesc; 26424e98e3e1Schristos } 26434e98e3e1Schristos 26444e98e3e1Schristos extract_sfmt_bset: 26454e98e3e1Schristos { 26464e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 26474e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 26484e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 26494e98e3e1Schristos UINT f_uimm3; 26504e98e3e1Schristos UINT f_r2; 26514e98e3e1Schristos INT f_simm16; 26524e98e3e1Schristos 26534e98e3e1Schristos f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3); 26544e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 26554e98e3e1Schristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 26564e98e3e1Schristos 26574e98e3e1Schristos /* Record the fields for the semantic handler. */ 26584e98e3e1Schristos FLD (f_simm16) = f_simm16; 26594e98e3e1Schristos FLD (f_r2) = f_r2; 26604e98e3e1Schristos FLD (f_uimm3) = f_uimm3; 26614e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2662212397c6Schristos 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)); 26634e98e3e1Schristos 26644e98e3e1Schristos #if WITH_PROFILE_MODEL_P 26654e98e3e1Schristos /* Record the fields for profiling. */ 26664e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 26674e98e3e1Schristos { 26684e98e3e1Schristos FLD (in_sr) = f_r2; 26694e98e3e1Schristos } 26704e98e3e1Schristos #endif 26714e98e3e1Schristos #undef FLD 26724e98e3e1Schristos return idesc; 26734e98e3e1Schristos } 26744e98e3e1Schristos 26754e98e3e1Schristos extract_sfmt_btst: 26764e98e3e1Schristos { 26774e98e3e1Schristos const IDESC *idesc = &m32rxf_insn_data[itype]; 26784e98e3e1Schristos CGEN_INSN_WORD insn = entire_insn; 26794e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 26804e98e3e1Schristos UINT f_uimm3; 26814e98e3e1Schristos UINT f_r2; 26824e98e3e1Schristos 26834e98e3e1Schristos f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3); 26844e98e3e1Schristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 26854e98e3e1Schristos 26864e98e3e1Schristos /* Record the fields for the semantic handler. */ 26874e98e3e1Schristos FLD (f_r2) = f_r2; 26884e98e3e1Schristos FLD (f_uimm3) = f_uimm3; 26894e98e3e1Schristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2690212397c6Schristos 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)); 26914e98e3e1Schristos 26924e98e3e1Schristos #if WITH_PROFILE_MODEL_P 26934e98e3e1Schristos /* Record the fields for profiling. */ 26944e98e3e1Schristos if (PROFILE_MODEL_P (current_cpu)) 26954e98e3e1Schristos { 26964e98e3e1Schristos FLD (in_sr) = f_r2; 26974e98e3e1Schristos } 26984e98e3e1Schristos #endif 26994e98e3e1Schristos #undef FLD 27004e98e3e1Schristos return idesc; 27014e98e3e1Schristos } 27024e98e3e1Schristos 27034e98e3e1Schristos } 2704