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