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