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