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