decode2.c revision 1.1.1.9 1 1.1 christos /* Simulator instruction decoder for m32r2f.
2 1.1 christos
3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
4 1.1 christos
5 1.1.1.9 christos Copyright 1996-2020 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU simulators.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.1.1.2 christos with this program; if not, see <http://www.gnu.org/licenses/>.
21 1.1 christos
22 1.1 christos */
23 1.1 christos
24 1.1 christos #define WANT_CPU m32r2f
25 1.1 christos #define WANT_CPU_M32R2F
26 1.1 christos
27 1.1 christos #include "sim-main.h"
28 1.1 christos #include "sim-assert.h"
29 1.1 christos
30 1.1 christos /* Insn can't be executed in parallel.
31 1.1 christos Or is that "do NOt Pass to Air defense Radar"? :-) */
32 1.1 christos #define NOPAR (-1)
33 1.1 christos
34 1.1 christos /* The instruction descriptor array.
35 1.1 christos This is computed at runtime. Space for it is not malloc'd to save a
36 1.1 christos teensy bit of cpu in the decoder. Moving it to malloc space is trivial
37 1.1 christos but won't be done until necessary (we don't currently support the runtime
38 1.1 christos addition of instructions nor an SMP machine with different cpus). */
39 1.1 christos static IDESC m32r2f_insn_data[M32R2F_INSN__MAX];
40 1.1 christos
41 1.1 christos /* Commas between elements are contained in the macros.
42 1.1 christos Some of these are conditionally compiled out. */
43 1.1 christos
44 1.1 christos static const struct insn_sem m32r2f_insn_sem[] =
45 1.1 christos {
46 1.1 christos { VIRTUAL_INSN_X_INVALID, M32R2F_INSN_X_INVALID, M32R2F_SFMT_EMPTY, NOPAR, NOPAR },
47 1.1 christos { VIRTUAL_INSN_X_AFTER, M32R2F_INSN_X_AFTER, M32R2F_SFMT_EMPTY, NOPAR, NOPAR },
48 1.1 christos { VIRTUAL_INSN_X_BEFORE, M32R2F_INSN_X_BEFORE, M32R2F_SFMT_EMPTY, NOPAR, NOPAR },
49 1.1 christos { VIRTUAL_INSN_X_CTI_CHAIN, M32R2F_INSN_X_CTI_CHAIN, M32R2F_SFMT_EMPTY, NOPAR, NOPAR },
50 1.1 christos { VIRTUAL_INSN_X_CHAIN, M32R2F_INSN_X_CHAIN, M32R2F_SFMT_EMPTY, NOPAR, NOPAR },
51 1.1 christos { VIRTUAL_INSN_X_BEGIN, M32R2F_INSN_X_BEGIN, M32R2F_SFMT_EMPTY, NOPAR, NOPAR },
52 1.1 christos { M32R_INSN_ADD, M32R2F_INSN_ADD, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_ADD, M32R2F_INSN_WRITE_ADD },
53 1.1 christos { M32R_INSN_ADD3, M32R2F_INSN_ADD3, M32R2F_SFMT_ADD3, NOPAR, NOPAR },
54 1.1 christos { M32R_INSN_AND, M32R2F_INSN_AND, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_AND, M32R2F_INSN_WRITE_AND },
55 1.1 christos { M32R_INSN_AND3, M32R2F_INSN_AND3, M32R2F_SFMT_AND3, NOPAR, NOPAR },
56 1.1 christos { M32R_INSN_OR, M32R2F_INSN_OR, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_OR, M32R2F_INSN_WRITE_OR },
57 1.1 christos { M32R_INSN_OR3, M32R2F_INSN_OR3, M32R2F_SFMT_OR3, NOPAR, NOPAR },
58 1.1 christos { M32R_INSN_XOR, M32R2F_INSN_XOR, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_XOR, M32R2F_INSN_WRITE_XOR },
59 1.1 christos { M32R_INSN_XOR3, M32R2F_INSN_XOR3, M32R2F_SFMT_AND3, NOPAR, NOPAR },
60 1.1 christos { M32R_INSN_ADDI, M32R2F_INSN_ADDI, M32R2F_SFMT_ADDI, M32R2F_INSN_PAR_ADDI, M32R2F_INSN_WRITE_ADDI },
61 1.1 christos { M32R_INSN_ADDV, M32R2F_INSN_ADDV, M32R2F_SFMT_ADDV, M32R2F_INSN_PAR_ADDV, M32R2F_INSN_WRITE_ADDV },
62 1.1 christos { M32R_INSN_ADDV3, M32R2F_INSN_ADDV3, M32R2F_SFMT_ADDV3, NOPAR, NOPAR },
63 1.1 christos { M32R_INSN_ADDX, M32R2F_INSN_ADDX, M32R2F_SFMT_ADDX, M32R2F_INSN_PAR_ADDX, M32R2F_INSN_WRITE_ADDX },
64 1.1 christos { M32R_INSN_BC8, M32R2F_INSN_BC8, M32R2F_SFMT_BC8, M32R2F_INSN_PAR_BC8, M32R2F_INSN_WRITE_BC8 },
65 1.1 christos { M32R_INSN_BC24, M32R2F_INSN_BC24, M32R2F_SFMT_BC24, NOPAR, NOPAR },
66 1.1 christos { M32R_INSN_BEQ, M32R2F_INSN_BEQ, M32R2F_SFMT_BEQ, NOPAR, NOPAR },
67 1.1 christos { M32R_INSN_BEQZ, M32R2F_INSN_BEQZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR },
68 1.1 christos { M32R_INSN_BGEZ, M32R2F_INSN_BGEZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR },
69 1.1 christos { M32R_INSN_BGTZ, M32R2F_INSN_BGTZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR },
70 1.1 christos { M32R_INSN_BLEZ, M32R2F_INSN_BLEZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR },
71 1.1 christos { M32R_INSN_BLTZ, M32R2F_INSN_BLTZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR },
72 1.1 christos { M32R_INSN_BNEZ, M32R2F_INSN_BNEZ, M32R2F_SFMT_BEQZ, NOPAR, NOPAR },
73 1.1 christos { M32R_INSN_BL8, M32R2F_INSN_BL8, M32R2F_SFMT_BL8, M32R2F_INSN_PAR_BL8, M32R2F_INSN_WRITE_BL8 },
74 1.1 christos { M32R_INSN_BL24, M32R2F_INSN_BL24, M32R2F_SFMT_BL24, NOPAR, NOPAR },
75 1.1 christos { M32R_INSN_BCL8, M32R2F_INSN_BCL8, M32R2F_SFMT_BCL8, M32R2F_INSN_PAR_BCL8, M32R2F_INSN_WRITE_BCL8 },
76 1.1 christos { M32R_INSN_BCL24, M32R2F_INSN_BCL24, M32R2F_SFMT_BCL24, NOPAR, NOPAR },
77 1.1 christos { M32R_INSN_BNC8, M32R2F_INSN_BNC8, M32R2F_SFMT_BC8, M32R2F_INSN_PAR_BNC8, M32R2F_INSN_WRITE_BNC8 },
78 1.1 christos { M32R_INSN_BNC24, M32R2F_INSN_BNC24, M32R2F_SFMT_BC24, NOPAR, NOPAR },
79 1.1 christos { M32R_INSN_BNE, M32R2F_INSN_BNE, M32R2F_SFMT_BEQ, NOPAR, NOPAR },
80 1.1 christos { M32R_INSN_BRA8, M32R2F_INSN_BRA8, M32R2F_SFMT_BRA8, M32R2F_INSN_PAR_BRA8, M32R2F_INSN_WRITE_BRA8 },
81 1.1 christos { M32R_INSN_BRA24, M32R2F_INSN_BRA24, M32R2F_SFMT_BRA24, NOPAR, NOPAR },
82 1.1 christos { M32R_INSN_BNCL8, M32R2F_INSN_BNCL8, M32R2F_SFMT_BCL8, M32R2F_INSN_PAR_BNCL8, M32R2F_INSN_WRITE_BNCL8 },
83 1.1 christos { M32R_INSN_BNCL24, M32R2F_INSN_BNCL24, M32R2F_SFMT_BCL24, NOPAR, NOPAR },
84 1.1 christos { M32R_INSN_CMP, M32R2F_INSN_CMP, M32R2F_SFMT_CMP, M32R2F_INSN_PAR_CMP, M32R2F_INSN_WRITE_CMP },
85 1.1 christos { M32R_INSN_CMPI, M32R2F_INSN_CMPI, M32R2F_SFMT_CMPI, NOPAR, NOPAR },
86 1.1 christos { M32R_INSN_CMPU, M32R2F_INSN_CMPU, M32R2F_SFMT_CMP, M32R2F_INSN_PAR_CMPU, M32R2F_INSN_WRITE_CMPU },
87 1.1 christos { M32R_INSN_CMPUI, M32R2F_INSN_CMPUI, M32R2F_SFMT_CMPI, NOPAR, NOPAR },
88 1.1 christos { M32R_INSN_CMPEQ, M32R2F_INSN_CMPEQ, M32R2F_SFMT_CMP, M32R2F_INSN_PAR_CMPEQ, M32R2F_INSN_WRITE_CMPEQ },
89 1.1 christos { M32R_INSN_CMPZ, M32R2F_INSN_CMPZ, M32R2F_SFMT_CMPZ, M32R2F_INSN_PAR_CMPZ, M32R2F_INSN_WRITE_CMPZ },
90 1.1 christos { M32R_INSN_DIV, M32R2F_INSN_DIV, M32R2F_SFMT_DIV, NOPAR, NOPAR },
91 1.1 christos { M32R_INSN_DIVU, M32R2F_INSN_DIVU, M32R2F_SFMT_DIV, NOPAR, NOPAR },
92 1.1 christos { M32R_INSN_REM, M32R2F_INSN_REM, M32R2F_SFMT_DIV, NOPAR, NOPAR },
93 1.1 christos { M32R_INSN_REMU, M32R2F_INSN_REMU, M32R2F_SFMT_DIV, NOPAR, NOPAR },
94 1.1 christos { M32R_INSN_REMH, M32R2F_INSN_REMH, M32R2F_SFMT_DIV, NOPAR, NOPAR },
95 1.1 christos { M32R_INSN_REMUH, M32R2F_INSN_REMUH, M32R2F_SFMT_DIV, NOPAR, NOPAR },
96 1.1 christos { M32R_INSN_REMB, M32R2F_INSN_REMB, M32R2F_SFMT_DIV, NOPAR, NOPAR },
97 1.1 christos { M32R_INSN_REMUB, M32R2F_INSN_REMUB, M32R2F_SFMT_DIV, NOPAR, NOPAR },
98 1.1 christos { M32R_INSN_DIVUH, M32R2F_INSN_DIVUH, M32R2F_SFMT_DIV, NOPAR, NOPAR },
99 1.1 christos { M32R_INSN_DIVB, M32R2F_INSN_DIVB, M32R2F_SFMT_DIV, NOPAR, NOPAR },
100 1.1 christos { M32R_INSN_DIVUB, M32R2F_INSN_DIVUB, M32R2F_SFMT_DIV, NOPAR, NOPAR },
101 1.1 christos { M32R_INSN_DIVH, M32R2F_INSN_DIVH, M32R2F_SFMT_DIV, NOPAR, NOPAR },
102 1.1 christos { M32R_INSN_JC, M32R2F_INSN_JC, M32R2F_SFMT_JC, M32R2F_INSN_PAR_JC, M32R2F_INSN_WRITE_JC },
103 1.1 christos { M32R_INSN_JNC, M32R2F_INSN_JNC, M32R2F_SFMT_JC, M32R2F_INSN_PAR_JNC, M32R2F_INSN_WRITE_JNC },
104 1.1 christos { M32R_INSN_JL, M32R2F_INSN_JL, M32R2F_SFMT_JL, M32R2F_INSN_PAR_JL, M32R2F_INSN_WRITE_JL },
105 1.1 christos { M32R_INSN_JMP, M32R2F_INSN_JMP, M32R2F_SFMT_JMP, M32R2F_INSN_PAR_JMP, M32R2F_INSN_WRITE_JMP },
106 1.1 christos { M32R_INSN_LD, M32R2F_INSN_LD, M32R2F_SFMT_LD, M32R2F_INSN_PAR_LD, M32R2F_INSN_WRITE_LD },
107 1.1 christos { M32R_INSN_LD_D, M32R2F_INSN_LD_D, M32R2F_SFMT_LD_D, NOPAR, NOPAR },
108 1.1 christos { M32R_INSN_LDB, M32R2F_INSN_LDB, M32R2F_SFMT_LDB, M32R2F_INSN_PAR_LDB, M32R2F_INSN_WRITE_LDB },
109 1.1 christos { M32R_INSN_LDB_D, M32R2F_INSN_LDB_D, M32R2F_SFMT_LDB_D, NOPAR, NOPAR },
110 1.1 christos { M32R_INSN_LDH, M32R2F_INSN_LDH, M32R2F_SFMT_LDH, M32R2F_INSN_PAR_LDH, M32R2F_INSN_WRITE_LDH },
111 1.1 christos { M32R_INSN_LDH_D, M32R2F_INSN_LDH_D, M32R2F_SFMT_LDH_D, NOPAR, NOPAR },
112 1.1 christos { M32R_INSN_LDUB, M32R2F_INSN_LDUB, M32R2F_SFMT_LDB, M32R2F_INSN_PAR_LDUB, M32R2F_INSN_WRITE_LDUB },
113 1.1 christos { M32R_INSN_LDUB_D, M32R2F_INSN_LDUB_D, M32R2F_SFMT_LDB_D, NOPAR, NOPAR },
114 1.1 christos { M32R_INSN_LDUH, M32R2F_INSN_LDUH, M32R2F_SFMT_LDH, M32R2F_INSN_PAR_LDUH, M32R2F_INSN_WRITE_LDUH },
115 1.1 christos { M32R_INSN_LDUH_D, M32R2F_INSN_LDUH_D, M32R2F_SFMT_LDH_D, NOPAR, NOPAR },
116 1.1 christos { M32R_INSN_LD_PLUS, M32R2F_INSN_LD_PLUS, M32R2F_SFMT_LD_PLUS, M32R2F_INSN_PAR_LD_PLUS, M32R2F_INSN_WRITE_LD_PLUS },
117 1.1 christos { M32R_INSN_LD24, M32R2F_INSN_LD24, M32R2F_SFMT_LD24, NOPAR, NOPAR },
118 1.1 christos { M32R_INSN_LDI8, M32R2F_INSN_LDI8, M32R2F_SFMT_LDI8, M32R2F_INSN_PAR_LDI8, M32R2F_INSN_WRITE_LDI8 },
119 1.1 christos { M32R_INSN_LDI16, M32R2F_INSN_LDI16, M32R2F_SFMT_LDI16, NOPAR, NOPAR },
120 1.1 christos { M32R_INSN_LOCK, M32R2F_INSN_LOCK, M32R2F_SFMT_LOCK, M32R2F_INSN_PAR_LOCK, M32R2F_INSN_WRITE_LOCK },
121 1.1 christos { M32R_INSN_MACHI_A, M32R2F_INSN_MACHI_A, M32R2F_SFMT_MACHI_A, M32R2F_INSN_PAR_MACHI_A, M32R2F_INSN_WRITE_MACHI_A },
122 1.1 christos { M32R_INSN_MACLO_A, M32R2F_INSN_MACLO_A, M32R2F_SFMT_MACHI_A, M32R2F_INSN_PAR_MACLO_A, M32R2F_INSN_WRITE_MACLO_A },
123 1.1 christos { M32R_INSN_MACWHI_A, M32R2F_INSN_MACWHI_A, M32R2F_SFMT_MACHI_A, M32R2F_INSN_PAR_MACWHI_A, M32R2F_INSN_WRITE_MACWHI_A },
124 1.1 christos { M32R_INSN_MACWLO_A, M32R2F_INSN_MACWLO_A, M32R2F_SFMT_MACHI_A, M32R2F_INSN_PAR_MACWLO_A, M32R2F_INSN_WRITE_MACWLO_A },
125 1.1 christos { M32R_INSN_MUL, M32R2F_INSN_MUL, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_MUL, M32R2F_INSN_WRITE_MUL },
126 1.1 christos { M32R_INSN_MULHI_A, M32R2F_INSN_MULHI_A, M32R2F_SFMT_MULHI_A, M32R2F_INSN_PAR_MULHI_A, M32R2F_INSN_WRITE_MULHI_A },
127 1.1 christos { M32R_INSN_MULLO_A, M32R2F_INSN_MULLO_A, M32R2F_SFMT_MULHI_A, M32R2F_INSN_PAR_MULLO_A, M32R2F_INSN_WRITE_MULLO_A },
128 1.1 christos { M32R_INSN_MULWHI_A, M32R2F_INSN_MULWHI_A, M32R2F_SFMT_MULHI_A, M32R2F_INSN_PAR_MULWHI_A, M32R2F_INSN_WRITE_MULWHI_A },
129 1.1 christos { M32R_INSN_MULWLO_A, M32R2F_INSN_MULWLO_A, M32R2F_SFMT_MULHI_A, M32R2F_INSN_PAR_MULWLO_A, M32R2F_INSN_WRITE_MULWLO_A },
130 1.1 christos { M32R_INSN_MV, M32R2F_INSN_MV, M32R2F_SFMT_MV, M32R2F_INSN_PAR_MV, M32R2F_INSN_WRITE_MV },
131 1.1 christos { M32R_INSN_MVFACHI_A, M32R2F_INSN_MVFACHI_A, M32R2F_SFMT_MVFACHI_A, M32R2F_INSN_PAR_MVFACHI_A, M32R2F_INSN_WRITE_MVFACHI_A },
132 1.1 christos { M32R_INSN_MVFACLO_A, M32R2F_INSN_MVFACLO_A, M32R2F_SFMT_MVFACHI_A, M32R2F_INSN_PAR_MVFACLO_A, M32R2F_INSN_WRITE_MVFACLO_A },
133 1.1 christos { M32R_INSN_MVFACMI_A, M32R2F_INSN_MVFACMI_A, M32R2F_SFMT_MVFACHI_A, M32R2F_INSN_PAR_MVFACMI_A, M32R2F_INSN_WRITE_MVFACMI_A },
134 1.1 christos { M32R_INSN_MVFC, M32R2F_INSN_MVFC, M32R2F_SFMT_MVFC, M32R2F_INSN_PAR_MVFC, M32R2F_INSN_WRITE_MVFC },
135 1.1 christos { M32R_INSN_MVTACHI_A, M32R2F_INSN_MVTACHI_A, M32R2F_SFMT_MVTACHI_A, M32R2F_INSN_PAR_MVTACHI_A, M32R2F_INSN_WRITE_MVTACHI_A },
136 1.1 christos { M32R_INSN_MVTACLO_A, M32R2F_INSN_MVTACLO_A, M32R2F_SFMT_MVTACHI_A, M32R2F_INSN_PAR_MVTACLO_A, M32R2F_INSN_WRITE_MVTACLO_A },
137 1.1 christos { M32R_INSN_MVTC, M32R2F_INSN_MVTC, M32R2F_SFMT_MVTC, M32R2F_INSN_PAR_MVTC, M32R2F_INSN_WRITE_MVTC },
138 1.1 christos { M32R_INSN_NEG, M32R2F_INSN_NEG, M32R2F_SFMT_MV, M32R2F_INSN_PAR_NEG, M32R2F_INSN_WRITE_NEG },
139 1.1 christos { M32R_INSN_NOP, M32R2F_INSN_NOP, M32R2F_SFMT_NOP, M32R2F_INSN_PAR_NOP, M32R2F_INSN_WRITE_NOP },
140 1.1 christos { M32R_INSN_NOT, M32R2F_INSN_NOT, M32R2F_SFMT_MV, M32R2F_INSN_PAR_NOT, M32R2F_INSN_WRITE_NOT },
141 1.1 christos { M32R_INSN_RAC_DSI, M32R2F_INSN_RAC_DSI, M32R2F_SFMT_RAC_DSI, M32R2F_INSN_PAR_RAC_DSI, M32R2F_INSN_WRITE_RAC_DSI },
142 1.1 christos { M32R_INSN_RACH_DSI, M32R2F_INSN_RACH_DSI, M32R2F_SFMT_RAC_DSI, M32R2F_INSN_PAR_RACH_DSI, M32R2F_INSN_WRITE_RACH_DSI },
143 1.1 christos { M32R_INSN_RTE, M32R2F_INSN_RTE, M32R2F_SFMT_RTE, M32R2F_INSN_PAR_RTE, M32R2F_INSN_WRITE_RTE },
144 1.1 christos { M32R_INSN_SETH, M32R2F_INSN_SETH, M32R2F_SFMT_SETH, NOPAR, NOPAR },
145 1.1 christos { M32R_INSN_SLL, M32R2F_INSN_SLL, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_SLL, M32R2F_INSN_WRITE_SLL },
146 1.1 christos { M32R_INSN_SLL3, M32R2F_INSN_SLL3, M32R2F_SFMT_SLL3, NOPAR, NOPAR },
147 1.1 christos { M32R_INSN_SLLI, M32R2F_INSN_SLLI, M32R2F_SFMT_SLLI, M32R2F_INSN_PAR_SLLI, M32R2F_INSN_WRITE_SLLI },
148 1.1 christos { M32R_INSN_SRA, M32R2F_INSN_SRA, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_SRA, M32R2F_INSN_WRITE_SRA },
149 1.1 christos { M32R_INSN_SRA3, M32R2F_INSN_SRA3, M32R2F_SFMT_SLL3, NOPAR, NOPAR },
150 1.1 christos { M32R_INSN_SRAI, M32R2F_INSN_SRAI, M32R2F_SFMT_SLLI, M32R2F_INSN_PAR_SRAI, M32R2F_INSN_WRITE_SRAI },
151 1.1 christos { M32R_INSN_SRL, M32R2F_INSN_SRL, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_SRL, M32R2F_INSN_WRITE_SRL },
152 1.1 christos { M32R_INSN_SRL3, M32R2F_INSN_SRL3, M32R2F_SFMT_SLL3, NOPAR, NOPAR },
153 1.1 christos { M32R_INSN_SRLI, M32R2F_INSN_SRLI, M32R2F_SFMT_SLLI, M32R2F_INSN_PAR_SRLI, M32R2F_INSN_WRITE_SRLI },
154 1.1 christos { M32R_INSN_ST, M32R2F_INSN_ST, M32R2F_SFMT_ST, M32R2F_INSN_PAR_ST, M32R2F_INSN_WRITE_ST },
155 1.1 christos { M32R_INSN_ST_D, M32R2F_INSN_ST_D, M32R2F_SFMT_ST_D, NOPAR, NOPAR },
156 1.1 christos { M32R_INSN_STB, M32R2F_INSN_STB, M32R2F_SFMT_STB, M32R2F_INSN_PAR_STB, M32R2F_INSN_WRITE_STB },
157 1.1 christos { M32R_INSN_STB_D, M32R2F_INSN_STB_D, M32R2F_SFMT_STB_D, NOPAR, NOPAR },
158 1.1 christos { M32R_INSN_STH, M32R2F_INSN_STH, M32R2F_SFMT_STH, M32R2F_INSN_PAR_STH, M32R2F_INSN_WRITE_STH },
159 1.1 christos { M32R_INSN_STH_D, M32R2F_INSN_STH_D, M32R2F_SFMT_STH_D, NOPAR, NOPAR },
160 1.1 christos { M32R_INSN_ST_PLUS, M32R2F_INSN_ST_PLUS, M32R2F_SFMT_ST_PLUS, M32R2F_INSN_PAR_ST_PLUS, M32R2F_INSN_WRITE_ST_PLUS },
161 1.1 christos { M32R_INSN_STH_PLUS, M32R2F_INSN_STH_PLUS, M32R2F_SFMT_STH_PLUS, M32R2F_INSN_PAR_STH_PLUS, M32R2F_INSN_WRITE_STH_PLUS },
162 1.1 christos { M32R_INSN_STB_PLUS, M32R2F_INSN_STB_PLUS, M32R2F_SFMT_STB_PLUS, M32R2F_INSN_PAR_STB_PLUS, M32R2F_INSN_WRITE_STB_PLUS },
163 1.1 christos { M32R_INSN_ST_MINUS, M32R2F_INSN_ST_MINUS, M32R2F_SFMT_ST_PLUS, M32R2F_INSN_PAR_ST_MINUS, M32R2F_INSN_WRITE_ST_MINUS },
164 1.1 christos { M32R_INSN_SUB, M32R2F_INSN_SUB, M32R2F_SFMT_ADD, M32R2F_INSN_PAR_SUB, M32R2F_INSN_WRITE_SUB },
165 1.1 christos { M32R_INSN_SUBV, M32R2F_INSN_SUBV, M32R2F_SFMT_ADDV, M32R2F_INSN_PAR_SUBV, M32R2F_INSN_WRITE_SUBV },
166 1.1 christos { M32R_INSN_SUBX, M32R2F_INSN_SUBX, M32R2F_SFMT_ADDX, M32R2F_INSN_PAR_SUBX, M32R2F_INSN_WRITE_SUBX },
167 1.1 christos { M32R_INSN_TRAP, M32R2F_INSN_TRAP, M32R2F_SFMT_TRAP, M32R2F_INSN_PAR_TRAP, M32R2F_INSN_WRITE_TRAP },
168 1.1 christos { M32R_INSN_UNLOCK, M32R2F_INSN_UNLOCK, M32R2F_SFMT_UNLOCK, M32R2F_INSN_PAR_UNLOCK, M32R2F_INSN_WRITE_UNLOCK },
169 1.1 christos { M32R_INSN_SATB, M32R2F_INSN_SATB, M32R2F_SFMT_SATB, NOPAR, NOPAR },
170 1.1 christos { M32R_INSN_SATH, M32R2F_INSN_SATH, M32R2F_SFMT_SATB, NOPAR, NOPAR },
171 1.1 christos { M32R_INSN_SAT, M32R2F_INSN_SAT, M32R2F_SFMT_SAT, NOPAR, NOPAR },
172 1.1 christos { M32R_INSN_PCMPBZ, M32R2F_INSN_PCMPBZ, M32R2F_SFMT_CMPZ, M32R2F_INSN_PAR_PCMPBZ, M32R2F_INSN_WRITE_PCMPBZ },
173 1.1 christos { M32R_INSN_SADD, M32R2F_INSN_SADD, M32R2F_SFMT_SADD, M32R2F_INSN_PAR_SADD, M32R2F_INSN_WRITE_SADD },
174 1.1 christos { M32R_INSN_MACWU1, M32R2F_INSN_MACWU1, M32R2F_SFMT_MACWU1, M32R2F_INSN_PAR_MACWU1, M32R2F_INSN_WRITE_MACWU1 },
175 1.1 christos { M32R_INSN_MSBLO, M32R2F_INSN_MSBLO, M32R2F_SFMT_MSBLO, M32R2F_INSN_PAR_MSBLO, M32R2F_INSN_WRITE_MSBLO },
176 1.1 christos { M32R_INSN_MULWU1, M32R2F_INSN_MULWU1, M32R2F_SFMT_MULWU1, M32R2F_INSN_PAR_MULWU1, M32R2F_INSN_WRITE_MULWU1 },
177 1.1 christos { M32R_INSN_MACLH1, M32R2F_INSN_MACLH1, M32R2F_SFMT_MACWU1, M32R2F_INSN_PAR_MACLH1, M32R2F_INSN_WRITE_MACLH1 },
178 1.1 christos { M32R_INSN_SC, M32R2F_INSN_SC, M32R2F_SFMT_SC, M32R2F_INSN_PAR_SC, M32R2F_INSN_WRITE_SC },
179 1.1 christos { M32R_INSN_SNC, M32R2F_INSN_SNC, M32R2F_SFMT_SC, M32R2F_INSN_PAR_SNC, M32R2F_INSN_WRITE_SNC },
180 1.1 christos { M32R_INSN_CLRPSW, M32R2F_INSN_CLRPSW, M32R2F_SFMT_CLRPSW, M32R2F_INSN_PAR_CLRPSW, M32R2F_INSN_WRITE_CLRPSW },
181 1.1 christos { M32R_INSN_SETPSW, M32R2F_INSN_SETPSW, M32R2F_SFMT_SETPSW, M32R2F_INSN_PAR_SETPSW, M32R2F_INSN_WRITE_SETPSW },
182 1.1 christos { M32R_INSN_BSET, M32R2F_INSN_BSET, M32R2F_SFMT_BSET, NOPAR, NOPAR },
183 1.1 christos { M32R_INSN_BCLR, M32R2F_INSN_BCLR, M32R2F_SFMT_BSET, NOPAR, NOPAR },
184 1.1 christos { M32R_INSN_BTST, M32R2F_INSN_BTST, M32R2F_SFMT_BTST, M32R2F_INSN_PAR_BTST, M32R2F_INSN_WRITE_BTST },
185 1.1 christos };
186 1.1 christos
187 1.1 christos static const struct insn_sem m32r2f_insn_sem_invalid =
188 1.1 christos {
189 1.1 christos VIRTUAL_INSN_X_INVALID, M32R2F_INSN_X_INVALID, M32R2F_SFMT_EMPTY, NOPAR, NOPAR
190 1.1 christos };
191 1.1 christos
192 1.1 christos /* Initialize an IDESC from the compile-time computable parts. */
193 1.1 christos
194 1.1 christos static INLINE void
195 1.1 christos init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
196 1.1 christos {
197 1.1 christos const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;
198 1.1 christos
199 1.1 christos id->num = t->index;
200 1.1 christos id->sfmt = t->sfmt;
201 1.1 christos if ((int) t->type <= 0)
202 1.1 christos id->idata = & cgen_virtual_insn_table[- (int) t->type];
203 1.1 christos else
204 1.1 christos id->idata = & insn_table[t->type];
205 1.1 christos id->attrs = CGEN_INSN_ATTRS (id->idata);
206 1.1 christos /* Oh my god, a magic number. */
207 1.1 christos id->length = CGEN_INSN_BITSIZE (id->idata) / 8;
208 1.1 christos
209 1.1 christos #if WITH_PROFILE_MODEL_P
210 1.1 christos id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
211 1.1 christos {
212 1.1 christos SIM_DESC sd = CPU_STATE (cpu);
213 1.1 christos SIM_ASSERT (t->index == id->timing->num);
214 1.1 christos }
215 1.1 christos #endif
216 1.1 christos
217 1.1 christos /* Semantic pointers are initialized elsewhere. */
218 1.1 christos }
219 1.1 christos
220 1.1 christos /* Initialize the instruction descriptor table. */
221 1.1 christos
222 1.1 christos void
223 1.1 christos m32r2f_init_idesc_table (SIM_CPU *cpu)
224 1.1 christos {
225 1.1 christos IDESC *id,*tabend;
226 1.1 christos const struct insn_sem *t,*tend;
227 1.1 christos int tabsize = M32R2F_INSN__MAX;
228 1.1 christos IDESC *table = m32r2f_insn_data;
229 1.1 christos
230 1.1 christos memset (table, 0, tabsize * sizeof (IDESC));
231 1.1 christos
232 1.1 christos /* First set all entries to the `invalid insn'. */
233 1.1 christos t = & m32r2f_insn_sem_invalid;
234 1.1 christos for (id = table, tabend = table + tabsize; id < tabend; ++id)
235 1.1 christos init_idesc (cpu, id, t);
236 1.1 christos
237 1.1 christos /* Now fill in the values for the chosen cpu. */
238 1.1.1.7 christos for (t = m32r2f_insn_sem, tend = t + ARRAY_SIZE (m32r2f_insn_sem);
239 1.1 christos t != tend; ++t)
240 1.1 christos {
241 1.1 christos init_idesc (cpu, & table[t->index], t);
242 1.1 christos if (t->par_index != NOPAR)
243 1.1 christos {
244 1.1 christos init_idesc (cpu, &table[t->par_index], t);
245 1.1 christos table[t->index].par_idesc = &table[t->par_index];
246 1.1 christos }
247 1.1 christos if (t->par_index != NOPAR)
248 1.1 christos {
249 1.1 christos init_idesc (cpu, &table[t->write_index], t);
250 1.1 christos table[t->par_index].par_idesc = &table[t->write_index];
251 1.1 christos }
252 1.1 christos }
253 1.1 christos
254 1.1 christos /* Link the IDESC table into the cpu. */
255 1.1 christos CPU_IDESC (cpu) = table;
256 1.1 christos }
257 1.1 christos
258 1.1 christos /* Given an instruction, return a pointer to its IDESC entry. */
259 1.1 christos
260 1.1 christos const IDESC *
261 1.1 christos m32r2f_decode (SIM_CPU *current_cpu, IADDR pc,
262 1.1 christos CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn,
263 1.1 christos ARGBUF *abuf)
264 1.1 christos {
265 1.1 christos /* Result of decoder. */
266 1.1 christos M32R2F_INSN_TYPE itype;
267 1.1 christos
268 1.1 christos {
269 1.1 christos CGEN_INSN_WORD insn = base_insn;
270 1.1 christos
271 1.1 christos {
272 1.1 christos unsigned int val = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0)));
273 1.1 christos switch (val)
274 1.1 christos {
275 1.1 christos case 0 : itype = M32R2F_INSN_SUBV; goto extract_sfmt_addv;
276 1.1 christos case 1 : itype = M32R2F_INSN_SUBX; goto extract_sfmt_addx;
277 1.1 christos case 2 : itype = M32R2F_INSN_SUB; goto extract_sfmt_add;
278 1.1 christos case 3 : itype = M32R2F_INSN_NEG; goto extract_sfmt_mv;
279 1.1 christos case 4 : itype = M32R2F_INSN_CMP; goto extract_sfmt_cmp;
280 1.1 christos case 5 : itype = M32R2F_INSN_CMPU; goto extract_sfmt_cmp;
281 1.1 christos case 6 : itype = M32R2F_INSN_CMPEQ; goto extract_sfmt_cmp;
282 1.1 christos case 7 :
283 1.1 christos {
284 1.1 christos unsigned int val = (((insn >> 8) & (3 << 0)));
285 1.1 christos switch (val)
286 1.1 christos {
287 1.1 christos case 0 :
288 1.1 christos if ((entire_insn & 0xfff0) == 0x70)
289 1.1 christos { itype = M32R2F_INSN_CMPZ; goto extract_sfmt_cmpz; }
290 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
291 1.1 christos case 3 :
292 1.1 christos if ((entire_insn & 0xfff0) == 0x370)
293 1.1 christos { itype = M32R2F_INSN_PCMPBZ; goto extract_sfmt_cmpz; }
294 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
295 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
296 1.1 christos }
297 1.1 christos }
298 1.1 christos case 8 : itype = M32R2F_INSN_ADDV; goto extract_sfmt_addv;
299 1.1 christos case 9 : itype = M32R2F_INSN_ADDX; goto extract_sfmt_addx;
300 1.1 christos case 10 : itype = M32R2F_INSN_ADD; goto extract_sfmt_add;
301 1.1 christos case 11 : itype = M32R2F_INSN_NOT; goto extract_sfmt_mv;
302 1.1 christos case 12 : itype = M32R2F_INSN_AND; goto extract_sfmt_add;
303 1.1 christos case 13 : itype = M32R2F_INSN_XOR; goto extract_sfmt_add;
304 1.1 christos case 14 : itype = M32R2F_INSN_OR; goto extract_sfmt_add;
305 1.1 christos case 15 :
306 1.1 christos if ((entire_insn & 0xf8f0) == 0xf0)
307 1.1 christos { itype = M32R2F_INSN_BTST; goto extract_sfmt_btst; }
308 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
309 1.1 christos case 16 : itype = M32R2F_INSN_SRL; goto extract_sfmt_add;
310 1.1 christos case 18 : itype = M32R2F_INSN_SRA; goto extract_sfmt_add;
311 1.1 christos case 20 : itype = M32R2F_INSN_SLL; goto extract_sfmt_add;
312 1.1 christos case 22 : itype = M32R2F_INSN_MUL; goto extract_sfmt_add;
313 1.1 christos case 24 : itype = M32R2F_INSN_MV; goto extract_sfmt_mv;
314 1.1 christos case 25 : itype = M32R2F_INSN_MVFC; goto extract_sfmt_mvfc;
315 1.1 christos case 26 : itype = M32R2F_INSN_MVTC; goto extract_sfmt_mvtc;
316 1.1 christos case 28 :
317 1.1 christos {
318 1.1 christos unsigned int val = (((insn >> 8) & (3 << 0)));
319 1.1 christos switch (val)
320 1.1 christos {
321 1.1 christos case 0 :
322 1.1 christos if ((entire_insn & 0xfff0) == 0x1cc0)
323 1.1 christos { itype = M32R2F_INSN_JC; goto extract_sfmt_jc; }
324 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
325 1.1 christos case 1 :
326 1.1 christos if ((entire_insn & 0xfff0) == 0x1dc0)
327 1.1 christos { itype = M32R2F_INSN_JNC; goto extract_sfmt_jc; }
328 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
329 1.1 christos case 2 :
330 1.1 christos if ((entire_insn & 0xfff0) == 0x1ec0)
331 1.1 christos { itype = M32R2F_INSN_JL; goto extract_sfmt_jl; }
332 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
333 1.1 christos case 3 :
334 1.1 christos if ((entire_insn & 0xfff0) == 0x1fc0)
335 1.1 christos { itype = M32R2F_INSN_JMP; goto extract_sfmt_jmp; }
336 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
337 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
338 1.1 christos }
339 1.1 christos }
340 1.1 christos case 29 :
341 1.1 christos if ((entire_insn & 0xffff) == 0x10d6)
342 1.1 christos { itype = M32R2F_INSN_RTE; goto extract_sfmt_rte; }
343 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
344 1.1 christos case 31 :
345 1.1 christos if ((entire_insn & 0xfff0) == 0x10f0)
346 1.1 christos { itype = M32R2F_INSN_TRAP; goto extract_sfmt_trap; }
347 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
348 1.1 christos case 32 : itype = M32R2F_INSN_STB; goto extract_sfmt_stb;
349 1.1 christos case 33 : itype = M32R2F_INSN_STB_PLUS; goto extract_sfmt_stb_plus;
350 1.1 christos case 34 : itype = M32R2F_INSN_STH; goto extract_sfmt_sth;
351 1.1 christos case 35 : itype = M32R2F_INSN_STH_PLUS; goto extract_sfmt_sth_plus;
352 1.1 christos case 36 : itype = M32R2F_INSN_ST; goto extract_sfmt_st;
353 1.1 christos case 37 : itype = M32R2F_INSN_UNLOCK; goto extract_sfmt_unlock;
354 1.1 christos case 38 : itype = M32R2F_INSN_ST_PLUS; goto extract_sfmt_st_plus;
355 1.1 christos case 39 : itype = M32R2F_INSN_ST_MINUS; goto extract_sfmt_st_plus;
356 1.1 christos case 40 : itype = M32R2F_INSN_LDB; goto extract_sfmt_ldb;
357 1.1 christos case 41 : itype = M32R2F_INSN_LDUB; goto extract_sfmt_ldb;
358 1.1 christos case 42 : itype = M32R2F_INSN_LDH; goto extract_sfmt_ldh;
359 1.1 christos case 43 : itype = M32R2F_INSN_LDUH; goto extract_sfmt_ldh;
360 1.1 christos case 44 : itype = M32R2F_INSN_LD; goto extract_sfmt_ld;
361 1.1 christos case 45 : itype = M32R2F_INSN_LOCK; goto extract_sfmt_lock;
362 1.1 christos case 46 : itype = M32R2F_INSN_LD_PLUS; goto extract_sfmt_ld_plus;
363 1.1 christos case 48 : /* fall through */
364 1.1 christos case 56 : itype = M32R2F_INSN_MULHI_A; goto extract_sfmt_mulhi_a;
365 1.1 christos case 49 : /* fall through */
366 1.1 christos case 57 : itype = M32R2F_INSN_MULLO_A; goto extract_sfmt_mulhi_a;
367 1.1 christos case 50 : /* fall through */
368 1.1 christos case 58 : itype = M32R2F_INSN_MULWHI_A; goto extract_sfmt_mulhi_a;
369 1.1 christos case 51 : /* fall through */
370 1.1 christos case 59 : itype = M32R2F_INSN_MULWLO_A; goto extract_sfmt_mulhi_a;
371 1.1 christos case 52 : /* fall through */
372 1.1 christos case 60 : itype = M32R2F_INSN_MACHI_A; goto extract_sfmt_machi_a;
373 1.1 christos case 53 : /* fall through */
374 1.1 christos case 61 : itype = M32R2F_INSN_MACLO_A; goto extract_sfmt_machi_a;
375 1.1 christos case 54 : /* fall through */
376 1.1 christos case 62 : itype = M32R2F_INSN_MACWHI_A; goto extract_sfmt_machi_a;
377 1.1 christos case 55 : /* fall through */
378 1.1 christos case 63 : itype = M32R2F_INSN_MACWLO_A; goto extract_sfmt_machi_a;
379 1.1 christos case 64 : /* fall through */
380 1.1 christos case 65 : /* fall through */
381 1.1 christos case 66 : /* fall through */
382 1.1 christos case 67 : /* fall through */
383 1.1 christos case 68 : /* fall through */
384 1.1 christos case 69 : /* fall through */
385 1.1 christos case 70 : /* fall through */
386 1.1 christos case 71 : /* fall through */
387 1.1 christos case 72 : /* fall through */
388 1.1 christos case 73 : /* fall through */
389 1.1 christos case 74 : /* fall through */
390 1.1 christos case 75 : /* fall through */
391 1.1 christos case 76 : /* fall through */
392 1.1 christos case 77 : /* fall through */
393 1.1 christos case 78 : /* fall through */
394 1.1 christos case 79 : itype = M32R2F_INSN_ADDI; goto extract_sfmt_addi;
395 1.1 christos case 80 : /* fall through */
396 1.1 christos case 81 : itype = M32R2F_INSN_SRLI; goto extract_sfmt_slli;
397 1.1 christos case 82 : /* fall through */
398 1.1 christos case 83 : itype = M32R2F_INSN_SRAI; goto extract_sfmt_slli;
399 1.1 christos case 84 : /* fall through */
400 1.1 christos case 85 : itype = M32R2F_INSN_SLLI; goto extract_sfmt_slli;
401 1.1 christos case 87 :
402 1.1 christos {
403 1.1 christos unsigned int val = (((insn >> 0) & (1 << 0)));
404 1.1 christos switch (val)
405 1.1 christos {
406 1.1 christos case 0 :
407 1.1 christos if ((entire_insn & 0xf0f3) == 0x5070)
408 1.1 christos { itype = M32R2F_INSN_MVTACHI_A; goto extract_sfmt_mvtachi_a; }
409 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
410 1.1 christos case 1 :
411 1.1 christos if ((entire_insn & 0xf0f3) == 0x5071)
412 1.1 christos { itype = M32R2F_INSN_MVTACLO_A; goto extract_sfmt_mvtachi_a; }
413 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
414 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
415 1.1 christos }
416 1.1 christos }
417 1.1 christos case 88 :
418 1.1 christos if ((entire_insn & 0xf3f2) == 0x5080)
419 1.1 christos { itype = M32R2F_INSN_RACH_DSI; goto extract_sfmt_rac_dsi; }
420 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
421 1.1 christos case 89 :
422 1.1 christos if ((entire_insn & 0xf3f2) == 0x5090)
423 1.1 christos { itype = M32R2F_INSN_RAC_DSI; goto extract_sfmt_rac_dsi; }
424 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
425 1.1 christos case 90 : itype = M32R2F_INSN_MULWU1; goto extract_sfmt_mulwu1;
426 1.1 christos case 91 : itype = M32R2F_INSN_MACWU1; goto extract_sfmt_macwu1;
427 1.1 christos case 92 : itype = M32R2F_INSN_MACLH1; goto extract_sfmt_macwu1;
428 1.1 christos case 93 : itype = M32R2F_INSN_MSBLO; goto extract_sfmt_msblo;
429 1.1 christos case 94 :
430 1.1 christos if ((entire_insn & 0xffff) == 0x50e4)
431 1.1 christos { itype = M32R2F_INSN_SADD; goto extract_sfmt_sadd; }
432 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
433 1.1 christos case 95 :
434 1.1 christos {
435 1.1 christos unsigned int val = (((insn >> 0) & (3 << 0)));
436 1.1 christos switch (val)
437 1.1 christos {
438 1.1 christos case 0 : itype = M32R2F_INSN_MVFACHI_A; goto extract_sfmt_mvfachi_a;
439 1.1 christos case 1 : itype = M32R2F_INSN_MVFACLO_A; goto extract_sfmt_mvfachi_a;
440 1.1 christos case 2 : itype = M32R2F_INSN_MVFACMI_A; goto extract_sfmt_mvfachi_a;
441 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
442 1.1 christos }
443 1.1 christos }
444 1.1 christos case 96 : /* fall through */
445 1.1 christos case 97 : /* fall through */
446 1.1 christos case 98 : /* fall through */
447 1.1 christos case 99 : /* fall through */
448 1.1 christos case 100 : /* fall through */
449 1.1 christos case 101 : /* fall through */
450 1.1 christos case 102 : /* fall through */
451 1.1 christos case 103 : /* fall through */
452 1.1 christos case 104 : /* fall through */
453 1.1 christos case 105 : /* fall through */
454 1.1 christos case 106 : /* fall through */
455 1.1 christos case 107 : /* fall through */
456 1.1 christos case 108 : /* fall through */
457 1.1 christos case 109 : /* fall through */
458 1.1 christos case 110 : /* fall through */
459 1.1 christos case 111 : itype = M32R2F_INSN_LDI8; goto extract_sfmt_ldi8;
460 1.1 christos case 112 :
461 1.1 christos {
462 1.1 christos unsigned int val = (((insn >> 7) & (15 << 1)) | ((insn >> 0) & (1 << 0)));
463 1.1 christos switch (val)
464 1.1 christos {
465 1.1 christos case 0 :
466 1.1 christos if ((entire_insn & 0xffff) == 0x7000)
467 1.1 christos { itype = M32R2F_INSN_NOP; goto extract_sfmt_nop; }
468 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
469 1.1 christos case 2 : /* fall through */
470 1.1 christos case 3 : itype = M32R2F_INSN_SETPSW; goto extract_sfmt_setpsw;
471 1.1 christos case 4 : /* fall through */
472 1.1 christos case 5 : itype = M32R2F_INSN_CLRPSW; goto extract_sfmt_clrpsw;
473 1.1 christos case 9 :
474 1.1 christos if ((entire_insn & 0xffff) == 0x7401)
475 1.1 christos { itype = M32R2F_INSN_SC; goto extract_sfmt_sc; }
476 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
477 1.1 christos case 11 :
478 1.1 christos if ((entire_insn & 0xffff) == 0x7501)
479 1.1 christos { itype = M32R2F_INSN_SNC; goto extract_sfmt_sc; }
480 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
481 1.1 christos case 16 : /* fall through */
482 1.1 christos case 17 : itype = M32R2F_INSN_BCL8; goto extract_sfmt_bcl8;
483 1.1 christos case 18 : /* fall through */
484 1.1 christos case 19 : itype = M32R2F_INSN_BNCL8; goto extract_sfmt_bcl8;
485 1.1 christos case 24 : /* fall through */
486 1.1 christos case 25 : itype = M32R2F_INSN_BC8; goto extract_sfmt_bc8;
487 1.1 christos case 26 : /* fall through */
488 1.1 christos case 27 : itype = M32R2F_INSN_BNC8; goto extract_sfmt_bc8;
489 1.1 christos case 28 : /* fall through */
490 1.1 christos case 29 : itype = M32R2F_INSN_BL8; goto extract_sfmt_bl8;
491 1.1 christos case 30 : /* fall through */
492 1.1 christos case 31 : itype = M32R2F_INSN_BRA8; goto extract_sfmt_bra8;
493 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
494 1.1 christos }
495 1.1 christos }
496 1.1 christos case 113 : /* fall through */
497 1.1 christos case 114 : /* fall through */
498 1.1 christos case 115 : /* fall through */
499 1.1 christos case 116 : /* fall through */
500 1.1 christos case 117 : /* fall through */
501 1.1 christos case 118 : /* fall through */
502 1.1 christos case 119 : /* fall through */
503 1.1 christos case 120 : /* fall through */
504 1.1 christos case 121 : /* fall through */
505 1.1 christos case 122 : /* fall through */
506 1.1 christos case 123 : /* fall through */
507 1.1 christos case 124 : /* fall through */
508 1.1 christos case 125 : /* fall through */
509 1.1 christos case 126 : /* fall through */
510 1.1 christos case 127 :
511 1.1 christos {
512 1.1 christos unsigned int val = (((insn >> 8) & (15 << 0)));
513 1.1 christos switch (val)
514 1.1 christos {
515 1.1 christos case 1 : itype = M32R2F_INSN_SETPSW; goto extract_sfmt_setpsw;
516 1.1 christos case 2 : itype = M32R2F_INSN_CLRPSW; goto extract_sfmt_clrpsw;
517 1.1 christos case 8 : itype = M32R2F_INSN_BCL8; goto extract_sfmt_bcl8;
518 1.1 christos case 9 : itype = M32R2F_INSN_BNCL8; goto extract_sfmt_bcl8;
519 1.1 christos case 12 : itype = M32R2F_INSN_BC8; goto extract_sfmt_bc8;
520 1.1 christos case 13 : itype = M32R2F_INSN_BNC8; goto extract_sfmt_bc8;
521 1.1 christos case 14 : itype = M32R2F_INSN_BL8; goto extract_sfmt_bl8;
522 1.1 christos case 15 : itype = M32R2F_INSN_BRA8; goto extract_sfmt_bra8;
523 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
524 1.1 christos }
525 1.1 christos }
526 1.1 christos case 132 :
527 1.1 christos if ((entire_insn & 0xfff00000) == 0x80400000)
528 1.1 christos { itype = M32R2F_INSN_CMPI; goto extract_sfmt_cmpi; }
529 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
530 1.1 christos case 133 :
531 1.1 christos if ((entire_insn & 0xfff00000) == 0x80500000)
532 1.1 christos { itype = M32R2F_INSN_CMPUI; goto extract_sfmt_cmpi; }
533 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
534 1.1 christos case 134 :
535 1.1 christos {
536 1.1 christos unsigned int val = (((entire_insn >> 8) & (3 << 0)));
537 1.1 christos switch (val)
538 1.1 christos {
539 1.1 christos case 0 :
540 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x80600000)
541 1.1 christos { itype = M32R2F_INSN_SAT; goto extract_sfmt_sat; }
542 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
543 1.1 christos case 2 :
544 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x80600200)
545 1.1 christos { itype = M32R2F_INSN_SATH; goto extract_sfmt_satb; }
546 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
547 1.1 christos case 3 :
548 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x80600300)
549 1.1 christos { itype = M32R2F_INSN_SATB; goto extract_sfmt_satb; }
550 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
551 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
552 1.1 christos }
553 1.1 christos }
554 1.1 christos case 136 : itype = M32R2F_INSN_ADDV3; goto extract_sfmt_addv3;
555 1.1 christos case 138 : itype = M32R2F_INSN_ADD3; goto extract_sfmt_add3;
556 1.1 christos case 140 : itype = M32R2F_INSN_AND3; goto extract_sfmt_and3;
557 1.1 christos case 141 : itype = M32R2F_INSN_XOR3; goto extract_sfmt_and3;
558 1.1 christos case 142 : itype = M32R2F_INSN_OR3; goto extract_sfmt_or3;
559 1.1 christos case 144 :
560 1.1 christos {
561 1.1 christos unsigned int val = (((entire_insn >> 3) & (3 << 0)));
562 1.1 christos switch (val)
563 1.1 christos {
564 1.1 christos case 0 :
565 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90000000)
566 1.1 christos { itype = M32R2F_INSN_DIV; goto extract_sfmt_div; }
567 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
568 1.1 christos case 2 :
569 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90000010)
570 1.1 christos { itype = M32R2F_INSN_DIVH; goto extract_sfmt_div; }
571 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
572 1.1 christos case 3 :
573 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90000018)
574 1.1 christos { itype = M32R2F_INSN_DIVB; goto extract_sfmt_div; }
575 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
576 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
577 1.1 christos }
578 1.1 christos }
579 1.1 christos case 145 :
580 1.1 christos {
581 1.1 christos unsigned int val = (((entire_insn >> 3) & (3 << 0)));
582 1.1 christos switch (val)
583 1.1 christos {
584 1.1 christos case 0 :
585 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90100000)
586 1.1 christos { itype = M32R2F_INSN_DIVU; goto extract_sfmt_div; }
587 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
588 1.1 christos case 2 :
589 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90100010)
590 1.1 christos { itype = M32R2F_INSN_DIVUH; goto extract_sfmt_div; }
591 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
592 1.1 christos case 3 :
593 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90100018)
594 1.1 christos { itype = M32R2F_INSN_DIVUB; goto extract_sfmt_div; }
595 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
596 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
597 1.1 christos }
598 1.1 christos }
599 1.1 christos case 146 :
600 1.1 christos {
601 1.1 christos unsigned int val = (((entire_insn >> 3) & (3 << 0)));
602 1.1 christos switch (val)
603 1.1 christos {
604 1.1 christos case 0 :
605 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90200000)
606 1.1 christos { itype = M32R2F_INSN_REM; goto extract_sfmt_div; }
607 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
608 1.1 christos case 2 :
609 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90200010)
610 1.1 christos { itype = M32R2F_INSN_REMH; goto extract_sfmt_div; }
611 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
612 1.1 christos case 3 :
613 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90200018)
614 1.1 christos { itype = M32R2F_INSN_REMB; goto extract_sfmt_div; }
615 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
616 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
617 1.1 christos }
618 1.1 christos }
619 1.1 christos case 147 :
620 1.1 christos {
621 1.1 christos unsigned int val = (((entire_insn >> 3) & (3 << 0)));
622 1.1 christos switch (val)
623 1.1 christos {
624 1.1 christos case 0 :
625 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90300000)
626 1.1 christos { itype = M32R2F_INSN_REMU; goto extract_sfmt_div; }
627 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
628 1.1 christos case 2 :
629 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90300010)
630 1.1 christos { itype = M32R2F_INSN_REMUH; goto extract_sfmt_div; }
631 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
632 1.1 christos case 3 :
633 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90300018)
634 1.1 christos { itype = M32R2F_INSN_REMUB; goto extract_sfmt_div; }
635 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
636 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
637 1.1 christos }
638 1.1 christos }
639 1.1 christos case 152 : itype = M32R2F_INSN_SRL3; goto extract_sfmt_sll3;
640 1.1 christos case 154 : itype = M32R2F_INSN_SRA3; goto extract_sfmt_sll3;
641 1.1 christos case 156 : itype = M32R2F_INSN_SLL3; goto extract_sfmt_sll3;
642 1.1 christos case 159 :
643 1.1 christos if ((entire_insn & 0xf0ff0000) == 0x90f00000)
644 1.1 christos { itype = M32R2F_INSN_LDI16; goto extract_sfmt_ldi16; }
645 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
646 1.1 christos case 160 : itype = M32R2F_INSN_STB_D; goto extract_sfmt_stb_d;
647 1.1 christos case 162 : itype = M32R2F_INSN_STH_D; goto extract_sfmt_sth_d;
648 1.1 christos case 164 : itype = M32R2F_INSN_ST_D; goto extract_sfmt_st_d;
649 1.1 christos case 166 :
650 1.1 christos if ((entire_insn & 0xf8f00000) == 0xa0600000)
651 1.1 christos { itype = M32R2F_INSN_BSET; goto extract_sfmt_bset; }
652 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
653 1.1 christos case 167 :
654 1.1 christos if ((entire_insn & 0xf8f00000) == 0xa0700000)
655 1.1 christos { itype = M32R2F_INSN_BCLR; goto extract_sfmt_bset; }
656 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
657 1.1 christos case 168 : itype = M32R2F_INSN_LDB_D; goto extract_sfmt_ldb_d;
658 1.1 christos case 169 : itype = M32R2F_INSN_LDUB_D; goto extract_sfmt_ldb_d;
659 1.1 christos case 170 : itype = M32R2F_INSN_LDH_D; goto extract_sfmt_ldh_d;
660 1.1 christos case 171 : itype = M32R2F_INSN_LDUH_D; goto extract_sfmt_ldh_d;
661 1.1 christos case 172 : itype = M32R2F_INSN_LD_D; goto extract_sfmt_ld_d;
662 1.1 christos case 176 : itype = M32R2F_INSN_BEQ; goto extract_sfmt_beq;
663 1.1 christos case 177 : itype = M32R2F_INSN_BNE; goto extract_sfmt_beq;
664 1.1 christos case 184 :
665 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0800000)
666 1.1 christos { itype = M32R2F_INSN_BEQZ; goto extract_sfmt_beqz; }
667 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
668 1.1 christos case 185 :
669 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0900000)
670 1.1 christos { itype = M32R2F_INSN_BNEZ; goto extract_sfmt_beqz; }
671 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
672 1.1 christos case 186 :
673 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0a00000)
674 1.1 christos { itype = M32R2F_INSN_BLTZ; goto extract_sfmt_beqz; }
675 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
676 1.1 christos case 187 :
677 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0b00000)
678 1.1 christos { itype = M32R2F_INSN_BGEZ; goto extract_sfmt_beqz; }
679 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
680 1.1 christos case 188 :
681 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0c00000)
682 1.1 christos { itype = M32R2F_INSN_BLEZ; goto extract_sfmt_beqz; }
683 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
684 1.1 christos case 189 :
685 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0d00000)
686 1.1 christos { itype = M32R2F_INSN_BGTZ; goto extract_sfmt_beqz; }
687 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
688 1.1 christos case 220 :
689 1.1 christos if ((entire_insn & 0xf0ff0000) == 0xd0c00000)
690 1.1 christos { itype = M32R2F_INSN_SETH; goto extract_sfmt_seth; }
691 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
692 1.1 christos case 224 : /* fall through */
693 1.1 christos case 225 : /* fall through */
694 1.1 christos case 226 : /* fall through */
695 1.1 christos case 227 : /* fall through */
696 1.1 christos case 228 : /* fall through */
697 1.1 christos case 229 : /* fall through */
698 1.1 christos case 230 : /* fall through */
699 1.1 christos case 231 : /* fall through */
700 1.1 christos case 232 : /* fall through */
701 1.1 christos case 233 : /* fall through */
702 1.1 christos case 234 : /* fall through */
703 1.1 christos case 235 : /* fall through */
704 1.1 christos case 236 : /* fall through */
705 1.1 christos case 237 : /* fall through */
706 1.1 christos case 238 : /* fall through */
707 1.1 christos case 239 : itype = M32R2F_INSN_LD24; goto extract_sfmt_ld24;
708 1.1 christos case 240 : /* fall through */
709 1.1 christos case 241 : /* fall through */
710 1.1 christos case 242 : /* fall through */
711 1.1 christos case 243 : /* fall through */
712 1.1 christos case 244 : /* fall through */
713 1.1 christos case 245 : /* fall through */
714 1.1 christos case 246 : /* fall through */
715 1.1 christos case 247 : /* fall through */
716 1.1 christos case 248 : /* fall through */
717 1.1 christos case 249 : /* fall through */
718 1.1 christos case 250 : /* fall through */
719 1.1 christos case 251 : /* fall through */
720 1.1 christos case 252 : /* fall through */
721 1.1 christos case 253 : /* fall through */
722 1.1 christos case 254 : /* fall through */
723 1.1 christos case 255 :
724 1.1 christos {
725 1.1 christos unsigned int val = (((insn >> 8) & (7 << 0)));
726 1.1 christos switch (val)
727 1.1 christos {
728 1.1 christos case 0 :
729 1.1 christos if ((entire_insn & 0xff000000) == 0xf8000000)
730 1.1 christos { itype = M32R2F_INSN_BCL24; goto extract_sfmt_bcl24; }
731 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
732 1.1 christos case 1 :
733 1.1 christos if ((entire_insn & 0xff000000) == 0xf9000000)
734 1.1 christos { itype = M32R2F_INSN_BNCL24; goto extract_sfmt_bcl24; }
735 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
736 1.1 christos case 4 :
737 1.1 christos if ((entire_insn & 0xff000000) == 0xfc000000)
738 1.1 christos { itype = M32R2F_INSN_BC24; goto extract_sfmt_bc24; }
739 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
740 1.1 christos case 5 :
741 1.1 christos if ((entire_insn & 0xff000000) == 0xfd000000)
742 1.1 christos { itype = M32R2F_INSN_BNC24; goto extract_sfmt_bc24; }
743 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
744 1.1 christos case 6 :
745 1.1 christos if ((entire_insn & 0xff000000) == 0xfe000000)
746 1.1 christos { itype = M32R2F_INSN_BL24; goto extract_sfmt_bl24; }
747 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
748 1.1 christos case 7 :
749 1.1 christos if ((entire_insn & 0xff000000) == 0xff000000)
750 1.1 christos { itype = M32R2F_INSN_BRA24; goto extract_sfmt_bra24; }
751 1.1 christos itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
752 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
753 1.1 christos }
754 1.1 christos }
755 1.1 christos default : itype = M32R2F_INSN_X_INVALID; goto extract_sfmt_empty;
756 1.1 christos }
757 1.1 christos }
758 1.1 christos }
759 1.1 christos
760 1.1 christos /* The instruction has been decoded, now extract the fields. */
761 1.1 christos
762 1.1 christos extract_sfmt_empty:
763 1.1 christos {
764 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
765 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
766 1.1 christos
767 1.1 christos
768 1.1 christos /* Record the fields for the semantic handler. */
769 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0));
770 1.1 christos
771 1.1 christos #undef FLD
772 1.1 christos return idesc;
773 1.1 christos }
774 1.1 christos
775 1.1 christos extract_sfmt_add:
776 1.1 christos {
777 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
778 1.1 christos CGEN_INSN_WORD insn = entire_insn;
779 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
780 1.1 christos UINT f_r1;
781 1.1 christos UINT f_r2;
782 1.1 christos
783 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
784 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
785 1.1 christos
786 1.1 christos /* Record the fields for the semantic handler. */
787 1.1 christos FLD (f_r1) = f_r1;
788 1.1 christos FLD (f_r2) = f_r2;
789 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
790 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
791 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
792 1.1 christos
793 1.1 christos #if WITH_PROFILE_MODEL_P
794 1.1 christos /* Record the fields for profiling. */
795 1.1 christos if (PROFILE_MODEL_P (current_cpu))
796 1.1 christos {
797 1.1 christos FLD (in_dr) = f_r1;
798 1.1 christos FLD (in_sr) = f_r2;
799 1.1 christos FLD (out_dr) = f_r1;
800 1.1 christos }
801 1.1 christos #endif
802 1.1 christos #undef FLD
803 1.1 christos return idesc;
804 1.1 christos }
805 1.1 christos
806 1.1 christos extract_sfmt_add3:
807 1.1 christos {
808 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
809 1.1 christos CGEN_INSN_WORD insn = entire_insn;
810 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
811 1.1 christos UINT f_r1;
812 1.1 christos UINT f_r2;
813 1.1 christos INT f_simm16;
814 1.1 christos
815 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
816 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
817 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
818 1.1 christos
819 1.1 christos /* Record the fields for the semantic handler. */
820 1.1 christos FLD (f_simm16) = f_simm16;
821 1.1 christos FLD (f_r2) = f_r2;
822 1.1 christos FLD (f_r1) = f_r1;
823 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
824 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
825 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
826 1.1 christos
827 1.1 christos #if WITH_PROFILE_MODEL_P
828 1.1 christos /* Record the fields for profiling. */
829 1.1 christos if (PROFILE_MODEL_P (current_cpu))
830 1.1 christos {
831 1.1 christos FLD (in_sr) = f_r2;
832 1.1 christos FLD (out_dr) = f_r1;
833 1.1 christos }
834 1.1 christos #endif
835 1.1 christos #undef FLD
836 1.1 christos return idesc;
837 1.1 christos }
838 1.1 christos
839 1.1 christos extract_sfmt_and3:
840 1.1 christos {
841 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
842 1.1 christos CGEN_INSN_WORD insn = entire_insn;
843 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f
844 1.1 christos UINT f_r1;
845 1.1 christos UINT f_r2;
846 1.1 christos UINT f_uimm16;
847 1.1 christos
848 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
849 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
850 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
851 1.1 christos
852 1.1 christos /* Record the fields for the semantic handler. */
853 1.1 christos FLD (f_r2) = f_r2;
854 1.1 christos FLD (f_uimm16) = f_uimm16;
855 1.1 christos FLD (f_r1) = f_r1;
856 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
857 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
858 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and3", "f_r2 0x%x", 'x', f_r2, "f_uimm16 0x%x", 'x', f_uimm16, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
859 1.1 christos
860 1.1 christos #if WITH_PROFILE_MODEL_P
861 1.1 christos /* Record the fields for profiling. */
862 1.1 christos if (PROFILE_MODEL_P (current_cpu))
863 1.1 christos {
864 1.1 christos FLD (in_sr) = f_r2;
865 1.1 christos FLD (out_dr) = f_r1;
866 1.1 christos }
867 1.1 christos #endif
868 1.1 christos #undef FLD
869 1.1 christos return idesc;
870 1.1 christos }
871 1.1 christos
872 1.1 christos extract_sfmt_or3:
873 1.1 christos {
874 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
875 1.1 christos CGEN_INSN_WORD insn = entire_insn;
876 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f
877 1.1 christos UINT f_r1;
878 1.1 christos UINT f_r2;
879 1.1 christos UINT f_uimm16;
880 1.1 christos
881 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
882 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
883 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
884 1.1 christos
885 1.1 christos /* Record the fields for the semantic handler. */
886 1.1 christos FLD (f_r2) = f_r2;
887 1.1 christos FLD (f_uimm16) = f_uimm16;
888 1.1 christos FLD (f_r1) = f_r1;
889 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
890 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
891 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_or3", "f_r2 0x%x", 'x', f_r2, "f_uimm16 0x%x", 'x', f_uimm16, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
892 1.1 christos
893 1.1 christos #if WITH_PROFILE_MODEL_P
894 1.1 christos /* Record the fields for profiling. */
895 1.1 christos if (PROFILE_MODEL_P (current_cpu))
896 1.1 christos {
897 1.1 christos FLD (in_sr) = f_r2;
898 1.1 christos FLD (out_dr) = f_r1;
899 1.1 christos }
900 1.1 christos #endif
901 1.1 christos #undef FLD
902 1.1 christos return idesc;
903 1.1 christos }
904 1.1 christos
905 1.1 christos extract_sfmt_addi:
906 1.1 christos {
907 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
908 1.1 christos CGEN_INSN_WORD insn = entire_insn;
909 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f
910 1.1 christos UINT f_r1;
911 1.1 christos INT f_simm8;
912 1.1 christos
913 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
914 1.1 christos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8);
915 1.1 christos
916 1.1 christos /* Record the fields for the semantic handler. */
917 1.1 christos FLD (f_r1) = f_r1;
918 1.1 christos FLD (f_simm8) = f_simm8;
919 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
920 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi", "f_r1 0x%x", 'x', f_r1, "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
921 1.1 christos
922 1.1 christos #if WITH_PROFILE_MODEL_P
923 1.1 christos /* Record the fields for profiling. */
924 1.1 christos if (PROFILE_MODEL_P (current_cpu))
925 1.1 christos {
926 1.1 christos FLD (in_dr) = f_r1;
927 1.1 christos FLD (out_dr) = f_r1;
928 1.1 christos }
929 1.1 christos #endif
930 1.1 christos #undef FLD
931 1.1 christos return idesc;
932 1.1 christos }
933 1.1 christos
934 1.1 christos extract_sfmt_addv:
935 1.1 christos {
936 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
937 1.1 christos CGEN_INSN_WORD insn = entire_insn;
938 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
939 1.1 christos UINT f_r1;
940 1.1 christos UINT f_r2;
941 1.1 christos
942 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
943 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
944 1.1 christos
945 1.1 christos /* Record the fields for the semantic handler. */
946 1.1 christos FLD (f_r1) = f_r1;
947 1.1 christos FLD (f_r2) = f_r2;
948 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
949 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
950 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
951 1.1 christos
952 1.1 christos #if WITH_PROFILE_MODEL_P
953 1.1 christos /* Record the fields for profiling. */
954 1.1 christos if (PROFILE_MODEL_P (current_cpu))
955 1.1 christos {
956 1.1 christos FLD (in_dr) = f_r1;
957 1.1 christos FLD (in_sr) = f_r2;
958 1.1 christos FLD (out_dr) = f_r1;
959 1.1 christos }
960 1.1 christos #endif
961 1.1 christos #undef FLD
962 1.1 christos return idesc;
963 1.1 christos }
964 1.1 christos
965 1.1 christos extract_sfmt_addv3:
966 1.1 christos {
967 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
968 1.1 christos CGEN_INSN_WORD insn = entire_insn;
969 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
970 1.1 christos UINT f_r1;
971 1.1 christos UINT f_r2;
972 1.1 christos INT f_simm16;
973 1.1 christos
974 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
975 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
976 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
977 1.1 christos
978 1.1 christos /* Record the fields for the semantic handler. */
979 1.1 christos FLD (f_simm16) = f_simm16;
980 1.1 christos FLD (f_r2) = f_r2;
981 1.1 christos FLD (f_r1) = f_r1;
982 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
983 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
984 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
985 1.1 christos
986 1.1 christos #if WITH_PROFILE_MODEL_P
987 1.1 christos /* Record the fields for profiling. */
988 1.1 christos if (PROFILE_MODEL_P (current_cpu))
989 1.1 christos {
990 1.1 christos FLD (in_sr) = f_r2;
991 1.1 christos FLD (out_dr) = f_r1;
992 1.1 christos }
993 1.1 christos #endif
994 1.1 christos #undef FLD
995 1.1 christos return idesc;
996 1.1 christos }
997 1.1 christos
998 1.1 christos extract_sfmt_addx:
999 1.1 christos {
1000 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1001 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1002 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
1003 1.1 christos UINT f_r1;
1004 1.1 christos UINT f_r2;
1005 1.1 christos
1006 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1007 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1008 1.1 christos
1009 1.1 christos /* Record the fields for the semantic handler. */
1010 1.1 christos FLD (f_r1) = f_r1;
1011 1.1 christos FLD (f_r2) = f_r2;
1012 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1013 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1014 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addx", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1015 1.1 christos
1016 1.1 christos #if WITH_PROFILE_MODEL_P
1017 1.1 christos /* Record the fields for profiling. */
1018 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1019 1.1 christos {
1020 1.1 christos FLD (in_dr) = f_r1;
1021 1.1 christos FLD (in_sr) = f_r2;
1022 1.1 christos FLD (out_dr) = f_r1;
1023 1.1 christos }
1024 1.1 christos #endif
1025 1.1 christos #undef FLD
1026 1.1 christos return idesc;
1027 1.1 christos }
1028 1.1 christos
1029 1.1 christos extract_sfmt_bc8:
1030 1.1 christos {
1031 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1032 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1033 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
1034 1.1 christos SI f_disp8;
1035 1.1 christos
1036 1.1 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
1037 1.1 christos
1038 1.1 christos /* Record the fields for the semantic handler. */
1039 1.1 christos FLD (i_disp8) = f_disp8;
1040 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1041 1.1 christos
1042 1.1 christos #if WITH_PROFILE_MODEL_P
1043 1.1 christos /* Record the fields for profiling. */
1044 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1045 1.1 christos {
1046 1.1 christos }
1047 1.1 christos #endif
1048 1.1 christos #undef FLD
1049 1.1 christos return idesc;
1050 1.1 christos }
1051 1.1 christos
1052 1.1 christos extract_sfmt_bc24:
1053 1.1 christos {
1054 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1055 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1056 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
1057 1.1 christos SI f_disp24;
1058 1.1 christos
1059 1.1 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
1060 1.1 christos
1061 1.1 christos /* Record the fields for the semantic handler. */
1062 1.1 christos FLD (i_disp24) = f_disp24;
1063 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1064 1.1 christos
1065 1.1 christos #if WITH_PROFILE_MODEL_P
1066 1.1 christos /* Record the fields for profiling. */
1067 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1068 1.1 christos {
1069 1.1 christos }
1070 1.1 christos #endif
1071 1.1 christos #undef FLD
1072 1.1 christos return idesc;
1073 1.1 christos }
1074 1.1 christos
1075 1.1 christos extract_sfmt_beq:
1076 1.1 christos {
1077 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1078 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1079 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
1080 1.1 christos UINT f_r1;
1081 1.1 christos UINT f_r2;
1082 1.1 christos SI f_disp16;
1083 1.1 christos
1084 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1085 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1086 1.1 christos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) << (2))) + (pc));
1087 1.1 christos
1088 1.1 christos /* Record the fields for the semantic handler. */
1089 1.1 christos FLD (f_r1) = f_r1;
1090 1.1 christos FLD (f_r2) = f_r2;
1091 1.1 christos FLD (i_disp16) = f_disp16;
1092 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1093 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1094 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beq", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1095 1.1 christos
1096 1.1 christos #if WITH_PROFILE_MODEL_P
1097 1.1 christos /* Record the fields for profiling. */
1098 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1099 1.1 christos {
1100 1.1 christos FLD (in_src1) = f_r1;
1101 1.1 christos FLD (in_src2) = f_r2;
1102 1.1 christos }
1103 1.1 christos #endif
1104 1.1 christos #undef FLD
1105 1.1 christos return idesc;
1106 1.1 christos }
1107 1.1 christos
1108 1.1 christos extract_sfmt_beqz:
1109 1.1 christos {
1110 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1111 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1112 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
1113 1.1 christos UINT f_r2;
1114 1.1 christos SI f_disp16;
1115 1.1 christos
1116 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1117 1.1 christos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) << (2))) + (pc));
1118 1.1 christos
1119 1.1 christos /* Record the fields for the semantic handler. */
1120 1.1 christos FLD (f_r2) = f_r2;
1121 1.1 christos FLD (i_disp16) = f_disp16;
1122 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1123 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beqz", "f_r2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, "src2 0x%x", 'x', f_r2, (char *) 0));
1124 1.1 christos
1125 1.1 christos #if WITH_PROFILE_MODEL_P
1126 1.1 christos /* Record the fields for profiling. */
1127 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1128 1.1 christos {
1129 1.1 christos FLD (in_src2) = f_r2;
1130 1.1 christos }
1131 1.1 christos #endif
1132 1.1 christos #undef FLD
1133 1.1 christos return idesc;
1134 1.1 christos }
1135 1.1 christos
1136 1.1 christos extract_sfmt_bl8:
1137 1.1 christos {
1138 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1139 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1140 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
1141 1.1 christos SI f_disp8;
1142 1.1 christos
1143 1.1 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
1144 1.1 christos
1145 1.1 christos /* Record the fields for the semantic handler. */
1146 1.1 christos FLD (i_disp8) = f_disp8;
1147 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1148 1.1 christos
1149 1.1 christos #if WITH_PROFILE_MODEL_P
1150 1.1 christos /* Record the fields for profiling. */
1151 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1152 1.1 christos {
1153 1.1 christos FLD (out_h_gr_SI_14) = 14;
1154 1.1 christos }
1155 1.1 christos #endif
1156 1.1 christos #undef FLD
1157 1.1 christos return idesc;
1158 1.1 christos }
1159 1.1 christos
1160 1.1 christos extract_sfmt_bl24:
1161 1.1 christos {
1162 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1163 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1164 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
1165 1.1 christos SI f_disp24;
1166 1.1 christos
1167 1.1 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
1168 1.1 christos
1169 1.1 christos /* Record the fields for the semantic handler. */
1170 1.1 christos FLD (i_disp24) = f_disp24;
1171 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1172 1.1 christos
1173 1.1 christos #if WITH_PROFILE_MODEL_P
1174 1.1 christos /* Record the fields for profiling. */
1175 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1176 1.1 christos {
1177 1.1 christos FLD (out_h_gr_SI_14) = 14;
1178 1.1 christos }
1179 1.1 christos #endif
1180 1.1 christos #undef FLD
1181 1.1 christos return idesc;
1182 1.1 christos }
1183 1.1 christos
1184 1.1 christos extract_sfmt_bcl8:
1185 1.1 christos {
1186 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1187 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1188 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
1189 1.1 christos SI f_disp8;
1190 1.1 christos
1191 1.1 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
1192 1.1 christos
1193 1.1 christos /* Record the fields for the semantic handler. */
1194 1.1 christos FLD (i_disp8) = f_disp8;
1195 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1196 1.1 christos
1197 1.1 christos #if WITH_PROFILE_MODEL_P
1198 1.1 christos /* Record the fields for profiling. */
1199 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1200 1.1 christos {
1201 1.1 christos FLD (out_h_gr_SI_14) = 14;
1202 1.1 christos }
1203 1.1 christos #endif
1204 1.1 christos #undef FLD
1205 1.1 christos return idesc;
1206 1.1 christos }
1207 1.1 christos
1208 1.1 christos extract_sfmt_bcl24:
1209 1.1 christos {
1210 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1211 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1212 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
1213 1.1 christos SI f_disp24;
1214 1.1 christos
1215 1.1 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
1216 1.1 christos
1217 1.1 christos /* Record the fields for the semantic handler. */
1218 1.1 christos FLD (i_disp24) = f_disp24;
1219 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1220 1.1 christos
1221 1.1 christos #if WITH_PROFILE_MODEL_P
1222 1.1 christos /* Record the fields for profiling. */
1223 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1224 1.1 christos {
1225 1.1 christos FLD (out_h_gr_SI_14) = 14;
1226 1.1 christos }
1227 1.1 christos #endif
1228 1.1 christos #undef FLD
1229 1.1 christos return idesc;
1230 1.1 christos }
1231 1.1 christos
1232 1.1 christos extract_sfmt_bra8:
1233 1.1 christos {
1234 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1235 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1236 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
1237 1.1 christos SI f_disp8;
1238 1.1 christos
1239 1.1 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
1240 1.1 christos
1241 1.1 christos /* Record the fields for the semantic handler. */
1242 1.1 christos FLD (i_disp8) = f_disp8;
1243 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1244 1.1 christos
1245 1.1 christos #if WITH_PROFILE_MODEL_P
1246 1.1 christos /* Record the fields for profiling. */
1247 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1248 1.1 christos {
1249 1.1 christos }
1250 1.1 christos #endif
1251 1.1 christos #undef FLD
1252 1.1 christos return idesc;
1253 1.1 christos }
1254 1.1 christos
1255 1.1 christos extract_sfmt_bra24:
1256 1.1 christos {
1257 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1258 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1259 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
1260 1.1 christos SI f_disp24;
1261 1.1 christos
1262 1.1 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
1263 1.1 christos
1264 1.1 christos /* Record the fields for the semantic handler. */
1265 1.1 christos FLD (i_disp24) = f_disp24;
1266 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1267 1.1 christos
1268 1.1 christos #if WITH_PROFILE_MODEL_P
1269 1.1 christos /* Record the fields for profiling. */
1270 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1271 1.1 christos {
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_cmp:
1279 1.1 christos {
1280 1.1 christos const IDESC *idesc = &m32r2f_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_r1;
1284 1.1 christos UINT f_r2;
1285 1.1 christos
1286 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1287 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1288 1.1 christos
1289 1.1 christos /* Record the fields for the semantic handler. */
1290 1.1 christos FLD (f_r1) = f_r1;
1291 1.1 christos FLD (f_r2) = f_r2;
1292 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1293 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1294 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1295 1.1 christos
1296 1.1 christos #if WITH_PROFILE_MODEL_P
1297 1.1 christos /* Record the fields for profiling. */
1298 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1299 1.1 christos {
1300 1.1 christos FLD (in_src1) = f_r1;
1301 1.1 christos FLD (in_src2) = f_r2;
1302 1.1 christos }
1303 1.1 christos #endif
1304 1.1 christos #undef FLD
1305 1.1 christos return idesc;
1306 1.1 christos }
1307 1.1 christos
1308 1.1 christos extract_sfmt_cmpi:
1309 1.1 christos {
1310 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1311 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1312 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
1313 1.1 christos UINT f_r2;
1314 1.1 christos INT f_simm16;
1315 1.1 christos
1316 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1317 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1318 1.1 christos
1319 1.1 christos /* Record the fields for the semantic handler. */
1320 1.1 christos FLD (f_simm16) = f_simm16;
1321 1.1 christos FLD (f_r2) = f_r2;
1322 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1323 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpi", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "src2 0x%x", 'x', f_r2, (char *) 0));
1324 1.1 christos
1325 1.1 christos #if WITH_PROFILE_MODEL_P
1326 1.1 christos /* Record the fields for profiling. */
1327 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1328 1.1 christos {
1329 1.1 christos FLD (in_src2) = f_r2;
1330 1.1 christos }
1331 1.1 christos #endif
1332 1.1 christos #undef FLD
1333 1.1 christos return idesc;
1334 1.1 christos }
1335 1.1 christos
1336 1.1 christos extract_sfmt_cmpz:
1337 1.1 christos {
1338 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1339 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1340 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
1341 1.1 christos UINT f_r2;
1342 1.1 christos
1343 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1344 1.1 christos
1345 1.1 christos /* Record the fields for the semantic handler. */
1346 1.1 christos FLD (f_r2) = f_r2;
1347 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1348 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpz", "f_r2 0x%x", 'x', f_r2, "src2 0x%x", 'x', f_r2, (char *) 0));
1349 1.1 christos
1350 1.1 christos #if WITH_PROFILE_MODEL_P
1351 1.1 christos /* Record the fields for profiling. */
1352 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1353 1.1 christos {
1354 1.1 christos FLD (in_src2) = f_r2;
1355 1.1 christos }
1356 1.1 christos #endif
1357 1.1 christos #undef FLD
1358 1.1 christos return idesc;
1359 1.1 christos }
1360 1.1 christos
1361 1.1 christos extract_sfmt_div:
1362 1.1 christos {
1363 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1364 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1365 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
1366 1.1 christos UINT f_r1;
1367 1.1 christos UINT f_r2;
1368 1.1 christos
1369 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1370 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1371 1.1 christos
1372 1.1 christos /* Record the fields for the semantic handler. */
1373 1.1 christos FLD (f_r1) = f_r1;
1374 1.1 christos FLD (f_r2) = f_r2;
1375 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1376 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1377 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_div", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1378 1.1 christos
1379 1.1 christos #if WITH_PROFILE_MODEL_P
1380 1.1 christos /* Record the fields for profiling. */
1381 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1382 1.1 christos {
1383 1.1 christos FLD (in_dr) = f_r1;
1384 1.1 christos FLD (in_sr) = f_r2;
1385 1.1 christos FLD (out_dr) = f_r1;
1386 1.1 christos }
1387 1.1 christos #endif
1388 1.1 christos #undef FLD
1389 1.1 christos return idesc;
1390 1.1 christos }
1391 1.1 christos
1392 1.1 christos extract_sfmt_jc:
1393 1.1 christos {
1394 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1395 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1396 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1397 1.1 christos UINT f_r2;
1398 1.1 christos
1399 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1400 1.1 christos
1401 1.1 christos /* Record the fields for the semantic handler. */
1402 1.1 christos FLD (f_r2) = f_r2;
1403 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1404 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jc", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0));
1405 1.1 christos
1406 1.1 christos #if WITH_PROFILE_MODEL_P
1407 1.1 christos /* Record the fields for profiling. */
1408 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1409 1.1 christos {
1410 1.1 christos FLD (in_sr) = f_r2;
1411 1.1 christos }
1412 1.1 christos #endif
1413 1.1 christos #undef FLD
1414 1.1 christos return idesc;
1415 1.1 christos }
1416 1.1 christos
1417 1.1 christos extract_sfmt_jl:
1418 1.1 christos {
1419 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1420 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1421 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1422 1.1 christos UINT f_r2;
1423 1.1 christos
1424 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1425 1.1 christos
1426 1.1 christos /* Record the fields for the semantic handler. */
1427 1.1 christos FLD (f_r2) = f_r2;
1428 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1429 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jl", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0));
1430 1.1 christos
1431 1.1 christos #if WITH_PROFILE_MODEL_P
1432 1.1 christos /* Record the fields for profiling. */
1433 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1434 1.1 christos {
1435 1.1 christos FLD (in_sr) = f_r2;
1436 1.1 christos FLD (out_h_gr_SI_14) = 14;
1437 1.1 christos }
1438 1.1 christos #endif
1439 1.1 christos #undef FLD
1440 1.1 christos return idesc;
1441 1.1 christos }
1442 1.1 christos
1443 1.1 christos extract_sfmt_jmp:
1444 1.1 christos {
1445 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1446 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1447 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1448 1.1 christos UINT f_r2;
1449 1.1 christos
1450 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1451 1.1 christos
1452 1.1 christos /* Record the fields for the semantic handler. */
1453 1.1 christos FLD (f_r2) = f_r2;
1454 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1455 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jmp", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0));
1456 1.1 christos
1457 1.1 christos #if WITH_PROFILE_MODEL_P
1458 1.1 christos /* Record the fields for profiling. */
1459 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1460 1.1 christos {
1461 1.1 christos FLD (in_sr) = f_r2;
1462 1.1 christos }
1463 1.1 christos #endif
1464 1.1 christos #undef FLD
1465 1.1 christos return idesc;
1466 1.1 christos }
1467 1.1 christos
1468 1.1 christos extract_sfmt_ld:
1469 1.1 christos {
1470 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1471 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1472 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1473 1.1 christos UINT f_r1;
1474 1.1 christos UINT f_r2;
1475 1.1 christos
1476 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1477 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1478 1.1 christos
1479 1.1 christos /* Record the fields for the semantic handler. */
1480 1.1 christos FLD (f_r2) = f_r2;
1481 1.1 christos FLD (f_r1) = f_r1;
1482 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1483 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1484 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1485 1.1 christos
1486 1.1 christos #if WITH_PROFILE_MODEL_P
1487 1.1 christos /* Record the fields for profiling. */
1488 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1489 1.1 christos {
1490 1.1 christos FLD (in_sr) = f_r2;
1491 1.1 christos FLD (out_dr) = f_r1;
1492 1.1 christos }
1493 1.1 christos #endif
1494 1.1 christos #undef FLD
1495 1.1 christos return idesc;
1496 1.1 christos }
1497 1.1 christos
1498 1.1 christos extract_sfmt_ld_d:
1499 1.1 christos {
1500 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1501 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1502 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1503 1.1 christos UINT f_r1;
1504 1.1 christos UINT f_r2;
1505 1.1 christos INT f_simm16;
1506 1.1 christos
1507 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1508 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1509 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1510 1.1 christos
1511 1.1 christos /* Record the fields for the semantic handler. */
1512 1.1 christos FLD (f_simm16) = f_simm16;
1513 1.1 christos FLD (f_r2) = f_r2;
1514 1.1 christos FLD (f_r1) = f_r1;
1515 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1516 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1517 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1518 1.1 christos
1519 1.1 christos #if WITH_PROFILE_MODEL_P
1520 1.1 christos /* Record the fields for profiling. */
1521 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1522 1.1 christos {
1523 1.1 christos FLD (in_sr) = f_r2;
1524 1.1 christos FLD (out_dr) = f_r1;
1525 1.1 christos }
1526 1.1 christos #endif
1527 1.1 christos #undef FLD
1528 1.1 christos return idesc;
1529 1.1 christos }
1530 1.1 christos
1531 1.1 christos extract_sfmt_ldb:
1532 1.1 christos {
1533 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1534 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1535 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1536 1.1 christos UINT f_r1;
1537 1.1 christos UINT f_r2;
1538 1.1 christos
1539 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1540 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1541 1.1 christos
1542 1.1 christos /* Record the fields for the semantic handler. */
1543 1.1 christos FLD (f_r2) = f_r2;
1544 1.1 christos FLD (f_r1) = f_r1;
1545 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1546 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1547 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1548 1.1 christos
1549 1.1 christos #if WITH_PROFILE_MODEL_P
1550 1.1 christos /* Record the fields for profiling. */
1551 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1552 1.1 christos {
1553 1.1 christos FLD (in_sr) = f_r2;
1554 1.1 christos FLD (out_dr) = f_r1;
1555 1.1 christos }
1556 1.1 christos #endif
1557 1.1 christos #undef FLD
1558 1.1 christos return idesc;
1559 1.1 christos }
1560 1.1 christos
1561 1.1 christos extract_sfmt_ldb_d:
1562 1.1 christos {
1563 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1564 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1565 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1566 1.1 christos UINT f_r1;
1567 1.1 christos UINT f_r2;
1568 1.1 christos INT f_simm16;
1569 1.1 christos
1570 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1571 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1572 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1573 1.1 christos
1574 1.1 christos /* Record the fields for the semantic handler. */
1575 1.1 christos FLD (f_simm16) = f_simm16;
1576 1.1 christos FLD (f_r2) = f_r2;
1577 1.1 christos FLD (f_r1) = f_r1;
1578 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1579 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1580 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1581 1.1 christos
1582 1.1 christos #if WITH_PROFILE_MODEL_P
1583 1.1 christos /* Record the fields for profiling. */
1584 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1585 1.1 christos {
1586 1.1 christos FLD (in_sr) = f_r2;
1587 1.1 christos FLD (out_dr) = f_r1;
1588 1.1 christos }
1589 1.1 christos #endif
1590 1.1 christos #undef FLD
1591 1.1 christos return idesc;
1592 1.1 christos }
1593 1.1 christos
1594 1.1 christos extract_sfmt_ldh:
1595 1.1 christos {
1596 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1597 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1598 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1599 1.1 christos UINT f_r1;
1600 1.1 christos UINT f_r2;
1601 1.1 christos
1602 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1603 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1604 1.1 christos
1605 1.1 christos /* Record the fields for the semantic handler. */
1606 1.1 christos FLD (f_r2) = f_r2;
1607 1.1 christos FLD (f_r1) = f_r1;
1608 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1609 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1610 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1611 1.1 christos
1612 1.1 christos #if WITH_PROFILE_MODEL_P
1613 1.1 christos /* Record the fields for profiling. */
1614 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1615 1.1 christos {
1616 1.1 christos FLD (in_sr) = f_r2;
1617 1.1 christos FLD (out_dr) = f_r1;
1618 1.1 christos }
1619 1.1 christos #endif
1620 1.1 christos #undef FLD
1621 1.1 christos return idesc;
1622 1.1 christos }
1623 1.1 christos
1624 1.1 christos extract_sfmt_ldh_d:
1625 1.1 christos {
1626 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1627 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1628 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1629 1.1 christos UINT f_r1;
1630 1.1 christos UINT f_r2;
1631 1.1 christos INT f_simm16;
1632 1.1 christos
1633 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1634 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1635 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1636 1.1 christos
1637 1.1 christos /* Record the fields for the semantic handler. */
1638 1.1 christos FLD (f_simm16) = f_simm16;
1639 1.1 christos FLD (f_r2) = f_r2;
1640 1.1 christos FLD (f_r1) = f_r1;
1641 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1642 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1643 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1644 1.1 christos
1645 1.1 christos #if WITH_PROFILE_MODEL_P
1646 1.1 christos /* Record the fields for profiling. */
1647 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1648 1.1 christos {
1649 1.1 christos FLD (in_sr) = f_r2;
1650 1.1 christos FLD (out_dr) = f_r1;
1651 1.1 christos }
1652 1.1 christos #endif
1653 1.1 christos #undef FLD
1654 1.1 christos return idesc;
1655 1.1 christos }
1656 1.1 christos
1657 1.1 christos extract_sfmt_ld_plus:
1658 1.1 christos {
1659 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1660 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1661 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1662 1.1 christos UINT f_r1;
1663 1.1 christos UINT f_r2;
1664 1.1 christos
1665 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1666 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1667 1.1 christos
1668 1.1 christos /* Record the fields for the semantic handler. */
1669 1.1 christos FLD (f_r2) = f_r2;
1670 1.1 christos FLD (f_r1) = f_r1;
1671 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1672 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1673 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_plus", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
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 (in_sr) = f_r2;
1680 1.1 christos FLD (out_dr) = f_r1;
1681 1.1 christos FLD (out_sr) = f_r2;
1682 1.1 christos }
1683 1.1 christos #endif
1684 1.1 christos #undef FLD
1685 1.1 christos return idesc;
1686 1.1 christos }
1687 1.1 christos
1688 1.1 christos extract_sfmt_ld24:
1689 1.1 christos {
1690 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1691 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1692 1.1 christos #define FLD(f) abuf->fields.sfmt_ld24.f
1693 1.1 christos UINT f_r1;
1694 1.1 christos UINT f_uimm24;
1695 1.1 christos
1696 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1697 1.1 christos f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24);
1698 1.1 christos
1699 1.1 christos /* Record the fields for the semantic handler. */
1700 1.1 christos FLD (f_r1) = f_r1;
1701 1.1 christos FLD (i_uimm24) = f_uimm24;
1702 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1703 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld24", "f_r1 0x%x", 'x', f_r1, "uimm24 0x%x", 'x', f_uimm24, "dr 0x%x", 'x', f_r1, (char *) 0));
1704 1.1 christos
1705 1.1 christos #if WITH_PROFILE_MODEL_P
1706 1.1 christos /* Record the fields for profiling. */
1707 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1708 1.1 christos {
1709 1.1 christos FLD (out_dr) = f_r1;
1710 1.1 christos }
1711 1.1 christos #endif
1712 1.1 christos #undef FLD
1713 1.1 christos return idesc;
1714 1.1 christos }
1715 1.1 christos
1716 1.1 christos extract_sfmt_ldi8:
1717 1.1 christos {
1718 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1719 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1720 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f
1721 1.1 christos UINT f_r1;
1722 1.1 christos INT f_simm8;
1723 1.1 christos
1724 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1725 1.1 christos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8);
1726 1.1 christos
1727 1.1 christos /* Record the fields for the semantic handler. */
1728 1.1 christos FLD (f_simm8) = f_simm8;
1729 1.1 christos FLD (f_r1) = f_r1;
1730 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1731 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi8", "f_simm8 0x%x", 'x', f_simm8, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1732 1.1 christos
1733 1.1 christos #if WITH_PROFILE_MODEL_P
1734 1.1 christos /* Record the fields for profiling. */
1735 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1736 1.1 christos {
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_ldi16:
1745 1.1 christos {
1746 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1747 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1748 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1749 1.1 christos UINT f_r1;
1750 1.1 christos INT f_simm16;
1751 1.1 christos
1752 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1753 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1754 1.1 christos
1755 1.1 christos /* Record the fields for the semantic handler. */
1756 1.1 christos FLD (f_simm16) = f_simm16;
1757 1.1 christos FLD (f_r1) = f_r1;
1758 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1759 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi16", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1760 1.1 christos
1761 1.1 christos #if WITH_PROFILE_MODEL_P
1762 1.1 christos /* Record the fields for profiling. */
1763 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1764 1.1 christos {
1765 1.1 christos FLD (out_dr) = f_r1;
1766 1.1 christos }
1767 1.1 christos #endif
1768 1.1 christos #undef FLD
1769 1.1 christos return idesc;
1770 1.1 christos }
1771 1.1 christos
1772 1.1 christos extract_sfmt_lock:
1773 1.1 christos {
1774 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1775 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1776 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1777 1.1 christos UINT f_r1;
1778 1.1 christos UINT f_r2;
1779 1.1 christos
1780 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1781 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1782 1.1 christos
1783 1.1 christos /* Record the fields for the semantic handler. */
1784 1.1 christos FLD (f_r2) = f_r2;
1785 1.1 christos FLD (f_r1) = f_r1;
1786 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1787 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1788 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lock", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1789 1.1 christos
1790 1.1 christos #if WITH_PROFILE_MODEL_P
1791 1.1 christos /* Record the fields for profiling. */
1792 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1793 1.1 christos {
1794 1.1 christos FLD (in_sr) = f_r2;
1795 1.1 christos FLD (out_dr) = f_r1;
1796 1.1 christos }
1797 1.1 christos #endif
1798 1.1 christos #undef FLD
1799 1.1 christos return idesc;
1800 1.1 christos }
1801 1.1 christos
1802 1.1 christos extract_sfmt_machi_a:
1803 1.1 christos {
1804 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1805 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1806 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1807 1.1 christos UINT f_r1;
1808 1.1 christos UINT f_acc;
1809 1.1 christos UINT f_r2;
1810 1.1 christos
1811 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1812 1.1 christos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1);
1813 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1814 1.1 christos
1815 1.1 christos /* Record the fields for the semantic handler. */
1816 1.1 christos FLD (f_acc) = f_acc;
1817 1.1 christos FLD (f_r1) = f_r1;
1818 1.1 christos FLD (f_r2) = f_r2;
1819 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1820 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1821 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_machi_a", "f_acc 0x%x", 'x', f_acc, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1822 1.1 christos
1823 1.1 christos #if WITH_PROFILE_MODEL_P
1824 1.1 christos /* Record the fields for profiling. */
1825 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1826 1.1 christos {
1827 1.1 christos FLD (in_src1) = f_r1;
1828 1.1 christos FLD (in_src2) = f_r2;
1829 1.1 christos }
1830 1.1 christos #endif
1831 1.1 christos #undef FLD
1832 1.1 christos return idesc;
1833 1.1 christos }
1834 1.1 christos
1835 1.1 christos extract_sfmt_mulhi_a:
1836 1.1 christos {
1837 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1838 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1839 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1840 1.1 christos UINT f_r1;
1841 1.1 christos UINT f_acc;
1842 1.1 christos UINT f_r2;
1843 1.1 christos
1844 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1845 1.1 christos f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1);
1846 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1847 1.1 christos
1848 1.1 christos /* Record the fields for the semantic handler. */
1849 1.1 christos FLD (f_r1) = f_r1;
1850 1.1 christos FLD (f_r2) = f_r2;
1851 1.1 christos FLD (f_acc) = f_acc;
1852 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1853 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1854 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulhi_a", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "f_acc 0x%x", 'x', f_acc, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1855 1.1 christos
1856 1.1 christos #if WITH_PROFILE_MODEL_P
1857 1.1 christos /* Record the fields for profiling. */
1858 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1859 1.1 christos {
1860 1.1 christos FLD (in_src1) = f_r1;
1861 1.1 christos FLD (in_src2) = f_r2;
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_mv:
1869 1.1 christos {
1870 1.1 christos const IDESC *idesc = &m32r2f_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_sr) = & CPU (h_gr)[f_r2];
1883 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1884 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mv", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1885 1.1 christos
1886 1.1 christos #if WITH_PROFILE_MODEL_P
1887 1.1 christos /* Record the fields for profiling. */
1888 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1889 1.1 christos {
1890 1.1 christos FLD (in_sr) = f_r2;
1891 1.1 christos FLD (out_dr) = f_r1;
1892 1.1 christos }
1893 1.1 christos #endif
1894 1.1 christos #undef FLD
1895 1.1 christos return idesc;
1896 1.1 christos }
1897 1.1 christos
1898 1.1 christos extract_sfmt_mvfachi_a:
1899 1.1 christos {
1900 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1901 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1902 1.1 christos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
1903 1.1 christos UINT f_r1;
1904 1.1 christos UINT f_accs;
1905 1.1 christos
1906 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1907 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2);
1908 1.1 christos
1909 1.1 christos /* Record the fields for the semantic handler. */
1910 1.1 christos FLD (f_accs) = f_accs;
1911 1.1 christos FLD (f_r1) = f_r1;
1912 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1913 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfachi_a", "f_accs 0x%x", 'x', f_accs, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1914 1.1 christos
1915 1.1 christos #if WITH_PROFILE_MODEL_P
1916 1.1 christos /* Record the fields for profiling. */
1917 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1918 1.1 christos {
1919 1.1 christos FLD (out_dr) = f_r1;
1920 1.1 christos }
1921 1.1 christos #endif
1922 1.1 christos #undef FLD
1923 1.1 christos return idesc;
1924 1.1 christos }
1925 1.1 christos
1926 1.1 christos extract_sfmt_mvfc:
1927 1.1 christos {
1928 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1929 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1930 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1931 1.1 christos UINT f_r1;
1932 1.1 christos UINT f_r2;
1933 1.1 christos
1934 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1935 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1936 1.1 christos
1937 1.1 christos /* Record the fields for the semantic handler. */
1938 1.1 christos FLD (f_r2) = f_r2;
1939 1.1 christos FLD (f_r1) = f_r1;
1940 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1941 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfc", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1942 1.1 christos
1943 1.1 christos #if WITH_PROFILE_MODEL_P
1944 1.1 christos /* Record the fields for profiling. */
1945 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1946 1.1 christos {
1947 1.1 christos FLD (out_dr) = f_r1;
1948 1.1 christos }
1949 1.1 christos #endif
1950 1.1 christos #undef FLD
1951 1.1 christos return idesc;
1952 1.1 christos }
1953 1.1 christos
1954 1.1 christos extract_sfmt_mvtachi_a:
1955 1.1 christos {
1956 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1957 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1958 1.1 christos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
1959 1.1 christos UINT f_r1;
1960 1.1 christos UINT f_accs;
1961 1.1 christos
1962 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1963 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2);
1964 1.1 christos
1965 1.1 christos /* Record the fields for the semantic handler. */
1966 1.1 christos FLD (f_accs) = f_accs;
1967 1.1 christos FLD (f_r1) = f_r1;
1968 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1969 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtachi_a", "f_accs 0x%x", 'x', f_accs, "f_r1 0x%x", 'x', f_r1, "src1 0x%x", 'x', f_r1, (char *) 0));
1970 1.1 christos
1971 1.1 christos #if WITH_PROFILE_MODEL_P
1972 1.1 christos /* Record the fields for profiling. */
1973 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1974 1.1 christos {
1975 1.1 christos FLD (in_src1) = f_r1;
1976 1.1 christos }
1977 1.1 christos #endif
1978 1.1 christos #undef FLD
1979 1.1 christos return idesc;
1980 1.1 christos }
1981 1.1 christos
1982 1.1 christos extract_sfmt_mvtc:
1983 1.1 christos {
1984 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
1985 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1986 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1987 1.1 christos UINT f_r1;
1988 1.1 christos UINT f_r2;
1989 1.1 christos
1990 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1991 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1992 1.1 christos
1993 1.1 christos /* Record the fields for the semantic handler. */
1994 1.1 christos FLD (f_r2) = f_r2;
1995 1.1 christos FLD (f_r1) = f_r1;
1996 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1997 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtc", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1998 1.1 christos
1999 1.1 christos #if WITH_PROFILE_MODEL_P
2000 1.1 christos /* Record the fields for profiling. */
2001 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2002 1.1 christos {
2003 1.1 christos FLD (in_sr) = f_r2;
2004 1.1 christos }
2005 1.1 christos #endif
2006 1.1 christos #undef FLD
2007 1.1 christos return idesc;
2008 1.1 christos }
2009 1.1 christos
2010 1.1 christos extract_sfmt_nop:
2011 1.1 christos {
2012 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2013 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2014 1.1 christos
2015 1.1 christos
2016 1.1 christos /* Record the fields for the semantic handler. */
2017 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0));
2018 1.1 christos
2019 1.1 christos #undef FLD
2020 1.1 christos return idesc;
2021 1.1 christos }
2022 1.1 christos
2023 1.1 christos extract_sfmt_rac_dsi:
2024 1.1 christos {
2025 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2026 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2027 1.1 christos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
2028 1.1 christos UINT f_accd;
2029 1.1 christos UINT f_accs;
2030 1.1 christos SI f_imm1;
2031 1.1 christos
2032 1.1 christos f_accd = EXTRACT_MSB0_UINT (insn, 16, 4, 2);
2033 1.1 christos f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2);
2034 1.1 christos f_imm1 = ((EXTRACT_MSB0_UINT (insn, 16, 15, 1)) + (1));
2035 1.1 christos
2036 1.1 christos /* Record the fields for the semantic handler. */
2037 1.1 christos FLD (f_accs) = f_accs;
2038 1.1 christos FLD (f_imm1) = f_imm1;
2039 1.1 christos FLD (f_accd) = f_accd;
2040 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rac_dsi", "f_accs 0x%x", 'x', f_accs, "f_imm1 0x%x", 'x', f_imm1, "f_accd 0x%x", 'x', f_accd, (char *) 0));
2041 1.1 christos
2042 1.1 christos #undef FLD
2043 1.1 christos return idesc;
2044 1.1 christos }
2045 1.1 christos
2046 1.1 christos extract_sfmt_rte:
2047 1.1 christos {
2048 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2049 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2050 1.1 christos
2051 1.1 christos
2052 1.1 christos /* Record the fields for the semantic handler. */
2053 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0));
2054 1.1 christos
2055 1.1 christos #if WITH_PROFILE_MODEL_P
2056 1.1 christos /* Record the fields for profiling. */
2057 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2058 1.1 christos {
2059 1.1 christos }
2060 1.1 christos #endif
2061 1.1 christos #undef FLD
2062 1.1 christos return idesc;
2063 1.1 christos }
2064 1.1 christos
2065 1.1 christos extract_sfmt_seth:
2066 1.1 christos {
2067 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2068 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2069 1.1 christos #define FLD(f) abuf->fields.sfmt_seth.f
2070 1.1 christos UINT f_r1;
2071 1.1 christos UINT f_hi16;
2072 1.1 christos
2073 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2074 1.1 christos f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
2075 1.1 christos
2076 1.1 christos /* Record the fields for the semantic handler. */
2077 1.1 christos FLD (f_hi16) = f_hi16;
2078 1.1 christos FLD (f_r1) = f_r1;
2079 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
2080 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_seth", "f_hi16 0x%x", 'x', f_hi16, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
2081 1.1 christos
2082 1.1 christos #if WITH_PROFILE_MODEL_P
2083 1.1 christos /* Record the fields for profiling. */
2084 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2085 1.1 christos {
2086 1.1 christos FLD (out_dr) = f_r1;
2087 1.1 christos }
2088 1.1 christos #endif
2089 1.1 christos #undef FLD
2090 1.1 christos return idesc;
2091 1.1 christos }
2092 1.1 christos
2093 1.1 christos extract_sfmt_sll3:
2094 1.1 christos {
2095 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2096 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2097 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
2098 1.1 christos UINT f_r1;
2099 1.1 christos UINT f_r2;
2100 1.1 christos INT f_simm16;
2101 1.1 christos
2102 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2103 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2104 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2105 1.1 christos
2106 1.1 christos /* Record the fields for the semantic handler. */
2107 1.1 christos FLD (f_simm16) = f_simm16;
2108 1.1 christos FLD (f_r2) = f_r2;
2109 1.1 christos FLD (f_r1) = f_r1;
2110 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
2111 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
2112 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sll3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
2113 1.1 christos
2114 1.1 christos #if WITH_PROFILE_MODEL_P
2115 1.1 christos /* Record the fields for profiling. */
2116 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2117 1.1 christos {
2118 1.1 christos FLD (in_sr) = f_r2;
2119 1.1 christos FLD (out_dr) = f_r1;
2120 1.1 christos }
2121 1.1 christos #endif
2122 1.1 christos #undef FLD
2123 1.1 christos return idesc;
2124 1.1 christos }
2125 1.1 christos
2126 1.1 christos extract_sfmt_slli:
2127 1.1 christos {
2128 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2129 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2130 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f
2131 1.1 christos UINT f_r1;
2132 1.1 christos UINT f_uimm5;
2133 1.1 christos
2134 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2135 1.1 christos f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5);
2136 1.1 christos
2137 1.1 christos /* Record the fields for the semantic handler. */
2138 1.1 christos FLD (f_r1) = f_r1;
2139 1.1 christos FLD (f_uimm5) = f_uimm5;
2140 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
2141 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slli", "f_r1 0x%x", 'x', f_r1, "f_uimm5 0x%x", 'x', f_uimm5, "dr 0x%x", 'x', f_r1, (char *) 0));
2142 1.1 christos
2143 1.1 christos #if WITH_PROFILE_MODEL_P
2144 1.1 christos /* Record the fields for profiling. */
2145 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2146 1.1 christos {
2147 1.1 christos FLD (in_dr) = f_r1;
2148 1.1 christos FLD (out_dr) = f_r1;
2149 1.1 christos }
2150 1.1 christos #endif
2151 1.1 christos #undef FLD
2152 1.1 christos return idesc;
2153 1.1 christos }
2154 1.1 christos
2155 1.1 christos extract_sfmt_st:
2156 1.1 christos {
2157 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2158 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2159 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2160 1.1 christos UINT f_r1;
2161 1.1 christos UINT f_r2;
2162 1.1 christos
2163 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2164 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2165 1.1 christos
2166 1.1 christos /* Record the fields for the semantic handler. */
2167 1.1 christos FLD (f_r1) = f_r1;
2168 1.1 christos FLD (f_r2) = f_r2;
2169 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2170 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2171 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2172 1.1 christos
2173 1.1 christos #if WITH_PROFILE_MODEL_P
2174 1.1 christos /* Record the fields for profiling. */
2175 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2176 1.1 christos {
2177 1.1 christos FLD (in_src1) = f_r1;
2178 1.1 christos FLD (in_src2) = f_r2;
2179 1.1 christos }
2180 1.1 christos #endif
2181 1.1 christos #undef FLD
2182 1.1 christos return idesc;
2183 1.1 christos }
2184 1.1 christos
2185 1.1 christos extract_sfmt_st_d:
2186 1.1 christos {
2187 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2188 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2189 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
2190 1.1 christos UINT f_r1;
2191 1.1 christos UINT f_r2;
2192 1.1 christos INT f_simm16;
2193 1.1 christos
2194 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2195 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2196 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2197 1.1 christos
2198 1.1 christos /* Record the fields for the semantic handler. */
2199 1.1 christos FLD (f_simm16) = f_simm16;
2200 1.1 christos FLD (f_r1) = f_r1;
2201 1.1 christos FLD (f_r2) = f_r2;
2202 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2203 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2204 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2205 1.1 christos
2206 1.1 christos #if WITH_PROFILE_MODEL_P
2207 1.1 christos /* Record the fields for profiling. */
2208 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2209 1.1 christos {
2210 1.1 christos FLD (in_src1) = f_r1;
2211 1.1 christos FLD (in_src2) = f_r2;
2212 1.1 christos }
2213 1.1 christos #endif
2214 1.1 christos #undef FLD
2215 1.1 christos return idesc;
2216 1.1 christos }
2217 1.1 christos
2218 1.1 christos extract_sfmt_stb:
2219 1.1 christos {
2220 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2221 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2222 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2223 1.1 christos UINT f_r1;
2224 1.1 christos UINT f_r2;
2225 1.1 christos
2226 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2227 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2228 1.1 christos
2229 1.1 christos /* Record the fields for the semantic handler. */
2230 1.1 christos FLD (f_r1) = f_r1;
2231 1.1 christos FLD (f_r2) = f_r2;
2232 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2233 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2234 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2235 1.1 christos
2236 1.1 christos #if WITH_PROFILE_MODEL_P
2237 1.1 christos /* Record the fields for profiling. */
2238 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2239 1.1 christos {
2240 1.1 christos FLD (in_src1) = f_r1;
2241 1.1 christos FLD (in_src2) = f_r2;
2242 1.1 christos }
2243 1.1 christos #endif
2244 1.1 christos #undef FLD
2245 1.1 christos return idesc;
2246 1.1 christos }
2247 1.1 christos
2248 1.1 christos extract_sfmt_stb_d:
2249 1.1 christos {
2250 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2251 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2252 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
2253 1.1 christos UINT f_r1;
2254 1.1 christos UINT f_r2;
2255 1.1 christos INT f_simm16;
2256 1.1 christos
2257 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2258 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2259 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2260 1.1 christos
2261 1.1 christos /* Record the fields for the semantic handler. */
2262 1.1 christos FLD (f_simm16) = f_simm16;
2263 1.1 christos FLD (f_r1) = f_r1;
2264 1.1 christos FLD (f_r2) = f_r2;
2265 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2266 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2267 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2268 1.1 christos
2269 1.1 christos #if WITH_PROFILE_MODEL_P
2270 1.1 christos /* Record the fields for profiling. */
2271 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2272 1.1 christos {
2273 1.1 christos FLD (in_src1) = f_r1;
2274 1.1 christos FLD (in_src2) = f_r2;
2275 1.1 christos }
2276 1.1 christos #endif
2277 1.1 christos #undef FLD
2278 1.1 christos return idesc;
2279 1.1 christos }
2280 1.1 christos
2281 1.1 christos extract_sfmt_sth:
2282 1.1 christos {
2283 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2284 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2285 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2286 1.1 christos UINT f_r1;
2287 1.1 christos UINT f_r2;
2288 1.1 christos
2289 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2290 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2291 1.1 christos
2292 1.1 christos /* Record the fields for the semantic handler. */
2293 1.1 christos FLD (f_r1) = f_r1;
2294 1.1 christos FLD (f_r2) = f_r2;
2295 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2296 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2297 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2298 1.1 christos
2299 1.1 christos #if WITH_PROFILE_MODEL_P
2300 1.1 christos /* Record the fields for profiling. */
2301 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2302 1.1 christos {
2303 1.1 christos FLD (in_src1) = f_r1;
2304 1.1 christos FLD (in_src2) = f_r2;
2305 1.1 christos }
2306 1.1 christos #endif
2307 1.1 christos #undef FLD
2308 1.1 christos return idesc;
2309 1.1 christos }
2310 1.1 christos
2311 1.1 christos extract_sfmt_sth_d:
2312 1.1 christos {
2313 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2314 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2315 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
2316 1.1 christos UINT f_r1;
2317 1.1 christos UINT f_r2;
2318 1.1 christos INT f_simm16;
2319 1.1 christos
2320 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2321 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2322 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2323 1.1 christos
2324 1.1 christos /* Record the fields for the semantic handler. */
2325 1.1 christos FLD (f_simm16) = f_simm16;
2326 1.1 christos FLD (f_r1) = f_r1;
2327 1.1 christos FLD (f_r2) = f_r2;
2328 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2329 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2330 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2331 1.1 christos
2332 1.1 christos #if WITH_PROFILE_MODEL_P
2333 1.1 christos /* Record the fields for profiling. */
2334 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2335 1.1 christos {
2336 1.1 christos FLD (in_src1) = f_r1;
2337 1.1 christos FLD (in_src2) = f_r2;
2338 1.1 christos }
2339 1.1 christos #endif
2340 1.1 christos #undef FLD
2341 1.1 christos return idesc;
2342 1.1 christos }
2343 1.1 christos
2344 1.1 christos extract_sfmt_st_plus:
2345 1.1 christos {
2346 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2347 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2348 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2349 1.1 christos UINT f_r1;
2350 1.1 christos UINT f_r2;
2351 1.1 christos
2352 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2353 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2354 1.1 christos
2355 1.1 christos /* Record the fields for the semantic handler. */
2356 1.1 christos FLD (f_r1) = f_r1;
2357 1.1 christos FLD (f_r2) = f_r2;
2358 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2359 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2360 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_plus", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2361 1.1 christos
2362 1.1 christos #if WITH_PROFILE_MODEL_P
2363 1.1 christos /* Record the fields for profiling. */
2364 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2365 1.1 christos {
2366 1.1 christos FLD (in_src1) = f_r1;
2367 1.1 christos FLD (in_src2) = f_r2;
2368 1.1 christos FLD (out_src2) = f_r2;
2369 1.1 christos }
2370 1.1 christos #endif
2371 1.1 christos #undef FLD
2372 1.1 christos return idesc;
2373 1.1 christos }
2374 1.1 christos
2375 1.1 christos extract_sfmt_sth_plus:
2376 1.1 christos {
2377 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2378 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2379 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2380 1.1 christos UINT f_r1;
2381 1.1 christos UINT f_r2;
2382 1.1 christos
2383 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2384 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2385 1.1 christos
2386 1.1 christos /* Record the fields for the semantic handler. */
2387 1.1 christos FLD (f_r1) = f_r1;
2388 1.1 christos FLD (f_r2) = f_r2;
2389 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2390 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2391 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth_plus", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2392 1.1 christos
2393 1.1 christos #if WITH_PROFILE_MODEL_P
2394 1.1 christos /* Record the fields for profiling. */
2395 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2396 1.1 christos {
2397 1.1 christos FLD (in_src1) = f_r1;
2398 1.1 christos FLD (in_src2) = f_r2;
2399 1.1 christos FLD (out_src2) = f_r2;
2400 1.1 christos }
2401 1.1 christos #endif
2402 1.1 christos #undef FLD
2403 1.1 christos return idesc;
2404 1.1 christos }
2405 1.1 christos
2406 1.1 christos extract_sfmt_stb_plus:
2407 1.1 christos {
2408 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2409 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2410 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2411 1.1 christos UINT f_r1;
2412 1.1 christos UINT f_r2;
2413 1.1 christos
2414 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2415 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2416 1.1 christos
2417 1.1 christos /* Record the fields for the semantic handler. */
2418 1.1 christos FLD (f_r1) = f_r1;
2419 1.1 christos FLD (f_r2) = f_r2;
2420 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2421 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2422 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb_plus", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2423 1.1 christos
2424 1.1 christos #if WITH_PROFILE_MODEL_P
2425 1.1 christos /* Record the fields for profiling. */
2426 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2427 1.1 christos {
2428 1.1 christos FLD (in_src1) = f_r1;
2429 1.1 christos FLD (in_src2) = f_r2;
2430 1.1 christos FLD (out_src2) = f_r2;
2431 1.1 christos }
2432 1.1 christos #endif
2433 1.1 christos #undef FLD
2434 1.1 christos return idesc;
2435 1.1 christos }
2436 1.1 christos
2437 1.1 christos extract_sfmt_trap:
2438 1.1 christos {
2439 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2440 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2441 1.1 christos #define FLD(f) abuf->fields.sfmt_trap.f
2442 1.1 christos UINT f_uimm4;
2443 1.1 christos
2444 1.1 christos f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2445 1.1 christos
2446 1.1 christos /* Record the fields for the semantic handler. */
2447 1.1 christos FLD (f_uimm4) = f_uimm4;
2448 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0));
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 }
2455 1.1 christos #endif
2456 1.1 christos #undef FLD
2457 1.1 christos return idesc;
2458 1.1 christos }
2459 1.1 christos
2460 1.1 christos extract_sfmt_unlock:
2461 1.1 christos {
2462 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2463 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2464 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2465 1.1 christos UINT f_r1;
2466 1.1 christos UINT f_r2;
2467 1.1 christos
2468 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2469 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2470 1.1 christos
2471 1.1 christos /* Record the fields for the semantic handler. */
2472 1.1 christos FLD (f_r1) = f_r1;
2473 1.1 christos FLD (f_r2) = f_r2;
2474 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2475 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2476 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_unlock", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2477 1.1 christos
2478 1.1 christos #if WITH_PROFILE_MODEL_P
2479 1.1 christos /* Record the fields for profiling. */
2480 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2481 1.1 christos {
2482 1.1 christos FLD (in_src1) = f_r1;
2483 1.1 christos FLD (in_src2) = f_r2;
2484 1.1 christos }
2485 1.1 christos #endif
2486 1.1 christos #undef FLD
2487 1.1 christos return idesc;
2488 1.1 christos }
2489 1.1 christos
2490 1.1 christos extract_sfmt_satb:
2491 1.1 christos {
2492 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2493 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2494 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2495 1.1 christos UINT f_r1;
2496 1.1 christos UINT f_r2;
2497 1.1 christos
2498 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2499 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2500 1.1 christos
2501 1.1 christos /* Record the fields for the semantic handler. */
2502 1.1 christos FLD (f_r2) = f_r2;
2503 1.1 christos FLD (f_r1) = f_r1;
2504 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
2505 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
2506 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_satb", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
2507 1.1 christos
2508 1.1 christos #if WITH_PROFILE_MODEL_P
2509 1.1 christos /* Record the fields for profiling. */
2510 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2511 1.1 christos {
2512 1.1 christos FLD (in_sr) = f_r2;
2513 1.1 christos FLD (out_dr) = f_r1;
2514 1.1 christos }
2515 1.1 christos #endif
2516 1.1 christos #undef FLD
2517 1.1 christos return idesc;
2518 1.1 christos }
2519 1.1 christos
2520 1.1 christos extract_sfmt_sat:
2521 1.1 christos {
2522 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2523 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2524 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2525 1.1 christos UINT f_r1;
2526 1.1 christos UINT f_r2;
2527 1.1 christos
2528 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2529 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2530 1.1 christos
2531 1.1 christos /* Record the fields for the semantic handler. */
2532 1.1 christos FLD (f_r2) = f_r2;
2533 1.1 christos FLD (f_r1) = f_r1;
2534 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
2535 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
2536 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sat", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
2537 1.1 christos
2538 1.1 christos #if WITH_PROFILE_MODEL_P
2539 1.1 christos /* Record the fields for profiling. */
2540 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2541 1.1 christos {
2542 1.1 christos FLD (in_sr) = f_r2;
2543 1.1 christos FLD (out_dr) = f_r1;
2544 1.1 christos }
2545 1.1 christos #endif
2546 1.1 christos #undef FLD
2547 1.1 christos return idesc;
2548 1.1 christos }
2549 1.1 christos
2550 1.1 christos extract_sfmt_sadd:
2551 1.1 christos {
2552 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2553 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2554 1.1 christos
2555 1.1 christos
2556 1.1 christos /* Record the fields for the semantic handler. */
2557 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sadd", (char *) 0));
2558 1.1 christos
2559 1.1 christos #undef FLD
2560 1.1 christos return idesc;
2561 1.1 christos }
2562 1.1 christos
2563 1.1 christos extract_sfmt_macwu1:
2564 1.1 christos {
2565 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2566 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2567 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2568 1.1 christos UINT f_r1;
2569 1.1 christos UINT f_r2;
2570 1.1 christos
2571 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2572 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2573 1.1 christos
2574 1.1 christos /* Record the fields for the semantic handler. */
2575 1.1 christos FLD (f_r1) = f_r1;
2576 1.1 christos FLD (f_r2) = f_r2;
2577 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2578 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2579 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_macwu1", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2580 1.1 christos
2581 1.1 christos #if WITH_PROFILE_MODEL_P
2582 1.1 christos /* Record the fields for profiling. */
2583 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2584 1.1 christos {
2585 1.1 christos FLD (in_src1) = f_r1;
2586 1.1 christos FLD (in_src2) = f_r2;
2587 1.1 christos }
2588 1.1 christos #endif
2589 1.1 christos #undef FLD
2590 1.1 christos return idesc;
2591 1.1 christos }
2592 1.1 christos
2593 1.1 christos extract_sfmt_msblo:
2594 1.1 christos {
2595 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2596 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2597 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2598 1.1 christos UINT f_r1;
2599 1.1 christos UINT f_r2;
2600 1.1 christos
2601 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2602 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2603 1.1 christos
2604 1.1 christos /* Record the fields for the semantic handler. */
2605 1.1 christos FLD (f_r1) = f_r1;
2606 1.1 christos FLD (f_r2) = f_r2;
2607 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2608 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2609 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_msblo", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2610 1.1 christos
2611 1.1 christos #if WITH_PROFILE_MODEL_P
2612 1.1 christos /* Record the fields for profiling. */
2613 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2614 1.1 christos {
2615 1.1 christos FLD (in_src1) = f_r1;
2616 1.1 christos FLD (in_src2) = f_r2;
2617 1.1 christos }
2618 1.1 christos #endif
2619 1.1 christos #undef FLD
2620 1.1 christos return idesc;
2621 1.1 christos }
2622 1.1 christos
2623 1.1 christos extract_sfmt_mulwu1:
2624 1.1 christos {
2625 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2626 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2627 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2628 1.1 christos UINT f_r1;
2629 1.1 christos UINT f_r2;
2630 1.1 christos
2631 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2632 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2633 1.1 christos
2634 1.1 christos /* Record the fields for the semantic handler. */
2635 1.1 christos FLD (f_r1) = f_r1;
2636 1.1 christos FLD (f_r2) = f_r2;
2637 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2638 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2639 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulwu1", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2640 1.1 christos
2641 1.1 christos #if WITH_PROFILE_MODEL_P
2642 1.1 christos /* Record the fields for profiling. */
2643 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2644 1.1 christos {
2645 1.1 christos FLD (in_src1) = f_r1;
2646 1.1 christos FLD (in_src2) = f_r2;
2647 1.1 christos }
2648 1.1 christos #endif
2649 1.1 christos #undef FLD
2650 1.1 christos return idesc;
2651 1.1 christos }
2652 1.1 christos
2653 1.1 christos extract_sfmt_sc:
2654 1.1 christos {
2655 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2656 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2657 1.1 christos
2658 1.1 christos
2659 1.1 christos /* Record the fields for the semantic handler. */
2660 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sc", (char *) 0));
2661 1.1 christos
2662 1.1 christos #undef FLD
2663 1.1 christos return idesc;
2664 1.1 christos }
2665 1.1 christos
2666 1.1 christos extract_sfmt_clrpsw:
2667 1.1 christos {
2668 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2669 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2670 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f
2671 1.1 christos UINT f_uimm8;
2672 1.1 christos
2673 1.1 christos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8);
2674 1.1 christos
2675 1.1 christos /* Record the fields for the semantic handler. */
2676 1.1 christos FLD (f_uimm8) = f_uimm8;
2677 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0));
2678 1.1 christos
2679 1.1 christos #undef FLD
2680 1.1 christos return idesc;
2681 1.1 christos }
2682 1.1 christos
2683 1.1 christos extract_sfmt_setpsw:
2684 1.1 christos {
2685 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2686 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2687 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f
2688 1.1 christos UINT f_uimm8;
2689 1.1 christos
2690 1.1 christos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8);
2691 1.1 christos
2692 1.1 christos /* Record the fields for the semantic handler. */
2693 1.1 christos FLD (f_uimm8) = f_uimm8;
2694 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0));
2695 1.1 christos
2696 1.1 christos #undef FLD
2697 1.1 christos return idesc;
2698 1.1 christos }
2699 1.1 christos
2700 1.1 christos extract_sfmt_bset:
2701 1.1 christos {
2702 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2703 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2704 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f
2705 1.1 christos UINT f_uimm3;
2706 1.1 christos UINT f_r2;
2707 1.1 christos INT f_simm16;
2708 1.1 christos
2709 1.1 christos f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3);
2710 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2711 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2712 1.1 christos
2713 1.1 christos /* Record the fields for the semantic handler. */
2714 1.1 christos FLD (f_simm16) = f_simm16;
2715 1.1 christos FLD (f_r2) = f_r2;
2716 1.1 christos FLD (f_uimm3) = f_uimm3;
2717 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
2718 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bset", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0));
2719 1.1 christos
2720 1.1 christos #if WITH_PROFILE_MODEL_P
2721 1.1 christos /* Record the fields for profiling. */
2722 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2723 1.1 christos {
2724 1.1 christos FLD (in_sr) = f_r2;
2725 1.1 christos }
2726 1.1 christos #endif
2727 1.1 christos #undef FLD
2728 1.1 christos return idesc;
2729 1.1 christos }
2730 1.1 christos
2731 1.1 christos extract_sfmt_btst:
2732 1.1 christos {
2733 1.1 christos const IDESC *idesc = &m32r2f_insn_data[itype];
2734 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2735 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f
2736 1.1 christos UINT f_uimm3;
2737 1.1 christos UINT f_r2;
2738 1.1 christos
2739 1.1 christos f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3);
2740 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2741 1.1 christos
2742 1.1 christos /* Record the fields for the semantic handler. */
2743 1.1 christos FLD (f_r2) = f_r2;
2744 1.1 christos FLD (f_uimm3) = f_uimm3;
2745 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
2746 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_btst", "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0));
2747 1.1 christos
2748 1.1 christos #if WITH_PROFILE_MODEL_P
2749 1.1 christos /* Record the fields for profiling. */
2750 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2751 1.1 christos {
2752 1.1 christos FLD (in_sr) = f_r2;
2753 1.1 christos }
2754 1.1 christos #endif
2755 1.1 christos #undef FLD
2756 1.1 christos return idesc;
2757 1.1 christos }
2758 1.1 christos
2759 1.1 christos }
2760