1a5a4af3bSchristos /* Simulator instruction decoder for m32rxf. 2a5a4af3bSchristos 3a5a4af3bSchristos THIS FILE IS MACHINE GENERATED WITH CGEN. 4a5a4af3bSchristos 5*8b657b07Schristos Copyright 1996-2023 Free Software Foundation, Inc. 6a5a4af3bSchristos 7a5a4af3bSchristos This file is part of the GNU simulators. 8a5a4af3bSchristos 9a5a4af3bSchristos This file is free software; you can redistribute it and/or modify 10a5a4af3bSchristos it under the terms of the GNU General Public License as published by 11a5a4af3bSchristos the Free Software Foundation; either version 3, or (at your option) 12a5a4af3bSchristos any later version. 13a5a4af3bSchristos 14a5a4af3bSchristos It is distributed in the hope that it will be useful, but WITHOUT 15a5a4af3bSchristos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16a5a4af3bSchristos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17a5a4af3bSchristos License for more details. 18a5a4af3bSchristos 19a5a4af3bSchristos You should have received a copy of the GNU General Public License along 20a5a4af3bSchristos with this program; if not, see <http://www.gnu.org/licenses/>. 21a5a4af3bSchristos 22a5a4af3bSchristos */ 23a5a4af3bSchristos 24a5a4af3bSchristos #define WANT_CPU m32rxf 25a5a4af3bSchristos #define WANT_CPU_M32RXF 26a5a4af3bSchristos 27a5a4af3bSchristos #include "sim-main.h" 28a5a4af3bSchristos #include "sim-assert.h" 29a5a4af3bSchristos 30a5a4af3bSchristos /* Insn can't be executed in parallel. 31a5a4af3bSchristos Or is that "do NOt Pass to Air defense Radar"? :-) */ 32a5a4af3bSchristos #define NOPAR (-1) 33a5a4af3bSchristos 34a5a4af3bSchristos /* The instruction descriptor array. 35a5a4af3bSchristos This is computed at runtime. Space for it is not malloc'd to save a 36a5a4af3bSchristos teensy bit of cpu in the decoder. Moving it to malloc space is trivial 37a5a4af3bSchristos but won't be done until necessary (we don't currently support the runtime 38a5a4af3bSchristos addition of instructions nor an SMP machine with different cpus). */ 39a5a4af3bSchristos static IDESC m32rxf_insn_data[M32RXF_INSN__MAX]; 40a5a4af3bSchristos 41a5a4af3bSchristos /* Commas between elements are contained in the macros. 42a5a4af3bSchristos Some of these are conditionally compiled out. */ 43a5a4af3bSchristos 44a5a4af3bSchristos static const struct insn_sem m32rxf_insn_sem[] = 45a5a4af3bSchristos { 46a5a4af3bSchristos { VIRTUAL_INSN_X_INVALID, M32RXF_INSN_X_INVALID, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 47a5a4af3bSchristos { VIRTUAL_INSN_X_AFTER, M32RXF_INSN_X_AFTER, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 48a5a4af3bSchristos { VIRTUAL_INSN_X_BEFORE, M32RXF_INSN_X_BEFORE, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 49a5a4af3bSchristos { VIRTUAL_INSN_X_CTI_CHAIN, M32RXF_INSN_X_CTI_CHAIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 50a5a4af3bSchristos { VIRTUAL_INSN_X_CHAIN, M32RXF_INSN_X_CHAIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 51a5a4af3bSchristos { VIRTUAL_INSN_X_BEGIN, M32RXF_INSN_X_BEGIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR }, 52a5a4af3bSchristos { M32R_INSN_ADD, M32RXF_INSN_ADD, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_ADD, M32RXF_INSN_WRITE_ADD }, 53a5a4af3bSchristos { M32R_INSN_ADD3, M32RXF_INSN_ADD3, M32RXF_SFMT_ADD3, NOPAR, NOPAR }, 54a5a4af3bSchristos { M32R_INSN_AND, M32RXF_INSN_AND, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_AND, M32RXF_INSN_WRITE_AND }, 55a5a4af3bSchristos { M32R_INSN_AND3, M32RXF_INSN_AND3, M32RXF_SFMT_AND3, NOPAR, NOPAR }, 56a5a4af3bSchristos { M32R_INSN_OR, M32RXF_INSN_OR, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_OR, M32RXF_INSN_WRITE_OR }, 57a5a4af3bSchristos { M32R_INSN_OR3, M32RXF_INSN_OR3, M32RXF_SFMT_OR3, NOPAR, NOPAR }, 58a5a4af3bSchristos { M32R_INSN_XOR, M32RXF_INSN_XOR, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_XOR, M32RXF_INSN_WRITE_XOR }, 59a5a4af3bSchristos { M32R_INSN_XOR3, M32RXF_INSN_XOR3, M32RXF_SFMT_AND3, NOPAR, NOPAR }, 60a5a4af3bSchristos { M32R_INSN_ADDI, M32RXF_INSN_ADDI, M32RXF_SFMT_ADDI, M32RXF_INSN_PAR_ADDI, M32RXF_INSN_WRITE_ADDI }, 61a5a4af3bSchristos { M32R_INSN_ADDV, M32RXF_INSN_ADDV, M32RXF_SFMT_ADDV, M32RXF_INSN_PAR_ADDV, M32RXF_INSN_WRITE_ADDV }, 62a5a4af3bSchristos { M32R_INSN_ADDV3, M32RXF_INSN_ADDV3, M32RXF_SFMT_ADDV3, NOPAR, NOPAR }, 63a5a4af3bSchristos { M32R_INSN_ADDX, M32RXF_INSN_ADDX, M32RXF_SFMT_ADDX, M32RXF_INSN_PAR_ADDX, M32RXF_INSN_WRITE_ADDX }, 64a5a4af3bSchristos { M32R_INSN_BC8, M32RXF_INSN_BC8, M32RXF_SFMT_BC8, M32RXF_INSN_PAR_BC8, M32RXF_INSN_WRITE_BC8 }, 65a5a4af3bSchristos { M32R_INSN_BC24, M32RXF_INSN_BC24, M32RXF_SFMT_BC24, NOPAR, NOPAR }, 66a5a4af3bSchristos { M32R_INSN_BEQ, M32RXF_INSN_BEQ, M32RXF_SFMT_BEQ, NOPAR, NOPAR }, 67a5a4af3bSchristos { M32R_INSN_BEQZ, M32RXF_INSN_BEQZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 68a5a4af3bSchristos { M32R_INSN_BGEZ, M32RXF_INSN_BGEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 69a5a4af3bSchristos { M32R_INSN_BGTZ, M32RXF_INSN_BGTZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 70a5a4af3bSchristos { M32R_INSN_BLEZ, M32RXF_INSN_BLEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 71a5a4af3bSchristos { M32R_INSN_BLTZ, M32RXF_INSN_BLTZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 72a5a4af3bSchristos { M32R_INSN_BNEZ, M32RXF_INSN_BNEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR }, 73a5a4af3bSchristos { M32R_INSN_BL8, M32RXF_INSN_BL8, M32RXF_SFMT_BL8, M32RXF_INSN_PAR_BL8, M32RXF_INSN_WRITE_BL8 }, 74a5a4af3bSchristos { M32R_INSN_BL24, M32RXF_INSN_BL24, M32RXF_SFMT_BL24, NOPAR, NOPAR }, 75a5a4af3bSchristos { M32R_INSN_BCL8, M32RXF_INSN_BCL8, M32RXF_SFMT_BCL8, M32RXF_INSN_PAR_BCL8, M32RXF_INSN_WRITE_BCL8 }, 76a5a4af3bSchristos { M32R_INSN_BCL24, M32RXF_INSN_BCL24, M32RXF_SFMT_BCL24, NOPAR, NOPAR }, 77a5a4af3bSchristos { M32R_INSN_BNC8, M32RXF_INSN_BNC8, M32RXF_SFMT_BC8, M32RXF_INSN_PAR_BNC8, M32RXF_INSN_WRITE_BNC8 }, 78a5a4af3bSchristos { M32R_INSN_BNC24, M32RXF_INSN_BNC24, M32RXF_SFMT_BC24, NOPAR, NOPAR }, 79a5a4af3bSchristos { M32R_INSN_BNE, M32RXF_INSN_BNE, M32RXF_SFMT_BEQ, NOPAR, NOPAR }, 80a5a4af3bSchristos { M32R_INSN_BRA8, M32RXF_INSN_BRA8, M32RXF_SFMT_BRA8, M32RXF_INSN_PAR_BRA8, M32RXF_INSN_WRITE_BRA8 }, 81a5a4af3bSchristos { M32R_INSN_BRA24, M32RXF_INSN_BRA24, M32RXF_SFMT_BRA24, NOPAR, NOPAR }, 82a5a4af3bSchristos { M32R_INSN_BNCL8, M32RXF_INSN_BNCL8, M32RXF_SFMT_BCL8, M32RXF_INSN_PAR_BNCL8, M32RXF_INSN_WRITE_BNCL8 }, 83a5a4af3bSchristos { M32R_INSN_BNCL24, M32RXF_INSN_BNCL24, M32RXF_SFMT_BCL24, NOPAR, NOPAR }, 84a5a4af3bSchristos { M32R_INSN_CMP, M32RXF_INSN_CMP, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMP, M32RXF_INSN_WRITE_CMP }, 85a5a4af3bSchristos { M32R_INSN_CMPI, M32RXF_INSN_CMPI, M32RXF_SFMT_CMPI, NOPAR, NOPAR }, 86a5a4af3bSchristos { M32R_INSN_CMPU, M32RXF_INSN_CMPU, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMPU, M32RXF_INSN_WRITE_CMPU }, 87a5a4af3bSchristos { M32R_INSN_CMPUI, M32RXF_INSN_CMPUI, M32RXF_SFMT_CMPI, NOPAR, NOPAR }, 88a5a4af3bSchristos { M32R_INSN_CMPEQ, M32RXF_INSN_CMPEQ, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMPEQ, M32RXF_INSN_WRITE_CMPEQ }, 89a5a4af3bSchristos { M32R_INSN_CMPZ, M32RXF_INSN_CMPZ, M32RXF_SFMT_CMPZ, M32RXF_INSN_PAR_CMPZ, M32RXF_INSN_WRITE_CMPZ }, 90a5a4af3bSchristos { M32R_INSN_DIV, M32RXF_INSN_DIV, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 91a5a4af3bSchristos { M32R_INSN_DIVU, M32RXF_INSN_DIVU, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 92a5a4af3bSchristos { M32R_INSN_REM, M32RXF_INSN_REM, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 93a5a4af3bSchristos { M32R_INSN_REMU, M32RXF_INSN_REMU, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 94a5a4af3bSchristos { M32R_INSN_DIVH, M32RXF_INSN_DIVH, M32RXF_SFMT_DIV, NOPAR, NOPAR }, 95a5a4af3bSchristos { M32R_INSN_JC, M32RXF_INSN_JC, M32RXF_SFMT_JC, M32RXF_INSN_PAR_JC, M32RXF_INSN_WRITE_JC }, 96a5a4af3bSchristos { M32R_INSN_JNC, M32RXF_INSN_JNC, M32RXF_SFMT_JC, M32RXF_INSN_PAR_JNC, M32RXF_INSN_WRITE_JNC }, 97a5a4af3bSchristos { M32R_INSN_JL, M32RXF_INSN_JL, M32RXF_SFMT_JL, M32RXF_INSN_PAR_JL, M32RXF_INSN_WRITE_JL }, 98a5a4af3bSchristos { M32R_INSN_JMP, M32RXF_INSN_JMP, M32RXF_SFMT_JMP, M32RXF_INSN_PAR_JMP, M32RXF_INSN_WRITE_JMP }, 99a5a4af3bSchristos { M32R_INSN_LD, M32RXF_INSN_LD, M32RXF_SFMT_LD, M32RXF_INSN_PAR_LD, M32RXF_INSN_WRITE_LD }, 100a5a4af3bSchristos { M32R_INSN_LD_D, M32RXF_INSN_LD_D, M32RXF_SFMT_LD_D, NOPAR, NOPAR }, 101a5a4af3bSchristos { M32R_INSN_LDB, M32RXF_INSN_LDB, M32RXF_SFMT_LDB, M32RXF_INSN_PAR_LDB, M32RXF_INSN_WRITE_LDB }, 102a5a4af3bSchristos { M32R_INSN_LDB_D, M32RXF_INSN_LDB_D, M32RXF_SFMT_LDB_D, NOPAR, NOPAR }, 103a5a4af3bSchristos { M32R_INSN_LDH, M32RXF_INSN_LDH, M32RXF_SFMT_LDH, M32RXF_INSN_PAR_LDH, M32RXF_INSN_WRITE_LDH }, 104a5a4af3bSchristos { M32R_INSN_LDH_D, M32RXF_INSN_LDH_D, M32RXF_SFMT_LDH_D, NOPAR, NOPAR }, 105a5a4af3bSchristos { M32R_INSN_LDUB, M32RXF_INSN_LDUB, M32RXF_SFMT_LDB, M32RXF_INSN_PAR_LDUB, M32RXF_INSN_WRITE_LDUB }, 106a5a4af3bSchristos { M32R_INSN_LDUB_D, M32RXF_INSN_LDUB_D, M32RXF_SFMT_LDB_D, NOPAR, NOPAR }, 107a5a4af3bSchristos { M32R_INSN_LDUH, M32RXF_INSN_LDUH, M32RXF_SFMT_LDH, M32RXF_INSN_PAR_LDUH, M32RXF_INSN_WRITE_LDUH }, 108a5a4af3bSchristos { M32R_INSN_LDUH_D, M32RXF_INSN_LDUH_D, M32RXF_SFMT_LDH_D, NOPAR, NOPAR }, 109a5a4af3bSchristos { M32R_INSN_LD_PLUS, M32RXF_INSN_LD_PLUS, M32RXF_SFMT_LD_PLUS, M32RXF_INSN_PAR_LD_PLUS, M32RXF_INSN_WRITE_LD_PLUS }, 110a5a4af3bSchristos { M32R_INSN_LD24, M32RXF_INSN_LD24, M32RXF_SFMT_LD24, NOPAR, NOPAR }, 111a5a4af3bSchristos { M32R_INSN_LDI8, M32RXF_INSN_LDI8, M32RXF_SFMT_LDI8, M32RXF_INSN_PAR_LDI8, M32RXF_INSN_WRITE_LDI8 }, 112a5a4af3bSchristos { M32R_INSN_LDI16, M32RXF_INSN_LDI16, M32RXF_SFMT_LDI16, NOPAR, NOPAR }, 113a5a4af3bSchristos { M32R_INSN_LOCK, M32RXF_INSN_LOCK, M32RXF_SFMT_LOCK, M32RXF_INSN_PAR_LOCK, M32RXF_INSN_WRITE_LOCK }, 114a5a4af3bSchristos { M32R_INSN_MACHI_A, M32RXF_INSN_MACHI_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACHI_A, M32RXF_INSN_WRITE_MACHI_A }, 115a5a4af3bSchristos { M32R_INSN_MACLO_A, M32RXF_INSN_MACLO_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACLO_A, M32RXF_INSN_WRITE_MACLO_A }, 116a5a4af3bSchristos { M32R_INSN_MACWHI_A, M32RXF_INSN_MACWHI_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACWHI_A, M32RXF_INSN_WRITE_MACWHI_A }, 117a5a4af3bSchristos { M32R_INSN_MACWLO_A, M32RXF_INSN_MACWLO_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACWLO_A, M32RXF_INSN_WRITE_MACWLO_A }, 118a5a4af3bSchristos { M32R_INSN_MUL, M32RXF_INSN_MUL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_MUL, M32RXF_INSN_WRITE_MUL }, 119a5a4af3bSchristos { M32R_INSN_MULHI_A, M32RXF_INSN_MULHI_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULHI_A, M32RXF_INSN_WRITE_MULHI_A }, 120a5a4af3bSchristos { M32R_INSN_MULLO_A, M32RXF_INSN_MULLO_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULLO_A, M32RXF_INSN_WRITE_MULLO_A }, 121a5a4af3bSchristos { M32R_INSN_MULWHI_A, M32RXF_INSN_MULWHI_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULWHI_A, M32RXF_INSN_WRITE_MULWHI_A }, 122a5a4af3bSchristos { M32R_INSN_MULWLO_A, M32RXF_INSN_MULWLO_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULWLO_A, M32RXF_INSN_WRITE_MULWLO_A }, 123a5a4af3bSchristos { M32R_INSN_MV, M32RXF_INSN_MV, M32RXF_SFMT_MV, M32RXF_INSN_PAR_MV, M32RXF_INSN_WRITE_MV }, 124a5a4af3bSchristos { M32R_INSN_MVFACHI_A, M32RXF_INSN_MVFACHI_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACHI_A, M32RXF_INSN_WRITE_MVFACHI_A }, 125a5a4af3bSchristos { M32R_INSN_MVFACLO_A, M32RXF_INSN_MVFACLO_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACLO_A, M32RXF_INSN_WRITE_MVFACLO_A }, 126a5a4af3bSchristos { M32R_INSN_MVFACMI_A, M32RXF_INSN_MVFACMI_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACMI_A, M32RXF_INSN_WRITE_MVFACMI_A }, 127a5a4af3bSchristos { M32R_INSN_MVFC, M32RXF_INSN_MVFC, M32RXF_SFMT_MVFC, M32RXF_INSN_PAR_MVFC, M32RXF_INSN_WRITE_MVFC }, 128a5a4af3bSchristos { M32R_INSN_MVTACHI_A, M32RXF_INSN_MVTACHI_A, M32RXF_SFMT_MVTACHI_A, M32RXF_INSN_PAR_MVTACHI_A, M32RXF_INSN_WRITE_MVTACHI_A }, 129a5a4af3bSchristos { M32R_INSN_MVTACLO_A, M32RXF_INSN_MVTACLO_A, M32RXF_SFMT_MVTACHI_A, M32RXF_INSN_PAR_MVTACLO_A, M32RXF_INSN_WRITE_MVTACLO_A }, 130a5a4af3bSchristos { M32R_INSN_MVTC, M32RXF_INSN_MVTC, M32RXF_SFMT_MVTC, M32RXF_INSN_PAR_MVTC, M32RXF_INSN_WRITE_MVTC }, 131a5a4af3bSchristos { M32R_INSN_NEG, M32RXF_INSN_NEG, M32RXF_SFMT_MV, M32RXF_INSN_PAR_NEG, M32RXF_INSN_WRITE_NEG }, 132a5a4af3bSchristos { M32R_INSN_NOP, M32RXF_INSN_NOP, M32RXF_SFMT_NOP, M32RXF_INSN_PAR_NOP, M32RXF_INSN_WRITE_NOP }, 133a5a4af3bSchristos { M32R_INSN_NOT, M32RXF_INSN_NOT, M32RXF_SFMT_MV, M32RXF_INSN_PAR_NOT, M32RXF_INSN_WRITE_NOT }, 134a5a4af3bSchristos { M32R_INSN_RAC_DSI, M32RXF_INSN_RAC_DSI, M32RXF_SFMT_RAC_DSI, M32RXF_INSN_PAR_RAC_DSI, M32RXF_INSN_WRITE_RAC_DSI }, 135a5a4af3bSchristos { M32R_INSN_RACH_DSI, M32RXF_INSN_RACH_DSI, M32RXF_SFMT_RAC_DSI, M32RXF_INSN_PAR_RACH_DSI, M32RXF_INSN_WRITE_RACH_DSI }, 136a5a4af3bSchristos { M32R_INSN_RTE, M32RXF_INSN_RTE, M32RXF_SFMT_RTE, M32RXF_INSN_PAR_RTE, M32RXF_INSN_WRITE_RTE }, 137a5a4af3bSchristos { M32R_INSN_SETH, M32RXF_INSN_SETH, M32RXF_SFMT_SETH, NOPAR, NOPAR }, 138a5a4af3bSchristos { M32R_INSN_SLL, M32RXF_INSN_SLL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SLL, M32RXF_INSN_WRITE_SLL }, 139a5a4af3bSchristos { M32R_INSN_SLL3, M32RXF_INSN_SLL3, M32RXF_SFMT_SLL3, NOPAR, NOPAR }, 140a5a4af3bSchristos { M32R_INSN_SLLI, M32RXF_INSN_SLLI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SLLI, M32RXF_INSN_WRITE_SLLI }, 141a5a4af3bSchristos { M32R_INSN_SRA, M32RXF_INSN_SRA, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SRA, M32RXF_INSN_WRITE_SRA }, 142a5a4af3bSchristos { M32R_INSN_SRA3, M32RXF_INSN_SRA3, M32RXF_SFMT_SLL3, NOPAR, NOPAR }, 143a5a4af3bSchristos { M32R_INSN_SRAI, M32RXF_INSN_SRAI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SRAI, M32RXF_INSN_WRITE_SRAI }, 144a5a4af3bSchristos { M32R_INSN_SRL, M32RXF_INSN_SRL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SRL, M32RXF_INSN_WRITE_SRL }, 145a5a4af3bSchristos { M32R_INSN_SRL3, M32RXF_INSN_SRL3, M32RXF_SFMT_SLL3, NOPAR, NOPAR }, 146a5a4af3bSchristos { M32R_INSN_SRLI, M32RXF_INSN_SRLI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SRLI, M32RXF_INSN_WRITE_SRLI }, 147a5a4af3bSchristos { M32R_INSN_ST, M32RXF_INSN_ST, M32RXF_SFMT_ST, M32RXF_INSN_PAR_ST, M32RXF_INSN_WRITE_ST }, 148a5a4af3bSchristos { M32R_INSN_ST_D, M32RXF_INSN_ST_D, M32RXF_SFMT_ST_D, NOPAR, NOPAR }, 149a5a4af3bSchristos { M32R_INSN_STB, M32RXF_INSN_STB, M32RXF_SFMT_STB, M32RXF_INSN_PAR_STB, M32RXF_INSN_WRITE_STB }, 150a5a4af3bSchristos { M32R_INSN_STB_D, M32RXF_INSN_STB_D, M32RXF_SFMT_STB_D, NOPAR, NOPAR }, 151a5a4af3bSchristos { M32R_INSN_STH, M32RXF_INSN_STH, M32RXF_SFMT_STH, M32RXF_INSN_PAR_STH, M32RXF_INSN_WRITE_STH }, 152a5a4af3bSchristos { M32R_INSN_STH_D, M32RXF_INSN_STH_D, M32RXF_SFMT_STH_D, NOPAR, NOPAR }, 153a5a4af3bSchristos { M32R_INSN_ST_PLUS, M32RXF_INSN_ST_PLUS, M32RXF_SFMT_ST_PLUS, M32RXF_INSN_PAR_ST_PLUS, M32RXF_INSN_WRITE_ST_PLUS }, 154a5a4af3bSchristos { M32R_INSN_STH_PLUS, M32RXF_INSN_STH_PLUS, M32RXF_SFMT_STH_PLUS, M32RXF_INSN_PAR_STH_PLUS, M32RXF_INSN_WRITE_STH_PLUS }, 155a5a4af3bSchristos { M32R_INSN_STB_PLUS, M32RXF_INSN_STB_PLUS, M32RXF_SFMT_STB_PLUS, M32RXF_INSN_PAR_STB_PLUS, M32RXF_INSN_WRITE_STB_PLUS }, 156a5a4af3bSchristos { M32R_INSN_ST_MINUS, M32RXF_INSN_ST_MINUS, M32RXF_SFMT_ST_PLUS, M32RXF_INSN_PAR_ST_MINUS, M32RXF_INSN_WRITE_ST_MINUS }, 157a5a4af3bSchristos { M32R_INSN_SUB, M32RXF_INSN_SUB, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SUB, M32RXF_INSN_WRITE_SUB }, 158a5a4af3bSchristos { M32R_INSN_SUBV, M32RXF_INSN_SUBV, M32RXF_SFMT_ADDV, M32RXF_INSN_PAR_SUBV, M32RXF_INSN_WRITE_SUBV }, 159a5a4af3bSchristos { M32R_INSN_SUBX, M32RXF_INSN_SUBX, M32RXF_SFMT_ADDX, M32RXF_INSN_PAR_SUBX, M32RXF_INSN_WRITE_SUBX }, 160a5a4af3bSchristos { M32R_INSN_TRAP, M32RXF_INSN_TRAP, M32RXF_SFMT_TRAP, M32RXF_INSN_PAR_TRAP, M32RXF_INSN_WRITE_TRAP }, 161a5a4af3bSchristos { M32R_INSN_UNLOCK, M32RXF_INSN_UNLOCK, M32RXF_SFMT_UNLOCK, M32RXF_INSN_PAR_UNLOCK, M32RXF_INSN_WRITE_UNLOCK }, 162a5a4af3bSchristos { M32R_INSN_SATB, M32RXF_INSN_SATB, M32RXF_SFMT_SATB, NOPAR, NOPAR }, 163a5a4af3bSchristos { M32R_INSN_SATH, M32RXF_INSN_SATH, M32RXF_SFMT_SATB, NOPAR, NOPAR }, 164a5a4af3bSchristos { M32R_INSN_SAT, M32RXF_INSN_SAT, M32RXF_SFMT_SAT, NOPAR, NOPAR }, 165a5a4af3bSchristos { M32R_INSN_PCMPBZ, M32RXF_INSN_PCMPBZ, M32RXF_SFMT_CMPZ, M32RXF_INSN_PAR_PCMPBZ, M32RXF_INSN_WRITE_PCMPBZ }, 166a5a4af3bSchristos { M32R_INSN_SADD, M32RXF_INSN_SADD, M32RXF_SFMT_SADD, M32RXF_INSN_PAR_SADD, M32RXF_INSN_WRITE_SADD }, 167a5a4af3bSchristos { M32R_INSN_MACWU1, M32RXF_INSN_MACWU1, M32RXF_SFMT_MACWU1, M32RXF_INSN_PAR_MACWU1, M32RXF_INSN_WRITE_MACWU1 }, 168a5a4af3bSchristos { M32R_INSN_MSBLO, M32RXF_INSN_MSBLO, M32RXF_SFMT_MSBLO, M32RXF_INSN_PAR_MSBLO, M32RXF_INSN_WRITE_MSBLO }, 169a5a4af3bSchristos { M32R_INSN_MULWU1, M32RXF_INSN_MULWU1, M32RXF_SFMT_MULWU1, M32RXF_INSN_PAR_MULWU1, M32RXF_INSN_WRITE_MULWU1 }, 170a5a4af3bSchristos { M32R_INSN_MACLH1, M32RXF_INSN_MACLH1, M32RXF_SFMT_MACWU1, M32RXF_INSN_PAR_MACLH1, M32RXF_INSN_WRITE_MACLH1 }, 171a5a4af3bSchristos { M32R_INSN_SC, M32RXF_INSN_SC, M32RXF_SFMT_SC, M32RXF_INSN_PAR_SC, M32RXF_INSN_WRITE_SC }, 172a5a4af3bSchristos { M32R_INSN_SNC, M32RXF_INSN_SNC, M32RXF_SFMT_SC, M32RXF_INSN_PAR_SNC, M32RXF_INSN_WRITE_SNC }, 173a5a4af3bSchristos { M32R_INSN_CLRPSW, M32RXF_INSN_CLRPSW, M32RXF_SFMT_CLRPSW, M32RXF_INSN_PAR_CLRPSW, M32RXF_INSN_WRITE_CLRPSW }, 174a5a4af3bSchristos { M32R_INSN_SETPSW, M32RXF_INSN_SETPSW, M32RXF_SFMT_SETPSW, M32RXF_INSN_PAR_SETPSW, M32RXF_INSN_WRITE_SETPSW }, 175a5a4af3bSchristos { M32R_INSN_BSET, M32RXF_INSN_BSET, M32RXF_SFMT_BSET, NOPAR, NOPAR }, 176a5a4af3bSchristos { M32R_INSN_BCLR, M32RXF_INSN_BCLR, M32RXF_SFMT_BSET, NOPAR, NOPAR }, 177a5a4af3bSchristos { M32R_INSN_BTST, M32RXF_INSN_BTST, M32RXF_SFMT_BTST, M32RXF_INSN_PAR_BTST, M32RXF_INSN_WRITE_BTST }, 178a5a4af3bSchristos }; 179a5a4af3bSchristos 180a5a4af3bSchristos static const struct insn_sem m32rxf_insn_sem_invalid = 181a5a4af3bSchristos { 182a5a4af3bSchristos VIRTUAL_INSN_X_INVALID, M32RXF_INSN_X_INVALID, M32RXF_SFMT_EMPTY, NOPAR, NOPAR 183a5a4af3bSchristos }; 184a5a4af3bSchristos 185a5a4af3bSchristos /* Initialize an IDESC from the compile-time computable parts. */ 186a5a4af3bSchristos 187a5a4af3bSchristos static INLINE void 188a5a4af3bSchristos init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t) 189a5a4af3bSchristos { 190a5a4af3bSchristos const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries; 191a5a4af3bSchristos 192a5a4af3bSchristos id->num = t->index; 193a5a4af3bSchristos id->sfmt = t->sfmt; 194a5a4af3bSchristos if ((int) t->type <= 0) 195a5a4af3bSchristos id->idata = & cgen_virtual_insn_table[- (int) t->type]; 196a5a4af3bSchristos else 197a5a4af3bSchristos id->idata = & insn_table[t->type]; 198a5a4af3bSchristos id->attrs = CGEN_INSN_ATTRS (id->idata); 199a5a4af3bSchristos /* Oh my god, a magic number. */ 200a5a4af3bSchristos id->length = CGEN_INSN_BITSIZE (id->idata) / 8; 201a5a4af3bSchristos 202a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 203a5a4af3bSchristos id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index]; 204a5a4af3bSchristos { 205a5a4af3bSchristos SIM_DESC sd = CPU_STATE (cpu); 206a5a4af3bSchristos SIM_ASSERT (t->index == id->timing->num); 207a5a4af3bSchristos } 208a5a4af3bSchristos #endif 209a5a4af3bSchristos 210a5a4af3bSchristos /* Semantic pointers are initialized elsewhere. */ 211a5a4af3bSchristos } 212a5a4af3bSchristos 213a5a4af3bSchristos /* Initialize the instruction descriptor table. */ 214a5a4af3bSchristos 215a5a4af3bSchristos void 216a5a4af3bSchristos m32rxf_init_idesc_table (SIM_CPU *cpu) 217a5a4af3bSchristos { 218a5a4af3bSchristos IDESC *id,*tabend; 219a5a4af3bSchristos const struct insn_sem *t,*tend; 220a5a4af3bSchristos int tabsize = M32RXF_INSN__MAX; 221a5a4af3bSchristos IDESC *table = m32rxf_insn_data; 222a5a4af3bSchristos 223a5a4af3bSchristos memset (table, 0, tabsize * sizeof (IDESC)); 224a5a4af3bSchristos 225a5a4af3bSchristos /* First set all entries to the `invalid insn'. */ 226a5a4af3bSchristos t = & m32rxf_insn_sem_invalid; 227a5a4af3bSchristos for (id = table, tabend = table + tabsize; id < tabend; ++id) 228a5a4af3bSchristos init_idesc (cpu, id, t); 229a5a4af3bSchristos 230a5a4af3bSchristos /* Now fill in the values for the chosen cpu. */ 23199e23f81Schristos for (t = m32rxf_insn_sem, tend = t + ARRAY_SIZE (m32rxf_insn_sem); 232a5a4af3bSchristos t != tend; ++t) 233a5a4af3bSchristos { 234a5a4af3bSchristos init_idesc (cpu, & table[t->index], t); 235a5a4af3bSchristos if (t->par_index != NOPAR) 236a5a4af3bSchristos { 237a5a4af3bSchristos init_idesc (cpu, &table[t->par_index], t); 238a5a4af3bSchristos table[t->index].par_idesc = &table[t->par_index]; 239a5a4af3bSchristos } 240a5a4af3bSchristos if (t->par_index != NOPAR) 241a5a4af3bSchristos { 242a5a4af3bSchristos init_idesc (cpu, &table[t->write_index], t); 243a5a4af3bSchristos table[t->par_index].par_idesc = &table[t->write_index]; 244a5a4af3bSchristos } 245a5a4af3bSchristos } 246a5a4af3bSchristos 247a5a4af3bSchristos /* Link the IDESC table into the cpu. */ 248a5a4af3bSchristos CPU_IDESC (cpu) = table; 249a5a4af3bSchristos } 250a5a4af3bSchristos 251a5a4af3bSchristos /* Given an instruction, return a pointer to its IDESC entry. */ 252a5a4af3bSchristos 253a5a4af3bSchristos const IDESC * 254a5a4af3bSchristos m32rxf_decode (SIM_CPU *current_cpu, IADDR pc, 255a5a4af3bSchristos CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn, 256a5a4af3bSchristos ARGBUF *abuf) 257a5a4af3bSchristos { 258a5a4af3bSchristos /* Result of decoder. */ 259a5a4af3bSchristos M32RXF_INSN_TYPE itype; 260a5a4af3bSchristos 261a5a4af3bSchristos { 262a5a4af3bSchristos CGEN_INSN_WORD insn = base_insn; 263a5a4af3bSchristos 264a5a4af3bSchristos { 265a5a4af3bSchristos unsigned int val = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0))); 266a5a4af3bSchristos switch (val) 267a5a4af3bSchristos { 268a5a4af3bSchristos case 0 : itype = M32RXF_INSN_SUBV; goto extract_sfmt_addv; 269a5a4af3bSchristos case 1 : itype = M32RXF_INSN_SUBX; goto extract_sfmt_addx; 270a5a4af3bSchristos case 2 : itype = M32RXF_INSN_SUB; goto extract_sfmt_add; 271a5a4af3bSchristos case 3 : itype = M32RXF_INSN_NEG; goto extract_sfmt_mv; 272a5a4af3bSchristos case 4 : itype = M32RXF_INSN_CMP; goto extract_sfmt_cmp; 273a5a4af3bSchristos case 5 : itype = M32RXF_INSN_CMPU; goto extract_sfmt_cmp; 274a5a4af3bSchristos case 6 : itype = M32RXF_INSN_CMPEQ; goto extract_sfmt_cmp; 275a5a4af3bSchristos case 7 : 276a5a4af3bSchristos { 277a5a4af3bSchristos unsigned int val = (((insn >> 8) & (3 << 0))); 278a5a4af3bSchristos switch (val) 279a5a4af3bSchristos { 280a5a4af3bSchristos case 0 : 281a5a4af3bSchristos if ((entire_insn & 0xfff0) == 0x70) 282a5a4af3bSchristos { itype = M32RXF_INSN_CMPZ; goto extract_sfmt_cmpz; } 283a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 284a5a4af3bSchristos case 3 : 285a5a4af3bSchristos if ((entire_insn & 0xfff0) == 0x370) 286a5a4af3bSchristos { itype = M32RXF_INSN_PCMPBZ; goto extract_sfmt_cmpz; } 287a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 288a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 289a5a4af3bSchristos } 290a5a4af3bSchristos } 291a5a4af3bSchristos case 8 : itype = M32RXF_INSN_ADDV; goto extract_sfmt_addv; 292a5a4af3bSchristos case 9 : itype = M32RXF_INSN_ADDX; goto extract_sfmt_addx; 293a5a4af3bSchristos case 10 : itype = M32RXF_INSN_ADD; goto extract_sfmt_add; 294a5a4af3bSchristos case 11 : itype = M32RXF_INSN_NOT; goto extract_sfmt_mv; 295a5a4af3bSchristos case 12 : itype = M32RXF_INSN_AND; goto extract_sfmt_add; 296a5a4af3bSchristos case 13 : itype = M32RXF_INSN_XOR; goto extract_sfmt_add; 297a5a4af3bSchristos case 14 : itype = M32RXF_INSN_OR; goto extract_sfmt_add; 298a5a4af3bSchristos case 15 : 299a5a4af3bSchristos if ((entire_insn & 0xf8f0) == 0xf0) 300a5a4af3bSchristos { itype = M32RXF_INSN_BTST; goto extract_sfmt_btst; } 301a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 302a5a4af3bSchristos case 16 : itype = M32RXF_INSN_SRL; goto extract_sfmt_add; 303a5a4af3bSchristos case 18 : itype = M32RXF_INSN_SRA; goto extract_sfmt_add; 304a5a4af3bSchristos case 20 : itype = M32RXF_INSN_SLL; goto extract_sfmt_add; 305a5a4af3bSchristos case 22 : itype = M32RXF_INSN_MUL; goto extract_sfmt_add; 306a5a4af3bSchristos case 24 : itype = M32RXF_INSN_MV; goto extract_sfmt_mv; 307a5a4af3bSchristos case 25 : itype = M32RXF_INSN_MVFC; goto extract_sfmt_mvfc; 308a5a4af3bSchristos case 26 : itype = M32RXF_INSN_MVTC; goto extract_sfmt_mvtc; 309a5a4af3bSchristos case 28 : 310a5a4af3bSchristos { 311a5a4af3bSchristos unsigned int val = (((insn >> 8) & (3 << 0))); 312a5a4af3bSchristos switch (val) 313a5a4af3bSchristos { 314a5a4af3bSchristos case 0 : 315a5a4af3bSchristos if ((entire_insn & 0xfff0) == 0x1cc0) 316a5a4af3bSchristos { itype = M32RXF_INSN_JC; goto extract_sfmt_jc; } 317a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 318a5a4af3bSchristos case 1 : 319a5a4af3bSchristos if ((entire_insn & 0xfff0) == 0x1dc0) 320a5a4af3bSchristos { itype = M32RXF_INSN_JNC; goto extract_sfmt_jc; } 321a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 322a5a4af3bSchristos case 2 : 323a5a4af3bSchristos if ((entire_insn & 0xfff0) == 0x1ec0) 324a5a4af3bSchristos { itype = M32RXF_INSN_JL; goto extract_sfmt_jl; } 325a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 326a5a4af3bSchristos case 3 : 327a5a4af3bSchristos if ((entire_insn & 0xfff0) == 0x1fc0) 328a5a4af3bSchristos { itype = M32RXF_INSN_JMP; goto extract_sfmt_jmp; } 329a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 330a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 331a5a4af3bSchristos } 332a5a4af3bSchristos } 333a5a4af3bSchristos case 29 : 334a5a4af3bSchristos if ((entire_insn & 0xffff) == 0x10d6) 335a5a4af3bSchristos { itype = M32RXF_INSN_RTE; goto extract_sfmt_rte; } 336a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 337a5a4af3bSchristos case 31 : 338a5a4af3bSchristos if ((entire_insn & 0xfff0) == 0x10f0) 339a5a4af3bSchristos { itype = M32RXF_INSN_TRAP; goto extract_sfmt_trap; } 340a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 341a5a4af3bSchristos case 32 : itype = M32RXF_INSN_STB; goto extract_sfmt_stb; 342a5a4af3bSchristos case 33 : itype = M32RXF_INSN_STB_PLUS; goto extract_sfmt_stb_plus; 343a5a4af3bSchristos case 34 : itype = M32RXF_INSN_STH; goto extract_sfmt_sth; 344a5a4af3bSchristos case 35 : itype = M32RXF_INSN_STH_PLUS; goto extract_sfmt_sth_plus; 345a5a4af3bSchristos case 36 : itype = M32RXF_INSN_ST; goto extract_sfmt_st; 346a5a4af3bSchristos case 37 : itype = M32RXF_INSN_UNLOCK; goto extract_sfmt_unlock; 347a5a4af3bSchristos case 38 : itype = M32RXF_INSN_ST_PLUS; goto extract_sfmt_st_plus; 348a5a4af3bSchristos case 39 : itype = M32RXF_INSN_ST_MINUS; goto extract_sfmt_st_plus; 349a5a4af3bSchristos case 40 : itype = M32RXF_INSN_LDB; goto extract_sfmt_ldb; 350a5a4af3bSchristos case 41 : itype = M32RXF_INSN_LDUB; goto extract_sfmt_ldb; 351a5a4af3bSchristos case 42 : itype = M32RXF_INSN_LDH; goto extract_sfmt_ldh; 352a5a4af3bSchristos case 43 : itype = M32RXF_INSN_LDUH; goto extract_sfmt_ldh; 353a5a4af3bSchristos case 44 : itype = M32RXF_INSN_LD; goto extract_sfmt_ld; 354a5a4af3bSchristos case 45 : itype = M32RXF_INSN_LOCK; goto extract_sfmt_lock; 355a5a4af3bSchristos case 46 : itype = M32RXF_INSN_LD_PLUS; goto extract_sfmt_ld_plus; 356a5a4af3bSchristos case 48 : /* fall through */ 357a5a4af3bSchristos case 56 : itype = M32RXF_INSN_MULHI_A; goto extract_sfmt_mulhi_a; 358a5a4af3bSchristos case 49 : /* fall through */ 359a5a4af3bSchristos case 57 : itype = M32RXF_INSN_MULLO_A; goto extract_sfmt_mulhi_a; 360a5a4af3bSchristos case 50 : /* fall through */ 361a5a4af3bSchristos case 58 : itype = M32RXF_INSN_MULWHI_A; goto extract_sfmt_mulhi_a; 362a5a4af3bSchristos case 51 : /* fall through */ 363a5a4af3bSchristos case 59 : itype = M32RXF_INSN_MULWLO_A; goto extract_sfmt_mulhi_a; 364a5a4af3bSchristos case 52 : /* fall through */ 365a5a4af3bSchristos case 60 : itype = M32RXF_INSN_MACHI_A; goto extract_sfmt_machi_a; 366a5a4af3bSchristos case 53 : /* fall through */ 367a5a4af3bSchristos case 61 : itype = M32RXF_INSN_MACLO_A; goto extract_sfmt_machi_a; 368a5a4af3bSchristos case 54 : /* fall through */ 369a5a4af3bSchristos case 62 : itype = M32RXF_INSN_MACWHI_A; goto extract_sfmt_machi_a; 370a5a4af3bSchristos case 55 : /* fall through */ 371a5a4af3bSchristos case 63 : itype = M32RXF_INSN_MACWLO_A; goto extract_sfmt_machi_a; 372a5a4af3bSchristos case 64 : /* fall through */ 373a5a4af3bSchristos case 65 : /* fall through */ 374a5a4af3bSchristos case 66 : /* fall through */ 375a5a4af3bSchristos case 67 : /* fall through */ 376a5a4af3bSchristos case 68 : /* fall through */ 377a5a4af3bSchristos case 69 : /* fall through */ 378a5a4af3bSchristos case 70 : /* fall through */ 379a5a4af3bSchristos case 71 : /* fall through */ 380a5a4af3bSchristos case 72 : /* fall through */ 381a5a4af3bSchristos case 73 : /* fall through */ 382a5a4af3bSchristos case 74 : /* fall through */ 383a5a4af3bSchristos case 75 : /* fall through */ 384a5a4af3bSchristos case 76 : /* fall through */ 385a5a4af3bSchristos case 77 : /* fall through */ 386a5a4af3bSchristos case 78 : /* fall through */ 387a5a4af3bSchristos case 79 : itype = M32RXF_INSN_ADDI; goto extract_sfmt_addi; 388a5a4af3bSchristos case 80 : /* fall through */ 389a5a4af3bSchristos case 81 : itype = M32RXF_INSN_SRLI; goto extract_sfmt_slli; 390a5a4af3bSchristos case 82 : /* fall through */ 391a5a4af3bSchristos case 83 : itype = M32RXF_INSN_SRAI; goto extract_sfmt_slli; 392a5a4af3bSchristos case 84 : /* fall through */ 393a5a4af3bSchristos case 85 : itype = M32RXF_INSN_SLLI; goto extract_sfmt_slli; 394a5a4af3bSchristos case 87 : 395a5a4af3bSchristos { 396a5a4af3bSchristos unsigned int val = (((insn >> 0) & (1 << 0))); 397a5a4af3bSchristos switch (val) 398a5a4af3bSchristos { 399a5a4af3bSchristos case 0 : 400a5a4af3bSchristos if ((entire_insn & 0xf0f3) == 0x5070) 401a5a4af3bSchristos { itype = M32RXF_INSN_MVTACHI_A; goto extract_sfmt_mvtachi_a; } 402a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 403a5a4af3bSchristos case 1 : 404a5a4af3bSchristos if ((entire_insn & 0xf0f3) == 0x5071) 405a5a4af3bSchristos { itype = M32RXF_INSN_MVTACLO_A; goto extract_sfmt_mvtachi_a; } 406a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 407a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 408a5a4af3bSchristos } 409a5a4af3bSchristos } 410a5a4af3bSchristos case 88 : 411a5a4af3bSchristos if ((entire_insn & 0xf3f2) == 0x5080) 412a5a4af3bSchristos { itype = M32RXF_INSN_RACH_DSI; goto extract_sfmt_rac_dsi; } 413a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 414a5a4af3bSchristos case 89 : 415a5a4af3bSchristos if ((entire_insn & 0xf3f2) == 0x5090) 416a5a4af3bSchristos { itype = M32RXF_INSN_RAC_DSI; goto extract_sfmt_rac_dsi; } 417a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 418a5a4af3bSchristos case 90 : itype = M32RXF_INSN_MULWU1; goto extract_sfmt_mulwu1; 419a5a4af3bSchristos case 91 : itype = M32RXF_INSN_MACWU1; goto extract_sfmt_macwu1; 420a5a4af3bSchristos case 92 : itype = M32RXF_INSN_MACLH1; goto extract_sfmt_macwu1; 421a5a4af3bSchristos case 93 : itype = M32RXF_INSN_MSBLO; goto extract_sfmt_msblo; 422a5a4af3bSchristos case 94 : 423a5a4af3bSchristos if ((entire_insn & 0xffff) == 0x50e4) 424a5a4af3bSchristos { itype = M32RXF_INSN_SADD; goto extract_sfmt_sadd; } 425a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 426a5a4af3bSchristos case 95 : 427a5a4af3bSchristos { 428a5a4af3bSchristos unsigned int val = (((insn >> 0) & (3 << 0))); 429a5a4af3bSchristos switch (val) 430a5a4af3bSchristos { 431a5a4af3bSchristos case 0 : itype = M32RXF_INSN_MVFACHI_A; goto extract_sfmt_mvfachi_a; 432a5a4af3bSchristos case 1 : itype = M32RXF_INSN_MVFACLO_A; goto extract_sfmt_mvfachi_a; 433a5a4af3bSchristos case 2 : itype = M32RXF_INSN_MVFACMI_A; goto extract_sfmt_mvfachi_a; 434a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 435a5a4af3bSchristos } 436a5a4af3bSchristos } 437a5a4af3bSchristos case 96 : /* fall through */ 438a5a4af3bSchristos case 97 : /* fall through */ 439a5a4af3bSchristos case 98 : /* fall through */ 440a5a4af3bSchristos case 99 : /* fall through */ 441a5a4af3bSchristos case 100 : /* fall through */ 442a5a4af3bSchristos case 101 : /* fall through */ 443a5a4af3bSchristos case 102 : /* fall through */ 444a5a4af3bSchristos case 103 : /* fall through */ 445a5a4af3bSchristos case 104 : /* fall through */ 446a5a4af3bSchristos case 105 : /* fall through */ 447a5a4af3bSchristos case 106 : /* fall through */ 448a5a4af3bSchristos case 107 : /* fall through */ 449a5a4af3bSchristos case 108 : /* fall through */ 450a5a4af3bSchristos case 109 : /* fall through */ 451a5a4af3bSchristos case 110 : /* fall through */ 452a5a4af3bSchristos case 111 : itype = M32RXF_INSN_LDI8; goto extract_sfmt_ldi8; 453a5a4af3bSchristos case 112 : 454a5a4af3bSchristos { 455a5a4af3bSchristos unsigned int val = (((insn >> 7) & (15 << 1)) | ((insn >> 0) & (1 << 0))); 456a5a4af3bSchristos switch (val) 457a5a4af3bSchristos { 458a5a4af3bSchristos case 0 : 459a5a4af3bSchristos if ((entire_insn & 0xffff) == 0x7000) 460a5a4af3bSchristos { itype = M32RXF_INSN_NOP; goto extract_sfmt_nop; } 461a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 462a5a4af3bSchristos case 2 : /* fall through */ 463a5a4af3bSchristos case 3 : itype = M32RXF_INSN_SETPSW; goto extract_sfmt_setpsw; 464a5a4af3bSchristos case 4 : /* fall through */ 465a5a4af3bSchristos case 5 : itype = M32RXF_INSN_CLRPSW; goto extract_sfmt_clrpsw; 466a5a4af3bSchristos case 9 : 467a5a4af3bSchristos if ((entire_insn & 0xffff) == 0x7401) 468a5a4af3bSchristos { itype = M32RXF_INSN_SC; goto extract_sfmt_sc; } 469a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 470a5a4af3bSchristos case 11 : 471a5a4af3bSchristos if ((entire_insn & 0xffff) == 0x7501) 472a5a4af3bSchristos { itype = M32RXF_INSN_SNC; goto extract_sfmt_sc; } 473a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 474a5a4af3bSchristos case 16 : /* fall through */ 475a5a4af3bSchristos case 17 : itype = M32RXF_INSN_BCL8; goto extract_sfmt_bcl8; 476a5a4af3bSchristos case 18 : /* fall through */ 477a5a4af3bSchristos case 19 : itype = M32RXF_INSN_BNCL8; goto extract_sfmt_bcl8; 478a5a4af3bSchristos case 24 : /* fall through */ 479a5a4af3bSchristos case 25 : itype = M32RXF_INSN_BC8; goto extract_sfmt_bc8; 480a5a4af3bSchristos case 26 : /* fall through */ 481a5a4af3bSchristos case 27 : itype = M32RXF_INSN_BNC8; goto extract_sfmt_bc8; 482a5a4af3bSchristos case 28 : /* fall through */ 483a5a4af3bSchristos case 29 : itype = M32RXF_INSN_BL8; goto extract_sfmt_bl8; 484a5a4af3bSchristos case 30 : /* fall through */ 485a5a4af3bSchristos case 31 : itype = M32RXF_INSN_BRA8; goto extract_sfmt_bra8; 486a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 487a5a4af3bSchristos } 488a5a4af3bSchristos } 489a5a4af3bSchristos case 113 : /* fall through */ 490a5a4af3bSchristos case 114 : /* fall through */ 491a5a4af3bSchristos case 115 : /* fall through */ 492a5a4af3bSchristos case 116 : /* fall through */ 493a5a4af3bSchristos case 117 : /* fall through */ 494a5a4af3bSchristos case 118 : /* fall through */ 495a5a4af3bSchristos case 119 : /* fall through */ 496a5a4af3bSchristos case 120 : /* fall through */ 497a5a4af3bSchristos case 121 : /* fall through */ 498a5a4af3bSchristos case 122 : /* fall through */ 499a5a4af3bSchristos case 123 : /* fall through */ 500a5a4af3bSchristos case 124 : /* fall through */ 501a5a4af3bSchristos case 125 : /* fall through */ 502a5a4af3bSchristos case 126 : /* fall through */ 503a5a4af3bSchristos case 127 : 504a5a4af3bSchristos { 505a5a4af3bSchristos unsigned int val = (((insn >> 8) & (15 << 0))); 506a5a4af3bSchristos switch (val) 507a5a4af3bSchristos { 508a5a4af3bSchristos case 1 : itype = M32RXF_INSN_SETPSW; goto extract_sfmt_setpsw; 509a5a4af3bSchristos case 2 : itype = M32RXF_INSN_CLRPSW; goto extract_sfmt_clrpsw; 510a5a4af3bSchristos case 8 : itype = M32RXF_INSN_BCL8; goto extract_sfmt_bcl8; 511a5a4af3bSchristos case 9 : itype = M32RXF_INSN_BNCL8; goto extract_sfmt_bcl8; 512a5a4af3bSchristos case 12 : itype = M32RXF_INSN_BC8; goto extract_sfmt_bc8; 513a5a4af3bSchristos case 13 : itype = M32RXF_INSN_BNC8; goto extract_sfmt_bc8; 514a5a4af3bSchristos case 14 : itype = M32RXF_INSN_BL8; goto extract_sfmt_bl8; 515a5a4af3bSchristos case 15 : itype = M32RXF_INSN_BRA8; goto extract_sfmt_bra8; 516a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 517a5a4af3bSchristos } 518a5a4af3bSchristos } 519a5a4af3bSchristos case 132 : 520a5a4af3bSchristos if ((entire_insn & 0xfff00000) == 0x80400000) 521a5a4af3bSchristos { itype = M32RXF_INSN_CMPI; goto extract_sfmt_cmpi; } 522a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 523a5a4af3bSchristos case 133 : 524a5a4af3bSchristos if ((entire_insn & 0xfff00000) == 0x80500000) 525a5a4af3bSchristos { itype = M32RXF_INSN_CMPUI; goto extract_sfmt_cmpi; } 526a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 527a5a4af3bSchristos case 134 : 528a5a4af3bSchristos { 529a5a4af3bSchristos unsigned int val = (((entire_insn >> 8) & (3 << 0))); 530a5a4af3bSchristos switch (val) 531a5a4af3bSchristos { 532a5a4af3bSchristos case 0 : 533a5a4af3bSchristos if ((entire_insn & 0xf0f0ffff) == 0x80600000) 534a5a4af3bSchristos { itype = M32RXF_INSN_SAT; goto extract_sfmt_sat; } 535a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 536a5a4af3bSchristos case 2 : 537a5a4af3bSchristos if ((entire_insn & 0xf0f0ffff) == 0x80600200) 538a5a4af3bSchristos { itype = M32RXF_INSN_SATH; goto extract_sfmt_satb; } 539a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 540a5a4af3bSchristos case 3 : 541a5a4af3bSchristos if ((entire_insn & 0xf0f0ffff) == 0x80600300) 542a5a4af3bSchristos { itype = M32RXF_INSN_SATB; goto extract_sfmt_satb; } 543a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 544a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 545a5a4af3bSchristos } 546a5a4af3bSchristos } 547a5a4af3bSchristos case 136 : itype = M32RXF_INSN_ADDV3; goto extract_sfmt_addv3; 548a5a4af3bSchristos case 138 : itype = M32RXF_INSN_ADD3; goto extract_sfmt_add3; 549a5a4af3bSchristos case 140 : itype = M32RXF_INSN_AND3; goto extract_sfmt_and3; 550a5a4af3bSchristos case 141 : itype = M32RXF_INSN_XOR3; goto extract_sfmt_and3; 551a5a4af3bSchristos case 142 : itype = M32RXF_INSN_OR3; goto extract_sfmt_or3; 552a5a4af3bSchristos case 144 : 553a5a4af3bSchristos { 554a5a4af3bSchristos unsigned int val = (((entire_insn >> 4) & (1 << 0))); 555a5a4af3bSchristos switch (val) 556a5a4af3bSchristos { 557a5a4af3bSchristos case 0 : 558a5a4af3bSchristos if ((entire_insn & 0xf0f0ffff) == 0x90000000) 559a5a4af3bSchristos { itype = M32RXF_INSN_DIV; goto extract_sfmt_div; } 560a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 561a5a4af3bSchristos case 1 : 562a5a4af3bSchristos if ((entire_insn & 0xf0f0ffff) == 0x90000010) 563a5a4af3bSchristos { itype = M32RXF_INSN_DIVH; goto extract_sfmt_div; } 564a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 565a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 566a5a4af3bSchristos } 567a5a4af3bSchristos } 568a5a4af3bSchristos case 145 : 569a5a4af3bSchristos if ((entire_insn & 0xf0f0ffff) == 0x90100000) 570a5a4af3bSchristos { itype = M32RXF_INSN_DIVU; goto extract_sfmt_div; } 571a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 572a5a4af3bSchristos case 146 : 573a5a4af3bSchristos if ((entire_insn & 0xf0f0ffff) == 0x90200000) 574a5a4af3bSchristos { itype = M32RXF_INSN_REM; goto extract_sfmt_div; } 575a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 576a5a4af3bSchristos case 147 : 577a5a4af3bSchristos if ((entire_insn & 0xf0f0ffff) == 0x90300000) 578a5a4af3bSchristos { itype = M32RXF_INSN_REMU; goto extract_sfmt_div; } 579a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 580a5a4af3bSchristos case 152 : itype = M32RXF_INSN_SRL3; goto extract_sfmt_sll3; 581a5a4af3bSchristos case 154 : itype = M32RXF_INSN_SRA3; goto extract_sfmt_sll3; 582a5a4af3bSchristos case 156 : itype = M32RXF_INSN_SLL3; goto extract_sfmt_sll3; 583a5a4af3bSchristos case 159 : 584a5a4af3bSchristos if ((entire_insn & 0xf0ff0000) == 0x90f00000) 585a5a4af3bSchristos { itype = M32RXF_INSN_LDI16; goto extract_sfmt_ldi16; } 586a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 587a5a4af3bSchristos case 160 : itype = M32RXF_INSN_STB_D; goto extract_sfmt_stb_d; 588a5a4af3bSchristos case 162 : itype = M32RXF_INSN_STH_D; goto extract_sfmt_sth_d; 589a5a4af3bSchristos case 164 : itype = M32RXF_INSN_ST_D; goto extract_sfmt_st_d; 590a5a4af3bSchristos case 166 : 591a5a4af3bSchristos if ((entire_insn & 0xf8f00000) == 0xa0600000) 592a5a4af3bSchristos { itype = M32RXF_INSN_BSET; goto extract_sfmt_bset; } 593a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 594a5a4af3bSchristos case 167 : 595a5a4af3bSchristos if ((entire_insn & 0xf8f00000) == 0xa0700000) 596a5a4af3bSchristos { itype = M32RXF_INSN_BCLR; goto extract_sfmt_bset; } 597a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 598a5a4af3bSchristos case 168 : itype = M32RXF_INSN_LDB_D; goto extract_sfmt_ldb_d; 599a5a4af3bSchristos case 169 : itype = M32RXF_INSN_LDUB_D; goto extract_sfmt_ldb_d; 600a5a4af3bSchristos case 170 : itype = M32RXF_INSN_LDH_D; goto extract_sfmt_ldh_d; 601a5a4af3bSchristos case 171 : itype = M32RXF_INSN_LDUH_D; goto extract_sfmt_ldh_d; 602a5a4af3bSchristos case 172 : itype = M32RXF_INSN_LD_D; goto extract_sfmt_ld_d; 603a5a4af3bSchristos case 176 : itype = M32RXF_INSN_BEQ; goto extract_sfmt_beq; 604a5a4af3bSchristos case 177 : itype = M32RXF_INSN_BNE; goto extract_sfmt_beq; 605a5a4af3bSchristos case 184 : 606a5a4af3bSchristos if ((entire_insn & 0xfff00000) == 0xb0800000) 607a5a4af3bSchristos { itype = M32RXF_INSN_BEQZ; goto extract_sfmt_beqz; } 608a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 609a5a4af3bSchristos case 185 : 610a5a4af3bSchristos if ((entire_insn & 0xfff00000) == 0xb0900000) 611a5a4af3bSchristos { itype = M32RXF_INSN_BNEZ; goto extract_sfmt_beqz; } 612a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 613a5a4af3bSchristos case 186 : 614a5a4af3bSchristos if ((entire_insn & 0xfff00000) == 0xb0a00000) 615a5a4af3bSchristos { itype = M32RXF_INSN_BLTZ; goto extract_sfmt_beqz; } 616a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 617a5a4af3bSchristos case 187 : 618a5a4af3bSchristos if ((entire_insn & 0xfff00000) == 0xb0b00000) 619a5a4af3bSchristos { itype = M32RXF_INSN_BGEZ; goto extract_sfmt_beqz; } 620a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 621a5a4af3bSchristos case 188 : 622a5a4af3bSchristos if ((entire_insn & 0xfff00000) == 0xb0c00000) 623a5a4af3bSchristos { itype = M32RXF_INSN_BLEZ; goto extract_sfmt_beqz; } 624a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 625a5a4af3bSchristos case 189 : 626a5a4af3bSchristos if ((entire_insn & 0xfff00000) == 0xb0d00000) 627a5a4af3bSchristos { itype = M32RXF_INSN_BGTZ; goto extract_sfmt_beqz; } 628a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 629a5a4af3bSchristos case 220 : 630a5a4af3bSchristos if ((entire_insn & 0xf0ff0000) == 0xd0c00000) 631a5a4af3bSchristos { itype = M32RXF_INSN_SETH; goto extract_sfmt_seth; } 632a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 633a5a4af3bSchristos case 224 : /* fall through */ 634a5a4af3bSchristos case 225 : /* fall through */ 635a5a4af3bSchristos case 226 : /* fall through */ 636a5a4af3bSchristos case 227 : /* fall through */ 637a5a4af3bSchristos case 228 : /* fall through */ 638a5a4af3bSchristos case 229 : /* fall through */ 639a5a4af3bSchristos case 230 : /* fall through */ 640a5a4af3bSchristos case 231 : /* fall through */ 641a5a4af3bSchristos case 232 : /* fall through */ 642a5a4af3bSchristos case 233 : /* fall through */ 643a5a4af3bSchristos case 234 : /* fall through */ 644a5a4af3bSchristos case 235 : /* fall through */ 645a5a4af3bSchristos case 236 : /* fall through */ 646a5a4af3bSchristos case 237 : /* fall through */ 647a5a4af3bSchristos case 238 : /* fall through */ 648a5a4af3bSchristos case 239 : itype = M32RXF_INSN_LD24; goto extract_sfmt_ld24; 649a5a4af3bSchristos case 240 : /* fall through */ 650a5a4af3bSchristos case 241 : /* fall through */ 651a5a4af3bSchristos case 242 : /* fall through */ 652a5a4af3bSchristos case 243 : /* fall through */ 653a5a4af3bSchristos case 244 : /* fall through */ 654a5a4af3bSchristos case 245 : /* fall through */ 655a5a4af3bSchristos case 246 : /* fall through */ 656a5a4af3bSchristos case 247 : /* fall through */ 657a5a4af3bSchristos case 248 : /* fall through */ 658a5a4af3bSchristos case 249 : /* fall through */ 659a5a4af3bSchristos case 250 : /* fall through */ 660a5a4af3bSchristos case 251 : /* fall through */ 661a5a4af3bSchristos case 252 : /* fall through */ 662a5a4af3bSchristos case 253 : /* fall through */ 663a5a4af3bSchristos case 254 : /* fall through */ 664a5a4af3bSchristos case 255 : 665a5a4af3bSchristos { 666a5a4af3bSchristos unsigned int val = (((insn >> 8) & (7 << 0))); 667a5a4af3bSchristos switch (val) 668a5a4af3bSchristos { 669a5a4af3bSchristos case 0 : 670a5a4af3bSchristos if ((entire_insn & 0xff000000) == 0xf8000000) 671a5a4af3bSchristos { itype = M32RXF_INSN_BCL24; goto extract_sfmt_bcl24; } 672a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 673a5a4af3bSchristos case 1 : 674a5a4af3bSchristos if ((entire_insn & 0xff000000) == 0xf9000000) 675a5a4af3bSchristos { itype = M32RXF_INSN_BNCL24; goto extract_sfmt_bcl24; } 676a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 677a5a4af3bSchristos case 4 : 678a5a4af3bSchristos if ((entire_insn & 0xff000000) == 0xfc000000) 679a5a4af3bSchristos { itype = M32RXF_INSN_BC24; goto extract_sfmt_bc24; } 680a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 681a5a4af3bSchristos case 5 : 682a5a4af3bSchristos if ((entire_insn & 0xff000000) == 0xfd000000) 683a5a4af3bSchristos { itype = M32RXF_INSN_BNC24; goto extract_sfmt_bc24; } 684a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 685a5a4af3bSchristos case 6 : 686a5a4af3bSchristos if ((entire_insn & 0xff000000) == 0xfe000000) 687a5a4af3bSchristos { itype = M32RXF_INSN_BL24; goto extract_sfmt_bl24; } 688a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 689a5a4af3bSchristos case 7 : 690a5a4af3bSchristos if ((entire_insn & 0xff000000) == 0xff000000) 691a5a4af3bSchristos { itype = M32RXF_INSN_BRA24; goto extract_sfmt_bra24; } 692a5a4af3bSchristos itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 693a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 694a5a4af3bSchristos } 695a5a4af3bSchristos } 696a5a4af3bSchristos default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty; 697a5a4af3bSchristos } 698a5a4af3bSchristos } 699a5a4af3bSchristos } 700a5a4af3bSchristos 701a5a4af3bSchristos /* The instruction has been decoded, now extract the fields. */ 702a5a4af3bSchristos 703a5a4af3bSchristos extract_sfmt_empty: 704a5a4af3bSchristos { 705a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 706a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 707a5a4af3bSchristos 708a5a4af3bSchristos 709a5a4af3bSchristos /* Record the fields for the semantic handler. */ 710a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0)); 711a5a4af3bSchristos 712a5a4af3bSchristos #undef FLD 713a5a4af3bSchristos return idesc; 714a5a4af3bSchristos } 715a5a4af3bSchristos 716a5a4af3bSchristos extract_sfmt_add: 717a5a4af3bSchristos { 718a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 719a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 720a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 721a5a4af3bSchristos UINT f_r1; 722a5a4af3bSchristos UINT f_r2; 723a5a4af3bSchristos 724a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 725a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 726a5a4af3bSchristos 727a5a4af3bSchristos /* Record the fields for the semantic handler. */ 728a5a4af3bSchristos FLD (f_r1) = f_r1; 729a5a4af3bSchristos FLD (f_r2) = f_r2; 730a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 731a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 732a5a4af3bSchristos 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)); 733a5a4af3bSchristos 734a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 735a5a4af3bSchristos /* Record the fields for profiling. */ 736a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 737a5a4af3bSchristos { 738a5a4af3bSchristos FLD (in_dr) = f_r1; 739a5a4af3bSchristos FLD (in_sr) = f_r2; 740a5a4af3bSchristos FLD (out_dr) = f_r1; 741a5a4af3bSchristos } 742a5a4af3bSchristos #endif 743a5a4af3bSchristos #undef FLD 744a5a4af3bSchristos return idesc; 745a5a4af3bSchristos } 746a5a4af3bSchristos 747a5a4af3bSchristos extract_sfmt_add3: 748a5a4af3bSchristos { 749a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 750a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 751a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 752a5a4af3bSchristos UINT f_r1; 753a5a4af3bSchristos UINT f_r2; 754a5a4af3bSchristos INT f_simm16; 755a5a4af3bSchristos 756a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 757a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 758a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 759a5a4af3bSchristos 760a5a4af3bSchristos /* Record the fields for the semantic handler. */ 761a5a4af3bSchristos FLD (f_simm16) = f_simm16; 762a5a4af3bSchristos FLD (f_r2) = f_r2; 763a5a4af3bSchristos FLD (f_r1) = f_r1; 764a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 765a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 766a5a4af3bSchristos 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)); 767a5a4af3bSchristos 768a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 769a5a4af3bSchristos /* Record the fields for profiling. */ 770a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 771a5a4af3bSchristos { 772a5a4af3bSchristos FLD (in_sr) = f_r2; 773a5a4af3bSchristos FLD (out_dr) = f_r1; 774a5a4af3bSchristos } 775a5a4af3bSchristos #endif 776a5a4af3bSchristos #undef FLD 777a5a4af3bSchristos return idesc; 778a5a4af3bSchristos } 779a5a4af3bSchristos 780a5a4af3bSchristos extract_sfmt_and3: 781a5a4af3bSchristos { 782a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 783a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 784a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_and3.f 785a5a4af3bSchristos UINT f_r1; 786a5a4af3bSchristos UINT f_r2; 787a5a4af3bSchristos UINT f_uimm16; 788a5a4af3bSchristos 789a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 790a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 791a5a4af3bSchristos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 792a5a4af3bSchristos 793a5a4af3bSchristos /* Record the fields for the semantic handler. */ 794a5a4af3bSchristos FLD (f_r2) = f_r2; 795a5a4af3bSchristos FLD (f_uimm16) = f_uimm16; 796a5a4af3bSchristos FLD (f_r1) = f_r1; 797a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 798a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 799a5a4af3bSchristos 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)); 800a5a4af3bSchristos 801a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 802a5a4af3bSchristos /* Record the fields for profiling. */ 803a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 804a5a4af3bSchristos { 805a5a4af3bSchristos FLD (in_sr) = f_r2; 806a5a4af3bSchristos FLD (out_dr) = f_r1; 807a5a4af3bSchristos } 808a5a4af3bSchristos #endif 809a5a4af3bSchristos #undef FLD 810a5a4af3bSchristos return idesc; 811a5a4af3bSchristos } 812a5a4af3bSchristos 813a5a4af3bSchristos extract_sfmt_or3: 814a5a4af3bSchristos { 815a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 816a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 817a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_and3.f 818a5a4af3bSchristos UINT f_r1; 819a5a4af3bSchristos UINT f_r2; 820a5a4af3bSchristos UINT f_uimm16; 821a5a4af3bSchristos 822a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 823a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 824a5a4af3bSchristos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 825a5a4af3bSchristos 826a5a4af3bSchristos /* Record the fields for the semantic handler. */ 827a5a4af3bSchristos FLD (f_r2) = f_r2; 828a5a4af3bSchristos FLD (f_uimm16) = f_uimm16; 829a5a4af3bSchristos FLD (f_r1) = f_r1; 830a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 831a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 832a5a4af3bSchristos 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)); 833a5a4af3bSchristos 834a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 835a5a4af3bSchristos /* Record the fields for profiling. */ 836a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 837a5a4af3bSchristos { 838a5a4af3bSchristos FLD (in_sr) = f_r2; 839a5a4af3bSchristos FLD (out_dr) = f_r1; 840a5a4af3bSchristos } 841a5a4af3bSchristos #endif 842a5a4af3bSchristos #undef FLD 843a5a4af3bSchristos return idesc; 844a5a4af3bSchristos } 845a5a4af3bSchristos 846a5a4af3bSchristos extract_sfmt_addi: 847a5a4af3bSchristos { 848a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 849a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 850a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f 851a5a4af3bSchristos UINT f_r1; 852a5a4af3bSchristos INT f_simm8; 853a5a4af3bSchristos 854a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 855a5a4af3bSchristos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); 856a5a4af3bSchristos 857a5a4af3bSchristos /* Record the fields for the semantic handler. */ 858a5a4af3bSchristos FLD (f_r1) = f_r1; 859a5a4af3bSchristos FLD (f_simm8) = f_simm8; 860a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 861a5a4af3bSchristos 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)); 862a5a4af3bSchristos 863a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 864a5a4af3bSchristos /* Record the fields for profiling. */ 865a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 866a5a4af3bSchristos { 867a5a4af3bSchristos FLD (in_dr) = f_r1; 868a5a4af3bSchristos FLD (out_dr) = f_r1; 869a5a4af3bSchristos } 870a5a4af3bSchristos #endif 871a5a4af3bSchristos #undef FLD 872a5a4af3bSchristos return idesc; 873a5a4af3bSchristos } 874a5a4af3bSchristos 875a5a4af3bSchristos extract_sfmt_addv: 876a5a4af3bSchristos { 877a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 878a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 879a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 880a5a4af3bSchristos UINT f_r1; 881a5a4af3bSchristos UINT f_r2; 882a5a4af3bSchristos 883a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 884a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 885a5a4af3bSchristos 886a5a4af3bSchristos /* Record the fields for the semantic handler. */ 887a5a4af3bSchristos FLD (f_r1) = f_r1; 888a5a4af3bSchristos FLD (f_r2) = f_r2; 889a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 890a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 891a5a4af3bSchristos 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)); 892a5a4af3bSchristos 893a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 894a5a4af3bSchristos /* Record the fields for profiling. */ 895a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 896a5a4af3bSchristos { 897a5a4af3bSchristos FLD (in_dr) = f_r1; 898a5a4af3bSchristos FLD (in_sr) = f_r2; 899a5a4af3bSchristos FLD (out_dr) = f_r1; 900a5a4af3bSchristos } 901a5a4af3bSchristos #endif 902a5a4af3bSchristos #undef FLD 903a5a4af3bSchristos return idesc; 904a5a4af3bSchristos } 905a5a4af3bSchristos 906a5a4af3bSchristos extract_sfmt_addv3: 907a5a4af3bSchristos { 908a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 909a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 910a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 911a5a4af3bSchristos UINT f_r1; 912a5a4af3bSchristos UINT f_r2; 913a5a4af3bSchristos INT f_simm16; 914a5a4af3bSchristos 915a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 916a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 917a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 918a5a4af3bSchristos 919a5a4af3bSchristos /* Record the fields for the semantic handler. */ 920a5a4af3bSchristos FLD (f_simm16) = f_simm16; 921a5a4af3bSchristos FLD (f_r2) = f_r2; 922a5a4af3bSchristos FLD (f_r1) = f_r1; 923a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 924a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 925a5a4af3bSchristos 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)); 926a5a4af3bSchristos 927a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 928a5a4af3bSchristos /* Record the fields for profiling. */ 929a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 930a5a4af3bSchristos { 931a5a4af3bSchristos FLD (in_sr) = f_r2; 932a5a4af3bSchristos FLD (out_dr) = f_r1; 933a5a4af3bSchristos } 934a5a4af3bSchristos #endif 935a5a4af3bSchristos #undef FLD 936a5a4af3bSchristos return idesc; 937a5a4af3bSchristos } 938a5a4af3bSchristos 939a5a4af3bSchristos extract_sfmt_addx: 940a5a4af3bSchristos { 941a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 942a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 943a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 944a5a4af3bSchristos UINT f_r1; 945a5a4af3bSchristos UINT f_r2; 946a5a4af3bSchristos 947a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 948a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 949a5a4af3bSchristos 950a5a4af3bSchristos /* Record the fields for the semantic handler. */ 951a5a4af3bSchristos FLD (f_r1) = f_r1; 952a5a4af3bSchristos FLD (f_r2) = f_r2; 953a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 954a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 955a5a4af3bSchristos 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)); 956a5a4af3bSchristos 957a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 958a5a4af3bSchristos /* Record the fields for profiling. */ 959a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 960a5a4af3bSchristos { 961a5a4af3bSchristos FLD (in_dr) = f_r1; 962a5a4af3bSchristos FLD (in_sr) = f_r2; 963a5a4af3bSchristos FLD (out_dr) = f_r1; 964a5a4af3bSchristos } 965a5a4af3bSchristos #endif 966a5a4af3bSchristos #undef FLD 967a5a4af3bSchristos return idesc; 968a5a4af3bSchristos } 969a5a4af3bSchristos 970a5a4af3bSchristos extract_sfmt_bc8: 971a5a4af3bSchristos { 972a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 973a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 974a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 975a5a4af3bSchristos SI f_disp8; 976a5a4af3bSchristos 977a5a4af3bSchristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4)))); 978a5a4af3bSchristos 979a5a4af3bSchristos /* Record the fields for the semantic handler. */ 980a5a4af3bSchristos FLD (i_disp8) = f_disp8; 981a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 982a5a4af3bSchristos 983a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 984a5a4af3bSchristos /* Record the fields for profiling. */ 985a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 986a5a4af3bSchristos { 987a5a4af3bSchristos } 988a5a4af3bSchristos #endif 989a5a4af3bSchristos #undef FLD 990a5a4af3bSchristos return idesc; 991a5a4af3bSchristos } 992a5a4af3bSchristos 993a5a4af3bSchristos extract_sfmt_bc24: 994a5a4af3bSchristos { 995a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 996a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 997a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 998a5a4af3bSchristos SI f_disp24; 999a5a4af3bSchristos 1000a5a4af3bSchristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc)); 1001a5a4af3bSchristos 1002a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1003a5a4af3bSchristos FLD (i_disp24) = f_disp24; 1004a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 1005a5a4af3bSchristos 1006a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1007a5a4af3bSchristos /* Record the fields for profiling. */ 1008a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1009a5a4af3bSchristos { 1010a5a4af3bSchristos } 1011a5a4af3bSchristos #endif 1012a5a4af3bSchristos #undef FLD 1013a5a4af3bSchristos return idesc; 1014a5a4af3bSchristos } 1015a5a4af3bSchristos 1016a5a4af3bSchristos extract_sfmt_beq: 1017a5a4af3bSchristos { 1018a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1019a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1020a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 1021a5a4af3bSchristos UINT f_r1; 1022a5a4af3bSchristos UINT f_r2; 1023a5a4af3bSchristos SI f_disp16; 1024a5a4af3bSchristos 1025a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1026a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1027a5a4af3bSchristos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) << (2))) + (pc)); 1028a5a4af3bSchristos 1029a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1030a5a4af3bSchristos FLD (f_r1) = f_r1; 1031a5a4af3bSchristos FLD (f_r2) = f_r2; 1032a5a4af3bSchristos FLD (i_disp16) = f_disp16; 1033a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1034a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1035a5a4af3bSchristos 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)); 1036a5a4af3bSchristos 1037a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1038a5a4af3bSchristos /* Record the fields for profiling. */ 1039a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1040a5a4af3bSchristos { 1041a5a4af3bSchristos FLD (in_src1) = f_r1; 1042a5a4af3bSchristos FLD (in_src2) = f_r2; 1043a5a4af3bSchristos } 1044a5a4af3bSchristos #endif 1045a5a4af3bSchristos #undef FLD 1046a5a4af3bSchristos return idesc; 1047a5a4af3bSchristos } 1048a5a4af3bSchristos 1049a5a4af3bSchristos extract_sfmt_beqz: 1050a5a4af3bSchristos { 1051a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1052a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1053a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 1054a5a4af3bSchristos UINT f_r2; 1055a5a4af3bSchristos SI f_disp16; 1056a5a4af3bSchristos 1057a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1058a5a4af3bSchristos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) << (2))) + (pc)); 1059a5a4af3bSchristos 1060a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1061a5a4af3bSchristos FLD (f_r2) = f_r2; 1062a5a4af3bSchristos FLD (i_disp16) = f_disp16; 1063a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1064a5a4af3bSchristos 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)); 1065a5a4af3bSchristos 1066a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1067a5a4af3bSchristos /* Record the fields for profiling. */ 1068a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1069a5a4af3bSchristos { 1070a5a4af3bSchristos FLD (in_src2) = f_r2; 1071a5a4af3bSchristos } 1072a5a4af3bSchristos #endif 1073a5a4af3bSchristos #undef FLD 1074a5a4af3bSchristos return idesc; 1075a5a4af3bSchristos } 1076a5a4af3bSchristos 1077a5a4af3bSchristos extract_sfmt_bl8: 1078a5a4af3bSchristos { 1079a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1080a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1081a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 1082a5a4af3bSchristos SI f_disp8; 1083a5a4af3bSchristos 1084a5a4af3bSchristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4)))); 1085a5a4af3bSchristos 1086a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1087a5a4af3bSchristos FLD (i_disp8) = f_disp8; 1088a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 1089a5a4af3bSchristos 1090a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1091a5a4af3bSchristos /* Record the fields for profiling. */ 1092a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1093a5a4af3bSchristos { 1094a5a4af3bSchristos FLD (out_h_gr_SI_14) = 14; 1095a5a4af3bSchristos } 1096a5a4af3bSchristos #endif 1097a5a4af3bSchristos #undef FLD 1098a5a4af3bSchristos return idesc; 1099a5a4af3bSchristos } 1100a5a4af3bSchristos 1101a5a4af3bSchristos extract_sfmt_bl24: 1102a5a4af3bSchristos { 1103a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1104a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1105a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 1106a5a4af3bSchristos SI f_disp24; 1107a5a4af3bSchristos 1108a5a4af3bSchristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc)); 1109a5a4af3bSchristos 1110a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1111a5a4af3bSchristos FLD (i_disp24) = f_disp24; 1112a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 1113a5a4af3bSchristos 1114a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1115a5a4af3bSchristos /* Record the fields for profiling. */ 1116a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1117a5a4af3bSchristos { 1118a5a4af3bSchristos FLD (out_h_gr_SI_14) = 14; 1119a5a4af3bSchristos } 1120a5a4af3bSchristos #endif 1121a5a4af3bSchristos #undef FLD 1122a5a4af3bSchristos return idesc; 1123a5a4af3bSchristos } 1124a5a4af3bSchristos 1125a5a4af3bSchristos extract_sfmt_bcl8: 1126a5a4af3bSchristos { 1127a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1128a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1129a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 1130a5a4af3bSchristos SI f_disp8; 1131a5a4af3bSchristos 1132a5a4af3bSchristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4)))); 1133a5a4af3bSchristos 1134a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1135a5a4af3bSchristos FLD (i_disp8) = f_disp8; 1136a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 1137a5a4af3bSchristos 1138a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1139a5a4af3bSchristos /* Record the fields for profiling. */ 1140a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1141a5a4af3bSchristos { 1142a5a4af3bSchristos FLD (out_h_gr_SI_14) = 14; 1143a5a4af3bSchristos } 1144a5a4af3bSchristos #endif 1145a5a4af3bSchristos #undef FLD 1146a5a4af3bSchristos return idesc; 1147a5a4af3bSchristos } 1148a5a4af3bSchristos 1149a5a4af3bSchristos extract_sfmt_bcl24: 1150a5a4af3bSchristos { 1151a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1152a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1153a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 1154a5a4af3bSchristos SI f_disp24; 1155a5a4af3bSchristos 1156a5a4af3bSchristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc)); 1157a5a4af3bSchristos 1158a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1159a5a4af3bSchristos FLD (i_disp24) = f_disp24; 1160a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 1161a5a4af3bSchristos 1162a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1163a5a4af3bSchristos /* Record the fields for profiling. */ 1164a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1165a5a4af3bSchristos { 1166a5a4af3bSchristos FLD (out_h_gr_SI_14) = 14; 1167a5a4af3bSchristos } 1168a5a4af3bSchristos #endif 1169a5a4af3bSchristos #undef FLD 1170a5a4af3bSchristos return idesc; 1171a5a4af3bSchristos } 1172a5a4af3bSchristos 1173a5a4af3bSchristos extract_sfmt_bra8: 1174a5a4af3bSchristos { 1175a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1176a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1177a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 1178a5a4af3bSchristos SI f_disp8; 1179a5a4af3bSchristos 1180a5a4af3bSchristos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4)))); 1181a5a4af3bSchristos 1182a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1183a5a4af3bSchristos FLD (i_disp8) = f_disp8; 1184a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 1185a5a4af3bSchristos 1186a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1187a5a4af3bSchristos /* Record the fields for profiling. */ 1188a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1189a5a4af3bSchristos { 1190a5a4af3bSchristos } 1191a5a4af3bSchristos #endif 1192a5a4af3bSchristos #undef FLD 1193a5a4af3bSchristos return idesc; 1194a5a4af3bSchristos } 1195a5a4af3bSchristos 1196a5a4af3bSchristos extract_sfmt_bra24: 1197a5a4af3bSchristos { 1198a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1199a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1200a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 1201a5a4af3bSchristos SI f_disp24; 1202a5a4af3bSchristos 1203a5a4af3bSchristos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc)); 1204a5a4af3bSchristos 1205a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1206a5a4af3bSchristos FLD (i_disp24) = f_disp24; 1207a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 1208a5a4af3bSchristos 1209a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1210a5a4af3bSchristos /* Record the fields for profiling. */ 1211a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1212a5a4af3bSchristos { 1213a5a4af3bSchristos } 1214a5a4af3bSchristos #endif 1215a5a4af3bSchristos #undef FLD 1216a5a4af3bSchristos return idesc; 1217a5a4af3bSchristos } 1218a5a4af3bSchristos 1219a5a4af3bSchristos extract_sfmt_cmp: 1220a5a4af3bSchristos { 1221a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1222a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1223a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 1224a5a4af3bSchristos UINT f_r1; 1225a5a4af3bSchristos UINT f_r2; 1226a5a4af3bSchristos 1227a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1228a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1229a5a4af3bSchristos 1230a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1231a5a4af3bSchristos FLD (f_r1) = f_r1; 1232a5a4af3bSchristos FLD (f_r2) = f_r2; 1233a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1234a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1235a5a4af3bSchristos 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)); 1236a5a4af3bSchristos 1237a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1238a5a4af3bSchristos /* Record the fields for profiling. */ 1239a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1240a5a4af3bSchristos { 1241a5a4af3bSchristos FLD (in_src1) = f_r1; 1242a5a4af3bSchristos FLD (in_src2) = f_r2; 1243a5a4af3bSchristos } 1244a5a4af3bSchristos #endif 1245a5a4af3bSchristos #undef FLD 1246a5a4af3bSchristos return idesc; 1247a5a4af3bSchristos } 1248a5a4af3bSchristos 1249a5a4af3bSchristos extract_sfmt_cmpi: 1250a5a4af3bSchristos { 1251a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1252a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1253a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 1254a5a4af3bSchristos UINT f_r2; 1255a5a4af3bSchristos INT f_simm16; 1256a5a4af3bSchristos 1257a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1258a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1259a5a4af3bSchristos 1260a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1261a5a4af3bSchristos FLD (f_simm16) = f_simm16; 1262a5a4af3bSchristos FLD (f_r2) = f_r2; 1263a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1264a5a4af3bSchristos 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)); 1265a5a4af3bSchristos 1266a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1267a5a4af3bSchristos /* Record the fields for profiling. */ 1268a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1269a5a4af3bSchristos { 1270a5a4af3bSchristos FLD (in_src2) = f_r2; 1271a5a4af3bSchristos } 1272a5a4af3bSchristos #endif 1273a5a4af3bSchristos #undef FLD 1274a5a4af3bSchristos return idesc; 1275a5a4af3bSchristos } 1276a5a4af3bSchristos 1277a5a4af3bSchristos extract_sfmt_cmpz: 1278a5a4af3bSchristos { 1279a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1280a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1281a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 1282a5a4af3bSchristos UINT f_r2; 1283a5a4af3bSchristos 1284a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1285a5a4af3bSchristos 1286a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1287a5a4af3bSchristos FLD (f_r2) = f_r2; 1288a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1289a5a4af3bSchristos 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)); 1290a5a4af3bSchristos 1291a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1292a5a4af3bSchristos /* Record the fields for profiling. */ 1293a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1294a5a4af3bSchristos { 1295a5a4af3bSchristos FLD (in_src2) = f_r2; 1296a5a4af3bSchristos } 1297a5a4af3bSchristos #endif 1298a5a4af3bSchristos #undef FLD 1299a5a4af3bSchristos return idesc; 1300a5a4af3bSchristos } 1301a5a4af3bSchristos 1302a5a4af3bSchristos extract_sfmt_div: 1303a5a4af3bSchristos { 1304a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1305a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1306a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1307a5a4af3bSchristos UINT f_r1; 1308a5a4af3bSchristos UINT f_r2; 1309a5a4af3bSchristos 1310a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1311a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1312a5a4af3bSchristos 1313a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1314a5a4af3bSchristos FLD (f_r1) = f_r1; 1315a5a4af3bSchristos FLD (f_r2) = f_r2; 1316a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1317a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1318a5a4af3bSchristos 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)); 1319a5a4af3bSchristos 1320a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1321a5a4af3bSchristos /* Record the fields for profiling. */ 1322a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1323a5a4af3bSchristos { 1324a5a4af3bSchristos FLD (in_dr) = f_r1; 1325a5a4af3bSchristos FLD (in_sr) = f_r2; 1326a5a4af3bSchristos FLD (out_dr) = f_r1; 1327a5a4af3bSchristos } 1328a5a4af3bSchristos #endif 1329a5a4af3bSchristos #undef FLD 1330a5a4af3bSchristos return idesc; 1331a5a4af3bSchristos } 1332a5a4af3bSchristos 1333a5a4af3bSchristos extract_sfmt_jc: 1334a5a4af3bSchristos { 1335a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1336a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1337a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 1338a5a4af3bSchristos UINT f_r2; 1339a5a4af3bSchristos 1340a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1341a5a4af3bSchristos 1342a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1343a5a4af3bSchristos FLD (f_r2) = f_r2; 1344a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1345a5a4af3bSchristos 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)); 1346a5a4af3bSchristos 1347a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1348a5a4af3bSchristos /* Record the fields for profiling. */ 1349a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1350a5a4af3bSchristos { 1351a5a4af3bSchristos FLD (in_sr) = f_r2; 1352a5a4af3bSchristos } 1353a5a4af3bSchristos #endif 1354a5a4af3bSchristos #undef FLD 1355a5a4af3bSchristos return idesc; 1356a5a4af3bSchristos } 1357a5a4af3bSchristos 1358a5a4af3bSchristos extract_sfmt_jl: 1359a5a4af3bSchristos { 1360a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1361a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1362a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 1363a5a4af3bSchristos UINT f_r2; 1364a5a4af3bSchristos 1365a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1366a5a4af3bSchristos 1367a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1368a5a4af3bSchristos FLD (f_r2) = f_r2; 1369a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1370a5a4af3bSchristos 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)); 1371a5a4af3bSchristos 1372a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1373a5a4af3bSchristos /* Record the fields for profiling. */ 1374a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1375a5a4af3bSchristos { 1376a5a4af3bSchristos FLD (in_sr) = f_r2; 1377a5a4af3bSchristos FLD (out_h_gr_SI_14) = 14; 1378a5a4af3bSchristos } 1379a5a4af3bSchristos #endif 1380a5a4af3bSchristos #undef FLD 1381a5a4af3bSchristos return idesc; 1382a5a4af3bSchristos } 1383a5a4af3bSchristos 1384a5a4af3bSchristos extract_sfmt_jmp: 1385a5a4af3bSchristos { 1386a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1387a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1388a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 1389a5a4af3bSchristos UINT f_r2; 1390a5a4af3bSchristos 1391a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1392a5a4af3bSchristos 1393a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1394a5a4af3bSchristos FLD (f_r2) = f_r2; 1395a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1396a5a4af3bSchristos 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)); 1397a5a4af3bSchristos 1398a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1399a5a4af3bSchristos /* Record the fields for profiling. */ 1400a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1401a5a4af3bSchristos { 1402a5a4af3bSchristos FLD (in_sr) = f_r2; 1403a5a4af3bSchristos } 1404a5a4af3bSchristos #endif 1405a5a4af3bSchristos #undef FLD 1406a5a4af3bSchristos return idesc; 1407a5a4af3bSchristos } 1408a5a4af3bSchristos 1409a5a4af3bSchristos extract_sfmt_ld: 1410a5a4af3bSchristos { 1411a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1412a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1413a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1414a5a4af3bSchristos UINT f_r1; 1415a5a4af3bSchristos UINT f_r2; 1416a5a4af3bSchristos 1417a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1418a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1419a5a4af3bSchristos 1420a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1421a5a4af3bSchristos FLD (f_r2) = f_r2; 1422a5a4af3bSchristos FLD (f_r1) = f_r1; 1423a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1424a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1425a5a4af3bSchristos 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)); 1426a5a4af3bSchristos 1427a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1428a5a4af3bSchristos /* Record the fields for profiling. */ 1429a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1430a5a4af3bSchristos { 1431a5a4af3bSchristos FLD (in_sr) = f_r2; 1432a5a4af3bSchristos FLD (out_dr) = f_r1; 1433a5a4af3bSchristos } 1434a5a4af3bSchristos #endif 1435a5a4af3bSchristos #undef FLD 1436a5a4af3bSchristos return idesc; 1437a5a4af3bSchristos } 1438a5a4af3bSchristos 1439a5a4af3bSchristos extract_sfmt_ld_d: 1440a5a4af3bSchristos { 1441a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1442a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1443a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1444a5a4af3bSchristos UINT f_r1; 1445a5a4af3bSchristos UINT f_r2; 1446a5a4af3bSchristos INT f_simm16; 1447a5a4af3bSchristos 1448a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1449a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1450a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1451a5a4af3bSchristos 1452a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1453a5a4af3bSchristos FLD (f_simm16) = f_simm16; 1454a5a4af3bSchristos FLD (f_r2) = f_r2; 1455a5a4af3bSchristos FLD (f_r1) = f_r1; 1456a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1457a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1458a5a4af3bSchristos 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)); 1459a5a4af3bSchristos 1460a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1461a5a4af3bSchristos /* Record the fields for profiling. */ 1462a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1463a5a4af3bSchristos { 1464a5a4af3bSchristos FLD (in_sr) = f_r2; 1465a5a4af3bSchristos FLD (out_dr) = f_r1; 1466a5a4af3bSchristos } 1467a5a4af3bSchristos #endif 1468a5a4af3bSchristos #undef FLD 1469a5a4af3bSchristos return idesc; 1470a5a4af3bSchristos } 1471a5a4af3bSchristos 1472a5a4af3bSchristos extract_sfmt_ldb: 1473a5a4af3bSchristos { 1474a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1475a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1476a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1477a5a4af3bSchristos UINT f_r1; 1478a5a4af3bSchristos UINT f_r2; 1479a5a4af3bSchristos 1480a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1481a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1482a5a4af3bSchristos 1483a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1484a5a4af3bSchristos FLD (f_r2) = f_r2; 1485a5a4af3bSchristos FLD (f_r1) = f_r1; 1486a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1487a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1488a5a4af3bSchristos 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)); 1489a5a4af3bSchristos 1490a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1491a5a4af3bSchristos /* Record the fields for profiling. */ 1492a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1493a5a4af3bSchristos { 1494a5a4af3bSchristos FLD (in_sr) = f_r2; 1495a5a4af3bSchristos FLD (out_dr) = f_r1; 1496a5a4af3bSchristos } 1497a5a4af3bSchristos #endif 1498a5a4af3bSchristos #undef FLD 1499a5a4af3bSchristos return idesc; 1500a5a4af3bSchristos } 1501a5a4af3bSchristos 1502a5a4af3bSchristos extract_sfmt_ldb_d: 1503a5a4af3bSchristos { 1504a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1505a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1506a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1507a5a4af3bSchristos UINT f_r1; 1508a5a4af3bSchristos UINT f_r2; 1509a5a4af3bSchristos INT f_simm16; 1510a5a4af3bSchristos 1511a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1512a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1513a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1514a5a4af3bSchristos 1515a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1516a5a4af3bSchristos FLD (f_simm16) = f_simm16; 1517a5a4af3bSchristos FLD (f_r2) = f_r2; 1518a5a4af3bSchristos FLD (f_r1) = f_r1; 1519a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1520a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1521a5a4af3bSchristos 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)); 1522a5a4af3bSchristos 1523a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1524a5a4af3bSchristos /* Record the fields for profiling. */ 1525a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1526a5a4af3bSchristos { 1527a5a4af3bSchristos FLD (in_sr) = f_r2; 1528a5a4af3bSchristos FLD (out_dr) = f_r1; 1529a5a4af3bSchristos } 1530a5a4af3bSchristos #endif 1531a5a4af3bSchristos #undef FLD 1532a5a4af3bSchristos return idesc; 1533a5a4af3bSchristos } 1534a5a4af3bSchristos 1535a5a4af3bSchristos extract_sfmt_ldh: 1536a5a4af3bSchristos { 1537a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1538a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1539a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1540a5a4af3bSchristos UINT f_r1; 1541a5a4af3bSchristos UINT f_r2; 1542a5a4af3bSchristos 1543a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1544a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1545a5a4af3bSchristos 1546a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1547a5a4af3bSchristos FLD (f_r2) = f_r2; 1548a5a4af3bSchristos FLD (f_r1) = f_r1; 1549a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1550a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1551a5a4af3bSchristos 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)); 1552a5a4af3bSchristos 1553a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1554a5a4af3bSchristos /* Record the fields for profiling. */ 1555a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1556a5a4af3bSchristos { 1557a5a4af3bSchristos FLD (in_sr) = f_r2; 1558a5a4af3bSchristos FLD (out_dr) = f_r1; 1559a5a4af3bSchristos } 1560a5a4af3bSchristos #endif 1561a5a4af3bSchristos #undef FLD 1562a5a4af3bSchristos return idesc; 1563a5a4af3bSchristos } 1564a5a4af3bSchristos 1565a5a4af3bSchristos extract_sfmt_ldh_d: 1566a5a4af3bSchristos { 1567a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1568a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1569a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1570a5a4af3bSchristos UINT f_r1; 1571a5a4af3bSchristos UINT f_r2; 1572a5a4af3bSchristos INT f_simm16; 1573a5a4af3bSchristos 1574a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1575a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1576a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1577a5a4af3bSchristos 1578a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1579a5a4af3bSchristos FLD (f_simm16) = f_simm16; 1580a5a4af3bSchristos FLD (f_r2) = f_r2; 1581a5a4af3bSchristos FLD (f_r1) = f_r1; 1582a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1583a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1584a5a4af3bSchristos 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)); 1585a5a4af3bSchristos 1586a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1587a5a4af3bSchristos /* Record the fields for profiling. */ 1588a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1589a5a4af3bSchristos { 1590a5a4af3bSchristos FLD (in_sr) = f_r2; 1591a5a4af3bSchristos FLD (out_dr) = f_r1; 1592a5a4af3bSchristos } 1593a5a4af3bSchristos #endif 1594a5a4af3bSchristos #undef FLD 1595a5a4af3bSchristos return idesc; 1596a5a4af3bSchristos } 1597a5a4af3bSchristos 1598a5a4af3bSchristos extract_sfmt_ld_plus: 1599a5a4af3bSchristos { 1600a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1601a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1602a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1603a5a4af3bSchristos UINT f_r1; 1604a5a4af3bSchristos UINT f_r2; 1605a5a4af3bSchristos 1606a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1607a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1608a5a4af3bSchristos 1609a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1610a5a4af3bSchristos FLD (f_r2) = f_r2; 1611a5a4af3bSchristos FLD (f_r1) = f_r1; 1612a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1613a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1614a5a4af3bSchristos 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)); 1615a5a4af3bSchristos 1616a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1617a5a4af3bSchristos /* Record the fields for profiling. */ 1618a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1619a5a4af3bSchristos { 1620a5a4af3bSchristos FLD (in_sr) = f_r2; 1621a5a4af3bSchristos FLD (out_dr) = f_r1; 1622a5a4af3bSchristos FLD (out_sr) = f_r2; 1623a5a4af3bSchristos } 1624a5a4af3bSchristos #endif 1625a5a4af3bSchristos #undef FLD 1626a5a4af3bSchristos return idesc; 1627a5a4af3bSchristos } 1628a5a4af3bSchristos 1629a5a4af3bSchristos extract_sfmt_ld24: 1630a5a4af3bSchristos { 1631a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1632a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1633a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld24.f 1634a5a4af3bSchristos UINT f_r1; 1635a5a4af3bSchristos UINT f_uimm24; 1636a5a4af3bSchristos 1637a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1638a5a4af3bSchristos f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24); 1639a5a4af3bSchristos 1640a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1641a5a4af3bSchristos FLD (f_r1) = f_r1; 1642a5a4af3bSchristos FLD (i_uimm24) = f_uimm24; 1643a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1644a5a4af3bSchristos 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)); 1645a5a4af3bSchristos 1646a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1647a5a4af3bSchristos /* Record the fields for profiling. */ 1648a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1649a5a4af3bSchristos { 1650a5a4af3bSchristos FLD (out_dr) = f_r1; 1651a5a4af3bSchristos } 1652a5a4af3bSchristos #endif 1653a5a4af3bSchristos #undef FLD 1654a5a4af3bSchristos return idesc; 1655a5a4af3bSchristos } 1656a5a4af3bSchristos 1657a5a4af3bSchristos extract_sfmt_ldi8: 1658a5a4af3bSchristos { 1659a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1660a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1661a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f 1662a5a4af3bSchristos UINT f_r1; 1663a5a4af3bSchristos INT f_simm8; 1664a5a4af3bSchristos 1665a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1666a5a4af3bSchristos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); 1667a5a4af3bSchristos 1668a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1669a5a4af3bSchristos FLD (f_simm8) = f_simm8; 1670a5a4af3bSchristos FLD (f_r1) = f_r1; 1671a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1672a5a4af3bSchristos 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)); 1673a5a4af3bSchristos 1674a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1675a5a4af3bSchristos /* Record the fields for profiling. */ 1676a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1677a5a4af3bSchristos { 1678a5a4af3bSchristos FLD (out_dr) = f_r1; 1679a5a4af3bSchristos } 1680a5a4af3bSchristos #endif 1681a5a4af3bSchristos #undef FLD 1682a5a4af3bSchristos return idesc; 1683a5a4af3bSchristos } 1684a5a4af3bSchristos 1685a5a4af3bSchristos extract_sfmt_ldi16: 1686a5a4af3bSchristos { 1687a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1688a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1689a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1690a5a4af3bSchristos UINT f_r1; 1691a5a4af3bSchristos INT f_simm16; 1692a5a4af3bSchristos 1693a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1694a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1695a5a4af3bSchristos 1696a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1697a5a4af3bSchristos FLD (f_simm16) = f_simm16; 1698a5a4af3bSchristos FLD (f_r1) = f_r1; 1699a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1700a5a4af3bSchristos 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)); 1701a5a4af3bSchristos 1702a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1703a5a4af3bSchristos /* Record the fields for profiling. */ 1704a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1705a5a4af3bSchristos { 1706a5a4af3bSchristos FLD (out_dr) = f_r1; 1707a5a4af3bSchristos } 1708a5a4af3bSchristos #endif 1709a5a4af3bSchristos #undef FLD 1710a5a4af3bSchristos return idesc; 1711a5a4af3bSchristos } 1712a5a4af3bSchristos 1713a5a4af3bSchristos extract_sfmt_lock: 1714a5a4af3bSchristos { 1715a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1716a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1717a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1718a5a4af3bSchristos UINT f_r1; 1719a5a4af3bSchristos UINT f_r2; 1720a5a4af3bSchristos 1721a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1722a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1723a5a4af3bSchristos 1724a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1725a5a4af3bSchristos FLD (f_r2) = f_r2; 1726a5a4af3bSchristos FLD (f_r1) = f_r1; 1727a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1728a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1729a5a4af3bSchristos 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)); 1730a5a4af3bSchristos 1731a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1732a5a4af3bSchristos /* Record the fields for profiling. */ 1733a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1734a5a4af3bSchristos { 1735a5a4af3bSchristos FLD (in_sr) = f_r2; 1736a5a4af3bSchristos FLD (out_dr) = f_r1; 1737a5a4af3bSchristos } 1738a5a4af3bSchristos #endif 1739a5a4af3bSchristos #undef FLD 1740a5a4af3bSchristos return idesc; 1741a5a4af3bSchristos } 1742a5a4af3bSchristos 1743a5a4af3bSchristos extract_sfmt_machi_a: 1744a5a4af3bSchristos { 1745a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1746a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1747a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 1748a5a4af3bSchristos UINT f_r1; 1749a5a4af3bSchristos UINT f_acc; 1750a5a4af3bSchristos UINT f_r2; 1751a5a4af3bSchristos 1752a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1753a5a4af3bSchristos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1); 1754a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1755a5a4af3bSchristos 1756a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1757a5a4af3bSchristos FLD (f_acc) = f_acc; 1758a5a4af3bSchristos FLD (f_r1) = f_r1; 1759a5a4af3bSchristos FLD (f_r2) = f_r2; 1760a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1761a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1762a5a4af3bSchristos 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)); 1763a5a4af3bSchristos 1764a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1765a5a4af3bSchristos /* Record the fields for profiling. */ 1766a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1767a5a4af3bSchristos { 1768a5a4af3bSchristos FLD (in_src1) = f_r1; 1769a5a4af3bSchristos FLD (in_src2) = f_r2; 1770a5a4af3bSchristos } 1771a5a4af3bSchristos #endif 1772a5a4af3bSchristos #undef FLD 1773a5a4af3bSchristos return idesc; 1774a5a4af3bSchristos } 1775a5a4af3bSchristos 1776a5a4af3bSchristos extract_sfmt_mulhi_a: 1777a5a4af3bSchristos { 1778a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1779a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1780a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 1781a5a4af3bSchristos UINT f_r1; 1782a5a4af3bSchristos UINT f_acc; 1783a5a4af3bSchristos UINT f_r2; 1784a5a4af3bSchristos 1785a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1786a5a4af3bSchristos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1); 1787a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1788a5a4af3bSchristos 1789a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1790a5a4af3bSchristos FLD (f_r1) = f_r1; 1791a5a4af3bSchristos FLD (f_r2) = f_r2; 1792a5a4af3bSchristos FLD (f_acc) = f_acc; 1793a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1794a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1795a5a4af3bSchristos 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)); 1796a5a4af3bSchristos 1797a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1798a5a4af3bSchristos /* Record the fields for profiling. */ 1799a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1800a5a4af3bSchristos { 1801a5a4af3bSchristos FLD (in_src1) = f_r1; 1802a5a4af3bSchristos FLD (in_src2) = f_r2; 1803a5a4af3bSchristos } 1804a5a4af3bSchristos #endif 1805a5a4af3bSchristos #undef FLD 1806a5a4af3bSchristos return idesc; 1807a5a4af3bSchristos } 1808a5a4af3bSchristos 1809a5a4af3bSchristos extract_sfmt_mv: 1810a5a4af3bSchristos { 1811a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1812a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1813a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1814a5a4af3bSchristos UINT f_r1; 1815a5a4af3bSchristos UINT f_r2; 1816a5a4af3bSchristos 1817a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1818a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1819a5a4af3bSchristos 1820a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1821a5a4af3bSchristos FLD (f_r2) = f_r2; 1822a5a4af3bSchristos FLD (f_r1) = f_r1; 1823a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1824a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1825a5a4af3bSchristos 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)); 1826a5a4af3bSchristos 1827a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1828a5a4af3bSchristos /* Record the fields for profiling. */ 1829a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1830a5a4af3bSchristos { 1831a5a4af3bSchristos FLD (in_sr) = f_r2; 1832a5a4af3bSchristos FLD (out_dr) = f_r1; 1833a5a4af3bSchristos } 1834a5a4af3bSchristos #endif 1835a5a4af3bSchristos #undef FLD 1836a5a4af3bSchristos return idesc; 1837a5a4af3bSchristos } 1838a5a4af3bSchristos 1839a5a4af3bSchristos extract_sfmt_mvfachi_a: 1840a5a4af3bSchristos { 1841a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1842a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1843a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 1844a5a4af3bSchristos UINT f_r1; 1845a5a4af3bSchristos UINT f_accs; 1846a5a4af3bSchristos 1847a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1848a5a4af3bSchristos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 1849a5a4af3bSchristos 1850a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1851a5a4af3bSchristos FLD (f_accs) = f_accs; 1852a5a4af3bSchristos FLD (f_r1) = f_r1; 1853a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1854a5a4af3bSchristos 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)); 1855a5a4af3bSchristos 1856a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1857a5a4af3bSchristos /* Record the fields for profiling. */ 1858a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1859a5a4af3bSchristos { 1860a5a4af3bSchristos FLD (out_dr) = f_r1; 1861a5a4af3bSchristos } 1862a5a4af3bSchristos #endif 1863a5a4af3bSchristos #undef FLD 1864a5a4af3bSchristos return idesc; 1865a5a4af3bSchristos } 1866a5a4af3bSchristos 1867a5a4af3bSchristos extract_sfmt_mvfc: 1868a5a4af3bSchristos { 1869a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1870a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1871a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1872a5a4af3bSchristos UINT f_r1; 1873a5a4af3bSchristos UINT f_r2; 1874a5a4af3bSchristos 1875a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1876a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1877a5a4af3bSchristos 1878a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1879a5a4af3bSchristos FLD (f_r2) = f_r2; 1880a5a4af3bSchristos FLD (f_r1) = f_r1; 1881a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1882a5a4af3bSchristos 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)); 1883a5a4af3bSchristos 1884a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1885a5a4af3bSchristos /* Record the fields for profiling. */ 1886a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1887a5a4af3bSchristos { 1888a5a4af3bSchristos FLD (out_dr) = f_r1; 1889a5a4af3bSchristos } 1890a5a4af3bSchristos #endif 1891a5a4af3bSchristos #undef FLD 1892a5a4af3bSchristos return idesc; 1893a5a4af3bSchristos } 1894a5a4af3bSchristos 1895a5a4af3bSchristos extract_sfmt_mvtachi_a: 1896a5a4af3bSchristos { 1897a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1898a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1899a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 1900a5a4af3bSchristos UINT f_r1; 1901a5a4af3bSchristos UINT f_accs; 1902a5a4af3bSchristos 1903a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1904a5a4af3bSchristos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 1905a5a4af3bSchristos 1906a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1907a5a4af3bSchristos FLD (f_accs) = f_accs; 1908a5a4af3bSchristos FLD (f_r1) = f_r1; 1909a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1910a5a4af3bSchristos 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)); 1911a5a4af3bSchristos 1912a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1913a5a4af3bSchristos /* Record the fields for profiling. */ 1914a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1915a5a4af3bSchristos { 1916a5a4af3bSchristos FLD (in_src1) = f_r1; 1917a5a4af3bSchristos } 1918a5a4af3bSchristos #endif 1919a5a4af3bSchristos #undef FLD 1920a5a4af3bSchristos return idesc; 1921a5a4af3bSchristos } 1922a5a4af3bSchristos 1923a5a4af3bSchristos extract_sfmt_mvtc: 1924a5a4af3bSchristos { 1925a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1926a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1927a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1928a5a4af3bSchristos UINT f_r1; 1929a5a4af3bSchristos UINT f_r2; 1930a5a4af3bSchristos 1931a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1932a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1933a5a4af3bSchristos 1934a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1935a5a4af3bSchristos FLD (f_r2) = f_r2; 1936a5a4af3bSchristos FLD (f_r1) = f_r1; 1937a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1938a5a4af3bSchristos 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)); 1939a5a4af3bSchristos 1940a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1941a5a4af3bSchristos /* Record the fields for profiling. */ 1942a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1943a5a4af3bSchristos { 1944a5a4af3bSchristos FLD (in_sr) = f_r2; 1945a5a4af3bSchristos } 1946a5a4af3bSchristos #endif 1947a5a4af3bSchristos #undef FLD 1948a5a4af3bSchristos return idesc; 1949a5a4af3bSchristos } 1950a5a4af3bSchristos 1951a5a4af3bSchristos extract_sfmt_nop: 1952a5a4af3bSchristos { 1953a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1954a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 1955a5a4af3bSchristos 1956a5a4af3bSchristos 1957a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1958a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0)); 1959a5a4af3bSchristos 1960a5a4af3bSchristos #undef FLD 1961a5a4af3bSchristos return idesc; 1962a5a4af3bSchristos } 1963a5a4af3bSchristos 1964a5a4af3bSchristos extract_sfmt_rac_dsi: 1965a5a4af3bSchristos { 1966a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1967a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 1968a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 1969a5a4af3bSchristos UINT f_accd; 1970a5a4af3bSchristos UINT f_accs; 1971a5a4af3bSchristos SI f_imm1; 1972a5a4af3bSchristos 1973a5a4af3bSchristos f_accd = EXTRACT_MSB0_UINT (insn, 16, 4, 2); 1974a5a4af3bSchristos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 1975a5a4af3bSchristos f_imm1 = ((EXTRACT_MSB0_UINT (insn, 16, 15, 1)) + (1)); 1976a5a4af3bSchristos 1977a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1978a5a4af3bSchristos FLD (f_accs) = f_accs; 1979a5a4af3bSchristos FLD (f_imm1) = f_imm1; 1980a5a4af3bSchristos FLD (f_accd) = f_accd; 1981a5a4af3bSchristos 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)); 1982a5a4af3bSchristos 1983a5a4af3bSchristos #undef FLD 1984a5a4af3bSchristos return idesc; 1985a5a4af3bSchristos } 1986a5a4af3bSchristos 1987a5a4af3bSchristos extract_sfmt_rte: 1988a5a4af3bSchristos { 1989a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 1990a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 1991a5a4af3bSchristos 1992a5a4af3bSchristos 1993a5a4af3bSchristos /* Record the fields for the semantic handler. */ 1994a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0)); 1995a5a4af3bSchristos 1996a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 1997a5a4af3bSchristos /* Record the fields for profiling. */ 1998a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 1999a5a4af3bSchristos { 2000a5a4af3bSchristos } 2001a5a4af3bSchristos #endif 2002a5a4af3bSchristos #undef FLD 2003a5a4af3bSchristos return idesc; 2004a5a4af3bSchristos } 2005a5a4af3bSchristos 2006a5a4af3bSchristos extract_sfmt_seth: 2007a5a4af3bSchristos { 2008a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2009a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2010a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_seth.f 2011a5a4af3bSchristos UINT f_r1; 2012a5a4af3bSchristos UINT f_hi16; 2013a5a4af3bSchristos 2014a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2015a5a4af3bSchristos f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 2016a5a4af3bSchristos 2017a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2018a5a4af3bSchristos FLD (f_hi16) = f_hi16; 2019a5a4af3bSchristos FLD (f_r1) = f_r1; 2020a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2021a5a4af3bSchristos 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)); 2022a5a4af3bSchristos 2023a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2024a5a4af3bSchristos /* Record the fields for profiling. */ 2025a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2026a5a4af3bSchristos { 2027a5a4af3bSchristos FLD (out_dr) = f_r1; 2028a5a4af3bSchristos } 2029a5a4af3bSchristos #endif 2030a5a4af3bSchristos #undef FLD 2031a5a4af3bSchristos return idesc; 2032a5a4af3bSchristos } 2033a5a4af3bSchristos 2034a5a4af3bSchristos extract_sfmt_sll3: 2035a5a4af3bSchristos { 2036a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2037a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2038a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 2039a5a4af3bSchristos UINT f_r1; 2040a5a4af3bSchristos UINT f_r2; 2041a5a4af3bSchristos INT f_simm16; 2042a5a4af3bSchristos 2043a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2044a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2045a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2046a5a4af3bSchristos 2047a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2048a5a4af3bSchristos FLD (f_simm16) = f_simm16; 2049a5a4af3bSchristos FLD (f_r2) = f_r2; 2050a5a4af3bSchristos FLD (f_r1) = f_r1; 2051a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2052a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2053a5a4af3bSchristos 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)); 2054a5a4af3bSchristos 2055a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2056a5a4af3bSchristos /* Record the fields for profiling. */ 2057a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2058a5a4af3bSchristos { 2059a5a4af3bSchristos FLD (in_sr) = f_r2; 2060a5a4af3bSchristos FLD (out_dr) = f_r1; 2061a5a4af3bSchristos } 2062a5a4af3bSchristos #endif 2063a5a4af3bSchristos #undef FLD 2064a5a4af3bSchristos return idesc; 2065a5a4af3bSchristos } 2066a5a4af3bSchristos 2067a5a4af3bSchristos extract_sfmt_slli: 2068a5a4af3bSchristos { 2069a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2070a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2071a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 2072a5a4af3bSchristos UINT f_r1; 2073a5a4af3bSchristos UINT f_uimm5; 2074a5a4af3bSchristos 2075a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2076a5a4af3bSchristos f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5); 2077a5a4af3bSchristos 2078a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2079a5a4af3bSchristos FLD (f_r1) = f_r1; 2080a5a4af3bSchristos FLD (f_uimm5) = f_uimm5; 2081a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2082a5a4af3bSchristos 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)); 2083a5a4af3bSchristos 2084a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2085a5a4af3bSchristos /* Record the fields for profiling. */ 2086a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2087a5a4af3bSchristos { 2088a5a4af3bSchristos FLD (in_dr) = f_r1; 2089a5a4af3bSchristos FLD (out_dr) = f_r1; 2090a5a4af3bSchristos } 2091a5a4af3bSchristos #endif 2092a5a4af3bSchristos #undef FLD 2093a5a4af3bSchristos return idesc; 2094a5a4af3bSchristos } 2095a5a4af3bSchristos 2096a5a4af3bSchristos extract_sfmt_st: 2097a5a4af3bSchristos { 2098a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2099a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2100a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2101a5a4af3bSchristos UINT f_r1; 2102a5a4af3bSchristos UINT f_r2; 2103a5a4af3bSchristos 2104a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2105a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2106a5a4af3bSchristos 2107a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2108a5a4af3bSchristos FLD (f_r1) = f_r1; 2109a5a4af3bSchristos FLD (f_r2) = f_r2; 2110a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2111a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2112a5a4af3bSchristos 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)); 2113a5a4af3bSchristos 2114a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2115a5a4af3bSchristos /* Record the fields for profiling. */ 2116a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2117a5a4af3bSchristos { 2118a5a4af3bSchristos FLD (in_src1) = f_r1; 2119a5a4af3bSchristos FLD (in_src2) = f_r2; 2120a5a4af3bSchristos } 2121a5a4af3bSchristos #endif 2122a5a4af3bSchristos #undef FLD 2123a5a4af3bSchristos return idesc; 2124a5a4af3bSchristos } 2125a5a4af3bSchristos 2126a5a4af3bSchristos extract_sfmt_st_d: 2127a5a4af3bSchristos { 2128a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2129a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2130a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 2131a5a4af3bSchristos UINT f_r1; 2132a5a4af3bSchristos UINT f_r2; 2133a5a4af3bSchristos INT f_simm16; 2134a5a4af3bSchristos 2135a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2136a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2137a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2138a5a4af3bSchristos 2139a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2140a5a4af3bSchristos FLD (f_simm16) = f_simm16; 2141a5a4af3bSchristos FLD (f_r1) = f_r1; 2142a5a4af3bSchristos FLD (f_r2) = f_r2; 2143a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2144a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2145a5a4af3bSchristos 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)); 2146a5a4af3bSchristos 2147a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2148a5a4af3bSchristos /* Record the fields for profiling. */ 2149a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2150a5a4af3bSchristos { 2151a5a4af3bSchristos FLD (in_src1) = f_r1; 2152a5a4af3bSchristos FLD (in_src2) = f_r2; 2153a5a4af3bSchristos } 2154a5a4af3bSchristos #endif 2155a5a4af3bSchristos #undef FLD 2156a5a4af3bSchristos return idesc; 2157a5a4af3bSchristos } 2158a5a4af3bSchristos 2159a5a4af3bSchristos extract_sfmt_stb: 2160a5a4af3bSchristos { 2161a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2162a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2163a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2164a5a4af3bSchristos UINT f_r1; 2165a5a4af3bSchristos UINT f_r2; 2166a5a4af3bSchristos 2167a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2168a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2169a5a4af3bSchristos 2170a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2171a5a4af3bSchristos FLD (f_r1) = f_r1; 2172a5a4af3bSchristos FLD (f_r2) = f_r2; 2173a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2174a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2175a5a4af3bSchristos 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)); 2176a5a4af3bSchristos 2177a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2178a5a4af3bSchristos /* Record the fields for profiling. */ 2179a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2180a5a4af3bSchristos { 2181a5a4af3bSchristos FLD (in_src1) = f_r1; 2182a5a4af3bSchristos FLD (in_src2) = f_r2; 2183a5a4af3bSchristos } 2184a5a4af3bSchristos #endif 2185a5a4af3bSchristos #undef FLD 2186a5a4af3bSchristos return idesc; 2187a5a4af3bSchristos } 2188a5a4af3bSchristos 2189a5a4af3bSchristos extract_sfmt_stb_d: 2190a5a4af3bSchristos { 2191a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2192a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2193a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 2194a5a4af3bSchristos UINT f_r1; 2195a5a4af3bSchristos UINT f_r2; 2196a5a4af3bSchristos INT f_simm16; 2197a5a4af3bSchristos 2198a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2199a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2200a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2201a5a4af3bSchristos 2202a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2203a5a4af3bSchristos FLD (f_simm16) = f_simm16; 2204a5a4af3bSchristos FLD (f_r1) = f_r1; 2205a5a4af3bSchristos FLD (f_r2) = f_r2; 2206a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2207a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2208a5a4af3bSchristos 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)); 2209a5a4af3bSchristos 2210a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2211a5a4af3bSchristos /* Record the fields for profiling. */ 2212a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2213a5a4af3bSchristos { 2214a5a4af3bSchristos FLD (in_src1) = f_r1; 2215a5a4af3bSchristos FLD (in_src2) = f_r2; 2216a5a4af3bSchristos } 2217a5a4af3bSchristos #endif 2218a5a4af3bSchristos #undef FLD 2219a5a4af3bSchristos return idesc; 2220a5a4af3bSchristos } 2221a5a4af3bSchristos 2222a5a4af3bSchristos extract_sfmt_sth: 2223a5a4af3bSchristos { 2224a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2225a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2226a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2227a5a4af3bSchristos UINT f_r1; 2228a5a4af3bSchristos UINT f_r2; 2229a5a4af3bSchristos 2230a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2231a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2232a5a4af3bSchristos 2233a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2234a5a4af3bSchristos FLD (f_r1) = f_r1; 2235a5a4af3bSchristos FLD (f_r2) = f_r2; 2236a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2237a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2238a5a4af3bSchristos 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)); 2239a5a4af3bSchristos 2240a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2241a5a4af3bSchristos /* Record the fields for profiling. */ 2242a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2243a5a4af3bSchristos { 2244a5a4af3bSchristos FLD (in_src1) = f_r1; 2245a5a4af3bSchristos FLD (in_src2) = f_r2; 2246a5a4af3bSchristos } 2247a5a4af3bSchristos #endif 2248a5a4af3bSchristos #undef FLD 2249a5a4af3bSchristos return idesc; 2250a5a4af3bSchristos } 2251a5a4af3bSchristos 2252a5a4af3bSchristos extract_sfmt_sth_d: 2253a5a4af3bSchristos { 2254a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2255a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2256a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 2257a5a4af3bSchristos UINT f_r1; 2258a5a4af3bSchristos UINT f_r2; 2259a5a4af3bSchristos INT f_simm16; 2260a5a4af3bSchristos 2261a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2262a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2263a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2264a5a4af3bSchristos 2265a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2266a5a4af3bSchristos FLD (f_simm16) = f_simm16; 2267a5a4af3bSchristos FLD (f_r1) = f_r1; 2268a5a4af3bSchristos FLD (f_r2) = f_r2; 2269a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2270a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2271a5a4af3bSchristos 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)); 2272a5a4af3bSchristos 2273a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2274a5a4af3bSchristos /* Record the fields for profiling. */ 2275a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2276a5a4af3bSchristos { 2277a5a4af3bSchristos FLD (in_src1) = f_r1; 2278a5a4af3bSchristos FLD (in_src2) = f_r2; 2279a5a4af3bSchristos } 2280a5a4af3bSchristos #endif 2281a5a4af3bSchristos #undef FLD 2282a5a4af3bSchristos return idesc; 2283a5a4af3bSchristos } 2284a5a4af3bSchristos 2285a5a4af3bSchristos extract_sfmt_st_plus: 2286a5a4af3bSchristos { 2287a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2288a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2289a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2290a5a4af3bSchristos UINT f_r1; 2291a5a4af3bSchristos UINT f_r2; 2292a5a4af3bSchristos 2293a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2294a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2295a5a4af3bSchristos 2296a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2297a5a4af3bSchristos FLD (f_r1) = f_r1; 2298a5a4af3bSchristos FLD (f_r2) = f_r2; 2299a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2300a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2301a5a4af3bSchristos 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)); 2302a5a4af3bSchristos 2303a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2304a5a4af3bSchristos /* Record the fields for profiling. */ 2305a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2306a5a4af3bSchristos { 2307a5a4af3bSchristos FLD (in_src1) = f_r1; 2308a5a4af3bSchristos FLD (in_src2) = f_r2; 2309a5a4af3bSchristos FLD (out_src2) = f_r2; 2310a5a4af3bSchristos } 2311a5a4af3bSchristos #endif 2312a5a4af3bSchristos #undef FLD 2313a5a4af3bSchristos return idesc; 2314a5a4af3bSchristos } 2315a5a4af3bSchristos 2316a5a4af3bSchristos extract_sfmt_sth_plus: 2317a5a4af3bSchristos { 2318a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2319a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2320a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2321a5a4af3bSchristos UINT f_r1; 2322a5a4af3bSchristos UINT f_r2; 2323a5a4af3bSchristos 2324a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2325a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2326a5a4af3bSchristos 2327a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2328a5a4af3bSchristos FLD (f_r1) = f_r1; 2329a5a4af3bSchristos FLD (f_r2) = f_r2; 2330a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2331a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2332a5a4af3bSchristos 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)); 2333a5a4af3bSchristos 2334a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2335a5a4af3bSchristos /* Record the fields for profiling. */ 2336a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2337a5a4af3bSchristos { 2338a5a4af3bSchristos FLD (in_src1) = f_r1; 2339a5a4af3bSchristos FLD (in_src2) = f_r2; 2340a5a4af3bSchristos FLD (out_src2) = f_r2; 2341a5a4af3bSchristos } 2342a5a4af3bSchristos #endif 2343a5a4af3bSchristos #undef FLD 2344a5a4af3bSchristos return idesc; 2345a5a4af3bSchristos } 2346a5a4af3bSchristos 2347a5a4af3bSchristos extract_sfmt_stb_plus: 2348a5a4af3bSchristos { 2349a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2350a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2351a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2352a5a4af3bSchristos UINT f_r1; 2353a5a4af3bSchristos UINT f_r2; 2354a5a4af3bSchristos 2355a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2356a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2357a5a4af3bSchristos 2358a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2359a5a4af3bSchristos FLD (f_r1) = f_r1; 2360a5a4af3bSchristos FLD (f_r2) = f_r2; 2361a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2362a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2363a5a4af3bSchristos 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)); 2364a5a4af3bSchristos 2365a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2366a5a4af3bSchristos /* Record the fields for profiling. */ 2367a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2368a5a4af3bSchristos { 2369a5a4af3bSchristos FLD (in_src1) = f_r1; 2370a5a4af3bSchristos FLD (in_src2) = f_r2; 2371a5a4af3bSchristos FLD (out_src2) = f_r2; 2372a5a4af3bSchristos } 2373a5a4af3bSchristos #endif 2374a5a4af3bSchristos #undef FLD 2375a5a4af3bSchristos return idesc; 2376a5a4af3bSchristos } 2377a5a4af3bSchristos 2378a5a4af3bSchristos extract_sfmt_trap: 2379a5a4af3bSchristos { 2380a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2381a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2382a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_trap.f 2383a5a4af3bSchristos UINT f_uimm4; 2384a5a4af3bSchristos 2385a5a4af3bSchristos f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2386a5a4af3bSchristos 2387a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2388a5a4af3bSchristos FLD (f_uimm4) = f_uimm4; 2389a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0)); 2390a5a4af3bSchristos 2391a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2392a5a4af3bSchristos /* Record the fields for profiling. */ 2393a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2394a5a4af3bSchristos { 2395a5a4af3bSchristos } 2396a5a4af3bSchristos #endif 2397a5a4af3bSchristos #undef FLD 2398a5a4af3bSchristos return idesc; 2399a5a4af3bSchristos } 2400a5a4af3bSchristos 2401a5a4af3bSchristos extract_sfmt_unlock: 2402a5a4af3bSchristos { 2403a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2404a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2405a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2406a5a4af3bSchristos UINT f_r1; 2407a5a4af3bSchristos UINT f_r2; 2408a5a4af3bSchristos 2409a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2410a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2411a5a4af3bSchristos 2412a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2413a5a4af3bSchristos FLD (f_r1) = f_r1; 2414a5a4af3bSchristos FLD (f_r2) = f_r2; 2415a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2416a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2417a5a4af3bSchristos 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)); 2418a5a4af3bSchristos 2419a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2420a5a4af3bSchristos /* Record the fields for profiling. */ 2421a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2422a5a4af3bSchristos { 2423a5a4af3bSchristos FLD (in_src1) = f_r1; 2424a5a4af3bSchristos FLD (in_src2) = f_r2; 2425a5a4af3bSchristos } 2426a5a4af3bSchristos #endif 2427a5a4af3bSchristos #undef FLD 2428a5a4af3bSchristos return idesc; 2429a5a4af3bSchristos } 2430a5a4af3bSchristos 2431a5a4af3bSchristos extract_sfmt_satb: 2432a5a4af3bSchristos { 2433a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2434a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2435a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2436a5a4af3bSchristos UINT f_r1; 2437a5a4af3bSchristos UINT f_r2; 2438a5a4af3bSchristos 2439a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2440a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2441a5a4af3bSchristos 2442a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2443a5a4af3bSchristos FLD (f_r2) = f_r2; 2444a5a4af3bSchristos FLD (f_r1) = f_r1; 2445a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2446a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2447a5a4af3bSchristos 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)); 2448a5a4af3bSchristos 2449a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2450a5a4af3bSchristos /* Record the fields for profiling. */ 2451a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2452a5a4af3bSchristos { 2453a5a4af3bSchristos FLD (in_sr) = f_r2; 2454a5a4af3bSchristos FLD (out_dr) = f_r1; 2455a5a4af3bSchristos } 2456a5a4af3bSchristos #endif 2457a5a4af3bSchristos #undef FLD 2458a5a4af3bSchristos return idesc; 2459a5a4af3bSchristos } 2460a5a4af3bSchristos 2461a5a4af3bSchristos extract_sfmt_sat: 2462a5a4af3bSchristos { 2463a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2464a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2465a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2466a5a4af3bSchristos UINT f_r1; 2467a5a4af3bSchristos UINT f_r2; 2468a5a4af3bSchristos 2469a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2470a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2471a5a4af3bSchristos 2472a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2473a5a4af3bSchristos FLD (f_r2) = f_r2; 2474a5a4af3bSchristos FLD (f_r1) = f_r1; 2475a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2476a5a4af3bSchristos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2477a5a4af3bSchristos 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)); 2478a5a4af3bSchristos 2479a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2480a5a4af3bSchristos /* Record the fields for profiling. */ 2481a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2482a5a4af3bSchristos { 2483a5a4af3bSchristos FLD (in_sr) = f_r2; 2484a5a4af3bSchristos FLD (out_dr) = f_r1; 2485a5a4af3bSchristos } 2486a5a4af3bSchristos #endif 2487a5a4af3bSchristos #undef FLD 2488a5a4af3bSchristos return idesc; 2489a5a4af3bSchristos } 2490a5a4af3bSchristos 2491a5a4af3bSchristos extract_sfmt_sadd: 2492a5a4af3bSchristos { 2493a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2494a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 2495a5a4af3bSchristos 2496a5a4af3bSchristos 2497a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2498a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sadd", (char *) 0)); 2499a5a4af3bSchristos 2500a5a4af3bSchristos #undef FLD 2501a5a4af3bSchristos return idesc; 2502a5a4af3bSchristos } 2503a5a4af3bSchristos 2504a5a4af3bSchristos extract_sfmt_macwu1: 2505a5a4af3bSchristos { 2506a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2507a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2508a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2509a5a4af3bSchristos UINT f_r1; 2510a5a4af3bSchristos UINT f_r2; 2511a5a4af3bSchristos 2512a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2513a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2514a5a4af3bSchristos 2515a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2516a5a4af3bSchristos FLD (f_r1) = f_r1; 2517a5a4af3bSchristos FLD (f_r2) = f_r2; 2518a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2519a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2520a5a4af3bSchristos 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)); 2521a5a4af3bSchristos 2522a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2523a5a4af3bSchristos /* Record the fields for profiling. */ 2524a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2525a5a4af3bSchristos { 2526a5a4af3bSchristos FLD (in_src1) = f_r1; 2527a5a4af3bSchristos FLD (in_src2) = f_r2; 2528a5a4af3bSchristos } 2529a5a4af3bSchristos #endif 2530a5a4af3bSchristos #undef FLD 2531a5a4af3bSchristos return idesc; 2532a5a4af3bSchristos } 2533a5a4af3bSchristos 2534a5a4af3bSchristos extract_sfmt_msblo: 2535a5a4af3bSchristos { 2536a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2537a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2538a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2539a5a4af3bSchristos UINT f_r1; 2540a5a4af3bSchristos UINT f_r2; 2541a5a4af3bSchristos 2542a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2543a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2544a5a4af3bSchristos 2545a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2546a5a4af3bSchristos FLD (f_r1) = f_r1; 2547a5a4af3bSchristos FLD (f_r2) = f_r2; 2548a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2549a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2550a5a4af3bSchristos 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)); 2551a5a4af3bSchristos 2552a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2553a5a4af3bSchristos /* Record the fields for profiling. */ 2554a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2555a5a4af3bSchristos { 2556a5a4af3bSchristos FLD (in_src1) = f_r1; 2557a5a4af3bSchristos FLD (in_src2) = f_r2; 2558a5a4af3bSchristos } 2559a5a4af3bSchristos #endif 2560a5a4af3bSchristos #undef FLD 2561a5a4af3bSchristos return idesc; 2562a5a4af3bSchristos } 2563a5a4af3bSchristos 2564a5a4af3bSchristos extract_sfmt_mulwu1: 2565a5a4af3bSchristos { 2566a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2567a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2568a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2569a5a4af3bSchristos UINT f_r1; 2570a5a4af3bSchristos UINT f_r2; 2571a5a4af3bSchristos 2572a5a4af3bSchristos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2573a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2574a5a4af3bSchristos 2575a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2576a5a4af3bSchristos FLD (f_r1) = f_r1; 2577a5a4af3bSchristos FLD (f_r2) = f_r2; 2578a5a4af3bSchristos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2579a5a4af3bSchristos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2580a5a4af3bSchristos 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)); 2581a5a4af3bSchristos 2582a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2583a5a4af3bSchristos /* Record the fields for profiling. */ 2584a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2585a5a4af3bSchristos { 2586a5a4af3bSchristos FLD (in_src1) = f_r1; 2587a5a4af3bSchristos FLD (in_src2) = f_r2; 2588a5a4af3bSchristos } 2589a5a4af3bSchristos #endif 2590a5a4af3bSchristos #undef FLD 2591a5a4af3bSchristos return idesc; 2592a5a4af3bSchristos } 2593a5a4af3bSchristos 2594a5a4af3bSchristos extract_sfmt_sc: 2595a5a4af3bSchristos { 2596a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2597a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 2598a5a4af3bSchristos 2599a5a4af3bSchristos 2600a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2601a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sc", (char *) 0)); 2602a5a4af3bSchristos 2603a5a4af3bSchristos #undef FLD 2604a5a4af3bSchristos return idesc; 2605a5a4af3bSchristos } 2606a5a4af3bSchristos 2607a5a4af3bSchristos extract_sfmt_clrpsw: 2608a5a4af3bSchristos { 2609a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2610a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2611a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 2612a5a4af3bSchristos UINT f_uimm8; 2613a5a4af3bSchristos 2614a5a4af3bSchristos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); 2615a5a4af3bSchristos 2616a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2617a5a4af3bSchristos FLD (f_uimm8) = f_uimm8; 2618a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0)); 2619a5a4af3bSchristos 2620a5a4af3bSchristos #undef FLD 2621a5a4af3bSchristos return idesc; 2622a5a4af3bSchristos } 2623a5a4af3bSchristos 2624a5a4af3bSchristos extract_sfmt_setpsw: 2625a5a4af3bSchristos { 2626a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2627a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2628a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 2629a5a4af3bSchristos UINT f_uimm8; 2630a5a4af3bSchristos 2631a5a4af3bSchristos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); 2632a5a4af3bSchristos 2633a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2634a5a4af3bSchristos FLD (f_uimm8) = f_uimm8; 2635a5a4af3bSchristos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0)); 2636a5a4af3bSchristos 2637a5a4af3bSchristos #undef FLD 2638a5a4af3bSchristos return idesc; 2639a5a4af3bSchristos } 2640a5a4af3bSchristos 2641a5a4af3bSchristos extract_sfmt_bset: 2642a5a4af3bSchristos { 2643a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2644a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2645a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f 2646a5a4af3bSchristos UINT f_uimm3; 2647a5a4af3bSchristos UINT f_r2; 2648a5a4af3bSchristos INT f_simm16; 2649a5a4af3bSchristos 2650a5a4af3bSchristos f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3); 2651a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2652a5a4af3bSchristos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2653a5a4af3bSchristos 2654a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2655a5a4af3bSchristos FLD (f_simm16) = f_simm16; 2656a5a4af3bSchristos FLD (f_r2) = f_r2; 2657a5a4af3bSchristos FLD (f_uimm3) = f_uimm3; 2658a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2659a5a4af3bSchristos 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)); 2660a5a4af3bSchristos 2661a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2662a5a4af3bSchristos /* Record the fields for profiling. */ 2663a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2664a5a4af3bSchristos { 2665a5a4af3bSchristos FLD (in_sr) = f_r2; 2666a5a4af3bSchristos } 2667a5a4af3bSchristos #endif 2668a5a4af3bSchristos #undef FLD 2669a5a4af3bSchristos return idesc; 2670a5a4af3bSchristos } 2671a5a4af3bSchristos 2672a5a4af3bSchristos extract_sfmt_btst: 2673a5a4af3bSchristos { 2674a5a4af3bSchristos const IDESC *idesc = &m32rxf_insn_data[itype]; 2675a5a4af3bSchristos CGEN_INSN_WORD insn = entire_insn; 2676a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f 2677a5a4af3bSchristos UINT f_uimm3; 2678a5a4af3bSchristos UINT f_r2; 2679a5a4af3bSchristos 2680a5a4af3bSchristos f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3); 2681a5a4af3bSchristos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2682a5a4af3bSchristos 2683a5a4af3bSchristos /* Record the fields for the semantic handler. */ 2684a5a4af3bSchristos FLD (f_r2) = f_r2; 2685a5a4af3bSchristos FLD (f_uimm3) = f_uimm3; 2686a5a4af3bSchristos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2687a5a4af3bSchristos 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)); 2688a5a4af3bSchristos 2689a5a4af3bSchristos #if WITH_PROFILE_MODEL_P 2690a5a4af3bSchristos /* Record the fields for profiling. */ 2691a5a4af3bSchristos if (PROFILE_MODEL_P (current_cpu)) 2692a5a4af3bSchristos { 2693a5a4af3bSchristos FLD (in_sr) = f_r2; 2694a5a4af3bSchristos } 2695a5a4af3bSchristos #endif 2696a5a4af3bSchristos #undef FLD 2697a5a4af3bSchristos return idesc; 2698a5a4af3bSchristos } 2699a5a4af3bSchristos 2700a5a4af3bSchristos } 2701