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