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