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