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