1 1.1 christos /* Simulator instruction decoder for m32r2f. 2 1.1 christos 3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN. 4 1.1 christos 5 1.1.1.12 christos Copyright (C) 1996-2025 Free Software Foundation, Inc. 6 1.1 christos 7 1.1 christos This file is part of the GNU simulators. 8 1.1 christos 9 1.1 christos This file is free software; you can redistribute it and/or modify 10 1.1 christos it under the terms of the GNU General Public License as published by 11 1.1 christos the Free Software Foundation; either version 3, or (at your option) 12 1.1 christos any later version. 13 1.1 christos 14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT 15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 1.1 christos License for more details. 18 1.1 christos 19 1.1 christos You should have received a copy of the GNU General Public License along 20 1.1.1.11 christos with this program; if not, write to the Free Software Foundation, Inc., 21 1.1.1.11 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 22 1.1 christos 23 1.1 christos */ 24 1.1 christos 25 1.1 christos #define WANT_CPU m32r2f 26 1.1 christos #define WANT_CPU_M32R2F 27 1.1 christos 28 1.1 christos #include "sim-main.h" 29 1.1 christos #include "sim-assert.h" 30 1.1.1.11 christos #include "cgen-mem.h" 31 1.1.1.11 christos #include "cgen-ops.h" 32 1.1 christos 33 1.1 christos /* Insn can't be executed in parallel. 34 1.1 christos Or is that "do NOt Pass to Air defense Radar"? :-) */ 35 1.1 christos #define NOPAR (-1) 36 1.1 christos 37 1.1 christos /* The instruction descriptor array. 38 1.1 christos This is computed at runtime. Space for it is not malloc'd to save a 39 1.1 christos teensy bit of cpu in the decoder. Moving it to malloc space is trivial 40 1.1 christos but won't be done until necessary (we don't currently support the runtime 41 1.1 christos addition of instructions nor an SMP machine with different cpus). */ 42 1.1 christos static IDESC m32r2f_insn_data[M32R2F_INSN__MAX]; 43 1.1 christos 44 1.1 christos /* Commas between elements are contained in the macros. 45 1.1 christos Some of these are conditionally compiled out. */ 46 1.1 christos 47 1.1 christos static const struct insn_sem m32r2f_insn_sem[] = 48 1.1 christos { 49 1.1 christos { VIRTUAL_INSN_X_INVALID, M32R2F_INSN_X_INVALID, M32R2F_SFMT_EMPTY, NOPAR, NOPAR }, 50 1.1 christos { VIRTUAL_INSN_X_AFTER, M32R2F_INSN_X_AFTER, M32R2F_SFMT_EMPTY, NOPAR, NOPAR }, 51 1.1 christos { VIRTUAL_INSN_X_BEFORE, M32R2F_INSN_X_BEFORE, M32R2F_SFMT_EMPTY, NOPAR, NOPAR }, 52 1.1 christos { VIRTUAL_INSN_X_CTI_CHAIN, M32R2F_INSN_X_CTI_CHAIN, M32R2F_SFMT_EMPTY, NOPAR, NOPAR }, 53 1.1 christos { VIRTUAL_INSN_X_CHAIN, M32R2F_INSN_X_CHAIN, M32R2F_SFMT_EMPTY, NOPAR, NOPAR }, 54 1.1 christos { VIRTUAL_INSN_X_BEGIN, M32R2F_INSN_X_BEGIN, M32R2F_SFMT_EMPTY, NOPAR, NOPAR }, 55 1.1 christos { M32R_INSN_ADD, M32R2F_INSN_ADD, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_ADD, M32R2F_INSN_WRITE_ADD }, 56 1.1 christos { M32R_INSN_ADD3, M32R2F_INSN_ADD3, M32R2F_SFMT_ADD3, NOPAR, NOPAR }, 57 1.1 christos { M32R_INSN_AND, M32R2F_INSN_AND, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_AND, M32R2F_INSN_WRITE_AND }, 58 1.1 christos { M32R_INSN_AND3, M32R2F_INSN_AND3, M32R2F_SFMT_AND3, NOPAR, NOPAR }, 59 1.1 christos { M32R_INSN_OR, M32R2F_INSN_OR, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_OR, M32R2F_INSN_WRITE_OR }, 60 1.1 christos { M32R_INSN_OR3, M32R2F_INSN_OR3, M32R2F_SFMT_OR3, NOPAR, NOPAR }, 61 1.1 christos { M32R_INSN_XOR, M32R2F_INSN_XOR, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_XOR, M32R2F_INSN_WRITE_XOR }, 62 1.1 christos { M32R_INSN_XOR3, M32R2F_INSN_XOR3, M32R2F_SFMT_AND3, NOPAR, NOPAR }, 63 1.1 christos { M32R_INSN_ADDI, M32R2F_INSN_ADDI, M32R2F_SFMT_ADDI, M32R2F_INSN_PAR_ADDI, M32R2F_INSN_WRITE_ADDI }, 64 1.1 christos { M32R_INSN_ADDV, M32R2F_INSN_ADDV, M32R2F_SFMT_ADDV, M32R2F_INSN_PAR_ADDV, M32R2F_INSN_WRITE_ADDV }, 65 1.1 christos { M32R_INSN_ADDV3, M32R2F_INSN_ADDV3, M32R2F_SFMT_ADDV3, NOPAR, NOPAR }, 66 1.1 christos { M32R_INSN_ADDX, M32R2F_INSN_ADDX, M32R2F_SFMT_ADDX, M32R2F_INSN_PAR_ADDX, M32R2F_INSN_WRITE_ADDX }, 67 1.1 christos { M32R_INSN_BC8, M32R2F_INSN_BC8, M32R2F_SFMT_BC8, M32R2F_INSN_PAR_BC8, M32R2F_INSN_WRITE_BC8 }, 68 1.1 christos { M32R_INSN_BC24, M32R2F_INSN_BC24, M32R2F_SFMT_BC24, NOPAR, NOPAR }, 69 1.1 christos { M32R_INSN_BEQ, M32R2F_INSN_BEQ, M32R2F_SFMT_BEQ, NOPAR, NOPAR }, 70 1.1 christos { M32R_INSN_BEQZ, M32R2F_INSN_BEQZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR }, 71 1.1 christos { M32R_INSN_BGEZ, M32R2F_INSN_BGEZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR }, 72 1.1 christos { M32R_INSN_BGTZ, M32R2F_INSN_BGTZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR }, 73 1.1 christos { M32R_INSN_BLEZ, M32R2F_INSN_BLEZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR }, 74 1.1 christos { M32R_INSN_BLTZ, M32R2F_INSN_BLTZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR }, 75 1.1 christos { M32R_INSN_BNEZ, M32R2F_INSN_BNEZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR }, 76 1.1 christos { M32R_INSN_BL8, M32R2F_INSN_BL8, M32R2F_SFMT_BL8, M32R2F_INSN_PAR_BL8, M32R2F_INSN_WRITE_BL8 }, 77 1.1 christos { M32R_INSN_BL24, M32R2F_INSN_BL24, M32R2F_SFMT_BL24, NOPAR, NOPAR }, 78 1.1 christos { M32R_INSN_BCL8, M32R2F_INSN_BCL8, M32R2F_SFMT_BCL8, M32R2F_INSN_PAR_BCL8, M32R2F_INSN_WRITE_BCL8 }, 79 1.1 christos { M32R_INSN_BCL24, M32R2F_INSN_BCL24, M32R2F_SFMT_BCL24, NOPAR, NOPAR }, 80 1.1 christos { M32R_INSN_BNC8, M32R2F_INSN_BNC8, M32R2F_SFMT_BC8, M32R2F_INSN_PAR_BNC8, M32R2F_INSN_WRITE_BNC8 }, 81 1.1 christos { M32R_INSN_BNC24, M32R2F_INSN_BNC24, M32R2F_SFMT_BC24, NOPAR, NOPAR }, 82 1.1 christos { M32R_INSN_BNE, M32R2F_INSN_BNE, M32R2F_SFMT_BEQ, NOPAR, NOPAR }, 83 1.1 christos { M32R_INSN_BRA8, M32R2F_INSN_BRA8, M32R2F_SFMT_BRA8, M32R2F_INSN_PAR_BRA8, M32R2F_INSN_WRITE_BRA8 }, 84 1.1 christos { M32R_INSN_BRA24, M32R2F_INSN_BRA24, M32R2F_SFMT_BRA24, NOPAR, NOPAR }, 85 1.1 christos { M32R_INSN_BNCL8, M32R2F_INSN_BNCL8, M32R2F_SFMT_BCL8, M32R2F_INSN_PAR_BNCL8, M32R2F_INSN_WRITE_BNCL8 }, 86 1.1 christos { M32R_INSN_BNCL24, M32R2F_INSN_BNCL24, M32R2F_SFMT_BCL24, NOPAR, NOPAR }, 87 1.1 christos { M32R_INSN_CMP, M32R2F_INSN_CMP, M32R2F_SFMT_CMP, M32R2F_INSN_PAR_CMP, M32R2F_INSN_WRITE_CMP }, 88 1.1 christos { M32R_INSN_CMPI, M32R2F_INSN_CMPI, M32R2F_SFMT_CMPI, NOPAR, NOPAR }, 89 1.1 christos { M32R_INSN_CMPU, M32R2F_INSN_CMPU, M32R2F_SFMT_CMP, M32R2F_INSN_PAR_CMPU, M32R2F_INSN_WRITE_CMPU }, 90 1.1 christos { M32R_INSN_CMPUI, M32R2F_INSN_CMPUI, M32R2F_SFMT_CMPI, NOPAR, NOPAR }, 91 1.1 christos { M32R_INSN_CMPEQ, M32R2F_INSN_CMPEQ, M32R2F_SFMT_CMP, M32R2F_INSN_PAR_CMPEQ, M32R2F_INSN_WRITE_CMPEQ }, 92 1.1 christos { M32R_INSN_CMPZ, M32R2F_INSN_CMPZ, M32R2F_SFMT_CMPZ, M32R2F_INSN_PAR_CMPZ, M32R2F_INSN_WRITE_CMPZ }, 93 1.1 christos { M32R_INSN_DIV, M32R2F_INSN_DIV, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 94 1.1 christos { M32R_INSN_DIVU, M32R2F_INSN_DIVU, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 95 1.1 christos { M32R_INSN_REM, M32R2F_INSN_REM, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 96 1.1 christos { M32R_INSN_REMU, M32R2F_INSN_REMU, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 97 1.1 christos { M32R_INSN_REMH, M32R2F_INSN_REMH, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 98 1.1 christos { M32R_INSN_REMUH, M32R2F_INSN_REMUH, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 99 1.1 christos { M32R_INSN_REMB, M32R2F_INSN_REMB, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 100 1.1 christos { M32R_INSN_REMUB, M32R2F_INSN_REMUB, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 101 1.1 christos { M32R_INSN_DIVUH, M32R2F_INSN_DIVUH, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 102 1.1 christos { M32R_INSN_DIVB, M32R2F_INSN_DIVB, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 103 1.1 christos { M32R_INSN_DIVUB, M32R2F_INSN_DIVUB, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 104 1.1 christos { M32R_INSN_DIVH, M32R2F_INSN_DIVH, M32R2F_SFMT_DIV, NOPAR, NOPAR }, 105 1.1 christos { M32R_INSN_JC, M32R2F_INSN_JC, M32R2F_SFMT_JC, M32R2F_INSN_PAR_JC, M32R2F_INSN_WRITE_JC }, 106 1.1 christos { M32R_INSN_JNC, M32R2F_INSN_JNC, M32R2F_SFMT_JC, M32R2F_INSN_PAR_JNC, M32R2F_INSN_WRITE_JNC }, 107 1.1 christos { M32R_INSN_JL, M32R2F_INSN_JL, M32R2F_SFMT_JL, M32R2F_INSN_PAR_JL, M32R2F_INSN_WRITE_JL }, 108 1.1 christos { M32R_INSN_JMP, M32R2F_INSN_JMP, M32R2F_SFMT_JMP, M32R2F_INSN_PAR_JMP, M32R2F_INSN_WRITE_JMP }, 109 1.1 christos { M32R_INSN_LD, M32R2F_INSN_LD, M32R2F_SFMT_LD, M32R2F_INSN_PAR_LD, M32R2F_INSN_WRITE_LD }, 110 1.1 christos { M32R_INSN_LD_D, M32R2F_INSN_LD_D, M32R2F_SFMT_LD_D, NOPAR, NOPAR }, 111 1.1 christos { M32R_INSN_LDB, M32R2F_INSN_LDB, M32R2F_SFMT_LDB, M32R2F_INSN_PAR_LDB, M32R2F_INSN_WRITE_LDB }, 112 1.1 christos { M32R_INSN_LDB_D, M32R2F_INSN_LDB_D, M32R2F_SFMT_LDB_D, NOPAR, NOPAR }, 113 1.1 christos { M32R_INSN_LDH, M32R2F_INSN_LDH, M32R2F_SFMT_LDH, M32R2F_INSN_PAR_LDH, M32R2F_INSN_WRITE_LDH }, 114 1.1 christos { M32R_INSN_LDH_D, M32R2F_INSN_LDH_D, M32R2F_SFMT_LDH_D, NOPAR, NOPAR }, 115 1.1 christos { M32R_INSN_LDUB, M32R2F_INSN_LDUB, M32R2F_SFMT_LDB, M32R2F_INSN_PAR_LDUB, M32R2F_INSN_WRITE_LDUB }, 116 1.1 christos { M32R_INSN_LDUB_D, M32R2F_INSN_LDUB_D, M32R2F_SFMT_LDB_D, NOPAR, NOPAR }, 117 1.1 christos { M32R_INSN_LDUH, M32R2F_INSN_LDUH, M32R2F_SFMT_LDH, M32R2F_INSN_PAR_LDUH, M32R2F_INSN_WRITE_LDUH }, 118 1.1 christos { M32R_INSN_LDUH_D, M32R2F_INSN_LDUH_D, M32R2F_SFMT_LDH_D, NOPAR, NOPAR }, 119 1.1 christos { M32R_INSN_LD_PLUS, M32R2F_INSN_LD_PLUS, M32R2F_SFMT_LD_PLUS, M32R2F_INSN_PAR_LD_PLUS, M32R2F_INSN_WRITE_LD_PLUS }, 120 1.1 christos { M32R_INSN_LD24, M32R2F_INSN_LD24, M32R2F_SFMT_LD24, NOPAR, NOPAR }, 121 1.1 christos { M32R_INSN_LDI8, M32R2F_INSN_LDI8, M32R2F_SFMT_LDI8, M32R2F_INSN_PAR_LDI8, M32R2F_INSN_WRITE_LDI8 }, 122 1.1 christos { M32R_INSN_LDI16, M32R2F_INSN_LDI16, M32R2F_SFMT_LDI16, NOPAR, NOPAR }, 123 1.1 christos { M32R_INSN_LOCK, M32R2F_INSN_LOCK, M32R2F_SFMT_LOCK, M32R2F_INSN_PAR_LOCK, M32R2F_INSN_WRITE_LOCK }, 124 1.1 christos { M32R_INSN_MACHI_A, M32R2F_INSN_MACHI_A, M32R2F_SFMT_MACHI_A, M32R2F_INSN_PAR_MACHI_A, M32R2F_INSN_WRITE_MACHI_A }, 125 1.1 christos { M32R_INSN_MACLO_A, M32R2F_INSN_MACLO_A, M32R2F_SFMT_MACHI_A, M32R2F_INSN_PAR_MACLO_A, M32R2F_INSN_WRITE_MACLO_A }, 126 1.1 christos { M32R_INSN_MACWHI_A, M32R2F_INSN_MACWHI_A, M32R2F_SFMT_MACHI_A, M32R2F_INSN_PAR_MACWHI_A, M32R2F_INSN_WRITE_MACWHI_A }, 127 1.1 christos { M32R_INSN_MACWLO_A, M32R2F_INSN_MACWLO_A, M32R2F_SFMT_MACHI_A, M32R2F_INSN_PAR_MACWLO_A, M32R2F_INSN_WRITE_MACWLO_A }, 128 1.1 christos { M32R_INSN_MUL, M32R2F_INSN_MUL, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_MUL, M32R2F_INSN_WRITE_MUL }, 129 1.1 christos { M32R_INSN_MULHI_A, M32R2F_INSN_MULHI_A, M32R2F_SFMT_MULHI_A, M32R2F_INSN_PAR_MULHI_A, M32R2F_INSN_WRITE_MULHI_A }, 130 1.1 christos { M32R_INSN_MULLO_A, M32R2F_INSN_MULLO_A, M32R2F_SFMT_MULHI_A, M32R2F_INSN_PAR_MULLO_A, M32R2F_INSN_WRITE_MULLO_A }, 131 1.1 christos { M32R_INSN_MULWHI_A, M32R2F_INSN_MULWHI_A, M32R2F_SFMT_MULHI_A, M32R2F_INSN_PAR_MULWHI_A, M32R2F_INSN_WRITE_MULWHI_A }, 132 1.1 christos { M32R_INSN_MULWLO_A, M32R2F_INSN_MULWLO_A, M32R2F_SFMT_MULHI_A, M32R2F_INSN_PAR_MULWLO_A, M32R2F_INSN_WRITE_MULWLO_A }, 133 1.1 christos { M32R_INSN_MV, M32R2F_INSN_MV, M32R2F_SFMT_MV, M32R2F_INSN_PAR_MV, M32R2F_INSN_WRITE_MV }, 134 1.1 christos { M32R_INSN_MVFACHI_A, M32R2F_INSN_MVFACHI_A, M32R2F_SFMT_MVFACHI_A, M32R2F_INSN_PAR_MVFACHI_A, M32R2F_INSN_WRITE_MVFACHI_A }, 135 1.1 christos { M32R_INSN_MVFACLO_A, M32R2F_INSN_MVFACLO_A, M32R2F_SFMT_MVFACHI_A, M32R2F_INSN_PAR_MVFACLO_A, M32R2F_INSN_WRITE_MVFACLO_A }, 136 1.1 christos { M32R_INSN_MVFACMI_A, M32R2F_INSN_MVFACMI_A, M32R2F_SFMT_MVFACHI_A, M32R2F_INSN_PAR_MVFACMI_A, M32R2F_INSN_WRITE_MVFACMI_A }, 137 1.1 christos { M32R_INSN_MVFC, M32R2F_INSN_MVFC, M32R2F_SFMT_MVFC, M32R2F_INSN_PAR_MVFC, M32R2F_INSN_WRITE_MVFC }, 138 1.1 christos { M32R_INSN_MVTACHI_A, M32R2F_INSN_MVTACHI_A, M32R2F_SFMT_MVTACHI_A, M32R2F_INSN_PAR_MVTACHI_A, M32R2F_INSN_WRITE_MVTACHI_A }, 139 1.1 christos { M32R_INSN_MVTACLO_A, M32R2F_INSN_MVTACLO_A, M32R2F_SFMT_MVTACHI_A, M32R2F_INSN_PAR_MVTACLO_A, M32R2F_INSN_WRITE_MVTACLO_A }, 140 1.1 christos { M32R_INSN_MVTC, M32R2F_INSN_MVTC, M32R2F_SFMT_MVTC, M32R2F_INSN_PAR_MVTC, M32R2F_INSN_WRITE_MVTC }, 141 1.1 christos { M32R_INSN_NEG, M32R2F_INSN_NEG, M32R2F_SFMT_MV, M32R2F_INSN_PAR_NEG, M32R2F_INSN_WRITE_NEG }, 142 1.1 christos { M32R_INSN_NOP, M32R2F_INSN_NOP, M32R2F_SFMT_NOP, M32R2F_INSN_PAR_NOP, M32R2F_INSN_WRITE_NOP }, 143 1.1 christos { M32R_INSN_NOT, M32R2F_INSN_NOT, M32R2F_SFMT_MV, M32R2F_INSN_PAR_NOT, M32R2F_INSN_WRITE_NOT }, 144 1.1 christos { M32R_INSN_RAC_DSI, M32R2F_INSN_RAC_DSI, M32R2F_SFMT_RAC_DSI, M32R2F_INSN_PAR_RAC_DSI, M32R2F_INSN_WRITE_RAC_DSI }, 145 1.1 christos { M32R_INSN_RACH_DSI, M32R2F_INSN_RACH_DSI, M32R2F_SFMT_RAC_DSI, M32R2F_INSN_PAR_RACH_DSI, M32R2F_INSN_WRITE_RACH_DSI }, 146 1.1 christos { M32R_INSN_RTE, M32R2F_INSN_RTE, M32R2F_SFMT_RTE, M32R2F_INSN_PAR_RTE, M32R2F_INSN_WRITE_RTE }, 147 1.1 christos { M32R_INSN_SETH, M32R2F_INSN_SETH, M32R2F_SFMT_SETH, NOPAR, NOPAR }, 148 1.1 christos { M32R_INSN_SLL, M32R2F_INSN_SLL, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_SLL, M32R2F_INSN_WRITE_SLL }, 149 1.1 christos { M32R_INSN_SLL3, M32R2F_INSN_SLL3, M32R2F_SFMT_SLL3, NOPAR, NOPAR }, 150 1.1 christos { M32R_INSN_SLLI, M32R2F_INSN_SLLI, M32R2F_SFMT_SLLI, M32R2F_INSN_PAR_SLLI, M32R2F_INSN_WRITE_SLLI }, 151 1.1 christos { M32R_INSN_SRA, M32R2F_INSN_SRA, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_SRA, M32R2F_INSN_WRITE_SRA }, 152 1.1 christos { M32R_INSN_SRA3, M32R2F_INSN_SRA3, M32R2F_SFMT_SLL3, NOPAR, NOPAR }, 153 1.1 christos { M32R_INSN_SRAI, M32R2F_INSN_SRAI, M32R2F_SFMT_SLLI, M32R2F_INSN_PAR_SRAI, M32R2F_INSN_WRITE_SRAI }, 154 1.1 christos { M32R_INSN_SRL, M32R2F_INSN_SRL, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_SRL, M32R2F_INSN_WRITE_SRL }, 155 1.1 christos { M32R_INSN_SRL3, M32R2F_INSN_SRL3, M32R2F_SFMT_SLL3, NOPAR, NOPAR }, 156 1.1 christos { M32R_INSN_SRLI, M32R2F_INSN_SRLI, M32R2F_SFMT_SLLI, M32R2F_INSN_PAR_SRLI, M32R2F_INSN_WRITE_SRLI }, 157 1.1 christos { M32R_INSN_ST, M32R2F_INSN_ST, M32R2F_SFMT_ST, M32R2F_INSN_PAR_ST, M32R2F_INSN_WRITE_ST }, 158 1.1 christos { M32R_INSN_ST_D, M32R2F_INSN_ST_D, M32R2F_SFMT_ST_D, NOPAR, NOPAR }, 159 1.1 christos { M32R_INSN_STB, M32R2F_INSN_STB, M32R2F_SFMT_STB, M32R2F_INSN_PAR_STB, M32R2F_INSN_WRITE_STB }, 160 1.1 christos { M32R_INSN_STB_D, M32R2F_INSN_STB_D, M32R2F_SFMT_STB_D, NOPAR, NOPAR }, 161 1.1 christos { M32R_INSN_STH, M32R2F_INSN_STH, M32R2F_SFMT_STH, M32R2F_INSN_PAR_STH, M32R2F_INSN_WRITE_STH }, 162 1.1 christos { M32R_INSN_STH_D, M32R2F_INSN_STH_D, M32R2F_SFMT_STH_D, NOPAR, NOPAR }, 163 1.1 christos { M32R_INSN_ST_PLUS, M32R2F_INSN_ST_PLUS, M32R2F_SFMT_ST_PLUS, M32R2F_INSN_PAR_ST_PLUS, M32R2F_INSN_WRITE_ST_PLUS }, 164 1.1 christos { M32R_INSN_STH_PLUS, M32R2F_INSN_STH_PLUS, M32R2F_SFMT_STH_PLUS, M32R2F_INSN_PAR_STH_PLUS, M32R2F_INSN_WRITE_STH_PLUS }, 165 1.1 christos { M32R_INSN_STB_PLUS, M32R2F_INSN_STB_PLUS, M32R2F_SFMT_STB_PLUS, M32R2F_INSN_PAR_STB_PLUS, M32R2F_INSN_WRITE_STB_PLUS }, 166 1.1 christos { M32R_INSN_ST_MINUS, M32R2F_INSN_ST_MINUS, M32R2F_SFMT_ST_PLUS, M32R2F_INSN_PAR_ST_MINUS, M32R2F_INSN_WRITE_ST_MINUS }, 167 1.1 christos { M32R_INSN_SUB, M32R2F_INSN_SUB, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_SUB, M32R2F_INSN_WRITE_SUB }, 168 1.1 christos { M32R_INSN_SUBV, M32R2F_INSN_SUBV, M32R2F_SFMT_ADDV, M32R2F_INSN_PAR_SUBV, M32R2F_INSN_WRITE_SUBV }, 169 1.1 christos { M32R_INSN_SUBX, M32R2F_INSN_SUBX, M32R2F_SFMT_ADDX, M32R2F_INSN_PAR_SUBX, M32R2F_INSN_WRITE_SUBX }, 170 1.1 christos { M32R_INSN_TRAP, M32R2F_INSN_TRAP, M32R2F_SFMT_TRAP, M32R2F_INSN_PAR_TRAP, M32R2F_INSN_WRITE_TRAP }, 171 1.1 christos { M32R_INSN_UNLOCK, M32R2F_INSN_UNLOCK, M32R2F_SFMT_UNLOCK, M32R2F_INSN_PAR_UNLOCK, M32R2F_INSN_WRITE_UNLOCK }, 172 1.1 christos { M32R_INSN_SATB, M32R2F_INSN_SATB, M32R2F_SFMT_SATB, NOPAR, NOPAR }, 173 1.1 christos { M32R_INSN_SATH, M32R2F_INSN_SATH, M32R2F_SFMT_SATB, NOPAR, NOPAR }, 174 1.1 christos { M32R_INSN_SAT, M32R2F_INSN_SAT, M32R2F_SFMT_SAT, NOPAR, NOPAR }, 175 1.1 christos { M32R_INSN_PCMPBZ, M32R2F_INSN_PCMPBZ, M32R2F_SFMT_CMPZ, M32R2F_INSN_PAR_PCMPBZ, M32R2F_INSN_WRITE_PCMPBZ }, 176 1.1 christos { M32R_INSN_SADD, M32R2F_INSN_SADD, M32R2F_SFMT_SADD, M32R2F_INSN_PAR_SADD, M32R2F_INSN_WRITE_SADD }, 177 1.1 christos { M32R_INSN_MACWU1, M32R2F_INSN_MACWU1, M32R2F_SFMT_MACWU1, M32R2F_INSN_PAR_MACWU1, M32R2F_INSN_WRITE_MACWU1 }, 178 1.1 christos { M32R_INSN_MSBLO, M32R2F_INSN_MSBLO, M32R2F_SFMT_MSBLO, M32R2F_INSN_PAR_MSBLO, M32R2F_INSN_WRITE_MSBLO }, 179 1.1 christos { M32R_INSN_MULWU1, M32R2F_INSN_MULWU1, M32R2F_SFMT_MULWU1, M32R2F_INSN_PAR_MULWU1, M32R2F_INSN_WRITE_MULWU1 }, 180 1.1 christos { M32R_INSN_MACLH1, M32R2F_INSN_MACLH1, M32R2F_SFMT_MACWU1, M32R2F_INSN_PAR_MACLH1, M32R2F_INSN_WRITE_MACLH1 }, 181 1.1 christos { M32R_INSN_SC, M32R2F_INSN_SC, M32R2F_SFMT_SC, M32R2F_INSN_PAR_SC, M32R2F_INSN_WRITE_SC }, 182 1.1 christos { M32R_INSN_SNC, M32R2F_INSN_SNC, M32R2F_SFMT_SC, M32R2F_INSN_PAR_SNC, M32R2F_INSN_WRITE_SNC }, 183 1.1 christos { M32R_INSN_CLRPSW, M32R2F_INSN_CLRPSW, M32R2F_SFMT_CLRPSW, M32R2F_INSN_PAR_CLRPSW, M32R2F_INSN_WRITE_CLRPSW }, 184 1.1 christos { M32R_INSN_SETPSW, M32R2F_INSN_SETPSW, M32R2F_SFMT_SETPSW, M32R2F_INSN_PAR_SETPSW, M32R2F_INSN_WRITE_SETPSW }, 185 1.1 christos { M32R_INSN_BSET, M32R2F_INSN_BSET, M32R2F_SFMT_BSET, NOPAR, NOPAR }, 186 1.1 christos { M32R_INSN_BCLR, M32R2F_INSN_BCLR, M32R2F_SFMT_BSET, NOPAR, NOPAR }, 187 1.1 christos { M32R_INSN_BTST, M32R2F_INSN_BTST, M32R2F_SFMT_BTST, M32R2F_INSN_PAR_BTST, M32R2F_INSN_WRITE_BTST }, 188 1.1 christos }; 189 1.1 christos 190 1.1 christos static const struct insn_sem m32r2f_insn_sem_invalid = 191 1.1 christos { 192 1.1 christos VIRTUAL_INSN_X_INVALID, M32R2F_INSN_X_INVALID, M32R2F_SFMT_EMPTY, NOPAR, NOPAR 193 1.1 christos }; 194 1.1 christos 195 1.1 christos /* Initialize an IDESC from the compile-time computable parts. */ 196 1.1 christos 197 1.1 christos static INLINE void 198 1.1 christos init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t) 199 1.1 christos { 200 1.1 christos const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries; 201 1.1 christos 202 1.1 christos id->num = t->index; 203 1.1 christos id->sfmt = t->sfmt; 204 1.1 christos if ((int) t->type <= 0) 205 1.1 christos id->idata = & cgen_virtual_insn_table[- (int) t->type]; 206 1.1 christos else 207 1.1 christos id->idata = & insn_table[t->type]; 208 1.1 christos id->attrs = CGEN_INSN_ATTRS (id->idata); 209 1.1 christos /* Oh my god, a magic number. */ 210 1.1 christos id->length = CGEN_INSN_BITSIZE (id->idata) / 8; 211 1.1 christos 212 1.1 christos #if WITH_PROFILE_MODEL_P 213 1.1 christos id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index]; 214 1.1 christos { 215 1.1 christos SIM_DESC sd = CPU_STATE (cpu); 216 1.1 christos SIM_ASSERT (t->index == id->timing->num); 217 1.1 christos } 218 1.1 christos #endif 219 1.1 christos 220 1.1 christos /* Semantic pointers are initialized elsewhere. */ 221 1.1 christos } 222 1.1 christos 223 1.1 christos /* Initialize the instruction descriptor table. */ 224 1.1 christos 225 1.1 christos void 226 1.1 christos m32r2f_init_idesc_table (SIM_CPU *cpu) 227 1.1 christos { 228 1.1 christos IDESC *id,*tabend; 229 1.1 christos const struct insn_sem *t,*tend; 230 1.1 christos int tabsize = M32R2F_INSN__MAX; 231 1.1 christos IDESC *table = m32r2f_insn_data; 232 1.1 christos 233 1.1 christos memset (table, 0, tabsize * sizeof (IDESC)); 234 1.1 christos 235 1.1 christos /* First set all entries to the `invalid insn'. */ 236 1.1 christos t = & m32r2f_insn_sem_invalid; 237 1.1 christos for (id = table, tabend = table + tabsize; id < tabend; ++id) 238 1.1 christos init_idesc (cpu, id, t); 239 1.1 christos 240 1.1 christos /* Now fill in the values for the chosen cpu. */ 241 1.1.1.7 christos for (t = m32r2f_insn_sem, tend = t + ARRAY_SIZE (m32r2f_insn_sem); 242 1.1 christos t != tend; ++t) 243 1.1 christos { 244 1.1 christos init_idesc (cpu, & table[t->index], t); 245 1.1 christos if (t->par_index != NOPAR) 246 1.1 christos { 247 1.1 christos init_idesc (cpu, &table[t->par_index], t); 248 1.1 christos table[t->index].par_idesc = &table[t->par_index]; 249 1.1 christos } 250 1.1 christos if (t->par_index != NOPAR) 251 1.1 christos { 252 1.1 christos init_idesc (cpu, &table[t->write_index], t); 253 1.1 christos table[t->par_index].par_idesc = &table[t->write_index]; 254 1.1 christos } 255 1.1 christos } 256 1.1 christos 257 1.1 christos /* Link the IDESC table into the cpu. */ 258 1.1 christos CPU_IDESC (cpu) = table; 259 1.1 christos } 260 1.1 christos 261 1.1 christos /* Given an instruction, return a pointer to its IDESC entry. */ 262 1.1 christos 263 1.1 christos const IDESC * 264 1.1 christos m32r2f_decode (SIM_CPU *current_cpu, IADDR pc, 265 1.1 christos CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn, 266 1.1 christos ARGBUF *abuf) 267 1.1 christos { 268 1.1 christos /* Result of decoder. */ 269 1.1 christos M32R2F_INSN_TYPE itype; 270 1.1 christos 271 1.1 christos { 272 1.1 christos CGEN_INSN_WORD insn = base_insn; 273 1.1 christos 274 1.1 christos { 275 1.1.1.11 christos unsigned int val0 = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0))); 276 1.1.1.11 christos switch (val0) 277 1.1 christos { 278 1.1.1.11 christos case 0: itype = M32R2F_INSN_SUBV; goto extract_sfmt_addv; 279 1.1.1.11 christos case 1: itype = M32R2F_INSN_SUBX; goto extract_sfmt_addx; 280 1.1.1.11 christos case 2: itype = M32R2F_INSN_SUB; goto extract_sfmt_add; 281 1.1.1.11 christos case 3: itype = M32R2F_INSN_NEG; goto extract_sfmt_mv; 282 1.1.1.11 christos case 4: itype = M32R2F_INSN_CMP; goto extract_sfmt_cmp; 283 1.1.1.11 christos case 5: itype = M32R2F_INSN_CMPU; goto extract_sfmt_cmp; 284 1.1.1.11 christos case 6: itype = M32R2F_INSN_CMPEQ; goto extract_sfmt_cmp; 285 1.1.1.11 christos case 7: 286 1.1 christos { 287 1.1.1.11 christos unsigned int val1 = (((insn >> 8) & (3 << 0))); 288 1.1.1.11 christos switch (val1) 289 1.1 christos { 290 1.1.1.11 christos case 0: 291 1.1 christos if ((entire_insn & 0xfff0) == 0x70) 292 1.1 christos { itype = M32R2F_INSN_CMPZ; goto extract_sfmt_cmpz; } 293 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 294 1.1.1.11 christos case 3: 295 1.1 christos if ((entire_insn & 0xfff0) == 0x370) 296 1.1 christos { itype = M32R2F_INSN_PCMPBZ; goto extract_sfmt_cmpz; } 297 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 298 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 299 1.1 christos } 300 1.1 christos } 301 1.1.1.11 christos case 8: itype = M32R2F_INSN_ADDV; goto extract_sfmt_addv; 302 1.1.1.11 christos case 9: itype = M32R2F_INSN_ADDX; goto extract_sfmt_addx; 303 1.1.1.11 christos case 10: itype = M32R2F_INSN_ADD; goto extract_sfmt_add; 304 1.1.1.11 christos case 11: itype = M32R2F_INSN_NOT; goto extract_sfmt_mv; 305 1.1.1.11 christos case 12: itype = M32R2F_INSN_AND; goto extract_sfmt_add; 306 1.1.1.11 christos case 13: itype = M32R2F_INSN_XOR; goto extract_sfmt_add; 307 1.1.1.11 christos case 14: itype = M32R2F_INSN_OR; goto extract_sfmt_add; 308 1.1.1.11 christos case 15: 309 1.1 christos if ((entire_insn & 0xf8f0) == 0xf0) 310 1.1 christos { itype = M32R2F_INSN_BTST; goto extract_sfmt_btst; } 311 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 312 1.1.1.11 christos case 16: itype = M32R2F_INSN_SRL; goto extract_sfmt_add; 313 1.1.1.11 christos case 18: itype = M32R2F_INSN_SRA; goto extract_sfmt_add; 314 1.1.1.11 christos case 20: itype = M32R2F_INSN_SLL; goto extract_sfmt_add; 315 1.1.1.11 christos case 22: itype = M32R2F_INSN_MUL; goto extract_sfmt_add; 316 1.1.1.11 christos case 24: itype = M32R2F_INSN_MV; goto extract_sfmt_mv; 317 1.1.1.11 christos case 25: itype = M32R2F_INSN_MVFC; goto extract_sfmt_mvfc; 318 1.1.1.11 christos case 26: itype = M32R2F_INSN_MVTC; goto extract_sfmt_mvtc; 319 1.1.1.11 christos case 28: 320 1.1 christos { 321 1.1.1.11 christos unsigned int val1 = (((insn >> 8) & (3 << 0))); 322 1.1.1.11 christos switch (val1) 323 1.1 christos { 324 1.1.1.11 christos case 0: 325 1.1 christos if ((entire_insn & 0xfff0) == 0x1cc0) 326 1.1 christos { itype = M32R2F_INSN_JC; goto extract_sfmt_jc; } 327 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 328 1.1.1.11 christos case 1: 329 1.1 christos if ((entire_insn & 0xfff0) == 0x1dc0) 330 1.1 christos { itype = M32R2F_INSN_JNC; goto extract_sfmt_jc; } 331 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 332 1.1.1.11 christos case 2: 333 1.1 christos if ((entire_insn & 0xfff0) == 0x1ec0) 334 1.1 christos { itype = M32R2F_INSN_JL; goto extract_sfmt_jl; } 335 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 336 1.1.1.11 christos case 3: 337 1.1 christos if ((entire_insn & 0xfff0) == 0x1fc0) 338 1.1 christos { itype = M32R2F_INSN_JMP; goto extract_sfmt_jmp; } 339 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 340 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 341 1.1 christos } 342 1.1 christos } 343 1.1.1.11 christos case 29: 344 1.1 christos if ((entire_insn & 0xffff) == 0x10d6) 345 1.1 christos { itype = M32R2F_INSN_RTE; goto extract_sfmt_rte; } 346 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 347 1.1.1.11 christos case 31: 348 1.1 christos if ((entire_insn & 0xfff0) == 0x10f0) 349 1.1 christos { itype = M32R2F_INSN_TRAP; goto extract_sfmt_trap; } 350 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 351 1.1.1.11 christos case 32: itype = M32R2F_INSN_STB; goto extract_sfmt_stb; 352 1.1.1.11 christos case 33: itype = M32R2F_INSN_STB_PLUS; goto extract_sfmt_stb_plus; 353 1.1.1.11 christos case 34: itype = M32R2F_INSN_STH; goto extract_sfmt_sth; 354 1.1.1.11 christos case 35: itype = M32R2F_INSN_STH_PLUS; goto extract_sfmt_sth_plus; 355 1.1.1.11 christos case 36: itype = M32R2F_INSN_ST; goto extract_sfmt_st; 356 1.1.1.11 christos case 37: itype = M32R2F_INSN_UNLOCK; goto extract_sfmt_unlock; 357 1.1.1.11 christos case 38: itype = M32R2F_INSN_ST_PLUS; goto extract_sfmt_st_plus; 358 1.1.1.11 christos case 39: itype = M32R2F_INSN_ST_MINUS; goto extract_sfmt_st_plus; 359 1.1.1.11 christos case 40: itype = M32R2F_INSN_LDB; goto extract_sfmt_ldb; 360 1.1.1.11 christos case 41: itype = M32R2F_INSN_LDUB; goto extract_sfmt_ldb; 361 1.1.1.11 christos case 42: itype = M32R2F_INSN_LDH; goto extract_sfmt_ldh; 362 1.1.1.11 christos case 43: itype = M32R2F_INSN_LDUH; goto extract_sfmt_ldh; 363 1.1.1.11 christos case 44: itype = M32R2F_INSN_LD; goto extract_sfmt_ld; 364 1.1.1.11 christos case 45: itype = M32R2F_INSN_LOCK; goto extract_sfmt_lock; 365 1.1.1.11 christos case 46: itype = M32R2F_INSN_LD_PLUS; goto extract_sfmt_ld_plus; 366 1.1.1.11 christos case 48: 367 1.1.1.11 christos case 56: itype = M32R2F_INSN_MULHI_A; goto extract_sfmt_mulhi_a; 368 1.1.1.11 christos case 49: 369 1.1.1.11 christos case 57: itype = M32R2F_INSN_MULLO_A; goto extract_sfmt_mulhi_a; 370 1.1.1.11 christos case 50: 371 1.1.1.11 christos case 58: itype = M32R2F_INSN_MULWHI_A; goto extract_sfmt_mulhi_a; 372 1.1.1.11 christos case 51: 373 1.1.1.11 christos case 59: itype = M32R2F_INSN_MULWLO_A; goto extract_sfmt_mulhi_a; 374 1.1.1.11 christos case 52: 375 1.1.1.11 christos case 60: itype = M32R2F_INSN_MACHI_A; goto extract_sfmt_machi_a; 376 1.1.1.11 christos case 53: 377 1.1.1.11 christos case 61: itype = M32R2F_INSN_MACLO_A; goto extract_sfmt_machi_a; 378 1.1.1.11 christos case 54: 379 1.1.1.11 christos case 62: itype = M32R2F_INSN_MACWHI_A; goto extract_sfmt_machi_a; 380 1.1.1.11 christos case 55: 381 1.1.1.11 christos case 63: itype = M32R2F_INSN_MACWLO_A; goto extract_sfmt_machi_a; 382 1.1.1.11 christos case 64: 383 1.1.1.11 christos case 65: 384 1.1.1.11 christos case 66: 385 1.1.1.11 christos case 67: 386 1.1.1.11 christos case 68: 387 1.1.1.11 christos case 69: 388 1.1.1.11 christos case 70: 389 1.1.1.11 christos case 71: 390 1.1.1.11 christos case 72: 391 1.1.1.11 christos case 73: 392 1.1.1.11 christos case 74: 393 1.1.1.11 christos case 75: 394 1.1.1.11 christos case 76: 395 1.1.1.11 christos case 77: 396 1.1.1.11 christos case 78: 397 1.1.1.11 christos case 79: itype = M32R2F_INSN_ADDI; goto extract_sfmt_addi; 398 1.1.1.11 christos case 80: 399 1.1.1.11 christos case 81: itype = M32R2F_INSN_SRLI; goto extract_sfmt_slli; 400 1.1.1.11 christos case 82: 401 1.1.1.11 christos case 83: itype = M32R2F_INSN_SRAI; goto extract_sfmt_slli; 402 1.1.1.11 christos case 84: 403 1.1.1.11 christos case 85: itype = M32R2F_INSN_SLLI; goto extract_sfmt_slli; 404 1.1.1.11 christos case 87: 405 1.1 christos { 406 1.1.1.11 christos unsigned int val1 = (((insn >> 0) & (1 << 0))); 407 1.1.1.11 christos switch (val1) 408 1.1 christos { 409 1.1.1.11 christos case 0: 410 1.1 christos if ((entire_insn & 0xf0f3) == 0x5070) 411 1.1 christos { itype = M32R2F_INSN_MVTACHI_A; goto extract_sfmt_mvtachi_a; } 412 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 413 1.1.1.11 christos case 1: 414 1.1 christos if ((entire_insn & 0xf0f3) == 0x5071) 415 1.1 christos { itype = M32R2F_INSN_MVTACLO_A; goto extract_sfmt_mvtachi_a; } 416 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 417 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 418 1.1 christos } 419 1.1 christos } 420 1.1.1.11 christos case 88: 421 1.1 christos if ((entire_insn & 0xf3f2) == 0x5080) 422 1.1 christos { itype = M32R2F_INSN_RACH_DSI; goto extract_sfmt_rac_dsi; } 423 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 424 1.1.1.11 christos case 89: 425 1.1 christos if ((entire_insn & 0xf3f2) == 0x5090) 426 1.1 christos { itype = M32R2F_INSN_RAC_DSI; goto extract_sfmt_rac_dsi; } 427 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 428 1.1.1.11 christos case 90: itype = M32R2F_INSN_MULWU1; goto extract_sfmt_mulwu1; 429 1.1.1.11 christos case 91: itype = M32R2F_INSN_MACWU1; goto extract_sfmt_macwu1; 430 1.1.1.11 christos case 92: itype = M32R2F_INSN_MACLH1; goto extract_sfmt_macwu1; 431 1.1.1.11 christos case 93: itype = M32R2F_INSN_MSBLO; goto extract_sfmt_msblo; 432 1.1.1.11 christos case 94: 433 1.1 christos if ((entire_insn & 0xffff) == 0x50e4) 434 1.1 christos { itype = M32R2F_INSN_SADD; goto extract_sfmt_sadd; } 435 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 436 1.1.1.11 christos case 95: 437 1.1 christos { 438 1.1.1.11 christos unsigned int val1 = (((insn >> 0) & (3 << 0))); 439 1.1.1.11 christos switch (val1) 440 1.1 christos { 441 1.1.1.11 christos case 0: itype = M32R2F_INSN_MVFACHI_A; goto extract_sfmt_mvfachi_a; 442 1.1.1.11 christos case 1: itype = M32R2F_INSN_MVFACLO_A; goto extract_sfmt_mvfachi_a; 443 1.1.1.11 christos case 2: itype = M32R2F_INSN_MVFACMI_A; goto extract_sfmt_mvfachi_a; 444 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 445 1.1 christos } 446 1.1 christos } 447 1.1.1.11 christos case 96: 448 1.1.1.11 christos case 97: 449 1.1.1.11 christos case 98: 450 1.1.1.11 christos case 99: 451 1.1.1.11 christos case 100: 452 1.1.1.11 christos case 101: 453 1.1.1.11 christos case 102: 454 1.1.1.11 christos case 103: 455 1.1.1.11 christos case 104: 456 1.1.1.11 christos case 105: 457 1.1.1.11 christos case 106: 458 1.1.1.11 christos case 107: 459 1.1.1.11 christos case 108: 460 1.1.1.11 christos case 109: 461 1.1.1.11 christos case 110: 462 1.1.1.11 christos case 111: itype = M32R2F_INSN_LDI8; goto extract_sfmt_ldi8; 463 1.1.1.11 christos case 112: 464 1.1 christos { 465 1.1.1.11 christos unsigned int val1 = (((insn >> 7) & (15 << 1)) | ((insn >> 0) & (1 << 0))); 466 1.1.1.11 christos switch (val1) 467 1.1 christos { 468 1.1.1.11 christos case 0: 469 1.1 christos if ((entire_insn & 0xffff) == 0x7000) 470 1.1 christos { itype = M32R2F_INSN_NOP; goto extract_sfmt_nop; } 471 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 472 1.1.1.11 christos case 2: 473 1.1.1.11 christos case 3: itype = M32R2F_INSN_SETPSW; goto extract_sfmt_setpsw; 474 1.1.1.11 christos case 4: 475 1.1.1.11 christos case 5: itype = M32R2F_INSN_CLRPSW; goto extract_sfmt_clrpsw; 476 1.1.1.11 christos case 9: 477 1.1 christos if ((entire_insn & 0xffff) == 0x7401) 478 1.1 christos { itype = M32R2F_INSN_SC; goto extract_sfmt_sc; } 479 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 480 1.1.1.11 christos case 11: 481 1.1 christos if ((entire_insn & 0xffff) == 0x7501) 482 1.1 christos { itype = M32R2F_INSN_SNC; goto extract_sfmt_sc; } 483 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 484 1.1.1.11 christos case 16: 485 1.1.1.11 christos case 17: itype = M32R2F_INSN_BCL8; goto extract_sfmt_bcl8; 486 1.1.1.11 christos case 18: 487 1.1.1.11 christos case 19: itype = M32R2F_INSN_BNCL8; goto extract_sfmt_bcl8; 488 1.1.1.11 christos case 24: 489 1.1.1.11 christos case 25: itype = M32R2F_INSN_BC8; goto extract_sfmt_bc8; 490 1.1.1.11 christos case 26: 491 1.1.1.11 christos case 27: itype = M32R2F_INSN_BNC8; goto extract_sfmt_bc8; 492 1.1.1.11 christos case 28: 493 1.1.1.11 christos case 29: itype = M32R2F_INSN_BL8; goto extract_sfmt_bl8; 494 1.1.1.11 christos case 30: 495 1.1.1.11 christos case 31: itype = M32R2F_INSN_BRA8; goto extract_sfmt_bra8; 496 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 497 1.1 christos } 498 1.1 christos } 499 1.1.1.11 christos case 113: 500 1.1.1.11 christos case 114: 501 1.1.1.11 christos case 115: 502 1.1.1.11 christos case 116: 503 1.1.1.11 christos case 117: 504 1.1.1.11 christos case 118: 505 1.1.1.11 christos case 119: 506 1.1.1.11 christos case 120: 507 1.1.1.11 christos case 121: 508 1.1.1.11 christos case 122: 509 1.1.1.11 christos case 123: 510 1.1.1.11 christos case 124: 511 1.1.1.11 christos case 125: 512 1.1.1.11 christos case 126: 513 1.1.1.11 christos case 127: 514 1.1 christos { 515 1.1.1.11 christos unsigned int val1 = (((insn >> 8) & (15 << 0))); 516 1.1.1.11 christos switch (val1) 517 1.1 christos { 518 1.1.1.11 christos case 1: itype = M32R2F_INSN_SETPSW; goto extract_sfmt_setpsw; 519 1.1.1.11 christos case 2: itype = M32R2F_INSN_CLRPSW; goto extract_sfmt_clrpsw; 520 1.1.1.11 christos case 8: itype = M32R2F_INSN_BCL8; goto extract_sfmt_bcl8; 521 1.1.1.11 christos case 9: itype = M32R2F_INSN_BNCL8; goto extract_sfmt_bcl8; 522 1.1.1.11 christos case 12: itype = M32R2F_INSN_BC8; goto extract_sfmt_bc8; 523 1.1.1.11 christos case 13: itype = M32R2F_INSN_BNC8; goto extract_sfmt_bc8; 524 1.1.1.11 christos case 14: itype = M32R2F_INSN_BL8; goto extract_sfmt_bl8; 525 1.1.1.11 christos case 15: itype = M32R2F_INSN_BRA8; goto extract_sfmt_bra8; 526 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 527 1.1 christos } 528 1.1 christos } 529 1.1.1.11 christos case 132: 530 1.1 christos if ((entire_insn & 0xfff00000) == 0x80400000) 531 1.1 christos { itype = M32R2F_INSN_CMPI; goto extract_sfmt_cmpi; } 532 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 533 1.1.1.11 christos case 133: 534 1.1 christos if ((entire_insn & 0xfff00000) == 0x80500000) 535 1.1 christos { itype = M32R2F_INSN_CMPUI; goto extract_sfmt_cmpi; } 536 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 537 1.1.1.11 christos case 134: 538 1.1 christos { 539 1.1.1.11 christos unsigned int val1 = (((entire_insn >> 8) & (3 << 0))); 540 1.1.1.11 christos switch (val1) 541 1.1 christos { 542 1.1.1.11 christos case 0: 543 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x80600000) 544 1.1 christos { itype = M32R2F_INSN_SAT; goto extract_sfmt_sat; } 545 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 546 1.1.1.11 christos case 2: 547 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x80600200) 548 1.1 christos { itype = M32R2F_INSN_SATH; goto extract_sfmt_satb; } 549 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 550 1.1.1.11 christos case 3: 551 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x80600300) 552 1.1 christos { itype = M32R2F_INSN_SATB; goto extract_sfmt_satb; } 553 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 554 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 555 1.1 christos } 556 1.1 christos } 557 1.1.1.11 christos case 136: itype = M32R2F_INSN_ADDV3; goto extract_sfmt_addv3; 558 1.1.1.11 christos case 138: itype = M32R2F_INSN_ADD3; goto extract_sfmt_add3; 559 1.1.1.11 christos case 140: itype = M32R2F_INSN_AND3; goto extract_sfmt_and3; 560 1.1.1.11 christos case 141: itype = M32R2F_INSN_XOR3; goto extract_sfmt_and3; 561 1.1.1.11 christos case 142: itype = M32R2F_INSN_OR3; goto extract_sfmt_or3; 562 1.1.1.11 christos case 144: 563 1.1 christos { 564 1.1.1.11 christos unsigned int val1 = (((entire_insn >> 3) & (3 << 0))); 565 1.1.1.11 christos switch (val1) 566 1.1 christos { 567 1.1.1.11 christos case 0: 568 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90000000) 569 1.1 christos { itype = M32R2F_INSN_DIV; goto extract_sfmt_div; } 570 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 571 1.1.1.11 christos case 2: 572 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90000010) 573 1.1 christos { itype = M32R2F_INSN_DIVH; goto extract_sfmt_div; } 574 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 575 1.1.1.11 christos case 3: 576 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90000018) 577 1.1 christos { itype = M32R2F_INSN_DIVB; goto extract_sfmt_div; } 578 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 579 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 580 1.1 christos } 581 1.1 christos } 582 1.1.1.11 christos case 145: 583 1.1 christos { 584 1.1.1.11 christos unsigned int val1 = (((entire_insn >> 3) & (3 << 0))); 585 1.1.1.11 christos switch (val1) 586 1.1 christos { 587 1.1.1.11 christos case 0: 588 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90100000) 589 1.1 christos { itype = M32R2F_INSN_DIVU; goto extract_sfmt_div; } 590 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 591 1.1.1.11 christos case 2: 592 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90100010) 593 1.1 christos { itype = M32R2F_INSN_DIVUH; goto extract_sfmt_div; } 594 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 595 1.1.1.11 christos case 3: 596 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90100018) 597 1.1 christos { itype = M32R2F_INSN_DIVUB; goto extract_sfmt_div; } 598 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 599 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 600 1.1 christos } 601 1.1 christos } 602 1.1.1.11 christos case 146: 603 1.1 christos { 604 1.1.1.11 christos unsigned int val1 = (((entire_insn >> 3) & (3 << 0))); 605 1.1.1.11 christos switch (val1) 606 1.1 christos { 607 1.1.1.11 christos case 0: 608 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90200000) 609 1.1 christos { itype = M32R2F_INSN_REM; goto extract_sfmt_div; } 610 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 611 1.1.1.11 christos case 2: 612 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90200010) 613 1.1 christos { itype = M32R2F_INSN_REMH; goto extract_sfmt_div; } 614 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 615 1.1.1.11 christos case 3: 616 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90200018) 617 1.1 christos { itype = M32R2F_INSN_REMB; goto extract_sfmt_div; } 618 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 619 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 620 1.1 christos } 621 1.1 christos } 622 1.1.1.11 christos case 147: 623 1.1 christos { 624 1.1.1.11 christos unsigned int val1 = (((entire_insn >> 3) & (3 << 0))); 625 1.1.1.11 christos switch (val1) 626 1.1 christos { 627 1.1.1.11 christos case 0: 628 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90300000) 629 1.1 christos { itype = M32R2F_INSN_REMU; goto extract_sfmt_div; } 630 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 631 1.1.1.11 christos case 2: 632 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90300010) 633 1.1 christos { itype = M32R2F_INSN_REMUH; goto extract_sfmt_div; } 634 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 635 1.1.1.11 christos case 3: 636 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90300018) 637 1.1 christos { itype = M32R2F_INSN_REMUB; goto extract_sfmt_div; } 638 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 639 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 640 1.1 christos } 641 1.1 christos } 642 1.1.1.11 christos case 152: itype = M32R2F_INSN_SRL3; goto extract_sfmt_sll3; 643 1.1.1.11 christos case 154: itype = M32R2F_INSN_SRA3; goto extract_sfmt_sll3; 644 1.1.1.11 christos case 156: itype = M32R2F_INSN_SLL3; goto extract_sfmt_sll3; 645 1.1.1.11 christos case 159: 646 1.1 christos if ((entire_insn & 0xf0ff0000) == 0x90f00000) 647 1.1 christos { itype = M32R2F_INSN_LDI16; goto extract_sfmt_ldi16; } 648 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 649 1.1.1.11 christos case 160: itype = M32R2F_INSN_STB_D; goto extract_sfmt_stb_d; 650 1.1.1.11 christos case 162: itype = M32R2F_INSN_STH_D; goto extract_sfmt_sth_d; 651 1.1.1.11 christos case 164: itype = M32R2F_INSN_ST_D; goto extract_sfmt_st_d; 652 1.1.1.11 christos case 166: 653 1.1 christos if ((entire_insn & 0xf8f00000) == 0xa0600000) 654 1.1 christos { itype = M32R2F_INSN_BSET; goto extract_sfmt_bset; } 655 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 656 1.1.1.11 christos case 167: 657 1.1 christos if ((entire_insn & 0xf8f00000) == 0xa0700000) 658 1.1 christos { itype = M32R2F_INSN_BCLR; goto extract_sfmt_bset; } 659 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 660 1.1.1.11 christos case 168: itype = M32R2F_INSN_LDB_D; goto extract_sfmt_ldb_d; 661 1.1.1.11 christos case 169: itype = M32R2F_INSN_LDUB_D; goto extract_sfmt_ldb_d; 662 1.1.1.11 christos case 170: itype = M32R2F_INSN_LDH_D; goto extract_sfmt_ldh_d; 663 1.1.1.11 christos case 171: itype = M32R2F_INSN_LDUH_D; goto extract_sfmt_ldh_d; 664 1.1.1.11 christos case 172: itype = M32R2F_INSN_LD_D; goto extract_sfmt_ld_d; 665 1.1.1.11 christos case 176: itype = M32R2F_INSN_BEQ; goto extract_sfmt_beq; 666 1.1.1.11 christos case 177: itype = M32R2F_INSN_BNE; goto extract_sfmt_beq; 667 1.1.1.11 christos case 184: 668 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0800000) 669 1.1 christos { itype = M32R2F_INSN_BEQZ; goto extract_sfmt_beqz; } 670 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 671 1.1.1.11 christos case 185: 672 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0900000) 673 1.1 christos { itype = M32R2F_INSN_BNEZ; goto extract_sfmt_beqz; } 674 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 675 1.1.1.11 christos case 186: 676 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0a00000) 677 1.1 christos { itype = M32R2F_INSN_BLTZ; goto extract_sfmt_beqz; } 678 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 679 1.1.1.11 christos case 187: 680 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0b00000) 681 1.1 christos { itype = M32R2F_INSN_BGEZ; goto extract_sfmt_beqz; } 682 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 683 1.1.1.11 christos case 188: 684 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0c00000) 685 1.1 christos { itype = M32R2F_INSN_BLEZ; goto extract_sfmt_beqz; } 686 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 687 1.1.1.11 christos case 189: 688 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0d00000) 689 1.1 christos { itype = M32R2F_INSN_BGTZ; goto extract_sfmt_beqz; } 690 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 691 1.1.1.11 christos case 220: 692 1.1 christos if ((entire_insn & 0xf0ff0000) == 0xd0c00000) 693 1.1 christos { itype = M32R2F_INSN_SETH; goto extract_sfmt_seth; } 694 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 695 1.1.1.11 christos case 224: 696 1.1.1.11 christos case 225: 697 1.1.1.11 christos case 226: 698 1.1.1.11 christos case 227: 699 1.1.1.11 christos case 228: 700 1.1.1.11 christos case 229: 701 1.1.1.11 christos case 230: 702 1.1.1.11 christos case 231: 703 1.1.1.11 christos case 232: 704 1.1.1.11 christos case 233: 705 1.1.1.11 christos case 234: 706 1.1.1.11 christos case 235: 707 1.1.1.11 christos case 236: 708 1.1.1.11 christos case 237: 709 1.1.1.11 christos case 238: 710 1.1.1.11 christos case 239: itype = M32R2F_INSN_LD24; goto extract_sfmt_ld24; 711 1.1.1.11 christos case 240: 712 1.1.1.11 christos case 241: 713 1.1.1.11 christos case 242: 714 1.1.1.11 christos case 243: 715 1.1.1.11 christos case 244: 716 1.1.1.11 christos case 245: 717 1.1.1.11 christos case 246: 718 1.1.1.11 christos case 247: 719 1.1.1.11 christos case 248: 720 1.1.1.11 christos case 249: 721 1.1.1.11 christos case 250: 722 1.1.1.11 christos case 251: 723 1.1.1.11 christos case 252: 724 1.1.1.11 christos case 253: 725 1.1.1.11 christos case 254: 726 1.1.1.11 christos case 255: 727 1.1 christos { 728 1.1.1.11 christos unsigned int val1 = (((insn >> 8) & (7 << 0))); 729 1.1.1.11 christos switch (val1) 730 1.1 christos { 731 1.1.1.11 christos case 0: 732 1.1 christos if ((entire_insn & 0xff000000) == 0xf8000000) 733 1.1 christos { itype = M32R2F_INSN_BCL24; goto extract_sfmt_bcl24; } 734 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 735 1.1.1.11 christos case 1: 736 1.1 christos if ((entire_insn & 0xff000000) == 0xf9000000) 737 1.1 christos { itype = M32R2F_INSN_BNCL24; goto extract_sfmt_bcl24; } 738 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 739 1.1.1.11 christos case 4: 740 1.1 christos if ((entire_insn & 0xff000000) == 0xfc000000) 741 1.1 christos { itype = M32R2F_INSN_BC24; goto extract_sfmt_bc24; } 742 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 743 1.1.1.11 christos case 5: 744 1.1 christos if ((entire_insn & 0xff000000) == 0xfd000000) 745 1.1 christos { itype = M32R2F_INSN_BNC24; goto extract_sfmt_bc24; } 746 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 747 1.1.1.11 christos case 6: 748 1.1 christos if ((entire_insn & 0xff000000) == 0xfe000000) 749 1.1 christos { itype = M32R2F_INSN_BL24; goto extract_sfmt_bl24; } 750 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 751 1.1.1.11 christos case 7: 752 1.1 christos if ((entire_insn & 0xff000000) == 0xff000000) 753 1.1 christos { itype = M32R2F_INSN_BRA24; goto extract_sfmt_bra24; } 754 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 755 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 756 1.1 christos } 757 1.1 christos } 758 1.1.1.11 christos default: itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty; 759 1.1 christos } 760 1.1 christos } 761 1.1 christos } 762 1.1 christos 763 1.1 christos /* The instruction has been decoded, now extract the fields. */ 764 1.1 christos 765 1.1 christos extract_sfmt_empty: 766 1.1 christos { 767 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 768 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 769 1.1 christos 770 1.1 christos 771 1.1 christos /* Record the fields for the semantic handler. */ 772 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0)); 773 1.1 christos 774 1.1 christos #undef FLD 775 1.1 christos return idesc; 776 1.1 christos } 777 1.1 christos 778 1.1 christos extract_sfmt_add: 779 1.1 christos { 780 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 781 1.1 christos CGEN_INSN_WORD insn = entire_insn; 782 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 783 1.1 christos UINT f_r1; 784 1.1 christos UINT f_r2; 785 1.1 christos 786 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 787 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 788 1.1 christos 789 1.1 christos /* Record the fields for the semantic handler. */ 790 1.1 christos FLD (f_r1) = f_r1; 791 1.1 christos FLD (f_r2) = f_r2; 792 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 793 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 794 1.1.1.5 christos 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)); 795 1.1 christos 796 1.1 christos #if WITH_PROFILE_MODEL_P 797 1.1 christos /* Record the fields for profiling. */ 798 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 799 1.1 christos { 800 1.1 christos FLD (in_dr) = f_r1; 801 1.1 christos FLD (in_sr) = f_r2; 802 1.1 christos FLD (out_dr) = f_r1; 803 1.1 christos } 804 1.1 christos #endif 805 1.1 christos #undef FLD 806 1.1 christos return idesc; 807 1.1 christos } 808 1.1 christos 809 1.1 christos extract_sfmt_add3: 810 1.1 christos { 811 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 812 1.1 christos CGEN_INSN_WORD insn = entire_insn; 813 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 814 1.1 christos UINT f_r1; 815 1.1 christos UINT f_r2; 816 1.1 christos INT f_simm16; 817 1.1 christos 818 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 819 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 820 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 821 1.1 christos 822 1.1 christos /* Record the fields for the semantic handler. */ 823 1.1 christos FLD (f_simm16) = f_simm16; 824 1.1 christos FLD (f_r2) = f_r2; 825 1.1 christos FLD (f_r1) = f_r1; 826 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 827 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 828 1.1.1.5 christos 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)); 829 1.1 christos 830 1.1 christos #if WITH_PROFILE_MODEL_P 831 1.1 christos /* Record the fields for profiling. */ 832 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 833 1.1 christos { 834 1.1 christos FLD (in_sr) = f_r2; 835 1.1 christos FLD (out_dr) = f_r1; 836 1.1 christos } 837 1.1 christos #endif 838 1.1 christos #undef FLD 839 1.1 christos return idesc; 840 1.1 christos } 841 1.1 christos 842 1.1 christos extract_sfmt_and3: 843 1.1 christos { 844 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 845 1.1 christos CGEN_INSN_WORD insn = entire_insn; 846 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f 847 1.1 christos UINT f_r1; 848 1.1 christos UINT f_r2; 849 1.1 christos UINT f_uimm16; 850 1.1 christos 851 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 852 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 853 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 854 1.1 christos 855 1.1 christos /* Record the fields for the semantic handler. */ 856 1.1 christos FLD (f_r2) = f_r2; 857 1.1 christos FLD (f_uimm16) = f_uimm16; 858 1.1 christos FLD (f_r1) = f_r1; 859 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 860 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 861 1.1.1.5 christos 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)); 862 1.1 christos 863 1.1 christos #if WITH_PROFILE_MODEL_P 864 1.1 christos /* Record the fields for profiling. */ 865 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 866 1.1 christos { 867 1.1 christos FLD (in_sr) = f_r2; 868 1.1 christos FLD (out_dr) = f_r1; 869 1.1 christos } 870 1.1 christos #endif 871 1.1 christos #undef FLD 872 1.1 christos return idesc; 873 1.1 christos } 874 1.1 christos 875 1.1 christos extract_sfmt_or3: 876 1.1 christos { 877 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 878 1.1 christos CGEN_INSN_WORD insn = entire_insn; 879 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f 880 1.1 christos UINT f_r1; 881 1.1 christos UINT f_r2; 882 1.1 christos UINT f_uimm16; 883 1.1 christos 884 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 885 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 886 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 887 1.1 christos 888 1.1 christos /* Record the fields for the semantic handler. */ 889 1.1 christos FLD (f_r2) = f_r2; 890 1.1 christos FLD (f_uimm16) = f_uimm16; 891 1.1 christos FLD (f_r1) = f_r1; 892 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 893 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 894 1.1.1.5 christos 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)); 895 1.1 christos 896 1.1 christos #if WITH_PROFILE_MODEL_P 897 1.1 christos /* Record the fields for profiling. */ 898 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 899 1.1 christos { 900 1.1 christos FLD (in_sr) = f_r2; 901 1.1 christos FLD (out_dr) = f_r1; 902 1.1 christos } 903 1.1 christos #endif 904 1.1 christos #undef FLD 905 1.1 christos return idesc; 906 1.1 christos } 907 1.1 christos 908 1.1 christos extract_sfmt_addi: 909 1.1 christos { 910 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 911 1.1 christos CGEN_INSN_WORD insn = entire_insn; 912 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 913 1.1 christos UINT f_r1; 914 1.1 christos INT f_simm8; 915 1.1 christos 916 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 917 1.1 christos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); 918 1.1 christos 919 1.1 christos /* Record the fields for the semantic handler. */ 920 1.1 christos FLD (f_r1) = f_r1; 921 1.1 christos FLD (f_simm8) = f_simm8; 922 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 923 1.1.1.5 christos 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)); 924 1.1 christos 925 1.1 christos #if WITH_PROFILE_MODEL_P 926 1.1 christos /* Record the fields for profiling. */ 927 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 928 1.1 christos { 929 1.1 christos FLD (in_dr) = f_r1; 930 1.1 christos FLD (out_dr) = f_r1; 931 1.1 christos } 932 1.1 christos #endif 933 1.1 christos #undef FLD 934 1.1 christos return idesc; 935 1.1 christos } 936 1.1 christos 937 1.1 christos extract_sfmt_addv: 938 1.1 christos { 939 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 940 1.1 christos CGEN_INSN_WORD insn = entire_insn; 941 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 942 1.1 christos UINT f_r1; 943 1.1 christos UINT f_r2; 944 1.1 christos 945 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 946 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 947 1.1 christos 948 1.1 christos /* Record the fields for the semantic handler. */ 949 1.1 christos FLD (f_r1) = f_r1; 950 1.1 christos FLD (f_r2) = f_r2; 951 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 952 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 953 1.1.1.5 christos 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)); 954 1.1 christos 955 1.1 christos #if WITH_PROFILE_MODEL_P 956 1.1 christos /* Record the fields for profiling. */ 957 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 958 1.1 christos { 959 1.1 christos FLD (in_dr) = f_r1; 960 1.1 christos FLD (in_sr) = f_r2; 961 1.1 christos FLD (out_dr) = f_r1; 962 1.1 christos } 963 1.1 christos #endif 964 1.1 christos #undef FLD 965 1.1 christos return idesc; 966 1.1 christos } 967 1.1 christos 968 1.1 christos extract_sfmt_addv3: 969 1.1 christos { 970 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 971 1.1 christos CGEN_INSN_WORD insn = entire_insn; 972 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 973 1.1 christos UINT f_r1; 974 1.1 christos UINT f_r2; 975 1.1 christos INT f_simm16; 976 1.1 christos 977 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 978 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 979 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 980 1.1 christos 981 1.1 christos /* Record the fields for the semantic handler. */ 982 1.1 christos FLD (f_simm16) = f_simm16; 983 1.1 christos FLD (f_r2) = f_r2; 984 1.1 christos FLD (f_r1) = f_r1; 985 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 986 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 987 1.1.1.5 christos 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)); 988 1.1 christos 989 1.1 christos #if WITH_PROFILE_MODEL_P 990 1.1 christos /* Record the fields for profiling. */ 991 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 992 1.1 christos { 993 1.1 christos FLD (in_sr) = f_r2; 994 1.1 christos FLD (out_dr) = f_r1; 995 1.1 christos } 996 1.1 christos #endif 997 1.1 christos #undef FLD 998 1.1 christos return idesc; 999 1.1 christos } 1000 1.1 christos 1001 1.1 christos extract_sfmt_addx: 1002 1.1 christos { 1003 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1004 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1005 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 1006 1.1 christos UINT f_r1; 1007 1.1 christos UINT f_r2; 1008 1.1 christos 1009 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1010 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1011 1.1 christos 1012 1.1 christos /* Record the fields for the semantic handler. */ 1013 1.1 christos FLD (f_r1) = f_r1; 1014 1.1 christos FLD (f_r2) = f_r2; 1015 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1016 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1017 1.1.1.5 christos 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)); 1018 1.1 christos 1019 1.1 christos #if WITH_PROFILE_MODEL_P 1020 1.1 christos /* Record the fields for profiling. */ 1021 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1022 1.1 christos { 1023 1.1 christos FLD (in_dr) = f_r1; 1024 1.1 christos FLD (in_sr) = f_r2; 1025 1.1 christos FLD (out_dr) = f_r1; 1026 1.1 christos } 1027 1.1 christos #endif 1028 1.1 christos #undef FLD 1029 1.1 christos return idesc; 1030 1.1 christos } 1031 1.1 christos 1032 1.1 christos extract_sfmt_bc8: 1033 1.1 christos { 1034 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1035 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1036 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 1037 1.1 christos SI f_disp8; 1038 1.1 christos 1039 1.1.1.11 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 1040 1.1 christos 1041 1.1 christos /* Record the fields for the semantic handler. */ 1042 1.1 christos FLD (i_disp8) = f_disp8; 1043 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 1044 1.1 christos 1045 1.1 christos #if WITH_PROFILE_MODEL_P 1046 1.1 christos /* Record the fields for profiling. */ 1047 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1048 1.1 christos { 1049 1.1 christos } 1050 1.1 christos #endif 1051 1.1 christos #undef FLD 1052 1.1 christos return idesc; 1053 1.1 christos } 1054 1.1 christos 1055 1.1 christos extract_sfmt_bc24: 1056 1.1 christos { 1057 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1058 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1059 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 1060 1.1 christos SI f_disp24; 1061 1.1 christos 1062 1.1.1.11 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 1063 1.1 christos 1064 1.1 christos /* Record the fields for the semantic handler. */ 1065 1.1 christos FLD (i_disp24) = f_disp24; 1066 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 1067 1.1 christos 1068 1.1 christos #if WITH_PROFILE_MODEL_P 1069 1.1 christos /* Record the fields for profiling. */ 1070 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1071 1.1 christos { 1072 1.1 christos } 1073 1.1 christos #endif 1074 1.1 christos #undef FLD 1075 1.1 christos return idesc; 1076 1.1 christos } 1077 1.1 christos 1078 1.1 christos extract_sfmt_beq: 1079 1.1 christos { 1080 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1081 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1082 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 1083 1.1 christos UINT f_r1; 1084 1.1 christos UINT f_r2; 1085 1.1 christos SI f_disp16; 1086 1.1 christos 1087 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1088 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1089 1.1.1.11 christos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc)); 1090 1.1 christos 1091 1.1 christos /* Record the fields for the semantic handler. */ 1092 1.1 christos FLD (f_r1) = f_r1; 1093 1.1 christos FLD (f_r2) = f_r2; 1094 1.1 christos FLD (i_disp16) = f_disp16; 1095 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1096 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1097 1.1.1.5 christos 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)); 1098 1.1 christos 1099 1.1 christos #if WITH_PROFILE_MODEL_P 1100 1.1 christos /* Record the fields for profiling. */ 1101 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1102 1.1 christos { 1103 1.1 christos FLD (in_src1) = f_r1; 1104 1.1 christos FLD (in_src2) = f_r2; 1105 1.1 christos } 1106 1.1 christos #endif 1107 1.1 christos #undef FLD 1108 1.1 christos return idesc; 1109 1.1 christos } 1110 1.1 christos 1111 1.1 christos extract_sfmt_beqz: 1112 1.1 christos { 1113 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1114 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1115 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 1116 1.1 christos UINT f_r2; 1117 1.1 christos SI f_disp16; 1118 1.1 christos 1119 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1120 1.1.1.11 christos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc)); 1121 1.1 christos 1122 1.1 christos /* Record the fields for the semantic handler. */ 1123 1.1 christos FLD (f_r2) = f_r2; 1124 1.1 christos FLD (i_disp16) = f_disp16; 1125 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1126 1.1.1.5 christos 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)); 1127 1.1 christos 1128 1.1 christos #if WITH_PROFILE_MODEL_P 1129 1.1 christos /* Record the fields for profiling. */ 1130 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1131 1.1 christos { 1132 1.1 christos FLD (in_src2) = f_r2; 1133 1.1 christos } 1134 1.1 christos #endif 1135 1.1 christos #undef FLD 1136 1.1 christos return idesc; 1137 1.1 christos } 1138 1.1 christos 1139 1.1 christos extract_sfmt_bl8: 1140 1.1 christos { 1141 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1142 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1143 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 1144 1.1 christos SI f_disp8; 1145 1.1 christos 1146 1.1.1.11 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 1147 1.1 christos 1148 1.1 christos /* Record the fields for the semantic handler. */ 1149 1.1 christos FLD (i_disp8) = f_disp8; 1150 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 1151 1.1 christos 1152 1.1 christos #if WITH_PROFILE_MODEL_P 1153 1.1 christos /* Record the fields for profiling. */ 1154 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1155 1.1 christos { 1156 1.1 christos FLD (out_h_gr_SI_14) = 14; 1157 1.1 christos } 1158 1.1 christos #endif 1159 1.1 christos #undef FLD 1160 1.1 christos return idesc; 1161 1.1 christos } 1162 1.1 christos 1163 1.1 christos extract_sfmt_bl24: 1164 1.1 christos { 1165 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1166 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1167 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 1168 1.1 christos SI f_disp24; 1169 1.1 christos 1170 1.1.1.11 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 1171 1.1 christos 1172 1.1 christos /* Record the fields for the semantic handler. */ 1173 1.1 christos FLD (i_disp24) = f_disp24; 1174 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 1175 1.1 christos 1176 1.1 christos #if WITH_PROFILE_MODEL_P 1177 1.1 christos /* Record the fields for profiling. */ 1178 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1179 1.1 christos { 1180 1.1 christos FLD (out_h_gr_SI_14) = 14; 1181 1.1 christos } 1182 1.1 christos #endif 1183 1.1 christos #undef FLD 1184 1.1 christos return idesc; 1185 1.1 christos } 1186 1.1 christos 1187 1.1 christos extract_sfmt_bcl8: 1188 1.1 christos { 1189 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1190 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1191 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 1192 1.1 christos SI f_disp8; 1193 1.1 christos 1194 1.1.1.11 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 1195 1.1 christos 1196 1.1 christos /* Record the fields for the semantic handler. */ 1197 1.1 christos FLD (i_disp8) = f_disp8; 1198 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 1199 1.1 christos 1200 1.1 christos #if WITH_PROFILE_MODEL_P 1201 1.1 christos /* Record the fields for profiling. */ 1202 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1203 1.1 christos { 1204 1.1 christos FLD (out_h_gr_SI_14) = 14; 1205 1.1 christos } 1206 1.1 christos #endif 1207 1.1 christos #undef FLD 1208 1.1 christos return idesc; 1209 1.1 christos } 1210 1.1 christos 1211 1.1 christos extract_sfmt_bcl24: 1212 1.1 christos { 1213 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1214 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1215 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 1216 1.1 christos SI f_disp24; 1217 1.1 christos 1218 1.1.1.11 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 1219 1.1 christos 1220 1.1 christos /* Record the fields for the semantic handler. */ 1221 1.1 christos FLD (i_disp24) = f_disp24; 1222 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 1223 1.1 christos 1224 1.1 christos #if WITH_PROFILE_MODEL_P 1225 1.1 christos /* Record the fields for profiling. */ 1226 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1227 1.1 christos { 1228 1.1 christos FLD (out_h_gr_SI_14) = 14; 1229 1.1 christos } 1230 1.1 christos #endif 1231 1.1 christos #undef FLD 1232 1.1 christos return idesc; 1233 1.1 christos } 1234 1.1 christos 1235 1.1 christos extract_sfmt_bra8: 1236 1.1 christos { 1237 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1238 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1239 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 1240 1.1 christos SI f_disp8; 1241 1.1 christos 1242 1.1.1.11 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4)))); 1243 1.1 christos 1244 1.1 christos /* Record the fields for the semantic handler. */ 1245 1.1 christos FLD (i_disp8) = f_disp8; 1246 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0)); 1247 1.1 christos 1248 1.1 christos #if WITH_PROFILE_MODEL_P 1249 1.1 christos /* Record the fields for profiling. */ 1250 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1251 1.1 christos { 1252 1.1 christos } 1253 1.1 christos #endif 1254 1.1 christos #undef FLD 1255 1.1 christos return idesc; 1256 1.1 christos } 1257 1.1 christos 1258 1.1 christos extract_sfmt_bra24: 1259 1.1 christos { 1260 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1261 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1262 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 1263 1.1 christos SI f_disp24; 1264 1.1 christos 1265 1.1.1.11 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc)); 1266 1.1 christos 1267 1.1 christos /* Record the fields for the semantic handler. */ 1268 1.1 christos FLD (i_disp24) = f_disp24; 1269 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0)); 1270 1.1 christos 1271 1.1 christos #if WITH_PROFILE_MODEL_P 1272 1.1 christos /* Record the fields for profiling. */ 1273 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1274 1.1 christos { 1275 1.1 christos } 1276 1.1 christos #endif 1277 1.1 christos #undef FLD 1278 1.1 christos return idesc; 1279 1.1 christos } 1280 1.1 christos 1281 1.1 christos extract_sfmt_cmp: 1282 1.1 christos { 1283 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1284 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1285 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 1286 1.1 christos UINT f_r1; 1287 1.1 christos UINT f_r2; 1288 1.1 christos 1289 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1290 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1291 1.1 christos 1292 1.1 christos /* Record the fields for the semantic handler. */ 1293 1.1 christos FLD (f_r1) = f_r1; 1294 1.1 christos FLD (f_r2) = f_r2; 1295 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1296 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1297 1.1.1.5 christos 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)); 1298 1.1 christos 1299 1.1 christos #if WITH_PROFILE_MODEL_P 1300 1.1 christos /* Record the fields for profiling. */ 1301 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1302 1.1 christos { 1303 1.1 christos FLD (in_src1) = f_r1; 1304 1.1 christos FLD (in_src2) = f_r2; 1305 1.1 christos } 1306 1.1 christos #endif 1307 1.1 christos #undef FLD 1308 1.1 christos return idesc; 1309 1.1 christos } 1310 1.1 christos 1311 1.1 christos extract_sfmt_cmpi: 1312 1.1 christos { 1313 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1314 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1315 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 1316 1.1 christos UINT f_r2; 1317 1.1 christos INT f_simm16; 1318 1.1 christos 1319 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1320 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1321 1.1 christos 1322 1.1 christos /* Record the fields for the semantic handler. */ 1323 1.1 christos FLD (f_simm16) = f_simm16; 1324 1.1 christos FLD (f_r2) = f_r2; 1325 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1326 1.1.1.5 christos 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)); 1327 1.1 christos 1328 1.1 christos #if WITH_PROFILE_MODEL_P 1329 1.1 christos /* Record the fields for profiling. */ 1330 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1331 1.1 christos { 1332 1.1 christos FLD (in_src2) = f_r2; 1333 1.1 christos } 1334 1.1 christos #endif 1335 1.1 christos #undef FLD 1336 1.1 christos return idesc; 1337 1.1 christos } 1338 1.1 christos 1339 1.1 christos extract_sfmt_cmpz: 1340 1.1 christos { 1341 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1342 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1343 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 1344 1.1 christos UINT f_r2; 1345 1.1 christos 1346 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1347 1.1 christos 1348 1.1 christos /* Record the fields for the semantic handler. */ 1349 1.1 christos FLD (f_r2) = f_r2; 1350 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1351 1.1.1.5 christos 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)); 1352 1.1 christos 1353 1.1 christos #if WITH_PROFILE_MODEL_P 1354 1.1 christos /* Record the fields for profiling. */ 1355 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1356 1.1 christos { 1357 1.1 christos FLD (in_src2) = f_r2; 1358 1.1 christos } 1359 1.1 christos #endif 1360 1.1 christos #undef FLD 1361 1.1 christos return idesc; 1362 1.1 christos } 1363 1.1 christos 1364 1.1 christos extract_sfmt_div: 1365 1.1 christos { 1366 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1367 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1368 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 1369 1.1 christos UINT f_r1; 1370 1.1 christos UINT f_r2; 1371 1.1 christos 1372 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1373 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1374 1.1 christos 1375 1.1 christos /* Record the fields for the semantic handler. */ 1376 1.1 christos FLD (f_r1) = f_r1; 1377 1.1 christos FLD (f_r2) = f_r2; 1378 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1379 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1380 1.1.1.5 christos 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)); 1381 1.1 christos 1382 1.1 christos #if WITH_PROFILE_MODEL_P 1383 1.1 christos /* Record the fields for profiling. */ 1384 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1385 1.1 christos { 1386 1.1 christos FLD (in_dr) = f_r1; 1387 1.1 christos FLD (in_sr) = f_r2; 1388 1.1 christos FLD (out_dr) = f_r1; 1389 1.1 christos } 1390 1.1 christos #endif 1391 1.1 christos #undef FLD 1392 1.1 christos return idesc; 1393 1.1 christos } 1394 1.1 christos 1395 1.1 christos extract_sfmt_jc: 1396 1.1 christos { 1397 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1398 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1399 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f 1400 1.1 christos UINT f_r2; 1401 1.1 christos 1402 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1403 1.1 christos 1404 1.1 christos /* Record the fields for the semantic handler. */ 1405 1.1 christos FLD (f_r2) = f_r2; 1406 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1407 1.1.1.5 christos 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)); 1408 1.1 christos 1409 1.1 christos #if WITH_PROFILE_MODEL_P 1410 1.1 christos /* Record the fields for profiling. */ 1411 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1412 1.1 christos { 1413 1.1 christos FLD (in_sr) = f_r2; 1414 1.1 christos } 1415 1.1 christos #endif 1416 1.1 christos #undef FLD 1417 1.1 christos return idesc; 1418 1.1 christos } 1419 1.1 christos 1420 1.1 christos extract_sfmt_jl: 1421 1.1 christos { 1422 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1423 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1424 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f 1425 1.1 christos UINT f_r2; 1426 1.1 christos 1427 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1428 1.1 christos 1429 1.1 christos /* Record the fields for the semantic handler. */ 1430 1.1 christos FLD (f_r2) = f_r2; 1431 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1432 1.1.1.5 christos 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)); 1433 1.1 christos 1434 1.1 christos #if WITH_PROFILE_MODEL_P 1435 1.1 christos /* Record the fields for profiling. */ 1436 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1437 1.1 christos { 1438 1.1 christos FLD (in_sr) = f_r2; 1439 1.1 christos FLD (out_h_gr_SI_14) = 14; 1440 1.1 christos } 1441 1.1 christos #endif 1442 1.1 christos #undef FLD 1443 1.1 christos return idesc; 1444 1.1 christos } 1445 1.1 christos 1446 1.1 christos extract_sfmt_jmp: 1447 1.1 christos { 1448 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1449 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1450 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f 1451 1.1 christos UINT f_r2; 1452 1.1 christos 1453 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1454 1.1 christos 1455 1.1 christos /* Record the fields for the semantic handler. */ 1456 1.1 christos FLD (f_r2) = f_r2; 1457 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1458 1.1.1.5 christos 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)); 1459 1.1 christos 1460 1.1 christos #if WITH_PROFILE_MODEL_P 1461 1.1 christos /* Record the fields for profiling. */ 1462 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1463 1.1 christos { 1464 1.1 christos FLD (in_sr) = f_r2; 1465 1.1 christos } 1466 1.1 christos #endif 1467 1.1 christos #undef FLD 1468 1.1 christos return idesc; 1469 1.1 christos } 1470 1.1 christos 1471 1.1 christos extract_sfmt_ld: 1472 1.1 christos { 1473 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1474 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1475 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1476 1.1 christos UINT f_r1; 1477 1.1 christos UINT f_r2; 1478 1.1 christos 1479 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1480 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1481 1.1 christos 1482 1.1 christos /* Record the fields for the semantic handler. */ 1483 1.1 christos FLD (f_r2) = f_r2; 1484 1.1 christos FLD (f_r1) = f_r1; 1485 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1486 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1487 1.1.1.5 christos 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)); 1488 1.1 christos 1489 1.1 christos #if WITH_PROFILE_MODEL_P 1490 1.1 christos /* Record the fields for profiling. */ 1491 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1492 1.1 christos { 1493 1.1 christos FLD (in_sr) = f_r2; 1494 1.1 christos FLD (out_dr) = f_r1; 1495 1.1 christos } 1496 1.1 christos #endif 1497 1.1 christos #undef FLD 1498 1.1 christos return idesc; 1499 1.1 christos } 1500 1.1 christos 1501 1.1 christos extract_sfmt_ld_d: 1502 1.1 christos { 1503 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1504 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1505 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1506 1.1 christos UINT f_r1; 1507 1.1 christos UINT f_r2; 1508 1.1 christos INT f_simm16; 1509 1.1 christos 1510 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1511 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1512 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1513 1.1 christos 1514 1.1 christos /* Record the fields for the semantic handler. */ 1515 1.1 christos FLD (f_simm16) = f_simm16; 1516 1.1 christos FLD (f_r2) = f_r2; 1517 1.1 christos FLD (f_r1) = f_r1; 1518 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1519 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1520 1.1.1.5 christos 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)); 1521 1.1 christos 1522 1.1 christos #if WITH_PROFILE_MODEL_P 1523 1.1 christos /* Record the fields for profiling. */ 1524 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1525 1.1 christos { 1526 1.1 christos FLD (in_sr) = f_r2; 1527 1.1 christos FLD (out_dr) = f_r1; 1528 1.1 christos } 1529 1.1 christos #endif 1530 1.1 christos #undef FLD 1531 1.1 christos return idesc; 1532 1.1 christos } 1533 1.1 christos 1534 1.1 christos extract_sfmt_ldb: 1535 1.1 christos { 1536 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1537 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1538 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1539 1.1 christos UINT f_r1; 1540 1.1 christos UINT f_r2; 1541 1.1 christos 1542 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1543 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1544 1.1 christos 1545 1.1 christos /* Record the fields for the semantic handler. */ 1546 1.1 christos FLD (f_r2) = f_r2; 1547 1.1 christos FLD (f_r1) = f_r1; 1548 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1549 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1550 1.1.1.5 christos 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)); 1551 1.1 christos 1552 1.1 christos #if WITH_PROFILE_MODEL_P 1553 1.1 christos /* Record the fields for profiling. */ 1554 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1555 1.1 christos { 1556 1.1 christos FLD (in_sr) = f_r2; 1557 1.1 christos FLD (out_dr) = f_r1; 1558 1.1 christos } 1559 1.1 christos #endif 1560 1.1 christos #undef FLD 1561 1.1 christos return idesc; 1562 1.1 christos } 1563 1.1 christos 1564 1.1 christos extract_sfmt_ldb_d: 1565 1.1 christos { 1566 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1567 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1568 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1569 1.1 christos UINT f_r1; 1570 1.1 christos UINT f_r2; 1571 1.1 christos INT f_simm16; 1572 1.1 christos 1573 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1574 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1575 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1576 1.1 christos 1577 1.1 christos /* Record the fields for the semantic handler. */ 1578 1.1 christos FLD (f_simm16) = f_simm16; 1579 1.1 christos FLD (f_r2) = f_r2; 1580 1.1 christos FLD (f_r1) = f_r1; 1581 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1582 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1583 1.1.1.5 christos 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)); 1584 1.1 christos 1585 1.1 christos #if WITH_PROFILE_MODEL_P 1586 1.1 christos /* Record the fields for profiling. */ 1587 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1588 1.1 christos { 1589 1.1 christos FLD (in_sr) = f_r2; 1590 1.1 christos FLD (out_dr) = f_r1; 1591 1.1 christos } 1592 1.1 christos #endif 1593 1.1 christos #undef FLD 1594 1.1 christos return idesc; 1595 1.1 christos } 1596 1.1 christos 1597 1.1 christos extract_sfmt_ldh: 1598 1.1 christos { 1599 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1600 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1601 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1602 1.1 christos UINT f_r1; 1603 1.1 christos UINT f_r2; 1604 1.1 christos 1605 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1606 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1607 1.1 christos 1608 1.1 christos /* Record the fields for the semantic handler. */ 1609 1.1 christos FLD (f_r2) = f_r2; 1610 1.1 christos FLD (f_r1) = f_r1; 1611 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1612 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1613 1.1.1.5 christos 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)); 1614 1.1 christos 1615 1.1 christos #if WITH_PROFILE_MODEL_P 1616 1.1 christos /* Record the fields for profiling. */ 1617 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1618 1.1 christos { 1619 1.1 christos FLD (in_sr) = f_r2; 1620 1.1 christos FLD (out_dr) = f_r1; 1621 1.1 christos } 1622 1.1 christos #endif 1623 1.1 christos #undef FLD 1624 1.1 christos return idesc; 1625 1.1 christos } 1626 1.1 christos 1627 1.1 christos extract_sfmt_ldh_d: 1628 1.1 christos { 1629 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1630 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1631 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1632 1.1 christos UINT f_r1; 1633 1.1 christos UINT f_r2; 1634 1.1 christos INT f_simm16; 1635 1.1 christos 1636 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1637 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 1638 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1639 1.1 christos 1640 1.1 christos /* Record the fields for the semantic handler. */ 1641 1.1 christos FLD (f_simm16) = f_simm16; 1642 1.1 christos FLD (f_r2) = f_r2; 1643 1.1 christos FLD (f_r1) = f_r1; 1644 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1645 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1646 1.1.1.5 christos 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)); 1647 1.1 christos 1648 1.1 christos #if WITH_PROFILE_MODEL_P 1649 1.1 christos /* Record the fields for profiling. */ 1650 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1651 1.1 christos { 1652 1.1 christos FLD (in_sr) = f_r2; 1653 1.1 christos FLD (out_dr) = f_r1; 1654 1.1 christos } 1655 1.1 christos #endif 1656 1.1 christos #undef FLD 1657 1.1 christos return idesc; 1658 1.1 christos } 1659 1.1 christos 1660 1.1 christos extract_sfmt_ld_plus: 1661 1.1 christos { 1662 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1663 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1664 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1665 1.1 christos UINT f_r1; 1666 1.1 christos UINT f_r2; 1667 1.1 christos 1668 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1669 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1670 1.1 christos 1671 1.1 christos /* Record the fields for the semantic handler. */ 1672 1.1 christos FLD (f_r2) = f_r2; 1673 1.1 christos FLD (f_r1) = f_r1; 1674 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1675 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1676 1.1.1.5 christos 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)); 1677 1.1 christos 1678 1.1 christos #if WITH_PROFILE_MODEL_P 1679 1.1 christos /* Record the fields for profiling. */ 1680 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1681 1.1 christos { 1682 1.1 christos FLD (in_sr) = f_r2; 1683 1.1 christos FLD (out_dr) = f_r1; 1684 1.1 christos FLD (out_sr) = f_r2; 1685 1.1 christos } 1686 1.1 christos #endif 1687 1.1 christos #undef FLD 1688 1.1 christos return idesc; 1689 1.1 christos } 1690 1.1 christos 1691 1.1 christos extract_sfmt_ld24: 1692 1.1 christos { 1693 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1694 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1695 1.1 christos #define FLD(f) abuf->fields.sfmt_ld24.f 1696 1.1 christos UINT f_r1; 1697 1.1 christos UINT f_uimm24; 1698 1.1 christos 1699 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1700 1.1 christos f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24); 1701 1.1 christos 1702 1.1 christos /* Record the fields for the semantic handler. */ 1703 1.1 christos FLD (f_r1) = f_r1; 1704 1.1 christos FLD (i_uimm24) = f_uimm24; 1705 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1706 1.1.1.5 christos 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)); 1707 1.1 christos 1708 1.1 christos #if WITH_PROFILE_MODEL_P 1709 1.1 christos /* Record the fields for profiling. */ 1710 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1711 1.1 christos { 1712 1.1 christos FLD (out_dr) = f_r1; 1713 1.1 christos } 1714 1.1 christos #endif 1715 1.1 christos #undef FLD 1716 1.1 christos return idesc; 1717 1.1 christos } 1718 1.1 christos 1719 1.1 christos extract_sfmt_ldi8: 1720 1.1 christos { 1721 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1722 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1723 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1724 1.1 christos UINT f_r1; 1725 1.1 christos INT f_simm8; 1726 1.1 christos 1727 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1728 1.1 christos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8); 1729 1.1 christos 1730 1.1 christos /* Record the fields for the semantic handler. */ 1731 1.1 christos FLD (f_simm8) = f_simm8; 1732 1.1 christos FLD (f_r1) = f_r1; 1733 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1734 1.1.1.5 christos 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)); 1735 1.1 christos 1736 1.1 christos #if WITH_PROFILE_MODEL_P 1737 1.1 christos /* Record the fields for profiling. */ 1738 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1739 1.1 christos { 1740 1.1 christos FLD (out_dr) = f_r1; 1741 1.1 christos } 1742 1.1 christos #endif 1743 1.1 christos #undef FLD 1744 1.1 christos return idesc; 1745 1.1 christos } 1746 1.1 christos 1747 1.1 christos extract_sfmt_ldi16: 1748 1.1 christos { 1749 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1750 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1751 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1752 1.1 christos UINT f_r1; 1753 1.1 christos INT f_simm16; 1754 1.1 christos 1755 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 1756 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 1757 1.1 christos 1758 1.1 christos /* Record the fields for the semantic handler. */ 1759 1.1 christos FLD (f_simm16) = f_simm16; 1760 1.1 christos FLD (f_r1) = f_r1; 1761 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1762 1.1.1.5 christos 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)); 1763 1.1 christos 1764 1.1 christos #if WITH_PROFILE_MODEL_P 1765 1.1 christos /* Record the fields for profiling. */ 1766 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1767 1.1 christos { 1768 1.1 christos FLD (out_dr) = f_r1; 1769 1.1 christos } 1770 1.1 christos #endif 1771 1.1 christos #undef FLD 1772 1.1 christos return idesc; 1773 1.1 christos } 1774 1.1 christos 1775 1.1 christos extract_sfmt_lock: 1776 1.1 christos { 1777 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1778 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1779 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1780 1.1 christos UINT f_r1; 1781 1.1 christos UINT f_r2; 1782 1.1 christos 1783 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1784 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1785 1.1 christos 1786 1.1 christos /* Record the fields for the semantic handler. */ 1787 1.1 christos FLD (f_r2) = f_r2; 1788 1.1 christos FLD (f_r1) = f_r1; 1789 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1790 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1791 1.1.1.5 christos 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)); 1792 1.1 christos 1793 1.1 christos #if WITH_PROFILE_MODEL_P 1794 1.1 christos /* Record the fields for profiling. */ 1795 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1796 1.1 christos { 1797 1.1 christos FLD (in_sr) = f_r2; 1798 1.1 christos FLD (out_dr) = f_r1; 1799 1.1 christos } 1800 1.1 christos #endif 1801 1.1 christos #undef FLD 1802 1.1 christos return idesc; 1803 1.1 christos } 1804 1.1 christos 1805 1.1 christos extract_sfmt_machi_a: 1806 1.1 christos { 1807 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1808 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1809 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1810 1.1 christos UINT f_r1; 1811 1.1 christos UINT f_acc; 1812 1.1 christos UINT f_r2; 1813 1.1 christos 1814 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1815 1.1 christos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1); 1816 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1817 1.1 christos 1818 1.1 christos /* Record the fields for the semantic handler. */ 1819 1.1 christos FLD (f_acc) = f_acc; 1820 1.1 christos FLD (f_r1) = f_r1; 1821 1.1 christos FLD (f_r2) = f_r2; 1822 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1823 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1824 1.1.1.5 christos 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)); 1825 1.1 christos 1826 1.1 christos #if WITH_PROFILE_MODEL_P 1827 1.1 christos /* Record the fields for profiling. */ 1828 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1829 1.1 christos { 1830 1.1 christos FLD (in_src1) = f_r1; 1831 1.1 christos FLD (in_src2) = f_r2; 1832 1.1 christos } 1833 1.1 christos #endif 1834 1.1 christos #undef FLD 1835 1.1 christos return idesc; 1836 1.1 christos } 1837 1.1 christos 1838 1.1 christos extract_sfmt_mulhi_a: 1839 1.1 christos { 1840 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1841 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1842 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1843 1.1 christos UINT f_r1; 1844 1.1 christos UINT f_acc; 1845 1.1 christos UINT f_r2; 1846 1.1 christos 1847 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1848 1.1 christos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1); 1849 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1850 1.1 christos 1851 1.1 christos /* Record the fields for the semantic handler. */ 1852 1.1 christos FLD (f_r1) = f_r1; 1853 1.1 christos FLD (f_r2) = f_r2; 1854 1.1 christos FLD (f_acc) = f_acc; 1855 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1856 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 1857 1.1.1.5 christos 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)); 1858 1.1 christos 1859 1.1 christos #if WITH_PROFILE_MODEL_P 1860 1.1 christos /* Record the fields for profiling. */ 1861 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1862 1.1 christos { 1863 1.1 christos FLD (in_src1) = f_r1; 1864 1.1 christos FLD (in_src2) = f_r2; 1865 1.1 christos } 1866 1.1 christos #endif 1867 1.1 christos #undef FLD 1868 1.1 christos return idesc; 1869 1.1 christos } 1870 1.1 christos 1871 1.1 christos extract_sfmt_mv: 1872 1.1 christos { 1873 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1874 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1875 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1876 1.1 christos UINT f_r1; 1877 1.1 christos UINT f_r2; 1878 1.1 christos 1879 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1880 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1881 1.1 christos 1882 1.1 christos /* Record the fields for the semantic handler. */ 1883 1.1 christos FLD (f_r2) = f_r2; 1884 1.1 christos FLD (f_r1) = f_r1; 1885 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 1886 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1887 1.1.1.5 christos 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)); 1888 1.1 christos 1889 1.1 christos #if WITH_PROFILE_MODEL_P 1890 1.1 christos /* Record the fields for profiling. */ 1891 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1892 1.1 christos { 1893 1.1 christos FLD (in_sr) = f_r2; 1894 1.1 christos FLD (out_dr) = f_r1; 1895 1.1 christos } 1896 1.1 christos #endif 1897 1.1 christos #undef FLD 1898 1.1 christos return idesc; 1899 1.1 christos } 1900 1.1 christos 1901 1.1 christos extract_sfmt_mvfachi_a: 1902 1.1 christos { 1903 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1904 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1905 1.1 christos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 1906 1.1 christos UINT f_r1; 1907 1.1 christos UINT f_accs; 1908 1.1 christos 1909 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1910 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 1911 1.1 christos 1912 1.1 christos /* Record the fields for the semantic handler. */ 1913 1.1 christos FLD (f_accs) = f_accs; 1914 1.1 christos FLD (f_r1) = f_r1; 1915 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1916 1.1.1.5 christos 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)); 1917 1.1 christos 1918 1.1 christos #if WITH_PROFILE_MODEL_P 1919 1.1 christos /* Record the fields for profiling. */ 1920 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1921 1.1 christos { 1922 1.1 christos FLD (out_dr) = f_r1; 1923 1.1 christos } 1924 1.1 christos #endif 1925 1.1 christos #undef FLD 1926 1.1 christos return idesc; 1927 1.1 christos } 1928 1.1 christos 1929 1.1 christos extract_sfmt_mvfc: 1930 1.1 christos { 1931 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1932 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1933 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1934 1.1 christos UINT f_r1; 1935 1.1 christos UINT f_r2; 1936 1.1 christos 1937 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1938 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1939 1.1 christos 1940 1.1 christos /* Record the fields for the semantic handler. */ 1941 1.1 christos FLD (f_r2) = f_r2; 1942 1.1 christos FLD (f_r1) = f_r1; 1943 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 1944 1.1.1.5 christos 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)); 1945 1.1 christos 1946 1.1 christos #if WITH_PROFILE_MODEL_P 1947 1.1 christos /* Record the fields for profiling. */ 1948 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1949 1.1 christos { 1950 1.1 christos FLD (out_dr) = f_r1; 1951 1.1 christos } 1952 1.1 christos #endif 1953 1.1 christos #undef FLD 1954 1.1 christos return idesc; 1955 1.1 christos } 1956 1.1 christos 1957 1.1 christos extract_sfmt_mvtachi_a: 1958 1.1 christos { 1959 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1960 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1961 1.1 christos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 1962 1.1 christos UINT f_r1; 1963 1.1 christos UINT f_accs; 1964 1.1 christos 1965 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1966 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 1967 1.1 christos 1968 1.1 christos /* Record the fields for the semantic handler. */ 1969 1.1 christos FLD (f_accs) = f_accs; 1970 1.1 christos FLD (f_r1) = f_r1; 1971 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 1972 1.1.1.5 christos 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)); 1973 1.1 christos 1974 1.1 christos #if WITH_PROFILE_MODEL_P 1975 1.1 christos /* Record the fields for profiling. */ 1976 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 1977 1.1 christos { 1978 1.1 christos FLD (in_src1) = f_r1; 1979 1.1 christos } 1980 1.1 christos #endif 1981 1.1 christos #undef FLD 1982 1.1 christos return idesc; 1983 1.1 christos } 1984 1.1 christos 1985 1.1 christos extract_sfmt_mvtc: 1986 1.1 christos { 1987 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 1988 1.1 christos CGEN_INSN_WORD insn = entire_insn; 1989 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1990 1.1 christos UINT f_r1; 1991 1.1 christos UINT f_r2; 1992 1.1 christos 1993 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 1994 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 1995 1.1 christos 1996 1.1 christos /* Record the fields for the semantic handler. */ 1997 1.1 christos FLD (f_r2) = f_r2; 1998 1.1 christos FLD (f_r1) = f_r1; 1999 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2000 1.1.1.5 christos 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)); 2001 1.1 christos 2002 1.1 christos #if WITH_PROFILE_MODEL_P 2003 1.1 christos /* Record the fields for profiling. */ 2004 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2005 1.1 christos { 2006 1.1 christos FLD (in_sr) = f_r2; 2007 1.1 christos } 2008 1.1 christos #endif 2009 1.1 christos #undef FLD 2010 1.1 christos return idesc; 2011 1.1 christos } 2012 1.1 christos 2013 1.1 christos extract_sfmt_nop: 2014 1.1 christos { 2015 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2016 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2017 1.1 christos 2018 1.1 christos 2019 1.1 christos /* Record the fields for the semantic handler. */ 2020 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0)); 2021 1.1 christos 2022 1.1 christos #undef FLD 2023 1.1 christos return idesc; 2024 1.1 christos } 2025 1.1 christos 2026 1.1 christos extract_sfmt_rac_dsi: 2027 1.1 christos { 2028 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2029 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2030 1.1 christos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 2031 1.1 christos UINT f_accd; 2032 1.1 christos UINT f_accs; 2033 1.1 christos SI f_imm1; 2034 1.1 christos 2035 1.1 christos f_accd = EXTRACT_MSB0_UINT (insn, 16, 4, 2); 2036 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2); 2037 1.1 christos f_imm1 = ((EXTRACT_MSB0_UINT (insn, 16, 15, 1)) + (1)); 2038 1.1 christos 2039 1.1 christos /* Record the fields for the semantic handler. */ 2040 1.1 christos FLD (f_accs) = f_accs; 2041 1.1 christos FLD (f_imm1) = f_imm1; 2042 1.1 christos FLD (f_accd) = f_accd; 2043 1.1.1.5 christos 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)); 2044 1.1 christos 2045 1.1 christos #undef FLD 2046 1.1 christos return idesc; 2047 1.1 christos } 2048 1.1 christos 2049 1.1 christos extract_sfmt_rte: 2050 1.1 christos { 2051 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2052 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2053 1.1 christos 2054 1.1 christos 2055 1.1 christos /* Record the fields for the semantic handler. */ 2056 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0)); 2057 1.1 christos 2058 1.1 christos #if WITH_PROFILE_MODEL_P 2059 1.1 christos /* Record the fields for profiling. */ 2060 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2061 1.1 christos { 2062 1.1 christos } 2063 1.1 christos #endif 2064 1.1 christos #undef FLD 2065 1.1 christos return idesc; 2066 1.1 christos } 2067 1.1 christos 2068 1.1 christos extract_sfmt_seth: 2069 1.1 christos { 2070 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2071 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2072 1.1 christos #define FLD(f) abuf->fields.sfmt_seth.f 2073 1.1 christos UINT f_r1; 2074 1.1 christos UINT f_hi16; 2075 1.1 christos 2076 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2077 1.1 christos f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16); 2078 1.1 christos 2079 1.1 christos /* Record the fields for the semantic handler. */ 2080 1.1 christos FLD (f_hi16) = f_hi16; 2081 1.1 christos FLD (f_r1) = f_r1; 2082 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2083 1.1.1.5 christos 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)); 2084 1.1 christos 2085 1.1 christos #if WITH_PROFILE_MODEL_P 2086 1.1 christos /* Record the fields for profiling. */ 2087 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2088 1.1 christos { 2089 1.1 christos FLD (out_dr) = f_r1; 2090 1.1 christos } 2091 1.1 christos #endif 2092 1.1 christos #undef FLD 2093 1.1 christos return idesc; 2094 1.1 christos } 2095 1.1 christos 2096 1.1 christos extract_sfmt_sll3: 2097 1.1 christos { 2098 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2099 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2100 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 2101 1.1 christos UINT f_r1; 2102 1.1 christos UINT f_r2; 2103 1.1 christos INT f_simm16; 2104 1.1 christos 2105 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2106 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2107 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2108 1.1 christos 2109 1.1 christos /* Record the fields for the semantic handler. */ 2110 1.1 christos FLD (f_simm16) = f_simm16; 2111 1.1 christos FLD (f_r2) = f_r2; 2112 1.1 christos FLD (f_r1) = f_r1; 2113 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2114 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2115 1.1.1.5 christos 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)); 2116 1.1 christos 2117 1.1 christos #if WITH_PROFILE_MODEL_P 2118 1.1 christos /* Record the fields for profiling. */ 2119 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2120 1.1 christos { 2121 1.1 christos FLD (in_sr) = f_r2; 2122 1.1 christos FLD (out_dr) = f_r1; 2123 1.1 christos } 2124 1.1 christos #endif 2125 1.1 christos #undef FLD 2126 1.1 christos return idesc; 2127 1.1 christos } 2128 1.1 christos 2129 1.1 christos extract_sfmt_slli: 2130 1.1 christos { 2131 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2132 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2133 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f 2134 1.1 christos UINT f_r1; 2135 1.1 christos UINT f_uimm5; 2136 1.1 christos 2137 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2138 1.1 christos f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5); 2139 1.1 christos 2140 1.1 christos /* Record the fields for the semantic handler. */ 2141 1.1 christos FLD (f_r1) = f_r1; 2142 1.1 christos FLD (f_uimm5) = f_uimm5; 2143 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2144 1.1.1.5 christos 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)); 2145 1.1 christos 2146 1.1 christos #if WITH_PROFILE_MODEL_P 2147 1.1 christos /* Record the fields for profiling. */ 2148 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2149 1.1 christos { 2150 1.1 christos FLD (in_dr) = f_r1; 2151 1.1 christos FLD (out_dr) = f_r1; 2152 1.1 christos } 2153 1.1 christos #endif 2154 1.1 christos #undef FLD 2155 1.1 christos return idesc; 2156 1.1 christos } 2157 1.1 christos 2158 1.1 christos extract_sfmt_st: 2159 1.1 christos { 2160 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2161 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2162 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2163 1.1 christos UINT f_r1; 2164 1.1 christos UINT f_r2; 2165 1.1 christos 2166 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2167 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2168 1.1 christos 2169 1.1 christos /* Record the fields for the semantic handler. */ 2170 1.1 christos FLD (f_r1) = f_r1; 2171 1.1 christos FLD (f_r2) = f_r2; 2172 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2173 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2174 1.1.1.5 christos 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)); 2175 1.1 christos 2176 1.1 christos #if WITH_PROFILE_MODEL_P 2177 1.1 christos /* Record the fields for profiling. */ 2178 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2179 1.1 christos { 2180 1.1 christos FLD (in_src1) = f_r1; 2181 1.1 christos FLD (in_src2) = f_r2; 2182 1.1 christos } 2183 1.1 christos #endif 2184 1.1 christos #undef FLD 2185 1.1 christos return idesc; 2186 1.1 christos } 2187 1.1 christos 2188 1.1 christos extract_sfmt_st_d: 2189 1.1 christos { 2190 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2191 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2192 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 2193 1.1 christos UINT f_r1; 2194 1.1 christos UINT f_r2; 2195 1.1 christos INT f_simm16; 2196 1.1 christos 2197 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2198 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2199 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2200 1.1 christos 2201 1.1 christos /* Record the fields for the semantic handler. */ 2202 1.1 christos FLD (f_simm16) = f_simm16; 2203 1.1 christos FLD (f_r1) = f_r1; 2204 1.1 christos FLD (f_r2) = f_r2; 2205 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2206 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2207 1.1.1.5 christos 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)); 2208 1.1 christos 2209 1.1 christos #if WITH_PROFILE_MODEL_P 2210 1.1 christos /* Record the fields for profiling. */ 2211 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2212 1.1 christos { 2213 1.1 christos FLD (in_src1) = f_r1; 2214 1.1 christos FLD (in_src2) = f_r2; 2215 1.1 christos } 2216 1.1 christos #endif 2217 1.1 christos #undef FLD 2218 1.1 christos return idesc; 2219 1.1 christos } 2220 1.1 christos 2221 1.1 christos extract_sfmt_stb: 2222 1.1 christos { 2223 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2224 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2225 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2226 1.1 christos UINT f_r1; 2227 1.1 christos UINT f_r2; 2228 1.1 christos 2229 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2230 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2231 1.1 christos 2232 1.1 christos /* Record the fields for the semantic handler. */ 2233 1.1 christos FLD (f_r1) = f_r1; 2234 1.1 christos FLD (f_r2) = f_r2; 2235 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2236 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2237 1.1.1.5 christos 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)); 2238 1.1 christos 2239 1.1 christos #if WITH_PROFILE_MODEL_P 2240 1.1 christos /* Record the fields for profiling. */ 2241 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2242 1.1 christos { 2243 1.1 christos FLD (in_src1) = f_r1; 2244 1.1 christos FLD (in_src2) = f_r2; 2245 1.1 christos } 2246 1.1 christos #endif 2247 1.1 christos #undef FLD 2248 1.1 christos return idesc; 2249 1.1 christos } 2250 1.1 christos 2251 1.1 christos extract_sfmt_stb_d: 2252 1.1 christos { 2253 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2254 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2255 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 2256 1.1 christos UINT f_r1; 2257 1.1 christos UINT f_r2; 2258 1.1 christos INT f_simm16; 2259 1.1 christos 2260 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2261 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2262 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2263 1.1 christos 2264 1.1 christos /* Record the fields for the semantic handler. */ 2265 1.1 christos FLD (f_simm16) = f_simm16; 2266 1.1 christos FLD (f_r1) = f_r1; 2267 1.1 christos FLD (f_r2) = f_r2; 2268 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2269 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2270 1.1.1.5 christos 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)); 2271 1.1 christos 2272 1.1 christos #if WITH_PROFILE_MODEL_P 2273 1.1 christos /* Record the fields for profiling. */ 2274 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2275 1.1 christos { 2276 1.1 christos FLD (in_src1) = f_r1; 2277 1.1 christos FLD (in_src2) = f_r2; 2278 1.1 christos } 2279 1.1 christos #endif 2280 1.1 christos #undef FLD 2281 1.1 christos return idesc; 2282 1.1 christos } 2283 1.1 christos 2284 1.1 christos extract_sfmt_sth: 2285 1.1 christos { 2286 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2287 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2288 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2289 1.1 christos UINT f_r1; 2290 1.1 christos UINT f_r2; 2291 1.1 christos 2292 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2293 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2294 1.1 christos 2295 1.1 christos /* Record the fields for the semantic handler. */ 2296 1.1 christos FLD (f_r1) = f_r1; 2297 1.1 christos FLD (f_r2) = f_r2; 2298 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2299 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2300 1.1.1.5 christos 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)); 2301 1.1 christos 2302 1.1 christos #if WITH_PROFILE_MODEL_P 2303 1.1 christos /* Record the fields for profiling. */ 2304 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2305 1.1 christos { 2306 1.1 christos FLD (in_src1) = f_r1; 2307 1.1 christos FLD (in_src2) = f_r2; 2308 1.1 christos } 2309 1.1 christos #endif 2310 1.1 christos #undef FLD 2311 1.1 christos return idesc; 2312 1.1 christos } 2313 1.1 christos 2314 1.1 christos extract_sfmt_sth_d: 2315 1.1 christos { 2316 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2317 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2318 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 2319 1.1 christos UINT f_r1; 2320 1.1 christos UINT f_r2; 2321 1.1 christos INT f_simm16; 2322 1.1 christos 2323 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2324 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2325 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2326 1.1 christos 2327 1.1 christos /* Record the fields for the semantic handler. */ 2328 1.1 christos FLD (f_simm16) = f_simm16; 2329 1.1 christos FLD (f_r1) = f_r1; 2330 1.1 christos FLD (f_r2) = f_r2; 2331 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2332 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2333 1.1.1.5 christos 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)); 2334 1.1 christos 2335 1.1 christos #if WITH_PROFILE_MODEL_P 2336 1.1 christos /* Record the fields for profiling. */ 2337 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2338 1.1 christos { 2339 1.1 christos FLD (in_src1) = f_r1; 2340 1.1 christos FLD (in_src2) = f_r2; 2341 1.1 christos } 2342 1.1 christos #endif 2343 1.1 christos #undef FLD 2344 1.1 christos return idesc; 2345 1.1 christos } 2346 1.1 christos 2347 1.1 christos extract_sfmt_st_plus: 2348 1.1 christos { 2349 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2350 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2351 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2352 1.1 christos UINT f_r1; 2353 1.1 christos UINT f_r2; 2354 1.1 christos 2355 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2356 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2357 1.1 christos 2358 1.1 christos /* Record the fields for the semantic handler. */ 2359 1.1 christos FLD (f_r1) = f_r1; 2360 1.1 christos FLD (f_r2) = f_r2; 2361 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2362 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2363 1.1.1.5 christos 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)); 2364 1.1 christos 2365 1.1 christos #if WITH_PROFILE_MODEL_P 2366 1.1 christos /* Record the fields for profiling. */ 2367 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2368 1.1 christos { 2369 1.1 christos FLD (in_src1) = f_r1; 2370 1.1 christos FLD (in_src2) = f_r2; 2371 1.1 christos FLD (out_src2) = f_r2; 2372 1.1 christos } 2373 1.1 christos #endif 2374 1.1 christos #undef FLD 2375 1.1 christos return idesc; 2376 1.1 christos } 2377 1.1 christos 2378 1.1 christos extract_sfmt_sth_plus: 2379 1.1 christos { 2380 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2381 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2382 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2383 1.1 christos UINT f_r1; 2384 1.1 christos UINT f_r2; 2385 1.1 christos 2386 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2387 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2388 1.1 christos 2389 1.1 christos /* Record the fields for the semantic handler. */ 2390 1.1 christos FLD (f_r1) = f_r1; 2391 1.1 christos FLD (f_r2) = f_r2; 2392 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2393 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2394 1.1.1.5 christos 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)); 2395 1.1 christos 2396 1.1 christos #if WITH_PROFILE_MODEL_P 2397 1.1 christos /* Record the fields for profiling. */ 2398 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2399 1.1 christos { 2400 1.1 christos FLD (in_src1) = f_r1; 2401 1.1 christos FLD (in_src2) = f_r2; 2402 1.1 christos FLD (out_src2) = f_r2; 2403 1.1 christos } 2404 1.1 christos #endif 2405 1.1 christos #undef FLD 2406 1.1 christos return idesc; 2407 1.1 christos } 2408 1.1 christos 2409 1.1 christos extract_sfmt_stb_plus: 2410 1.1 christos { 2411 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2412 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2413 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2414 1.1 christos UINT f_r1; 2415 1.1 christos UINT f_r2; 2416 1.1 christos 2417 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2418 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2419 1.1 christos 2420 1.1 christos /* Record the fields for the semantic handler. */ 2421 1.1 christos FLD (f_r1) = f_r1; 2422 1.1 christos FLD (f_r2) = f_r2; 2423 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2424 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2425 1.1.1.5 christos 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)); 2426 1.1 christos 2427 1.1 christos #if WITH_PROFILE_MODEL_P 2428 1.1 christos /* Record the fields for profiling. */ 2429 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2430 1.1 christos { 2431 1.1 christos FLD (in_src1) = f_r1; 2432 1.1 christos FLD (in_src2) = f_r2; 2433 1.1 christos FLD (out_src2) = f_r2; 2434 1.1 christos } 2435 1.1 christos #endif 2436 1.1 christos #undef FLD 2437 1.1 christos return idesc; 2438 1.1 christos } 2439 1.1 christos 2440 1.1 christos extract_sfmt_trap: 2441 1.1 christos { 2442 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2443 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2444 1.1 christos #define FLD(f) abuf->fields.sfmt_trap.f 2445 1.1 christos UINT f_uimm4; 2446 1.1 christos 2447 1.1 christos f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2448 1.1 christos 2449 1.1 christos /* Record the fields for the semantic handler. */ 2450 1.1 christos FLD (f_uimm4) = f_uimm4; 2451 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0)); 2452 1.1 christos 2453 1.1 christos #if WITH_PROFILE_MODEL_P 2454 1.1 christos /* Record the fields for profiling. */ 2455 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2456 1.1 christos { 2457 1.1 christos } 2458 1.1 christos #endif 2459 1.1 christos #undef FLD 2460 1.1 christos return idesc; 2461 1.1 christos } 2462 1.1 christos 2463 1.1 christos extract_sfmt_unlock: 2464 1.1 christos { 2465 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2466 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2467 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2468 1.1 christos UINT f_r1; 2469 1.1 christos UINT f_r2; 2470 1.1 christos 2471 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2472 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2473 1.1 christos 2474 1.1 christos /* Record the fields for the semantic handler. */ 2475 1.1 christos FLD (f_r1) = f_r1; 2476 1.1 christos FLD (f_r2) = f_r2; 2477 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2478 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2479 1.1.1.5 christos 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)); 2480 1.1 christos 2481 1.1 christos #if WITH_PROFILE_MODEL_P 2482 1.1 christos /* Record the fields for profiling. */ 2483 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2484 1.1 christos { 2485 1.1 christos FLD (in_src1) = f_r1; 2486 1.1 christos FLD (in_src2) = f_r2; 2487 1.1 christos } 2488 1.1 christos #endif 2489 1.1 christos #undef FLD 2490 1.1 christos return idesc; 2491 1.1 christos } 2492 1.1 christos 2493 1.1 christos extract_sfmt_satb: 2494 1.1 christos { 2495 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2496 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2497 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2498 1.1 christos UINT f_r1; 2499 1.1 christos UINT f_r2; 2500 1.1 christos 2501 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2502 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2503 1.1 christos 2504 1.1 christos /* Record the fields for the semantic handler. */ 2505 1.1 christos FLD (f_r2) = f_r2; 2506 1.1 christos FLD (f_r1) = f_r1; 2507 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2508 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2509 1.1.1.5 christos 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)); 2510 1.1 christos 2511 1.1 christos #if WITH_PROFILE_MODEL_P 2512 1.1 christos /* Record the fields for profiling. */ 2513 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2514 1.1 christos { 2515 1.1 christos FLD (in_sr) = f_r2; 2516 1.1 christos FLD (out_dr) = f_r1; 2517 1.1 christos } 2518 1.1 christos #endif 2519 1.1 christos #undef FLD 2520 1.1 christos return idesc; 2521 1.1 christos } 2522 1.1 christos 2523 1.1 christos extract_sfmt_sat: 2524 1.1 christos { 2525 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2526 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2527 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2528 1.1 christos UINT f_r1; 2529 1.1 christos UINT f_r2; 2530 1.1 christos 2531 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4); 2532 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2533 1.1 christos 2534 1.1 christos /* Record the fields for the semantic handler. */ 2535 1.1 christos FLD (f_r2) = f_r2; 2536 1.1 christos FLD (f_r1) = f_r1; 2537 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2538 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1]; 2539 1.1.1.5 christos 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)); 2540 1.1 christos 2541 1.1 christos #if WITH_PROFILE_MODEL_P 2542 1.1 christos /* Record the fields for profiling. */ 2543 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2544 1.1 christos { 2545 1.1 christos FLD (in_sr) = f_r2; 2546 1.1 christos FLD (out_dr) = f_r1; 2547 1.1 christos } 2548 1.1 christos #endif 2549 1.1 christos #undef FLD 2550 1.1 christos return idesc; 2551 1.1 christos } 2552 1.1 christos 2553 1.1 christos extract_sfmt_sadd: 2554 1.1 christos { 2555 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2556 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2557 1.1 christos 2558 1.1 christos 2559 1.1 christos /* Record the fields for the semantic handler. */ 2560 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sadd", (char *) 0)); 2561 1.1 christos 2562 1.1 christos #undef FLD 2563 1.1 christos return idesc; 2564 1.1 christos } 2565 1.1 christos 2566 1.1 christos extract_sfmt_macwu1: 2567 1.1 christos { 2568 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2569 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2570 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2571 1.1 christos UINT f_r1; 2572 1.1 christos UINT f_r2; 2573 1.1 christos 2574 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2575 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2576 1.1 christos 2577 1.1 christos /* Record the fields for the semantic handler. */ 2578 1.1 christos FLD (f_r1) = f_r1; 2579 1.1 christos FLD (f_r2) = f_r2; 2580 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2581 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2582 1.1.1.5 christos 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)); 2583 1.1 christos 2584 1.1 christos #if WITH_PROFILE_MODEL_P 2585 1.1 christos /* Record the fields for profiling. */ 2586 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2587 1.1 christos { 2588 1.1 christos FLD (in_src1) = f_r1; 2589 1.1 christos FLD (in_src2) = f_r2; 2590 1.1 christos } 2591 1.1 christos #endif 2592 1.1 christos #undef FLD 2593 1.1 christos return idesc; 2594 1.1 christos } 2595 1.1 christos 2596 1.1 christos extract_sfmt_msblo: 2597 1.1 christos { 2598 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2599 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2600 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2601 1.1 christos UINT f_r1; 2602 1.1 christos UINT f_r2; 2603 1.1 christos 2604 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2605 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2606 1.1 christos 2607 1.1 christos /* Record the fields for the semantic handler. */ 2608 1.1 christos FLD (f_r1) = f_r1; 2609 1.1 christos FLD (f_r2) = f_r2; 2610 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2611 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2612 1.1.1.5 christos 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)); 2613 1.1 christos 2614 1.1 christos #if WITH_PROFILE_MODEL_P 2615 1.1 christos /* Record the fields for profiling. */ 2616 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2617 1.1 christos { 2618 1.1 christos FLD (in_src1) = f_r1; 2619 1.1 christos FLD (in_src2) = f_r2; 2620 1.1 christos } 2621 1.1 christos #endif 2622 1.1 christos #undef FLD 2623 1.1 christos return idesc; 2624 1.1 christos } 2625 1.1 christos 2626 1.1 christos extract_sfmt_mulwu1: 2627 1.1 christos { 2628 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2629 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2630 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2631 1.1 christos UINT f_r1; 2632 1.1 christos UINT f_r2; 2633 1.1 christos 2634 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); 2635 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2636 1.1 christos 2637 1.1 christos /* Record the fields for the semantic handler. */ 2638 1.1 christos FLD (f_r1) = f_r1; 2639 1.1 christos FLD (f_r2) = f_r2; 2640 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1]; 2641 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2]; 2642 1.1.1.5 christos 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)); 2643 1.1 christos 2644 1.1 christos #if WITH_PROFILE_MODEL_P 2645 1.1 christos /* Record the fields for profiling. */ 2646 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2647 1.1 christos { 2648 1.1 christos FLD (in_src1) = f_r1; 2649 1.1 christos FLD (in_src2) = f_r2; 2650 1.1 christos } 2651 1.1 christos #endif 2652 1.1 christos #undef FLD 2653 1.1 christos return idesc; 2654 1.1 christos } 2655 1.1 christos 2656 1.1 christos extract_sfmt_sc: 2657 1.1 christos { 2658 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2659 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2660 1.1 christos 2661 1.1 christos 2662 1.1 christos /* Record the fields for the semantic handler. */ 2663 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sc", (char *) 0)); 2664 1.1 christos 2665 1.1 christos #undef FLD 2666 1.1 christos return idesc; 2667 1.1 christos } 2668 1.1 christos 2669 1.1 christos extract_sfmt_clrpsw: 2670 1.1 christos { 2671 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2672 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2673 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f 2674 1.1 christos UINT f_uimm8; 2675 1.1 christos 2676 1.1 christos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); 2677 1.1 christos 2678 1.1 christos /* Record the fields for the semantic handler. */ 2679 1.1 christos FLD (f_uimm8) = f_uimm8; 2680 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0)); 2681 1.1 christos 2682 1.1 christos #undef FLD 2683 1.1 christos return idesc; 2684 1.1 christos } 2685 1.1 christos 2686 1.1 christos extract_sfmt_setpsw: 2687 1.1 christos { 2688 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2689 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2690 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f 2691 1.1 christos UINT f_uimm8; 2692 1.1 christos 2693 1.1 christos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); 2694 1.1 christos 2695 1.1 christos /* Record the fields for the semantic handler. */ 2696 1.1 christos FLD (f_uimm8) = f_uimm8; 2697 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0)); 2698 1.1 christos 2699 1.1 christos #undef FLD 2700 1.1 christos return idesc; 2701 1.1 christos } 2702 1.1 christos 2703 1.1 christos extract_sfmt_bset: 2704 1.1 christos { 2705 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2706 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2707 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f 2708 1.1 christos UINT f_uimm3; 2709 1.1 christos UINT f_r2; 2710 1.1 christos INT f_simm16; 2711 1.1 christos 2712 1.1 christos f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3); 2713 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); 2714 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16); 2715 1.1 christos 2716 1.1 christos /* Record the fields for the semantic handler. */ 2717 1.1 christos FLD (f_simm16) = f_simm16; 2718 1.1 christos FLD (f_r2) = f_r2; 2719 1.1 christos FLD (f_uimm3) = f_uimm3; 2720 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2721 1.1.1.5 christos 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)); 2722 1.1 christos 2723 1.1 christos #if WITH_PROFILE_MODEL_P 2724 1.1 christos /* Record the fields for profiling. */ 2725 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2726 1.1 christos { 2727 1.1 christos FLD (in_sr) = f_r2; 2728 1.1 christos } 2729 1.1 christos #endif 2730 1.1 christos #undef FLD 2731 1.1 christos return idesc; 2732 1.1 christos } 2733 1.1 christos 2734 1.1 christos extract_sfmt_btst: 2735 1.1 christos { 2736 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype]; 2737 1.1 christos CGEN_INSN_WORD insn = entire_insn; 2738 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f 2739 1.1 christos UINT f_uimm3; 2740 1.1 christos UINT f_r2; 2741 1.1 christos 2742 1.1 christos f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3); 2743 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); 2744 1.1 christos 2745 1.1 christos /* Record the fields for the semantic handler. */ 2746 1.1 christos FLD (f_r2) = f_r2; 2747 1.1 christos FLD (f_uimm3) = f_uimm3; 2748 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2]; 2749 1.1.1.5 christos 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)); 2750 1.1 christos 2751 1.1 christos #if WITH_PROFILE_MODEL_P 2752 1.1 christos /* Record the fields for profiling. */ 2753 1.1 christos if (PROFILE_MODEL_P (current_cpu)) 2754 1.1 christos { 2755 1.1 christos FLD (in_sr) = f_r2; 2756 1.1 christos } 2757 1.1 christos #endif 2758 1.1 christos #undef FLD 2759 1.1 christos return idesc; 2760 1.1 christos } 2761 1.1 christos 2762 1.1 christos } 2763