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