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