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