sem-switch.c revision 1.1.1.4 1 1.1 christos /* Simulator instruction semantics for or1k32bf.
2 1.1 christos
3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
4 1.1 christos
5 1.1.1.4 christos Copyright (C) 1996-2024 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU simulators.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.1 christos with this program; if not, write to the Free Software Foundation, Inc.,
21 1.1 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22 1.1 christos
23 1.1 christos */
24 1.1 christos
25 1.1 christos #ifdef DEFINE_LABELS
26 1.1 christos
27 1.1 christos /* The labels have the case they have because the enum of insn types
28 1.1 christos is all uppercase and in the non-stdc case the insn symbol is built
29 1.1 christos into the enum name. */
30 1.1 christos
31 1.1 christos static struct {
32 1.1 christos int index;
33 1.1 christos void *label;
34 1.1 christos } labels[] = {
35 1.1 christos { OR1K32BF_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
36 1.1 christos { OR1K32BF_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
37 1.1 christos { OR1K32BF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
38 1.1 christos { OR1K32BF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
39 1.1 christos { OR1K32BF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
40 1.1 christos { OR1K32BF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
41 1.1 christos { OR1K32BF_INSN_L_J, && case_sem_INSN_L_J },
42 1.1 christos { OR1K32BF_INSN_L_ADRP, && case_sem_INSN_L_ADRP },
43 1.1 christos { OR1K32BF_INSN_L_JAL, && case_sem_INSN_L_JAL },
44 1.1 christos { OR1K32BF_INSN_L_JR, && case_sem_INSN_L_JR },
45 1.1 christos { OR1K32BF_INSN_L_JALR, && case_sem_INSN_L_JALR },
46 1.1 christos { OR1K32BF_INSN_L_BNF, && case_sem_INSN_L_BNF },
47 1.1 christos { OR1K32BF_INSN_L_BF, && case_sem_INSN_L_BF },
48 1.1 christos { OR1K32BF_INSN_L_TRAP, && case_sem_INSN_L_TRAP },
49 1.1 christos { OR1K32BF_INSN_L_SYS, && case_sem_INSN_L_SYS },
50 1.1 christos { OR1K32BF_INSN_L_MSYNC, && case_sem_INSN_L_MSYNC },
51 1.1 christos { OR1K32BF_INSN_L_PSYNC, && case_sem_INSN_L_PSYNC },
52 1.1 christos { OR1K32BF_INSN_L_CSYNC, && case_sem_INSN_L_CSYNC },
53 1.1 christos { OR1K32BF_INSN_L_RFE, && case_sem_INSN_L_RFE },
54 1.1 christos { OR1K32BF_INSN_L_NOP_IMM, && case_sem_INSN_L_NOP_IMM },
55 1.1 christos { OR1K32BF_INSN_L_MOVHI, && case_sem_INSN_L_MOVHI },
56 1.1 christos { OR1K32BF_INSN_L_MACRC, && case_sem_INSN_L_MACRC },
57 1.1 christos { OR1K32BF_INSN_L_MFSPR, && case_sem_INSN_L_MFSPR },
58 1.1 christos { OR1K32BF_INSN_L_MTSPR, && case_sem_INSN_L_MTSPR },
59 1.1 christos { OR1K32BF_INSN_L_LWZ, && case_sem_INSN_L_LWZ },
60 1.1 christos { OR1K32BF_INSN_L_LWS, && case_sem_INSN_L_LWS },
61 1.1 christos { OR1K32BF_INSN_L_LWA, && case_sem_INSN_L_LWA },
62 1.1 christos { OR1K32BF_INSN_L_LBZ, && case_sem_INSN_L_LBZ },
63 1.1 christos { OR1K32BF_INSN_L_LBS, && case_sem_INSN_L_LBS },
64 1.1 christos { OR1K32BF_INSN_L_LHZ, && case_sem_INSN_L_LHZ },
65 1.1 christos { OR1K32BF_INSN_L_LHS, && case_sem_INSN_L_LHS },
66 1.1 christos { OR1K32BF_INSN_L_SW, && case_sem_INSN_L_SW },
67 1.1 christos { OR1K32BF_INSN_L_SB, && case_sem_INSN_L_SB },
68 1.1 christos { OR1K32BF_INSN_L_SH, && case_sem_INSN_L_SH },
69 1.1 christos { OR1K32BF_INSN_L_SWA, && case_sem_INSN_L_SWA },
70 1.1 christos { OR1K32BF_INSN_L_SLL, && case_sem_INSN_L_SLL },
71 1.1 christos { OR1K32BF_INSN_L_SLLI, && case_sem_INSN_L_SLLI },
72 1.1 christos { OR1K32BF_INSN_L_SRL, && case_sem_INSN_L_SRL },
73 1.1 christos { OR1K32BF_INSN_L_SRLI, && case_sem_INSN_L_SRLI },
74 1.1 christos { OR1K32BF_INSN_L_SRA, && case_sem_INSN_L_SRA },
75 1.1 christos { OR1K32BF_INSN_L_SRAI, && case_sem_INSN_L_SRAI },
76 1.1 christos { OR1K32BF_INSN_L_ROR, && case_sem_INSN_L_ROR },
77 1.1 christos { OR1K32BF_INSN_L_RORI, && case_sem_INSN_L_RORI },
78 1.1 christos { OR1K32BF_INSN_L_AND, && case_sem_INSN_L_AND },
79 1.1 christos { OR1K32BF_INSN_L_OR, && case_sem_INSN_L_OR },
80 1.1 christos { OR1K32BF_INSN_L_XOR, && case_sem_INSN_L_XOR },
81 1.1 christos { OR1K32BF_INSN_L_ADD, && case_sem_INSN_L_ADD },
82 1.1 christos { OR1K32BF_INSN_L_SUB, && case_sem_INSN_L_SUB },
83 1.1 christos { OR1K32BF_INSN_L_ADDC, && case_sem_INSN_L_ADDC },
84 1.1 christos { OR1K32BF_INSN_L_MUL, && case_sem_INSN_L_MUL },
85 1.1 christos { OR1K32BF_INSN_L_MULD, && case_sem_INSN_L_MULD },
86 1.1 christos { OR1K32BF_INSN_L_MULU, && case_sem_INSN_L_MULU },
87 1.1 christos { OR1K32BF_INSN_L_MULDU, && case_sem_INSN_L_MULDU },
88 1.1 christos { OR1K32BF_INSN_L_DIV, && case_sem_INSN_L_DIV },
89 1.1 christos { OR1K32BF_INSN_L_DIVU, && case_sem_INSN_L_DIVU },
90 1.1 christos { OR1K32BF_INSN_L_FF1, && case_sem_INSN_L_FF1 },
91 1.1 christos { OR1K32BF_INSN_L_FL1, && case_sem_INSN_L_FL1 },
92 1.1 christos { OR1K32BF_INSN_L_ANDI, && case_sem_INSN_L_ANDI },
93 1.1 christos { OR1K32BF_INSN_L_ORI, && case_sem_INSN_L_ORI },
94 1.1 christos { OR1K32BF_INSN_L_XORI, && case_sem_INSN_L_XORI },
95 1.1 christos { OR1K32BF_INSN_L_ADDI, && case_sem_INSN_L_ADDI },
96 1.1 christos { OR1K32BF_INSN_L_ADDIC, && case_sem_INSN_L_ADDIC },
97 1.1 christos { OR1K32BF_INSN_L_MULI, && case_sem_INSN_L_MULI },
98 1.1 christos { OR1K32BF_INSN_L_EXTHS, && case_sem_INSN_L_EXTHS },
99 1.1 christos { OR1K32BF_INSN_L_EXTBS, && case_sem_INSN_L_EXTBS },
100 1.1 christos { OR1K32BF_INSN_L_EXTHZ, && case_sem_INSN_L_EXTHZ },
101 1.1 christos { OR1K32BF_INSN_L_EXTBZ, && case_sem_INSN_L_EXTBZ },
102 1.1 christos { OR1K32BF_INSN_L_EXTWS, && case_sem_INSN_L_EXTWS },
103 1.1 christos { OR1K32BF_INSN_L_EXTWZ, && case_sem_INSN_L_EXTWZ },
104 1.1 christos { OR1K32BF_INSN_L_CMOV, && case_sem_INSN_L_CMOV },
105 1.1 christos { OR1K32BF_INSN_L_SFGTS, && case_sem_INSN_L_SFGTS },
106 1.1 christos { OR1K32BF_INSN_L_SFGTSI, && case_sem_INSN_L_SFGTSI },
107 1.1 christos { OR1K32BF_INSN_L_SFGTU, && case_sem_INSN_L_SFGTU },
108 1.1 christos { OR1K32BF_INSN_L_SFGTUI, && case_sem_INSN_L_SFGTUI },
109 1.1 christos { OR1K32BF_INSN_L_SFGES, && case_sem_INSN_L_SFGES },
110 1.1 christos { OR1K32BF_INSN_L_SFGESI, && case_sem_INSN_L_SFGESI },
111 1.1 christos { OR1K32BF_INSN_L_SFGEU, && case_sem_INSN_L_SFGEU },
112 1.1 christos { OR1K32BF_INSN_L_SFGEUI, && case_sem_INSN_L_SFGEUI },
113 1.1 christos { OR1K32BF_INSN_L_SFLTS, && case_sem_INSN_L_SFLTS },
114 1.1 christos { OR1K32BF_INSN_L_SFLTSI, && case_sem_INSN_L_SFLTSI },
115 1.1 christos { OR1K32BF_INSN_L_SFLTU, && case_sem_INSN_L_SFLTU },
116 1.1 christos { OR1K32BF_INSN_L_SFLTUI, && case_sem_INSN_L_SFLTUI },
117 1.1 christos { OR1K32BF_INSN_L_SFLES, && case_sem_INSN_L_SFLES },
118 1.1 christos { OR1K32BF_INSN_L_SFLESI, && case_sem_INSN_L_SFLESI },
119 1.1 christos { OR1K32BF_INSN_L_SFLEU, && case_sem_INSN_L_SFLEU },
120 1.1 christos { OR1K32BF_INSN_L_SFLEUI, && case_sem_INSN_L_SFLEUI },
121 1.1 christos { OR1K32BF_INSN_L_SFEQ, && case_sem_INSN_L_SFEQ },
122 1.1 christos { OR1K32BF_INSN_L_SFEQI, && case_sem_INSN_L_SFEQI },
123 1.1 christos { OR1K32BF_INSN_L_SFNE, && case_sem_INSN_L_SFNE },
124 1.1 christos { OR1K32BF_INSN_L_SFNEI, && case_sem_INSN_L_SFNEI },
125 1.1 christos { OR1K32BF_INSN_L_MAC, && case_sem_INSN_L_MAC },
126 1.1 christos { OR1K32BF_INSN_L_MACI, && case_sem_INSN_L_MACI },
127 1.1 christos { OR1K32BF_INSN_L_MACU, && case_sem_INSN_L_MACU },
128 1.1 christos { OR1K32BF_INSN_L_MSB, && case_sem_INSN_L_MSB },
129 1.1 christos { OR1K32BF_INSN_L_MSBU, && case_sem_INSN_L_MSBU },
130 1.1 christos { OR1K32BF_INSN_L_CUST1, && case_sem_INSN_L_CUST1 },
131 1.1 christos { OR1K32BF_INSN_L_CUST2, && case_sem_INSN_L_CUST2 },
132 1.1 christos { OR1K32BF_INSN_L_CUST3, && case_sem_INSN_L_CUST3 },
133 1.1 christos { OR1K32BF_INSN_L_CUST4, && case_sem_INSN_L_CUST4 },
134 1.1 christos { OR1K32BF_INSN_L_CUST5, && case_sem_INSN_L_CUST5 },
135 1.1 christos { OR1K32BF_INSN_L_CUST6, && case_sem_INSN_L_CUST6 },
136 1.1 christos { OR1K32BF_INSN_L_CUST7, && case_sem_INSN_L_CUST7 },
137 1.1 christos { OR1K32BF_INSN_L_CUST8, && case_sem_INSN_L_CUST8 },
138 1.1 christos { OR1K32BF_INSN_LF_ADD_S, && case_sem_INSN_LF_ADD_S },
139 1.1.1.2 christos { OR1K32BF_INSN_LF_ADD_D32, && case_sem_INSN_LF_ADD_D32 },
140 1.1 christos { OR1K32BF_INSN_LF_SUB_S, && case_sem_INSN_LF_SUB_S },
141 1.1.1.2 christos { OR1K32BF_INSN_LF_SUB_D32, && case_sem_INSN_LF_SUB_D32 },
142 1.1 christos { OR1K32BF_INSN_LF_MUL_S, && case_sem_INSN_LF_MUL_S },
143 1.1.1.2 christos { OR1K32BF_INSN_LF_MUL_D32, && case_sem_INSN_LF_MUL_D32 },
144 1.1 christos { OR1K32BF_INSN_LF_DIV_S, && case_sem_INSN_LF_DIV_S },
145 1.1.1.2 christos { OR1K32BF_INSN_LF_DIV_D32, && case_sem_INSN_LF_DIV_D32 },
146 1.1 christos { OR1K32BF_INSN_LF_REM_S, && case_sem_INSN_LF_REM_S },
147 1.1.1.2 christos { OR1K32BF_INSN_LF_REM_D32, && case_sem_INSN_LF_REM_D32 },
148 1.1 christos { OR1K32BF_INSN_LF_ITOF_S, && case_sem_INSN_LF_ITOF_S },
149 1.1.1.2 christos { OR1K32BF_INSN_LF_ITOF_D32, && case_sem_INSN_LF_ITOF_D32 },
150 1.1 christos { OR1K32BF_INSN_LF_FTOI_S, && case_sem_INSN_LF_FTOI_S },
151 1.1.1.2 christos { OR1K32BF_INSN_LF_FTOI_D32, && case_sem_INSN_LF_FTOI_D32 },
152 1.1.1.2 christos { OR1K32BF_INSN_LF_SFEQ_S, && case_sem_INSN_LF_SFEQ_S },
153 1.1.1.2 christos { OR1K32BF_INSN_LF_SFEQ_D32, && case_sem_INSN_LF_SFEQ_D32 },
154 1.1.1.2 christos { OR1K32BF_INSN_LF_SFNE_S, && case_sem_INSN_LF_SFNE_S },
155 1.1.1.2 christos { OR1K32BF_INSN_LF_SFNE_D32, && case_sem_INSN_LF_SFNE_D32 },
156 1.1.1.2 christos { OR1K32BF_INSN_LF_SFGE_S, && case_sem_INSN_LF_SFGE_S },
157 1.1.1.2 christos { OR1K32BF_INSN_LF_SFGE_D32, && case_sem_INSN_LF_SFGE_D32 },
158 1.1.1.2 christos { OR1K32BF_INSN_LF_SFGT_S, && case_sem_INSN_LF_SFGT_S },
159 1.1.1.2 christos { OR1K32BF_INSN_LF_SFGT_D32, && case_sem_INSN_LF_SFGT_D32 },
160 1.1.1.2 christos { OR1K32BF_INSN_LF_SFLT_S, && case_sem_INSN_LF_SFLT_S },
161 1.1.1.2 christos { OR1K32BF_INSN_LF_SFLT_D32, && case_sem_INSN_LF_SFLT_D32 },
162 1.1.1.2 christos { OR1K32BF_INSN_LF_SFLE_S, && case_sem_INSN_LF_SFLE_S },
163 1.1.1.2 christos { OR1K32BF_INSN_LF_SFLE_D32, && case_sem_INSN_LF_SFLE_D32 },
164 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUEQ_S, && case_sem_INSN_LF_SFUEQ_S },
165 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUEQ_D32, && case_sem_INSN_LF_SFUEQ_D32 },
166 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUNE_S, && case_sem_INSN_LF_SFUNE_S },
167 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUNE_D32, && case_sem_INSN_LF_SFUNE_D32 },
168 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUGT_S, && case_sem_INSN_LF_SFUGT_S },
169 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUGT_D32, && case_sem_INSN_LF_SFUGT_D32 },
170 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUGE_S, && case_sem_INSN_LF_SFUGE_S },
171 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUGE_D32, && case_sem_INSN_LF_SFUGE_D32 },
172 1.1.1.2 christos { OR1K32BF_INSN_LF_SFULT_S, && case_sem_INSN_LF_SFULT_S },
173 1.1.1.2 christos { OR1K32BF_INSN_LF_SFULT_D32, && case_sem_INSN_LF_SFULT_D32 },
174 1.1.1.2 christos { OR1K32BF_INSN_LF_SFULE_S, && case_sem_INSN_LF_SFULE_S },
175 1.1.1.2 christos { OR1K32BF_INSN_LF_SFULE_D32, && case_sem_INSN_LF_SFULE_D32 },
176 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUN_S, && case_sem_INSN_LF_SFUN_S },
177 1.1.1.2 christos { OR1K32BF_INSN_LF_SFUN_D32, && case_sem_INSN_LF_SFUN_D32 },
178 1.1 christos { OR1K32BF_INSN_LF_MADD_S, && case_sem_INSN_LF_MADD_S },
179 1.1.1.2 christos { OR1K32BF_INSN_LF_MADD_D32, && case_sem_INSN_LF_MADD_D32 },
180 1.1 christos { OR1K32BF_INSN_LF_CUST1_S, && case_sem_INSN_LF_CUST1_S },
181 1.1.1.2 christos { OR1K32BF_INSN_LF_CUST1_D32, && case_sem_INSN_LF_CUST1_D32 },
182 1.1 christos { 0, 0 }
183 1.1 christos };
184 1.1 christos int i;
185 1.1 christos
186 1.1 christos for (i = 0; labels[i].label != 0; ++i)
187 1.1 christos {
188 1.1 christos #if FAST_P
189 1.1 christos CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
190 1.1 christos #else
191 1.1 christos CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
192 1.1 christos #endif
193 1.1 christos }
194 1.1 christos
195 1.1 christos #undef DEFINE_LABELS
196 1.1 christos #endif /* DEFINE_LABELS */
197 1.1 christos
198 1.1 christos #ifdef DEFINE_SWITCH
199 1.1 christos
200 1.1 christos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
201 1.1 christos off frills like tracing and profiling. */
202 1.1.1.4 christos /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
203 1.1 christos that can cause it to be optimized out. Another way would be to emit
204 1.1 christos special handlers into the instruction "stream". */
205 1.1 christos
206 1.1 christos #if FAST_P
207 1.1 christos #undef CGEN_TRACE_RESULT
208 1.1 christos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
209 1.1 christos #endif
210 1.1 christos
211 1.1 christos #undef GET_ATTR
212 1.1 christos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
213 1.1 christos
214 1.1 christos {
215 1.1 christos
216 1.1 christos #if WITH_SCACHE_PBB
217 1.1 christos
218 1.1 christos /* Branch to next handler without going around main loop. */
219 1.1 christos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
220 1.1 christos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
221 1.1 christos
222 1.1 christos #else /* ! WITH_SCACHE_PBB */
223 1.1 christos
224 1.1 christos #define NEXT(vpc) BREAK (sem)
225 1.1 christos #ifdef __GNUC__
226 1.1 christos #if FAST_P
227 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
228 1.1 christos #else
229 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
230 1.1 christos #endif
231 1.1 christos #else
232 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
233 1.1 christos #endif
234 1.1 christos
235 1.1 christos #endif /* ! WITH_SCACHE_PBB */
236 1.1 christos
237 1.1 christos {
238 1.1 christos
239 1.1 christos CASE (sem, INSN_X_INVALID) : /* --invalid-- */
240 1.1 christos {
241 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
242 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
243 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
244 1.1 christos int UNUSED written = 0;
245 1.1 christos IADDR UNUSED pc = abuf->addr;
246 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
247 1.1 christos
248 1.1 christos {
249 1.1 christos /* Update the recorded pc in the cpu state struct.
250 1.1 christos Only necessary for WITH_SCACHE case, but to avoid the
251 1.1 christos conditional compilation .... */
252 1.1 christos SET_H_PC (pc);
253 1.1 christos /* Virtual insns have zero size. Overwrite vpc with address of next insn
254 1.1 christos using the default-insn-bitsize spec. When executing insns in parallel
255 1.1 christos we may want to queue the fault and continue execution. */
256 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
257 1.1 christos vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
258 1.1 christos }
259 1.1 christos
260 1.1 christos #undef FLD
261 1.1 christos }
262 1.1 christos NEXT (vpc);
263 1.1 christos
264 1.1 christos CASE (sem, INSN_X_AFTER) : /* --after-- */
265 1.1 christos {
266 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
267 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
268 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
269 1.1 christos int UNUSED written = 0;
270 1.1 christos IADDR UNUSED pc = abuf->addr;
271 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
272 1.1 christos
273 1.1 christos {
274 1.1 christos #if WITH_SCACHE_PBB_OR1K32BF
275 1.1 christos or1k32bf_pbb_after (current_cpu, sem_arg);
276 1.1 christos #endif
277 1.1 christos }
278 1.1 christos
279 1.1 christos #undef FLD
280 1.1 christos }
281 1.1 christos NEXT (vpc);
282 1.1 christos
283 1.1 christos CASE (sem, INSN_X_BEFORE) : /* --before-- */
284 1.1 christos {
285 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
286 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
287 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
288 1.1 christos int UNUSED written = 0;
289 1.1 christos IADDR UNUSED pc = abuf->addr;
290 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
291 1.1 christos
292 1.1 christos {
293 1.1 christos #if WITH_SCACHE_PBB_OR1K32BF
294 1.1 christos or1k32bf_pbb_before (current_cpu, sem_arg);
295 1.1 christos #endif
296 1.1 christos }
297 1.1 christos
298 1.1 christos #undef FLD
299 1.1 christos }
300 1.1 christos NEXT (vpc);
301 1.1 christos
302 1.1 christos CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
303 1.1 christos {
304 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
305 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
306 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
307 1.1 christos int UNUSED written = 0;
308 1.1 christos IADDR UNUSED pc = abuf->addr;
309 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
310 1.1 christos
311 1.1 christos {
312 1.1 christos #if WITH_SCACHE_PBB_OR1K32BF
313 1.1 christos #ifdef DEFINE_SWITCH
314 1.1 christos vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
315 1.1 christos pbb_br_type, pbb_br_npc);
316 1.1 christos BREAK (sem);
317 1.1 christos #else
318 1.1 christos /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
319 1.1 christos vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
320 1.1 christos CPU_PBB_BR_TYPE (current_cpu),
321 1.1 christos CPU_PBB_BR_NPC (current_cpu));
322 1.1 christos #endif
323 1.1 christos #endif
324 1.1 christos }
325 1.1 christos
326 1.1 christos #undef FLD
327 1.1 christos }
328 1.1 christos NEXT (vpc);
329 1.1 christos
330 1.1 christos CASE (sem, INSN_X_CHAIN) : /* --chain-- */
331 1.1 christos {
332 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
333 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
334 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
335 1.1 christos int UNUSED written = 0;
336 1.1 christos IADDR UNUSED pc = abuf->addr;
337 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
338 1.1 christos
339 1.1 christos {
340 1.1 christos #if WITH_SCACHE_PBB_OR1K32BF
341 1.1 christos vpc = or1k32bf_pbb_chain (current_cpu, sem_arg);
342 1.1 christos #ifdef DEFINE_SWITCH
343 1.1 christos BREAK (sem);
344 1.1 christos #endif
345 1.1 christos #endif
346 1.1 christos }
347 1.1 christos
348 1.1 christos #undef FLD
349 1.1 christos }
350 1.1 christos NEXT (vpc);
351 1.1 christos
352 1.1 christos CASE (sem, INSN_X_BEGIN) : /* --begin-- */
353 1.1 christos {
354 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
355 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
356 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
357 1.1 christos int UNUSED written = 0;
358 1.1 christos IADDR UNUSED pc = abuf->addr;
359 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
360 1.1 christos
361 1.1 christos {
362 1.1 christos #if WITH_SCACHE_PBB_OR1K32BF
363 1.1 christos #if defined DEFINE_SWITCH || defined FAST_P
364 1.1 christos /* In the switch case FAST_P is a constant, allowing several optimizations
365 1.1 christos in any called inline functions. */
366 1.1 christos vpc = or1k32bf_pbb_begin (current_cpu, FAST_P);
367 1.1 christos #else
368 1.1 christos #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
369 1.1 christos vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
370 1.1 christos #else
371 1.1 christos vpc = or1k32bf_pbb_begin (current_cpu, 0);
372 1.1 christos #endif
373 1.1 christos #endif
374 1.1 christos #endif
375 1.1 christos }
376 1.1 christos
377 1.1 christos #undef FLD
378 1.1 christos }
379 1.1 christos NEXT (vpc);
380 1.1 christos
381 1.1 christos CASE (sem, INSN_L_J) : /* l.j ${disp26} */
382 1.1 christos {
383 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
384 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
385 1.1 christos #define FLD(f) abuf->fields.sfmt_l_j.f
386 1.1 christos int UNUSED written = 0;
387 1.1 christos IADDR UNUSED pc = abuf->addr;
388 1.1 christos SEM_BRANCH_INIT
389 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
390 1.1 christos
391 1.1 christos {
392 1.1 christos {
393 1.1 christos {
394 1.1 christos USI opval = FLD (i_disp26);
395 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
396 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
397 1.1 christos }
398 1.1 christos }
399 1.1 christos if (GET_H_SYS_CPUCFGR_ND ()) {
400 1.1 christos if (1)
401 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
402 1.1 christos }
403 1.1 christos }
404 1.1 christos
405 1.1 christos SEM_BRANCH_FINI (vpc);
406 1.1 christos #undef FLD
407 1.1 christos }
408 1.1 christos NEXT (vpc);
409 1.1 christos
410 1.1 christos CASE (sem, INSN_L_ADRP) : /* l.adrp $rD,${disp21} */
411 1.1 christos {
412 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
413 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
414 1.1 christos #define FLD(f) abuf->fields.sfmt_l_adrp.f
415 1.1 christos int UNUSED written = 0;
416 1.1 christos IADDR UNUSED pc = abuf->addr;
417 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
418 1.1 christos
419 1.1 christos {
420 1.1 christos USI opval = FLD (i_disp21);
421 1.1 christos SET_H_GPR (FLD (f_r1), opval);
422 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
423 1.1 christos }
424 1.1 christos
425 1.1 christos #undef FLD
426 1.1 christos }
427 1.1 christos NEXT (vpc);
428 1.1 christos
429 1.1 christos CASE (sem, INSN_L_JAL) : /* l.jal ${disp26} */
430 1.1 christos {
431 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
432 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
433 1.1 christos #define FLD(f) abuf->fields.sfmt_l_j.f
434 1.1 christos int UNUSED written = 0;
435 1.1 christos IADDR UNUSED pc = abuf->addr;
436 1.1 christos SEM_BRANCH_INIT
437 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
438 1.1 christos
439 1.1 christos {
440 1.1 christos {
441 1.1 christos USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
442 1.1 christos SET_H_GPR (((UINT) 9), opval);
443 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
444 1.1 christos }
445 1.1 christos {
446 1.1 christos {
447 1.1 christos {
448 1.1 christos USI opval = FLD (i_disp26);
449 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
450 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
451 1.1 christos }
452 1.1 christos }
453 1.1 christos if (GET_H_SYS_CPUCFGR_ND ()) {
454 1.1 christos if (1)
455 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
456 1.1 christos }
457 1.1 christos }
458 1.1 christos }
459 1.1 christos
460 1.1 christos SEM_BRANCH_FINI (vpc);
461 1.1 christos #undef FLD
462 1.1 christos }
463 1.1 christos NEXT (vpc);
464 1.1 christos
465 1.1 christos CASE (sem, INSN_L_JR) : /* l.jr $rB */
466 1.1 christos {
467 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
468 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
469 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
470 1.1 christos int UNUSED written = 0;
471 1.1 christos IADDR UNUSED pc = abuf->addr;
472 1.1 christos SEM_BRANCH_INIT
473 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
474 1.1 christos
475 1.1 christos {
476 1.1 christos {
477 1.1 christos {
478 1.1 christos USI opval = GET_H_GPR (FLD (f_r3));
479 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
480 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
481 1.1 christos }
482 1.1 christos }
483 1.1 christos if (GET_H_SYS_CPUCFGR_ND ()) {
484 1.1 christos if (1)
485 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
486 1.1 christos }
487 1.1 christos }
488 1.1 christos
489 1.1 christos SEM_BRANCH_FINI (vpc);
490 1.1 christos #undef FLD
491 1.1 christos }
492 1.1 christos NEXT (vpc);
493 1.1 christos
494 1.1 christos CASE (sem, INSN_L_JALR) : /* l.jalr $rB */
495 1.1 christos {
496 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
497 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
498 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
499 1.1 christos int UNUSED written = 0;
500 1.1 christos IADDR UNUSED pc = abuf->addr;
501 1.1 christos SEM_BRANCH_INIT
502 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
503 1.1 christos
504 1.1 christos {
505 1.1 christos {
506 1.1 christos USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
507 1.1 christos SET_H_GPR (((UINT) 9), opval);
508 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
509 1.1 christos }
510 1.1 christos {
511 1.1 christos {
512 1.1 christos {
513 1.1 christos USI opval = GET_H_GPR (FLD (f_r3));
514 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
515 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
516 1.1 christos }
517 1.1 christos }
518 1.1 christos if (GET_H_SYS_CPUCFGR_ND ()) {
519 1.1 christos if (1)
520 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
521 1.1 christos }
522 1.1 christos }
523 1.1 christos }
524 1.1 christos
525 1.1 christos SEM_BRANCH_FINI (vpc);
526 1.1 christos #undef FLD
527 1.1 christos }
528 1.1 christos NEXT (vpc);
529 1.1 christos
530 1.1 christos CASE (sem, INSN_L_BNF) : /* l.bnf ${disp26} */
531 1.1 christos {
532 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
533 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
534 1.1 christos #define FLD(f) abuf->fields.sfmt_l_j.f
535 1.1 christos int UNUSED written = 0;
536 1.1 christos IADDR UNUSED pc = abuf->addr;
537 1.1 christos SEM_BRANCH_INIT
538 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
539 1.1 christos
540 1.1 christos {
541 1.1 christos if (NOTSI (GET_H_SYS_SR_F ())) {
542 1.1 christos {
543 1.1 christos {
544 1.1 christos USI opval = FLD (i_disp26);
545 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
546 1.1 christos written |= (1 << 4);
547 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
548 1.1 christos }
549 1.1 christos }
550 1.1 christos } else {
551 1.1 christos if (GET_H_SYS_CPUCFGR_ND ()) {
552 1.1 christos {
553 1.1 christos {
554 1.1 christos USI opval = ADDSI (pc, 4);
555 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
556 1.1 christos written |= (1 << 4);
557 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
558 1.1 christos }
559 1.1 christos }
560 1.1 christos }
561 1.1 christos }
562 1.1 christos if (GET_H_SYS_CPUCFGR_ND ()) {
563 1.1 christos if (1)
564 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
565 1.1 christos }
566 1.1 christos }
567 1.1 christos
568 1.1 christos abuf->written = written;
569 1.1 christos SEM_BRANCH_FINI (vpc);
570 1.1 christos #undef FLD
571 1.1 christos }
572 1.1 christos NEXT (vpc);
573 1.1 christos
574 1.1 christos CASE (sem, INSN_L_BF) : /* l.bf ${disp26} */
575 1.1 christos {
576 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
577 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
578 1.1 christos #define FLD(f) abuf->fields.sfmt_l_j.f
579 1.1 christos int UNUSED written = 0;
580 1.1 christos IADDR UNUSED pc = abuf->addr;
581 1.1 christos SEM_BRANCH_INIT
582 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
583 1.1 christos
584 1.1 christos {
585 1.1 christos if (GET_H_SYS_SR_F ()) {
586 1.1 christos {
587 1.1 christos {
588 1.1 christos USI opval = FLD (i_disp26);
589 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
590 1.1 christos written |= (1 << 4);
591 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
592 1.1 christos }
593 1.1 christos }
594 1.1 christos } else {
595 1.1 christos if (GET_H_SYS_CPUCFGR_ND ()) {
596 1.1 christos {
597 1.1 christos {
598 1.1 christos USI opval = ADDSI (pc, 4);
599 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
600 1.1 christos written |= (1 << 4);
601 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
602 1.1 christos }
603 1.1 christos }
604 1.1 christos }
605 1.1 christos }
606 1.1 christos if (GET_H_SYS_CPUCFGR_ND ()) {
607 1.1 christos if (1)
608 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
609 1.1 christos }
610 1.1 christos }
611 1.1 christos
612 1.1 christos abuf->written = written;
613 1.1 christos SEM_BRANCH_FINI (vpc);
614 1.1 christos #undef FLD
615 1.1 christos }
616 1.1 christos NEXT (vpc);
617 1.1 christos
618 1.1 christos CASE (sem, INSN_L_TRAP) : /* l.trap ${uimm16} */
619 1.1 christos {
620 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
621 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
622 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
623 1.1 christos int UNUSED written = 0;
624 1.1 christos IADDR UNUSED pc = abuf->addr;
625 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
626 1.1 christos
627 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP);
628 1.1 christos
629 1.1 christos #undef FLD
630 1.1 christos }
631 1.1 christos NEXT (vpc);
632 1.1 christos
633 1.1 christos CASE (sem, INSN_L_SYS) : /* l.sys ${uimm16} */
634 1.1 christos {
635 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
636 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
637 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
638 1.1 christos int UNUSED written = 0;
639 1.1 christos IADDR UNUSED pc = abuf->addr;
640 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
641 1.1 christos
642 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL);
643 1.1 christos
644 1.1 christos #undef FLD
645 1.1 christos }
646 1.1 christos NEXT (vpc);
647 1.1 christos
648 1.1 christos CASE (sem, INSN_L_MSYNC) : /* l.msync */
649 1.1 christos {
650 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
651 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
652 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
653 1.1 christos int UNUSED written = 0;
654 1.1 christos IADDR UNUSED pc = abuf->addr;
655 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
656 1.1 christos
657 1.1 christos ((void) 0); /*nop*/
658 1.1 christos
659 1.1 christos #undef FLD
660 1.1 christos }
661 1.1 christos NEXT (vpc);
662 1.1 christos
663 1.1 christos CASE (sem, INSN_L_PSYNC) : /* l.psync */
664 1.1 christos {
665 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
666 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
667 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
668 1.1 christos int UNUSED written = 0;
669 1.1 christos IADDR UNUSED pc = abuf->addr;
670 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
671 1.1 christos
672 1.1 christos ((void) 0); /*nop*/
673 1.1 christos
674 1.1 christos #undef FLD
675 1.1 christos }
676 1.1 christos NEXT (vpc);
677 1.1 christos
678 1.1 christos CASE (sem, INSN_L_CSYNC) : /* l.csync */
679 1.1 christos {
680 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
681 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
682 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
683 1.1 christos int UNUSED written = 0;
684 1.1 christos IADDR UNUSED pc = abuf->addr;
685 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
686 1.1 christos
687 1.1 christos ((void) 0); /*nop*/
688 1.1 christos
689 1.1 christos #undef FLD
690 1.1 christos }
691 1.1 christos NEXT (vpc);
692 1.1 christos
693 1.1 christos CASE (sem, INSN_L_RFE) : /* l.rfe */
694 1.1 christos {
695 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
696 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
697 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
698 1.1 christos int UNUSED written = 0;
699 1.1 christos IADDR UNUSED pc = abuf->addr;
700 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
701 1.1 christos
702 1.1 christos or1k32bf_rfe (current_cpu);
703 1.1 christos
704 1.1 christos #undef FLD
705 1.1 christos }
706 1.1 christos NEXT (vpc);
707 1.1 christos
708 1.1 christos CASE (sem, INSN_L_NOP_IMM) : /* l.nop ${uimm16} */
709 1.1 christos {
710 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
711 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
712 1.1 christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
713 1.1 christos int UNUSED written = 0;
714 1.1 christos IADDR UNUSED pc = abuf->addr;
715 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
716 1.1 christos
717 1.1 christos or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16)));
718 1.1 christos
719 1.1 christos #undef FLD
720 1.1 christos }
721 1.1 christos NEXT (vpc);
722 1.1 christos
723 1.1 christos CASE (sem, INSN_L_MOVHI) : /* l.movhi $rD,$uimm16 */
724 1.1 christos {
725 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
726 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
727 1.1 christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
728 1.1 christos int UNUSED written = 0;
729 1.1 christos IADDR UNUSED pc = abuf->addr;
730 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
731 1.1 christos
732 1.1 christos {
733 1.1 christos USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16);
734 1.1 christos SET_H_GPR (FLD (f_r1), opval);
735 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
736 1.1 christos }
737 1.1 christos
738 1.1 christos #undef FLD
739 1.1 christos }
740 1.1 christos NEXT (vpc);
741 1.1 christos
742 1.1 christos CASE (sem, INSN_L_MACRC) : /* l.macrc $rD */
743 1.1 christos {
744 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
745 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
746 1.1 christos #define FLD(f) abuf->fields.sfmt_l_adrp.f
747 1.1 christos int UNUSED written = 0;
748 1.1 christos IADDR UNUSED pc = abuf->addr;
749 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
750 1.1 christos
751 1.1 christos {
752 1.1 christos {
753 1.1 christos USI opval = GET_H_MAC_MACLO ();
754 1.1 christos SET_H_GPR (FLD (f_r1), opval);
755 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
756 1.1 christos }
757 1.1 christos {
758 1.1 christos USI opval = 0;
759 1.1 christos SET_H_MAC_MACLO (opval);
760 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
761 1.1 christos }
762 1.1 christos {
763 1.1 christos USI opval = 0;
764 1.1 christos SET_H_MAC_MACHI (opval);
765 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
766 1.1 christos }
767 1.1 christos }
768 1.1 christos
769 1.1 christos #undef FLD
770 1.1 christos }
771 1.1 christos NEXT (vpc);
772 1.1 christos
773 1.1 christos CASE (sem, INSN_L_MFSPR) : /* l.mfspr $rD,$rA,${uimm16} */
774 1.1 christos {
775 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
776 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
777 1.1 christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
778 1.1 christos int UNUSED written = 0;
779 1.1 christos IADDR UNUSED pc = abuf->addr;
780 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
781 1.1 christos
782 1.1 christos {
783 1.1 christos USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))));
784 1.1 christos SET_H_GPR (FLD (f_r1), opval);
785 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
786 1.1 christos }
787 1.1 christos
788 1.1 christos #undef FLD
789 1.1 christos }
790 1.1 christos NEXT (vpc);
791 1.1 christos
792 1.1 christos CASE (sem, INSN_L_MTSPR) : /* l.mtspr $rA,$rB,${uimm16-split} */
793 1.1 christos {
794 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
795 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
796 1.1 christos #define FLD(f) abuf->fields.sfmt_l_mtspr.f
797 1.1 christos int UNUSED written = 0;
798 1.1 christos IADDR UNUSED pc = abuf->addr;
799 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
800 1.1 christos
801 1.1 christos or1k32bf_mtspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16_split))), GET_H_GPR (FLD (f_r3)));
802 1.1 christos
803 1.1 christos #undef FLD
804 1.1 christos }
805 1.1 christos NEXT (vpc);
806 1.1 christos
807 1.1 christos CASE (sem, INSN_L_LWZ) : /* l.lwz $rD,${simm16}($rA) */
808 1.1 christos {
809 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
810 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
811 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
812 1.1 christos int UNUSED written = 0;
813 1.1 christos IADDR UNUSED pc = abuf->addr;
814 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
815 1.1 christos
816 1.1 christos {
817 1.1 christos USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
818 1.1 christos SET_H_GPR (FLD (f_r1), opval);
819 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
820 1.1 christos }
821 1.1 christos
822 1.1 christos #undef FLD
823 1.1 christos }
824 1.1 christos NEXT (vpc);
825 1.1 christos
826 1.1 christos CASE (sem, INSN_L_LWS) : /* l.lws $rD,${simm16}($rA) */
827 1.1 christos {
828 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
829 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
830 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
831 1.1 christos int UNUSED written = 0;
832 1.1 christos IADDR UNUSED pc = abuf->addr;
833 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
834 1.1 christos
835 1.1 christos {
836 1.1 christos SI opval = EXTSISI (GETMEMSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
837 1.1 christos SET_H_GPR (FLD (f_r1), opval);
838 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
839 1.1 christos }
840 1.1 christos
841 1.1 christos #undef FLD
842 1.1 christos }
843 1.1 christos NEXT (vpc);
844 1.1 christos
845 1.1 christos CASE (sem, INSN_L_LWA) : /* l.lwa $rD,${simm16}($rA) */
846 1.1 christos {
847 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
848 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
849 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
850 1.1 christos int UNUSED written = 0;
851 1.1 christos IADDR UNUSED pc = abuf->addr;
852 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
853 1.1 christos
854 1.1 christos {
855 1.1 christos {
856 1.1 christos USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
857 1.1 christos SET_H_GPR (FLD (f_r1), opval);
858 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
859 1.1 christos }
860 1.1 christos {
861 1.1 christos BI opval = 1;
862 1.1 christos CPU (h_atomic_reserve) = opval;
863 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
864 1.1 christos }
865 1.1 christos {
866 1.1 christos SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4);
867 1.1 christos CPU (h_atomic_address) = opval;
868 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval);
869 1.1 christos }
870 1.1 christos }
871 1.1 christos
872 1.1 christos #undef FLD
873 1.1 christos }
874 1.1 christos NEXT (vpc);
875 1.1 christos
876 1.1 christos CASE (sem, INSN_L_LBZ) : /* l.lbz $rD,${simm16}($rA) */
877 1.1 christos {
878 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
879 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
880 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
881 1.1 christos int UNUSED written = 0;
882 1.1 christos IADDR UNUSED pc = abuf->addr;
883 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
884 1.1 christos
885 1.1 christos {
886 1.1 christos USI opval = ZEXTQISI (GETMEMUQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
887 1.1 christos SET_H_GPR (FLD (f_r1), opval);
888 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
889 1.1 christos }
890 1.1 christos
891 1.1 christos #undef FLD
892 1.1 christos }
893 1.1 christos NEXT (vpc);
894 1.1 christos
895 1.1 christos CASE (sem, INSN_L_LBS) : /* l.lbs $rD,${simm16}($rA) */
896 1.1 christos {
897 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
898 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
899 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
900 1.1 christos int UNUSED written = 0;
901 1.1 christos IADDR UNUSED pc = abuf->addr;
902 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
903 1.1 christos
904 1.1 christos {
905 1.1 christos SI opval = EXTQISI (GETMEMQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
906 1.1 christos SET_H_GPR (FLD (f_r1), opval);
907 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
908 1.1 christos }
909 1.1 christos
910 1.1 christos #undef FLD
911 1.1 christos }
912 1.1 christos NEXT (vpc);
913 1.1 christos
914 1.1 christos CASE (sem, INSN_L_LHZ) : /* l.lhz $rD,${simm16}($rA) */
915 1.1 christos {
916 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
917 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
918 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
919 1.1 christos int UNUSED written = 0;
920 1.1 christos IADDR UNUSED pc = abuf->addr;
921 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
922 1.1 christos
923 1.1 christos {
924 1.1 christos USI opval = ZEXTHISI (GETMEMUHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
925 1.1 christos SET_H_GPR (FLD (f_r1), opval);
926 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
927 1.1 christos }
928 1.1 christos
929 1.1 christos #undef FLD
930 1.1 christos }
931 1.1 christos NEXT (vpc);
932 1.1 christos
933 1.1 christos CASE (sem, INSN_L_LHS) : /* l.lhs $rD,${simm16}($rA) */
934 1.1 christos {
935 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
936 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
937 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
938 1.1 christos int UNUSED written = 0;
939 1.1 christos IADDR UNUSED pc = abuf->addr;
940 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
941 1.1 christos
942 1.1 christos {
943 1.1 christos SI opval = EXTHISI (GETMEMHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
944 1.1 christos SET_H_GPR (FLD (f_r1), opval);
945 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
946 1.1 christos }
947 1.1 christos
948 1.1 christos #undef FLD
949 1.1 christos }
950 1.1 christos NEXT (vpc);
951 1.1 christos
952 1.1 christos CASE (sem, INSN_L_SW) : /* l.sw ${simm16-split}($rA),$rB */
953 1.1 christos {
954 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
955 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
956 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sw.f
957 1.1 christos int UNUSED written = 0;
958 1.1 christos IADDR UNUSED pc = abuf->addr;
959 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
960 1.1 christos
961 1.1 christos {
962 1.1 christos SI tmp_addr;
963 1.1 christos tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
964 1.1 christos {
965 1.1 christos USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
966 1.1 christos SETMEMUSI (current_cpu, pc, tmp_addr, opval);
967 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
968 1.1 christos }
969 1.1 christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
970 1.1 christos {
971 1.1 christos BI opval = 0;
972 1.1 christos CPU (h_atomic_reserve) = opval;
973 1.1 christos written |= (1 << 4);
974 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
975 1.1 christos }
976 1.1 christos }
977 1.1 christos }
978 1.1 christos
979 1.1 christos abuf->written = written;
980 1.1 christos #undef FLD
981 1.1 christos }
982 1.1 christos NEXT (vpc);
983 1.1 christos
984 1.1 christos CASE (sem, INSN_L_SB) : /* l.sb ${simm16-split}($rA),$rB */
985 1.1 christos {
986 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
987 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
988 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sw.f
989 1.1 christos int UNUSED written = 0;
990 1.1 christos IADDR UNUSED pc = abuf->addr;
991 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
992 1.1 christos
993 1.1 christos {
994 1.1 christos SI tmp_addr;
995 1.1 christos tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1);
996 1.1 christos {
997 1.1 christos UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3)));
998 1.1 christos SETMEMUQI (current_cpu, pc, tmp_addr, opval);
999 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1000 1.1 christos }
1001 1.1 christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
1002 1.1 christos {
1003 1.1 christos BI opval = 0;
1004 1.1 christos CPU (h_atomic_reserve) = opval;
1005 1.1 christos written |= (1 << 4);
1006 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1007 1.1 christos }
1008 1.1 christos }
1009 1.1 christos }
1010 1.1 christos
1011 1.1 christos abuf->written = written;
1012 1.1 christos #undef FLD
1013 1.1 christos }
1014 1.1 christos NEXT (vpc);
1015 1.1 christos
1016 1.1 christos CASE (sem, INSN_L_SH) : /* l.sh ${simm16-split}($rA),$rB */
1017 1.1 christos {
1018 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1019 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1020 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sw.f
1021 1.1 christos int UNUSED written = 0;
1022 1.1 christos IADDR UNUSED pc = abuf->addr;
1023 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1024 1.1 christos
1025 1.1 christos {
1026 1.1 christos SI tmp_addr;
1027 1.1 christos tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2);
1028 1.1 christos {
1029 1.1 christos UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3)));
1030 1.1 christos SETMEMUHI (current_cpu, pc, tmp_addr, opval);
1031 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1032 1.1 christos }
1033 1.1 christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
1034 1.1 christos {
1035 1.1 christos BI opval = 0;
1036 1.1 christos CPU (h_atomic_reserve) = opval;
1037 1.1 christos written |= (1 << 4);
1038 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1039 1.1 christos }
1040 1.1 christos }
1041 1.1 christos }
1042 1.1 christos
1043 1.1 christos abuf->written = written;
1044 1.1 christos #undef FLD
1045 1.1 christos }
1046 1.1 christos NEXT (vpc);
1047 1.1 christos
1048 1.1 christos CASE (sem, INSN_L_SWA) : /* l.swa ${simm16-split}($rA),$rB */
1049 1.1 christos {
1050 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1051 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1052 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sw.f
1053 1.1 christos int UNUSED written = 0;
1054 1.1 christos IADDR UNUSED pc = abuf->addr;
1055 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1056 1.1 christos
1057 1.1 christos {
1058 1.1 christos SI tmp_addr;
1059 1.1 christos tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
1060 1.1 christos {
1061 1.1 christos USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
1062 1.1 christos SET_H_SYS_SR_F (opval);
1063 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1064 1.1 christos }
1065 1.1 christos if (GET_H_SYS_SR_F ()) {
1066 1.1 christos {
1067 1.1 christos USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
1068 1.1 christos SETMEMUSI (current_cpu, pc, tmp_addr, opval);
1069 1.1 christos written |= (1 << 7);
1070 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1071 1.1 christos }
1072 1.1 christos }
1073 1.1 christos {
1074 1.1 christos BI opval = 0;
1075 1.1 christos CPU (h_atomic_reserve) = opval;
1076 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1077 1.1 christos }
1078 1.1 christos }
1079 1.1 christos
1080 1.1 christos abuf->written = written;
1081 1.1 christos #undef FLD
1082 1.1 christos }
1083 1.1 christos NEXT (vpc);
1084 1.1 christos
1085 1.1 christos CASE (sem, INSN_L_SLL) : /* l.sll $rD,$rA,$rB */
1086 1.1 christos {
1087 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1088 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1089 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1090 1.1 christos int UNUSED written = 0;
1091 1.1 christos IADDR UNUSED pc = abuf->addr;
1092 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1093 1.1 christos
1094 1.1 christos {
1095 1.1 christos USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1096 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1097 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1098 1.1 christos }
1099 1.1 christos
1100 1.1 christos #undef FLD
1101 1.1 christos }
1102 1.1 christos NEXT (vpc);
1103 1.1 christos
1104 1.1 christos CASE (sem, INSN_L_SLLI) : /* l.slli $rD,$rA,${uimm6} */
1105 1.1 christos {
1106 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1107 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1108 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1109 1.1 christos int UNUSED written = 0;
1110 1.1 christos IADDR UNUSED pc = abuf->addr;
1111 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1112 1.1 christos
1113 1.1 christos {
1114 1.1 christos USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1115 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1116 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1117 1.1 christos }
1118 1.1 christos
1119 1.1 christos #undef FLD
1120 1.1 christos }
1121 1.1 christos NEXT (vpc);
1122 1.1 christos
1123 1.1 christos CASE (sem, INSN_L_SRL) : /* l.srl $rD,$rA,$rB */
1124 1.1 christos {
1125 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1126 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1127 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1128 1.1 christos int UNUSED written = 0;
1129 1.1 christos IADDR UNUSED pc = abuf->addr;
1130 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1131 1.1 christos
1132 1.1 christos {
1133 1.1 christos USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1134 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1135 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1136 1.1 christos }
1137 1.1 christos
1138 1.1 christos #undef FLD
1139 1.1 christos }
1140 1.1 christos NEXT (vpc);
1141 1.1 christos
1142 1.1 christos CASE (sem, INSN_L_SRLI) : /* l.srli $rD,$rA,${uimm6} */
1143 1.1 christos {
1144 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1145 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1146 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1147 1.1 christos int UNUSED written = 0;
1148 1.1 christos IADDR UNUSED pc = abuf->addr;
1149 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1150 1.1 christos
1151 1.1 christos {
1152 1.1 christos USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1153 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1154 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1155 1.1 christos }
1156 1.1 christos
1157 1.1 christos #undef FLD
1158 1.1 christos }
1159 1.1 christos NEXT (vpc);
1160 1.1 christos
1161 1.1 christos CASE (sem, INSN_L_SRA) : /* l.sra $rD,$rA,$rB */
1162 1.1 christos {
1163 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1164 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1165 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1166 1.1 christos int UNUSED written = 0;
1167 1.1 christos IADDR UNUSED pc = abuf->addr;
1168 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1169 1.1 christos
1170 1.1 christos {
1171 1.1 christos USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1172 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1173 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1174 1.1 christos }
1175 1.1 christos
1176 1.1 christos #undef FLD
1177 1.1 christos }
1178 1.1 christos NEXT (vpc);
1179 1.1 christos
1180 1.1 christos CASE (sem, INSN_L_SRAI) : /* l.srai $rD,$rA,${uimm6} */
1181 1.1 christos {
1182 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1183 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1184 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1185 1.1 christos int UNUSED written = 0;
1186 1.1 christos IADDR UNUSED pc = abuf->addr;
1187 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1188 1.1 christos
1189 1.1 christos {
1190 1.1 christos USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1191 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1192 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1193 1.1 christos }
1194 1.1 christos
1195 1.1 christos #undef FLD
1196 1.1 christos }
1197 1.1 christos NEXT (vpc);
1198 1.1 christos
1199 1.1 christos CASE (sem, INSN_L_ROR) : /* l.ror $rD,$rA,$rB */
1200 1.1 christos {
1201 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1202 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1203 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1204 1.1 christos int UNUSED written = 0;
1205 1.1 christos IADDR UNUSED pc = abuf->addr;
1206 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1207 1.1 christos
1208 1.1 christos {
1209 1.1 christos USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1210 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1211 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1212 1.1 christos }
1213 1.1 christos
1214 1.1 christos #undef FLD
1215 1.1 christos }
1216 1.1 christos NEXT (vpc);
1217 1.1 christos
1218 1.1 christos CASE (sem, INSN_L_RORI) : /* l.rori $rD,$rA,${uimm6} */
1219 1.1 christos {
1220 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1221 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1222 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1223 1.1 christos int UNUSED written = 0;
1224 1.1 christos IADDR UNUSED pc = abuf->addr;
1225 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1226 1.1 christos
1227 1.1 christos {
1228 1.1 christos USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1229 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1230 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1231 1.1 christos }
1232 1.1 christos
1233 1.1 christos #undef FLD
1234 1.1 christos }
1235 1.1 christos NEXT (vpc);
1236 1.1 christos
1237 1.1 christos CASE (sem, INSN_L_AND) : /* l.and $rD,$rA,$rB */
1238 1.1 christos {
1239 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1240 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1241 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1242 1.1 christos int UNUSED written = 0;
1243 1.1 christos IADDR UNUSED pc = abuf->addr;
1244 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1245 1.1 christos
1246 1.1 christos {
1247 1.1 christos USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1248 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1249 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1250 1.1 christos }
1251 1.1 christos
1252 1.1 christos #undef FLD
1253 1.1 christos }
1254 1.1 christos NEXT (vpc);
1255 1.1 christos
1256 1.1 christos CASE (sem, INSN_L_OR) : /* l.or $rD,$rA,$rB */
1257 1.1 christos {
1258 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1259 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1260 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1261 1.1 christos int UNUSED written = 0;
1262 1.1 christos IADDR UNUSED pc = abuf->addr;
1263 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1264 1.1 christos
1265 1.1 christos {
1266 1.1 christos USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1267 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1268 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1269 1.1 christos }
1270 1.1 christos
1271 1.1 christos #undef FLD
1272 1.1 christos }
1273 1.1 christos NEXT (vpc);
1274 1.1 christos
1275 1.1 christos CASE (sem, INSN_L_XOR) : /* l.xor $rD,$rA,$rB */
1276 1.1 christos {
1277 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1278 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1279 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1280 1.1 christos int UNUSED written = 0;
1281 1.1 christos IADDR UNUSED pc = abuf->addr;
1282 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1283 1.1 christos
1284 1.1 christos {
1285 1.1 christos USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1286 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1287 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1288 1.1 christos }
1289 1.1 christos
1290 1.1 christos #undef FLD
1291 1.1 christos }
1292 1.1 christos NEXT (vpc);
1293 1.1 christos
1294 1.1 christos CASE (sem, INSN_L_ADD) : /* l.add $rD,$rA,$rB */
1295 1.1 christos {
1296 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1297 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1298 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1299 1.1 christos int UNUSED written = 0;
1300 1.1 christos IADDR UNUSED pc = abuf->addr;
1301 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1302 1.1 christos
1303 1.1 christos {
1304 1.1 christos {
1305 1.1 christos {
1306 1.1 christos BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1307 1.1 christos SET_H_SYS_SR_CY (opval);
1308 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1309 1.1 christos }
1310 1.1 christos {
1311 1.1 christos BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1312 1.1 christos SET_H_SYS_SR_OV (opval);
1313 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1314 1.1 christos }
1315 1.1 christos {
1316 1.1 christos USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1317 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1318 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1319 1.1 christos }
1320 1.1 christos }
1321 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1322 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1323 1.1 christos }
1324 1.1 christos }
1325 1.1 christos
1326 1.1 christos #undef FLD
1327 1.1 christos }
1328 1.1 christos NEXT (vpc);
1329 1.1 christos
1330 1.1 christos CASE (sem, INSN_L_SUB) : /* l.sub $rD,$rA,$rB */
1331 1.1 christos {
1332 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1333 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1334 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1335 1.1 christos int UNUSED written = 0;
1336 1.1 christos IADDR UNUSED pc = abuf->addr;
1337 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1338 1.1 christos
1339 1.1 christos {
1340 1.1 christos {
1341 1.1 christos {
1342 1.1 christos BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1343 1.1 christos SET_H_SYS_SR_CY (opval);
1344 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1345 1.1 christos }
1346 1.1 christos {
1347 1.1 christos BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1348 1.1 christos SET_H_SYS_SR_OV (opval);
1349 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1350 1.1 christos }
1351 1.1 christos {
1352 1.1 christos USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1353 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1354 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1355 1.1 christos }
1356 1.1 christos }
1357 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1358 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1359 1.1 christos }
1360 1.1 christos }
1361 1.1 christos
1362 1.1 christos #undef FLD
1363 1.1 christos }
1364 1.1 christos NEXT (vpc);
1365 1.1 christos
1366 1.1 christos CASE (sem, INSN_L_ADDC) : /* l.addc $rD,$rA,$rB */
1367 1.1 christos {
1368 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1369 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1370 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1371 1.1 christos int UNUSED written = 0;
1372 1.1 christos IADDR UNUSED pc = abuf->addr;
1373 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1374 1.1 christos
1375 1.1 christos {
1376 1.1 christos {
1377 1.1 christos BI tmp_tmp_sys_sr_cy;
1378 1.1 christos tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1379 1.1 christos {
1380 1.1 christos BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1381 1.1 christos SET_H_SYS_SR_CY (opval);
1382 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1383 1.1 christos }
1384 1.1 christos {
1385 1.1 christos BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1386 1.1 christos SET_H_SYS_SR_OV (opval);
1387 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1388 1.1 christos }
1389 1.1 christos {
1390 1.1 christos USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1391 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1392 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1393 1.1 christos }
1394 1.1 christos }
1395 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1396 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1397 1.1 christos }
1398 1.1 christos }
1399 1.1 christos
1400 1.1 christos #undef FLD
1401 1.1 christos }
1402 1.1 christos NEXT (vpc);
1403 1.1 christos
1404 1.1 christos CASE (sem, INSN_L_MUL) : /* l.mul $rD,$rA,$rB */
1405 1.1 christos {
1406 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1407 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1408 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1409 1.1 christos int UNUSED written = 0;
1410 1.1 christos IADDR UNUSED pc = abuf->addr;
1411 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1412 1.1 christos
1413 1.1 christos {
1414 1.1 christos {
1415 1.1 christos {
1416 1.1 christos BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1417 1.1 christos SET_H_SYS_SR_OV (opval);
1418 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1419 1.1 christos }
1420 1.1 christos {
1421 1.1 christos USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1422 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1423 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1424 1.1 christos }
1425 1.1 christos }
1426 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1427 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1428 1.1 christos }
1429 1.1 christos }
1430 1.1 christos
1431 1.1 christos #undef FLD
1432 1.1 christos }
1433 1.1 christos NEXT (vpc);
1434 1.1 christos
1435 1.1 christos CASE (sem, INSN_L_MULD) : /* l.muld $rA,$rB */
1436 1.1 christos {
1437 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1438 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1439 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1440 1.1 christos int UNUSED written = 0;
1441 1.1 christos IADDR UNUSED pc = abuf->addr;
1442 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1443 1.1 christos
1444 1.1 christos {
1445 1.1 christos DI tmp_result;
1446 1.1 christos tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
1447 1.1 christos {
1448 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
1449 1.1 christos SET_H_MAC_MACHI (opval);
1450 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1451 1.1 christos }
1452 1.1 christos {
1453 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
1454 1.1 christos SET_H_MAC_MACLO (opval);
1455 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
1456 1.1 christos }
1457 1.1 christos }
1458 1.1 christos
1459 1.1 christos #undef FLD
1460 1.1 christos }
1461 1.1 christos NEXT (vpc);
1462 1.1 christos
1463 1.1 christos CASE (sem, INSN_L_MULU) : /* l.mulu $rD,$rA,$rB */
1464 1.1 christos {
1465 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1466 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1467 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1468 1.1 christos int UNUSED written = 0;
1469 1.1 christos IADDR UNUSED pc = abuf->addr;
1470 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1471 1.1 christos
1472 1.1 christos {
1473 1.1 christos {
1474 1.1 christos {
1475 1.1 christos BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1476 1.1 christos SET_H_SYS_SR_CY (opval);
1477 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1478 1.1 christos }
1479 1.1 christos {
1480 1.1 christos USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1481 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1482 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1483 1.1 christos }
1484 1.1 christos }
1485 1.1 christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
1486 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1487 1.1 christos }
1488 1.1 christos }
1489 1.1 christos
1490 1.1 christos #undef FLD
1491 1.1 christos }
1492 1.1 christos NEXT (vpc);
1493 1.1 christos
1494 1.1 christos CASE (sem, INSN_L_MULDU) : /* l.muldu $rA,$rB */
1495 1.1 christos {
1496 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1497 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1498 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1499 1.1 christos int UNUSED written = 0;
1500 1.1 christos IADDR UNUSED pc = abuf->addr;
1501 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1502 1.1 christos
1503 1.1 christos {
1504 1.1 christos DI tmp_result;
1505 1.1 christos tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
1506 1.1 christos {
1507 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
1508 1.1 christos SET_H_MAC_MACHI (opval);
1509 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1510 1.1 christos }
1511 1.1 christos {
1512 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
1513 1.1 christos SET_H_MAC_MACLO (opval);
1514 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
1515 1.1 christos }
1516 1.1 christos }
1517 1.1 christos
1518 1.1 christos #undef FLD
1519 1.1 christos }
1520 1.1 christos NEXT (vpc);
1521 1.1 christos
1522 1.1 christos CASE (sem, INSN_L_DIV) : /* l.div $rD,$rA,$rB */
1523 1.1 christos {
1524 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1525 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1526 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1527 1.1 christos int UNUSED written = 0;
1528 1.1 christos IADDR UNUSED pc = abuf->addr;
1529 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1530 1.1 christos
1531 1.1 christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1532 1.1 christos {
1533 1.1 christos {
1534 1.1 christos BI opval = 0;
1535 1.1 christos SET_H_SYS_SR_OV (opval);
1536 1.1 christos written |= (1 << 5);
1537 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1538 1.1 christos }
1539 1.1 christos {
1540 1.1 christos SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1541 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1542 1.1 christos written |= (1 << 4);
1543 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1544 1.1 christos }
1545 1.1 christos }
1546 1.1 christos } else {
1547 1.1 christos {
1548 1.1 christos {
1549 1.1 christos BI opval = 1;
1550 1.1 christos SET_H_SYS_SR_OV (opval);
1551 1.1 christos written |= (1 << 5);
1552 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1553 1.1 christos }
1554 1.1 christos if (GET_H_SYS_SR_OVE ()) {
1555 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1556 1.1 christos }
1557 1.1 christos }
1558 1.1 christos }
1559 1.1 christos
1560 1.1 christos abuf->written = written;
1561 1.1 christos #undef FLD
1562 1.1 christos }
1563 1.1 christos NEXT (vpc);
1564 1.1 christos
1565 1.1 christos CASE (sem, INSN_L_DIVU) : /* l.divu $rD,$rA,$rB */
1566 1.1 christos {
1567 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1568 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1569 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1570 1.1 christos int UNUSED written = 0;
1571 1.1 christos IADDR UNUSED pc = abuf->addr;
1572 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1573 1.1 christos
1574 1.1 christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1575 1.1 christos {
1576 1.1 christos {
1577 1.1 christos BI opval = 0;
1578 1.1 christos SET_H_SYS_SR_CY (opval);
1579 1.1 christos written |= (1 << 5);
1580 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1581 1.1 christos }
1582 1.1 christos {
1583 1.1 christos USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1584 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1585 1.1 christos written |= (1 << 4);
1586 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1587 1.1 christos }
1588 1.1 christos }
1589 1.1 christos } else {
1590 1.1 christos {
1591 1.1 christos {
1592 1.1 christos BI opval = 1;
1593 1.1 christos SET_H_SYS_SR_CY (opval);
1594 1.1 christos written |= (1 << 5);
1595 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1596 1.1 christos }
1597 1.1 christos if (GET_H_SYS_SR_OVE ()) {
1598 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1599 1.1 christos }
1600 1.1 christos }
1601 1.1 christos }
1602 1.1 christos
1603 1.1 christos abuf->written = written;
1604 1.1 christos #undef FLD
1605 1.1 christos }
1606 1.1 christos NEXT (vpc);
1607 1.1 christos
1608 1.1 christos CASE (sem, INSN_L_FF1) : /* l.ff1 $rD,$rA */
1609 1.1 christos {
1610 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1611 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1612 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1613 1.1 christos int UNUSED written = 0;
1614 1.1 christos IADDR UNUSED pc = abuf->addr;
1615 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1616 1.1 christos
1617 1.1 christos {
1618 1.1 christos USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1619 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1620 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1621 1.1 christos }
1622 1.1 christos
1623 1.1 christos #undef FLD
1624 1.1 christos }
1625 1.1 christos NEXT (vpc);
1626 1.1 christos
1627 1.1 christos CASE (sem, INSN_L_FL1) : /* l.fl1 $rD,$rA */
1628 1.1 christos {
1629 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1630 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1631 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1632 1.1 christos int UNUSED written = 0;
1633 1.1 christos IADDR UNUSED pc = abuf->addr;
1634 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1635 1.1 christos
1636 1.1 christos {
1637 1.1 christos USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1638 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1639 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1640 1.1 christos }
1641 1.1 christos
1642 1.1 christos #undef FLD
1643 1.1 christos }
1644 1.1 christos NEXT (vpc);
1645 1.1 christos
1646 1.1 christos CASE (sem, INSN_L_ANDI) : /* l.andi $rD,$rA,$uimm16 */
1647 1.1 christos {
1648 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1649 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1650 1.1 christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1651 1.1 christos int UNUSED written = 0;
1652 1.1 christos IADDR UNUSED pc = abuf->addr;
1653 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1654 1.1 christos
1655 1.1 christos {
1656 1.1 christos USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1657 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1658 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1659 1.1 christos }
1660 1.1 christos
1661 1.1 christos #undef FLD
1662 1.1 christos }
1663 1.1 christos NEXT (vpc);
1664 1.1 christos
1665 1.1 christos CASE (sem, INSN_L_ORI) : /* l.ori $rD,$rA,$uimm16 */
1666 1.1 christos {
1667 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1668 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1669 1.1 christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1670 1.1 christos int UNUSED written = 0;
1671 1.1 christos IADDR UNUSED pc = abuf->addr;
1672 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1673 1.1 christos
1674 1.1 christos {
1675 1.1 christos USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1676 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1677 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1678 1.1 christos }
1679 1.1 christos
1680 1.1 christos #undef FLD
1681 1.1 christos }
1682 1.1 christos NEXT (vpc);
1683 1.1 christos
1684 1.1 christos CASE (sem, INSN_L_XORI) : /* l.xori $rD,$rA,$simm16 */
1685 1.1 christos {
1686 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1687 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1688 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1689 1.1 christos int UNUSED written = 0;
1690 1.1 christos IADDR UNUSED pc = abuf->addr;
1691 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1692 1.1 christos
1693 1.1 christos {
1694 1.1 christos USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1695 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1696 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1697 1.1 christos }
1698 1.1 christos
1699 1.1 christos #undef FLD
1700 1.1 christos }
1701 1.1 christos NEXT (vpc);
1702 1.1 christos
1703 1.1 christos CASE (sem, INSN_L_ADDI) : /* l.addi $rD,$rA,$simm16 */
1704 1.1 christos {
1705 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1706 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1707 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1708 1.1 christos int UNUSED written = 0;
1709 1.1 christos IADDR UNUSED pc = abuf->addr;
1710 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1711 1.1 christos
1712 1.1 christos {
1713 1.1 christos {
1714 1.1 christos {
1715 1.1 christos BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1716 1.1 christos SET_H_SYS_SR_CY (opval);
1717 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1718 1.1 christos }
1719 1.1 christos {
1720 1.1 christos BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1721 1.1 christos SET_H_SYS_SR_OV (opval);
1722 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1723 1.1 christos }
1724 1.1 christos {
1725 1.1 christos USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1726 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1727 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1728 1.1 christos }
1729 1.1 christos }
1730 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1731 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1732 1.1 christos }
1733 1.1 christos }
1734 1.1 christos
1735 1.1 christos #undef FLD
1736 1.1 christos }
1737 1.1 christos NEXT (vpc);
1738 1.1 christos
1739 1.1 christos CASE (sem, INSN_L_ADDIC) : /* l.addic $rD,$rA,$simm16 */
1740 1.1 christos {
1741 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1742 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1743 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1744 1.1 christos int UNUSED written = 0;
1745 1.1 christos IADDR UNUSED pc = abuf->addr;
1746 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1747 1.1 christos
1748 1.1 christos {
1749 1.1 christos {
1750 1.1 christos BI tmp_tmp_sys_sr_cy;
1751 1.1 christos tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1752 1.1 christos {
1753 1.1 christos BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1754 1.1 christos SET_H_SYS_SR_CY (opval);
1755 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1756 1.1 christos }
1757 1.1 christos {
1758 1.1 christos BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1759 1.1 christos SET_H_SYS_SR_OV (opval);
1760 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1761 1.1 christos }
1762 1.1 christos {
1763 1.1 christos SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1764 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1765 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1766 1.1 christos }
1767 1.1 christos }
1768 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1769 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1770 1.1 christos }
1771 1.1 christos }
1772 1.1 christos
1773 1.1 christos #undef FLD
1774 1.1 christos }
1775 1.1 christos NEXT (vpc);
1776 1.1 christos
1777 1.1 christos CASE (sem, INSN_L_MULI) : /* l.muli $rD,$rA,$simm16 */
1778 1.1 christos {
1779 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1780 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1781 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1782 1.1 christos int UNUSED written = 0;
1783 1.1 christos IADDR UNUSED pc = abuf->addr;
1784 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1785 1.1 christos
1786 1.1 christos {
1787 1.1 christos {
1788 1.1 christos {
1789 1.1 christos USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1790 1.1 christos SET_H_SYS_SR_OV (opval);
1791 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1792 1.1 christos }
1793 1.1 christos {
1794 1.1 christos USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1795 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1796 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1797 1.1 christos }
1798 1.1 christos }
1799 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1800 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1801 1.1 christos }
1802 1.1 christos }
1803 1.1 christos
1804 1.1 christos #undef FLD
1805 1.1 christos }
1806 1.1 christos NEXT (vpc);
1807 1.1 christos
1808 1.1 christos CASE (sem, INSN_L_EXTHS) : /* l.exths $rD,$rA */
1809 1.1 christos {
1810 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1811 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1812 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1813 1.1 christos int UNUSED written = 0;
1814 1.1 christos IADDR UNUSED pc = abuf->addr;
1815 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1816 1.1 christos
1817 1.1 christos {
1818 1.1 christos USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1819 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1820 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1821 1.1 christos }
1822 1.1 christos
1823 1.1 christos #undef FLD
1824 1.1 christos }
1825 1.1 christos NEXT (vpc);
1826 1.1 christos
1827 1.1 christos CASE (sem, INSN_L_EXTBS) : /* l.extbs $rD,$rA */
1828 1.1 christos {
1829 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1830 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1831 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1832 1.1 christos int UNUSED written = 0;
1833 1.1 christos IADDR UNUSED pc = abuf->addr;
1834 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1835 1.1 christos
1836 1.1 christos {
1837 1.1 christos USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1838 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1839 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1840 1.1 christos }
1841 1.1 christos
1842 1.1 christos #undef FLD
1843 1.1 christos }
1844 1.1 christos NEXT (vpc);
1845 1.1 christos
1846 1.1 christos CASE (sem, INSN_L_EXTHZ) : /* l.exthz $rD,$rA */
1847 1.1 christos {
1848 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1849 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1850 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1851 1.1 christos int UNUSED written = 0;
1852 1.1 christos IADDR UNUSED pc = abuf->addr;
1853 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1854 1.1 christos
1855 1.1 christos {
1856 1.1 christos USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1857 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1858 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1859 1.1 christos }
1860 1.1 christos
1861 1.1 christos #undef FLD
1862 1.1 christos }
1863 1.1 christos NEXT (vpc);
1864 1.1 christos
1865 1.1 christos CASE (sem, INSN_L_EXTBZ) : /* l.extbz $rD,$rA */
1866 1.1 christos {
1867 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1868 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1869 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1870 1.1 christos int UNUSED written = 0;
1871 1.1 christos IADDR UNUSED pc = abuf->addr;
1872 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1873 1.1 christos
1874 1.1 christos {
1875 1.1 christos USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1876 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1877 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1878 1.1 christos }
1879 1.1 christos
1880 1.1 christos #undef FLD
1881 1.1 christos }
1882 1.1 christos NEXT (vpc);
1883 1.1 christos
1884 1.1 christos CASE (sem, INSN_L_EXTWS) : /* l.extws $rD,$rA */
1885 1.1 christos {
1886 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1887 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1888 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1889 1.1 christos int UNUSED written = 0;
1890 1.1 christos IADDR UNUSED pc = abuf->addr;
1891 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1892 1.1 christos
1893 1.1 christos {
1894 1.1 christos USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1895 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1896 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1897 1.1 christos }
1898 1.1 christos
1899 1.1 christos #undef FLD
1900 1.1 christos }
1901 1.1 christos NEXT (vpc);
1902 1.1 christos
1903 1.1 christos CASE (sem, INSN_L_EXTWZ) : /* l.extwz $rD,$rA */
1904 1.1 christos {
1905 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1906 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1907 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1908 1.1 christos int UNUSED written = 0;
1909 1.1 christos IADDR UNUSED pc = abuf->addr;
1910 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1911 1.1 christos
1912 1.1 christos {
1913 1.1 christos USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1914 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1915 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1916 1.1 christos }
1917 1.1 christos
1918 1.1 christos #undef FLD
1919 1.1 christos }
1920 1.1 christos NEXT (vpc);
1921 1.1 christos
1922 1.1 christos CASE (sem, INSN_L_CMOV) : /* l.cmov $rD,$rA,$rB */
1923 1.1 christos {
1924 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1925 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1926 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1927 1.1 christos int UNUSED written = 0;
1928 1.1 christos IADDR UNUSED pc = abuf->addr;
1929 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1930 1.1 christos
1931 1.1 christos if (GET_H_SYS_SR_F ()) {
1932 1.1 christos {
1933 1.1 christos USI opval = GET_H_GPR (FLD (f_r2));
1934 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1935 1.1 christos written |= (1 << 3);
1936 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1937 1.1 christos }
1938 1.1 christos } else {
1939 1.1 christos {
1940 1.1 christos USI opval = GET_H_GPR (FLD (f_r3));
1941 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1942 1.1 christos written |= (1 << 3);
1943 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1944 1.1 christos }
1945 1.1 christos }
1946 1.1 christos
1947 1.1 christos abuf->written = written;
1948 1.1 christos #undef FLD
1949 1.1 christos }
1950 1.1 christos NEXT (vpc);
1951 1.1 christos
1952 1.1 christos CASE (sem, INSN_L_SFGTS) : /* l.sfgts $rA,$rB */
1953 1.1 christos {
1954 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1955 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1956 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1957 1.1 christos int UNUSED written = 0;
1958 1.1 christos IADDR UNUSED pc = abuf->addr;
1959 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1960 1.1 christos
1961 1.1 christos {
1962 1.1 christos USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1963 1.1 christos SET_H_SYS_SR_F (opval);
1964 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1965 1.1 christos }
1966 1.1 christos
1967 1.1 christos #undef FLD
1968 1.1 christos }
1969 1.1 christos NEXT (vpc);
1970 1.1 christos
1971 1.1 christos CASE (sem, INSN_L_SFGTSI) : /* l.sfgtsi $rA,$simm16 */
1972 1.1 christos {
1973 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1974 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1975 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1976 1.1 christos int UNUSED written = 0;
1977 1.1 christos IADDR UNUSED pc = abuf->addr;
1978 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1979 1.1 christos
1980 1.1 christos {
1981 1.1 christos USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1982 1.1 christos SET_H_SYS_SR_F (opval);
1983 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1984 1.1 christos }
1985 1.1 christos
1986 1.1 christos #undef FLD
1987 1.1 christos }
1988 1.1 christos NEXT (vpc);
1989 1.1 christos
1990 1.1 christos CASE (sem, INSN_L_SFGTU) : /* l.sfgtu $rA,$rB */
1991 1.1 christos {
1992 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1993 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1994 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1995 1.1 christos int UNUSED written = 0;
1996 1.1 christos IADDR UNUSED pc = abuf->addr;
1997 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1998 1.1 christos
1999 1.1 christos {
2000 1.1 christos USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2001 1.1 christos SET_H_SYS_SR_F (opval);
2002 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2003 1.1 christos }
2004 1.1 christos
2005 1.1 christos #undef FLD
2006 1.1 christos }
2007 1.1 christos NEXT (vpc);
2008 1.1 christos
2009 1.1 christos CASE (sem, INSN_L_SFGTUI) : /* l.sfgtui $rA,$simm16 */
2010 1.1 christos {
2011 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2012 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2013 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2014 1.1 christos int UNUSED written = 0;
2015 1.1 christos IADDR UNUSED pc = abuf->addr;
2016 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2017 1.1 christos
2018 1.1 christos {
2019 1.1 christos USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2020 1.1 christos SET_H_SYS_SR_F (opval);
2021 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2022 1.1 christos }
2023 1.1 christos
2024 1.1 christos #undef FLD
2025 1.1 christos }
2026 1.1 christos NEXT (vpc);
2027 1.1 christos
2028 1.1 christos CASE (sem, INSN_L_SFGES) : /* l.sfges $rA,$rB */
2029 1.1 christos {
2030 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2031 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2032 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2033 1.1 christos int UNUSED written = 0;
2034 1.1 christos IADDR UNUSED pc = abuf->addr;
2035 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2036 1.1 christos
2037 1.1 christos {
2038 1.1 christos USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2039 1.1 christos SET_H_SYS_SR_F (opval);
2040 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2041 1.1 christos }
2042 1.1 christos
2043 1.1 christos #undef FLD
2044 1.1 christos }
2045 1.1 christos NEXT (vpc);
2046 1.1 christos
2047 1.1 christos CASE (sem, INSN_L_SFGESI) : /* l.sfgesi $rA,$simm16 */
2048 1.1 christos {
2049 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2050 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2051 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2052 1.1 christos int UNUSED written = 0;
2053 1.1 christos IADDR UNUSED pc = abuf->addr;
2054 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2055 1.1 christos
2056 1.1 christos {
2057 1.1 christos USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2058 1.1 christos SET_H_SYS_SR_F (opval);
2059 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2060 1.1 christos }
2061 1.1 christos
2062 1.1 christos #undef FLD
2063 1.1 christos }
2064 1.1 christos NEXT (vpc);
2065 1.1 christos
2066 1.1 christos CASE (sem, INSN_L_SFGEU) : /* l.sfgeu $rA,$rB */
2067 1.1 christos {
2068 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2069 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2070 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2071 1.1 christos int UNUSED written = 0;
2072 1.1 christos IADDR UNUSED pc = abuf->addr;
2073 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2074 1.1 christos
2075 1.1 christos {
2076 1.1 christos USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2077 1.1 christos SET_H_SYS_SR_F (opval);
2078 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2079 1.1 christos }
2080 1.1 christos
2081 1.1 christos #undef FLD
2082 1.1 christos }
2083 1.1 christos NEXT (vpc);
2084 1.1 christos
2085 1.1 christos CASE (sem, INSN_L_SFGEUI) : /* l.sfgeui $rA,$simm16 */
2086 1.1 christos {
2087 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2088 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2089 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2090 1.1 christos int UNUSED written = 0;
2091 1.1 christos IADDR UNUSED pc = abuf->addr;
2092 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2093 1.1 christos
2094 1.1 christos {
2095 1.1 christos USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2096 1.1 christos SET_H_SYS_SR_F (opval);
2097 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2098 1.1 christos }
2099 1.1 christos
2100 1.1 christos #undef FLD
2101 1.1 christos }
2102 1.1 christos NEXT (vpc);
2103 1.1 christos
2104 1.1 christos CASE (sem, INSN_L_SFLTS) : /* l.sflts $rA,$rB */
2105 1.1 christos {
2106 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2107 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2108 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2109 1.1 christos int UNUSED written = 0;
2110 1.1 christos IADDR UNUSED pc = abuf->addr;
2111 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2112 1.1 christos
2113 1.1 christos {
2114 1.1 christos USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2115 1.1 christos SET_H_SYS_SR_F (opval);
2116 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2117 1.1 christos }
2118 1.1 christos
2119 1.1 christos #undef FLD
2120 1.1 christos }
2121 1.1 christos NEXT (vpc);
2122 1.1 christos
2123 1.1 christos CASE (sem, INSN_L_SFLTSI) : /* l.sfltsi $rA,$simm16 */
2124 1.1 christos {
2125 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2126 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2127 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2128 1.1 christos int UNUSED written = 0;
2129 1.1 christos IADDR UNUSED pc = abuf->addr;
2130 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2131 1.1 christos
2132 1.1 christos {
2133 1.1 christos USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2134 1.1 christos SET_H_SYS_SR_F (opval);
2135 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2136 1.1 christos }
2137 1.1 christos
2138 1.1 christos #undef FLD
2139 1.1 christos }
2140 1.1 christos NEXT (vpc);
2141 1.1 christos
2142 1.1 christos CASE (sem, INSN_L_SFLTU) : /* l.sfltu $rA,$rB */
2143 1.1 christos {
2144 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2145 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2146 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2147 1.1 christos int UNUSED written = 0;
2148 1.1 christos IADDR UNUSED pc = abuf->addr;
2149 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2150 1.1 christos
2151 1.1 christos {
2152 1.1 christos USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2153 1.1 christos SET_H_SYS_SR_F (opval);
2154 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2155 1.1 christos }
2156 1.1 christos
2157 1.1 christos #undef FLD
2158 1.1 christos }
2159 1.1 christos NEXT (vpc);
2160 1.1 christos
2161 1.1 christos CASE (sem, INSN_L_SFLTUI) : /* l.sfltui $rA,$simm16 */
2162 1.1 christos {
2163 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2164 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2165 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2166 1.1 christos int UNUSED written = 0;
2167 1.1 christos IADDR UNUSED pc = abuf->addr;
2168 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2169 1.1 christos
2170 1.1 christos {
2171 1.1 christos USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2172 1.1 christos SET_H_SYS_SR_F (opval);
2173 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2174 1.1 christos }
2175 1.1 christos
2176 1.1 christos #undef FLD
2177 1.1 christos }
2178 1.1 christos NEXT (vpc);
2179 1.1 christos
2180 1.1 christos CASE (sem, INSN_L_SFLES) : /* l.sfles $rA,$rB */
2181 1.1 christos {
2182 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2183 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2184 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2185 1.1 christos int UNUSED written = 0;
2186 1.1 christos IADDR UNUSED pc = abuf->addr;
2187 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2188 1.1 christos
2189 1.1 christos {
2190 1.1 christos USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2191 1.1 christos SET_H_SYS_SR_F (opval);
2192 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2193 1.1 christos }
2194 1.1 christos
2195 1.1 christos #undef FLD
2196 1.1 christos }
2197 1.1 christos NEXT (vpc);
2198 1.1 christos
2199 1.1 christos CASE (sem, INSN_L_SFLESI) : /* l.sflesi $rA,$simm16 */
2200 1.1 christos {
2201 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2202 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2203 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2204 1.1 christos int UNUSED written = 0;
2205 1.1 christos IADDR UNUSED pc = abuf->addr;
2206 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2207 1.1 christos
2208 1.1 christos {
2209 1.1 christos USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2210 1.1 christos SET_H_SYS_SR_F (opval);
2211 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2212 1.1 christos }
2213 1.1 christos
2214 1.1 christos #undef FLD
2215 1.1 christos }
2216 1.1 christos NEXT (vpc);
2217 1.1 christos
2218 1.1 christos CASE (sem, INSN_L_SFLEU) : /* l.sfleu $rA,$rB */
2219 1.1 christos {
2220 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2221 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2222 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2223 1.1 christos int UNUSED written = 0;
2224 1.1 christos IADDR UNUSED pc = abuf->addr;
2225 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2226 1.1 christos
2227 1.1 christos {
2228 1.1 christos USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2229 1.1 christos SET_H_SYS_SR_F (opval);
2230 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2231 1.1 christos }
2232 1.1 christos
2233 1.1 christos #undef FLD
2234 1.1 christos }
2235 1.1 christos NEXT (vpc);
2236 1.1 christos
2237 1.1 christos CASE (sem, INSN_L_SFLEUI) : /* l.sfleui $rA,$simm16 */
2238 1.1 christos {
2239 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2240 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2241 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2242 1.1 christos int UNUSED written = 0;
2243 1.1 christos IADDR UNUSED pc = abuf->addr;
2244 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2245 1.1 christos
2246 1.1 christos {
2247 1.1 christos USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2248 1.1 christos SET_H_SYS_SR_F (opval);
2249 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2250 1.1 christos }
2251 1.1 christos
2252 1.1 christos #undef FLD
2253 1.1 christos }
2254 1.1 christos NEXT (vpc);
2255 1.1 christos
2256 1.1 christos CASE (sem, INSN_L_SFEQ) : /* l.sfeq $rA,$rB */
2257 1.1 christos {
2258 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2259 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2260 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2261 1.1 christos int UNUSED written = 0;
2262 1.1 christos IADDR UNUSED pc = abuf->addr;
2263 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2264 1.1 christos
2265 1.1 christos {
2266 1.1 christos USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2267 1.1 christos SET_H_SYS_SR_F (opval);
2268 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2269 1.1 christos }
2270 1.1 christos
2271 1.1 christos #undef FLD
2272 1.1 christos }
2273 1.1 christos NEXT (vpc);
2274 1.1 christos
2275 1.1 christos CASE (sem, INSN_L_SFEQI) : /* l.sfeqi $rA,$simm16 */
2276 1.1 christos {
2277 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2278 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2279 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2280 1.1 christos int UNUSED written = 0;
2281 1.1 christos IADDR UNUSED pc = abuf->addr;
2282 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2283 1.1 christos
2284 1.1 christos {
2285 1.1 christos USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2286 1.1 christos SET_H_SYS_SR_F (opval);
2287 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2288 1.1 christos }
2289 1.1 christos
2290 1.1 christos #undef FLD
2291 1.1 christos }
2292 1.1 christos NEXT (vpc);
2293 1.1 christos
2294 1.1 christos CASE (sem, INSN_L_SFNE) : /* l.sfne $rA,$rB */
2295 1.1 christos {
2296 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2297 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2298 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2299 1.1 christos int UNUSED written = 0;
2300 1.1 christos IADDR UNUSED pc = abuf->addr;
2301 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2302 1.1 christos
2303 1.1 christos {
2304 1.1 christos USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2305 1.1 christos SET_H_SYS_SR_F (opval);
2306 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2307 1.1 christos }
2308 1.1 christos
2309 1.1 christos #undef FLD
2310 1.1 christos }
2311 1.1 christos NEXT (vpc);
2312 1.1 christos
2313 1.1 christos CASE (sem, INSN_L_SFNEI) : /* l.sfnei $rA,$simm16 */
2314 1.1 christos {
2315 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2316 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2317 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2318 1.1 christos int UNUSED written = 0;
2319 1.1 christos IADDR UNUSED pc = abuf->addr;
2320 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2321 1.1 christos
2322 1.1 christos {
2323 1.1 christos USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2324 1.1 christos SET_H_SYS_SR_F (opval);
2325 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2326 1.1 christos }
2327 1.1 christos
2328 1.1 christos #undef FLD
2329 1.1 christos }
2330 1.1 christos NEXT (vpc);
2331 1.1 christos
2332 1.1 christos CASE (sem, INSN_L_MAC) : /* l.mac $rA,$rB */
2333 1.1 christos {
2334 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2335 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2336 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2337 1.1 christos int UNUSED written = 0;
2338 1.1 christos IADDR UNUSED pc = abuf->addr;
2339 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2340 1.1 christos
2341 1.1 christos {
2342 1.1 christos {
2343 1.1 christos DI tmp_prod;
2344 1.1 christos DI tmp_mac;
2345 1.1 christos DI tmp_result;
2346 1.1 christos tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2347 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2348 1.1 christos tmp_result = ADDDI (tmp_prod, tmp_mac);
2349 1.1 christos {
2350 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2351 1.1 christos SET_H_MAC_MACHI (opval);
2352 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2353 1.1 christos }
2354 1.1 christos {
2355 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2356 1.1 christos SET_H_MAC_MACLO (opval);
2357 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2358 1.1 christos }
2359 1.1 christos {
2360 1.1 christos BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2361 1.1 christos SET_H_SYS_SR_OV (opval);
2362 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2363 1.1 christos }
2364 1.1 christos }
2365 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2366 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2367 1.1 christos }
2368 1.1 christos }
2369 1.1 christos
2370 1.1 christos #undef FLD
2371 1.1 christos }
2372 1.1 christos NEXT (vpc);
2373 1.1 christos
2374 1.1 christos CASE (sem, INSN_L_MACI) : /* l.maci $rA,${simm16} */
2375 1.1 christos {
2376 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2377 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2378 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2379 1.1 christos int UNUSED written = 0;
2380 1.1 christos IADDR UNUSED pc = abuf->addr;
2381 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2382 1.1 christos
2383 1.1 christos {
2384 1.1 christos {
2385 1.1 christos DI tmp_prod;
2386 1.1 christos DI tmp_mac;
2387 1.1 christos DI tmp_result;
2388 1.1 christos tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
2389 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2390 1.1 christos tmp_result = ADDDI (tmp_mac, tmp_prod);
2391 1.1 christos {
2392 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2393 1.1 christos SET_H_MAC_MACHI (opval);
2394 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2395 1.1 christos }
2396 1.1 christos {
2397 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2398 1.1 christos SET_H_MAC_MACLO (opval);
2399 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2400 1.1 christos }
2401 1.1 christos {
2402 1.1 christos BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2403 1.1 christos SET_H_SYS_SR_OV (opval);
2404 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2405 1.1 christos }
2406 1.1 christos }
2407 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2408 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2409 1.1 christos }
2410 1.1 christos }
2411 1.1 christos
2412 1.1 christos #undef FLD
2413 1.1 christos }
2414 1.1 christos NEXT (vpc);
2415 1.1 christos
2416 1.1 christos CASE (sem, INSN_L_MACU) : /* l.macu $rA,$rB */
2417 1.1 christos {
2418 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2419 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2420 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2421 1.1 christos int UNUSED written = 0;
2422 1.1 christos IADDR UNUSED pc = abuf->addr;
2423 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2424 1.1 christos
2425 1.1 christos {
2426 1.1 christos {
2427 1.1 christos DI tmp_prod;
2428 1.1 christos DI tmp_mac;
2429 1.1 christos DI tmp_result;
2430 1.1 christos tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2431 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2432 1.1 christos tmp_result = ADDDI (tmp_prod, tmp_mac);
2433 1.1 christos {
2434 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2435 1.1 christos SET_H_MAC_MACHI (opval);
2436 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2437 1.1 christos }
2438 1.1 christos {
2439 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2440 1.1 christos SET_H_MAC_MACLO (opval);
2441 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2442 1.1 christos }
2443 1.1 christos {
2444 1.1 christos BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
2445 1.1 christos SET_H_SYS_SR_CY (opval);
2446 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2447 1.1 christos }
2448 1.1 christos }
2449 1.1 christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2450 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2451 1.1 christos }
2452 1.1 christos }
2453 1.1 christos
2454 1.1 christos #undef FLD
2455 1.1 christos }
2456 1.1 christos NEXT (vpc);
2457 1.1 christos
2458 1.1 christos CASE (sem, INSN_L_MSB) : /* l.msb $rA,$rB */
2459 1.1 christos {
2460 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2461 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2462 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2463 1.1 christos int UNUSED written = 0;
2464 1.1 christos IADDR UNUSED pc = abuf->addr;
2465 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2466 1.1 christos
2467 1.1 christos {
2468 1.1 christos {
2469 1.1 christos DI tmp_prod;
2470 1.1 christos DI tmp_mac;
2471 1.1 christos DI tmp_result;
2472 1.1 christos tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2473 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2474 1.1 christos tmp_result = SUBDI (tmp_mac, tmp_prod);
2475 1.1 christos {
2476 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2477 1.1 christos SET_H_MAC_MACHI (opval);
2478 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2479 1.1 christos }
2480 1.1 christos {
2481 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2482 1.1 christos SET_H_MAC_MACLO (opval);
2483 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2484 1.1 christos }
2485 1.1 christos {
2486 1.1 christos BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
2487 1.1 christos SET_H_SYS_SR_OV (opval);
2488 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2489 1.1 christos }
2490 1.1 christos }
2491 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2492 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2493 1.1 christos }
2494 1.1 christos }
2495 1.1 christos
2496 1.1 christos #undef FLD
2497 1.1 christos }
2498 1.1 christos NEXT (vpc);
2499 1.1 christos
2500 1.1 christos CASE (sem, INSN_L_MSBU) : /* l.msbu $rA,$rB */
2501 1.1 christos {
2502 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2503 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2504 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2505 1.1 christos int UNUSED written = 0;
2506 1.1 christos IADDR UNUSED pc = abuf->addr;
2507 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2508 1.1 christos
2509 1.1 christos {
2510 1.1 christos {
2511 1.1 christos DI tmp_prod;
2512 1.1 christos DI tmp_mac;
2513 1.1 christos DI tmp_result;
2514 1.1 christos tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2515 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2516 1.1 christos tmp_result = SUBDI (tmp_mac, tmp_prod);
2517 1.1 christos {
2518 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2519 1.1 christos SET_H_MAC_MACHI (opval);
2520 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2521 1.1 christos }
2522 1.1 christos {
2523 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2524 1.1 christos SET_H_MAC_MACLO (opval);
2525 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2526 1.1 christos }
2527 1.1 christos {
2528 1.1 christos BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
2529 1.1 christos SET_H_SYS_SR_CY (opval);
2530 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2531 1.1 christos }
2532 1.1 christos }
2533 1.1 christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2534 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2535 1.1 christos }
2536 1.1 christos }
2537 1.1 christos
2538 1.1 christos #undef FLD
2539 1.1 christos }
2540 1.1 christos NEXT (vpc);
2541 1.1 christos
2542 1.1 christos CASE (sem, INSN_L_CUST1) : /* l.cust1 */
2543 1.1 christos {
2544 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2545 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2546 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2547 1.1 christos int UNUSED written = 0;
2548 1.1 christos IADDR UNUSED pc = abuf->addr;
2549 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2550 1.1 christos
2551 1.1 christos ((void) 0); /*nop*/
2552 1.1 christos
2553 1.1 christos #undef FLD
2554 1.1 christos }
2555 1.1 christos NEXT (vpc);
2556 1.1 christos
2557 1.1 christos CASE (sem, INSN_L_CUST2) : /* l.cust2 */
2558 1.1 christos {
2559 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2560 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2561 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2562 1.1 christos int UNUSED written = 0;
2563 1.1 christos IADDR UNUSED pc = abuf->addr;
2564 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2565 1.1 christos
2566 1.1 christos ((void) 0); /*nop*/
2567 1.1 christos
2568 1.1 christos #undef FLD
2569 1.1 christos }
2570 1.1 christos NEXT (vpc);
2571 1.1 christos
2572 1.1 christos CASE (sem, INSN_L_CUST3) : /* l.cust3 */
2573 1.1 christos {
2574 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2575 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2576 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2577 1.1 christos int UNUSED written = 0;
2578 1.1 christos IADDR UNUSED pc = abuf->addr;
2579 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2580 1.1 christos
2581 1.1 christos ((void) 0); /*nop*/
2582 1.1 christos
2583 1.1 christos #undef FLD
2584 1.1 christos }
2585 1.1 christos NEXT (vpc);
2586 1.1 christos
2587 1.1 christos CASE (sem, INSN_L_CUST4) : /* l.cust4 */
2588 1.1 christos {
2589 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2590 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2591 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2592 1.1 christos int UNUSED written = 0;
2593 1.1 christos IADDR UNUSED pc = abuf->addr;
2594 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2595 1.1 christos
2596 1.1 christos ((void) 0); /*nop*/
2597 1.1 christos
2598 1.1 christos #undef FLD
2599 1.1 christos }
2600 1.1 christos NEXT (vpc);
2601 1.1 christos
2602 1.1 christos CASE (sem, INSN_L_CUST5) : /* l.cust5 */
2603 1.1 christos {
2604 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2605 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2606 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2607 1.1 christos int UNUSED written = 0;
2608 1.1 christos IADDR UNUSED pc = abuf->addr;
2609 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2610 1.1 christos
2611 1.1 christos ((void) 0); /*nop*/
2612 1.1 christos
2613 1.1 christos #undef FLD
2614 1.1 christos }
2615 1.1 christos NEXT (vpc);
2616 1.1 christos
2617 1.1 christos CASE (sem, INSN_L_CUST6) : /* l.cust6 */
2618 1.1 christos {
2619 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2620 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2621 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2622 1.1 christos int UNUSED written = 0;
2623 1.1 christos IADDR UNUSED pc = abuf->addr;
2624 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2625 1.1 christos
2626 1.1 christos ((void) 0); /*nop*/
2627 1.1 christos
2628 1.1 christos #undef FLD
2629 1.1 christos }
2630 1.1 christos NEXT (vpc);
2631 1.1 christos
2632 1.1 christos CASE (sem, INSN_L_CUST7) : /* l.cust7 */
2633 1.1 christos {
2634 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2635 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2636 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2637 1.1 christos int UNUSED written = 0;
2638 1.1 christos IADDR UNUSED pc = abuf->addr;
2639 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2640 1.1 christos
2641 1.1 christos ((void) 0); /*nop*/
2642 1.1 christos
2643 1.1 christos #undef FLD
2644 1.1 christos }
2645 1.1 christos NEXT (vpc);
2646 1.1 christos
2647 1.1 christos CASE (sem, INSN_L_CUST8) : /* l.cust8 */
2648 1.1 christos {
2649 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2650 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2651 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2652 1.1 christos int UNUSED written = 0;
2653 1.1 christos IADDR UNUSED pc = abuf->addr;
2654 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2655 1.1 christos
2656 1.1 christos ((void) 0); /*nop*/
2657 1.1 christos
2658 1.1 christos #undef FLD
2659 1.1 christos }
2660 1.1 christos NEXT (vpc);
2661 1.1 christos
2662 1.1 christos CASE (sem, INSN_LF_ADD_S) : /* lf.add.s $rDSF,$rASF,$rBSF */
2663 1.1 christos {
2664 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2665 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2666 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2667 1.1 christos int UNUSED written = 0;
2668 1.1 christos IADDR UNUSED pc = abuf->addr;
2669 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2670 1.1 christos
2671 1.1 christos {
2672 1.1 christos SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2673 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2674 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2675 1.1 christos }
2676 1.1 christos
2677 1.1 christos #undef FLD
2678 1.1 christos }
2679 1.1 christos NEXT (vpc);
2680 1.1 christos
2681 1.1.1.2 christos CASE (sem, INSN_LF_ADD_D32) : /* lf.add.d $rDD32F,$rAD32F,$rBD32F */
2682 1.1.1.2 christos {
2683 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2684 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2685 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2686 1.1.1.2 christos int UNUSED written = 0;
2687 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2688 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2689 1.1.1.2 christos
2690 1.1.1.2 christos {
2691 1.1.1.2 christos DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2692 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2693 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2694 1.1.1.2 christos }
2695 1.1.1.2 christos
2696 1.1.1.2 christos #undef FLD
2697 1.1.1.2 christos }
2698 1.1.1.2 christos NEXT (vpc);
2699 1.1.1.2 christos
2700 1.1 christos CASE (sem, INSN_LF_SUB_S) : /* lf.sub.s $rDSF,$rASF,$rBSF */
2701 1.1 christos {
2702 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2703 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2704 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2705 1.1 christos int UNUSED written = 0;
2706 1.1 christos IADDR UNUSED pc = abuf->addr;
2707 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2708 1.1 christos
2709 1.1 christos {
2710 1.1 christos SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2711 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2712 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2713 1.1 christos }
2714 1.1 christos
2715 1.1 christos #undef FLD
2716 1.1 christos }
2717 1.1 christos NEXT (vpc);
2718 1.1 christos
2719 1.1.1.2 christos CASE (sem, INSN_LF_SUB_D32) : /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */
2720 1.1.1.2 christos {
2721 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2722 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2723 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2724 1.1.1.2 christos int UNUSED written = 0;
2725 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2726 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2727 1.1.1.2 christos
2728 1.1.1.2 christos {
2729 1.1.1.2 christos DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2730 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2731 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2732 1.1.1.2 christos }
2733 1.1.1.2 christos
2734 1.1.1.2 christos #undef FLD
2735 1.1.1.2 christos }
2736 1.1.1.2 christos NEXT (vpc);
2737 1.1.1.2 christos
2738 1.1 christos CASE (sem, INSN_LF_MUL_S) : /* lf.mul.s $rDSF,$rASF,$rBSF */
2739 1.1 christos {
2740 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2741 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2742 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2743 1.1 christos int UNUSED written = 0;
2744 1.1 christos IADDR UNUSED pc = abuf->addr;
2745 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2746 1.1 christos
2747 1.1 christos {
2748 1.1 christos SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2749 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2750 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2751 1.1 christos }
2752 1.1 christos
2753 1.1 christos #undef FLD
2754 1.1 christos }
2755 1.1 christos NEXT (vpc);
2756 1.1 christos
2757 1.1.1.2 christos CASE (sem, INSN_LF_MUL_D32) : /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */
2758 1.1.1.2 christos {
2759 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2760 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2761 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2762 1.1.1.2 christos int UNUSED written = 0;
2763 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2764 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2765 1.1.1.2 christos
2766 1.1.1.2 christos {
2767 1.1.1.2 christos DF opval = CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2768 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2769 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2770 1.1.1.2 christos }
2771 1.1.1.2 christos
2772 1.1.1.2 christos #undef FLD
2773 1.1.1.2 christos }
2774 1.1.1.2 christos NEXT (vpc);
2775 1.1.1.2 christos
2776 1.1 christos CASE (sem, INSN_LF_DIV_S) : /* lf.div.s $rDSF,$rASF,$rBSF */
2777 1.1 christos {
2778 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2779 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2780 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2781 1.1 christos int UNUSED written = 0;
2782 1.1 christos IADDR UNUSED pc = abuf->addr;
2783 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2784 1.1 christos
2785 1.1 christos {
2786 1.1 christos SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2787 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2788 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2789 1.1 christos }
2790 1.1 christos
2791 1.1 christos #undef FLD
2792 1.1 christos }
2793 1.1 christos NEXT (vpc);
2794 1.1 christos
2795 1.1.1.2 christos CASE (sem, INSN_LF_DIV_D32) : /* lf.div.d $rDD32F,$rAD32F,$rBD32F */
2796 1.1.1.2 christos {
2797 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2798 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2799 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2800 1.1.1.2 christos int UNUSED written = 0;
2801 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2802 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2803 1.1.1.2 christos
2804 1.1.1.2 christos {
2805 1.1.1.2 christos DF opval = CGEN_CPU_FPU (current_cpu)->ops->divdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2806 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2807 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2808 1.1.1.2 christos }
2809 1.1.1.2 christos
2810 1.1.1.2 christos #undef FLD
2811 1.1.1.2 christos }
2812 1.1.1.2 christos NEXT (vpc);
2813 1.1.1.2 christos
2814 1.1 christos CASE (sem, INSN_LF_REM_S) : /* lf.rem.s $rDSF,$rASF,$rBSF */
2815 1.1 christos {
2816 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2817 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2818 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2819 1.1 christos int UNUSED written = 0;
2820 1.1 christos IADDR UNUSED pc = abuf->addr;
2821 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2822 1.1 christos
2823 1.1 christos {
2824 1.1 christos SF opval = CGEN_CPU_FPU (current_cpu)->ops->remsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2825 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2826 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2827 1.1 christos }
2828 1.1 christos
2829 1.1 christos #undef FLD
2830 1.1 christos }
2831 1.1 christos NEXT (vpc);
2832 1.1 christos
2833 1.1.1.2 christos CASE (sem, INSN_LF_REM_D32) : /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */
2834 1.1.1.2 christos {
2835 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2836 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2837 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2838 1.1.1.2 christos int UNUSED written = 0;
2839 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2840 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2841 1.1.1.2 christos
2842 1.1.1.2 christos {
2843 1.1.1.2 christos DF opval = CGEN_CPU_FPU (current_cpu)->ops->remdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2844 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2845 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2846 1.1.1.2 christos }
2847 1.1.1.2 christos
2848 1.1.1.2 christos #undef FLD
2849 1.1.1.2 christos }
2850 1.1.1.2 christos NEXT (vpc);
2851 1.1.1.2 christos
2852 1.1 christos CASE (sem, INSN_LF_ITOF_S) : /* lf.itof.s $rDSF,$rA */
2853 1.1 christos {
2854 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2855 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2856 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
2857 1.1 christos int UNUSED written = 0;
2858 1.1 christos IADDR UNUSED pc = abuf->addr;
2859 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2860 1.1 christos
2861 1.1 christos {
2862 1.1 christos SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), TRUNCSISI (GET_H_GPR (FLD (f_r2))));
2863 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2864 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2865 1.1 christos }
2866 1.1 christos
2867 1.1 christos #undef FLD
2868 1.1 christos }
2869 1.1 christos NEXT (vpc);
2870 1.1 christos
2871 1.1.1.2 christos CASE (sem, INSN_LF_ITOF_D32) : /* lf.itof.d $rDD32F,$rADI */
2872 1.1.1.2 christos {
2873 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2874 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2875 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2876 1.1.1.2 christos int UNUSED written = 0;
2877 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2878 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2879 1.1.1.2 christos
2880 1.1.1.2 christos {
2881 1.1.1.2 christos DF opval = CGEN_CPU_FPU (current_cpu)->ops->floatdidf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_I64R (FLD (f_rad32)));
2882 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2883 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2884 1.1.1.2 christos }
2885 1.1.1.2 christos
2886 1.1.1.2 christos #undef FLD
2887 1.1.1.2 christos }
2888 1.1.1.2 christos NEXT (vpc);
2889 1.1.1.2 christos
2890 1.1 christos CASE (sem, INSN_LF_FTOI_S) : /* lf.ftoi.s $rD,$rASF */
2891 1.1 christos {
2892 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2893 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2894 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
2895 1.1 christos int UNUSED written = 0;
2896 1.1 christos IADDR UNUSED pc = abuf->addr;
2897 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2898 1.1 christos
2899 1.1 christos {
2900 1.1 christos SI opval = EXTSISI (CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FSR (FLD (f_r2))));
2901 1.1 christos SET_H_GPR (FLD (f_r1), opval);
2902 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
2903 1.1 christos }
2904 1.1 christos
2905 1.1 christos #undef FLD
2906 1.1 christos }
2907 1.1 christos NEXT (vpc);
2908 1.1 christos
2909 1.1.1.2 christos CASE (sem, INSN_LF_FTOI_D32) : /* lf.ftoi.d $rDDI,$rAD32F */
2910 1.1.1.2 christos {
2911 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2912 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2913 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2914 1.1.1.2 christos int UNUSED written = 0;
2915 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2916 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2917 1.1.1.2 christos
2918 1.1.1.2 christos {
2919 1.1.1.2 christos DI opval = CGEN_CPU_FPU (current_cpu)->ops->fixdfdi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FD32R (FLD (f_rad32)));
2920 1.1.1.2 christos SET_H_I64R (FLD (f_rdd32), opval);
2921 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval);
2922 1.1.1.2 christos }
2923 1.1.1.2 christos
2924 1.1.1.2 christos #undef FLD
2925 1.1.1.2 christos }
2926 1.1.1.2 christos NEXT (vpc);
2927 1.1.1.2 christos
2928 1.1.1.2 christos CASE (sem, INSN_LF_SFEQ_S) : /* lf.sfeq.s $rASF,$rBSF */
2929 1.1 christos {
2930 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2931 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2932 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2933 1.1 christos int UNUSED written = 0;
2934 1.1 christos IADDR UNUSED pc = abuf->addr;
2935 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2936 1.1 christos
2937 1.1 christos {
2938 1.1 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2939 1.1 christos SET_H_SYS_SR_F (opval);
2940 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2941 1.1 christos }
2942 1.1 christos
2943 1.1 christos #undef FLD
2944 1.1 christos }
2945 1.1 christos NEXT (vpc);
2946 1.1 christos
2947 1.1.1.2 christos CASE (sem, INSN_LF_SFEQ_D32) : /* lf.sfeq.d $rAD32F,$rBD32F */
2948 1.1.1.2 christos {
2949 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2950 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2951 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2952 1.1.1.2 christos int UNUSED written = 0;
2953 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2954 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2955 1.1.1.2 christos
2956 1.1.1.2 christos {
2957 1.1.1.2 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2958 1.1.1.2 christos SET_H_SYS_SR_F (opval);
2959 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2960 1.1.1.2 christos }
2961 1.1.1.2 christos
2962 1.1.1.2 christos #undef FLD
2963 1.1.1.2 christos }
2964 1.1.1.2 christos NEXT (vpc);
2965 1.1.1.2 christos
2966 1.1.1.2 christos CASE (sem, INSN_LF_SFNE_S) : /* lf.sfne.s $rASF,$rBSF */
2967 1.1 christos {
2968 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2969 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2970 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2971 1.1 christos int UNUSED written = 0;
2972 1.1 christos IADDR UNUSED pc = abuf->addr;
2973 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2974 1.1 christos
2975 1.1 christos {
2976 1.1 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2977 1.1 christos SET_H_SYS_SR_F (opval);
2978 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2979 1.1 christos }
2980 1.1 christos
2981 1.1 christos #undef FLD
2982 1.1 christos }
2983 1.1 christos NEXT (vpc);
2984 1.1 christos
2985 1.1.1.2 christos CASE (sem, INSN_LF_SFNE_D32) : /* lf.sfne.d $rAD32F,$rBD32F */
2986 1.1.1.2 christos {
2987 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2988 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2989 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2990 1.1.1.2 christos int UNUSED written = 0;
2991 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2992 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2993 1.1.1.2 christos
2994 1.1.1.2 christos {
2995 1.1.1.2 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2996 1.1.1.2 christos SET_H_SYS_SR_F (opval);
2997 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2998 1.1.1.2 christos }
2999 1.1.1.2 christos
3000 1.1.1.2 christos #undef FLD
3001 1.1.1.2 christos }
3002 1.1.1.2 christos NEXT (vpc);
3003 1.1.1.2 christos
3004 1.1.1.2 christos CASE (sem, INSN_LF_SFGE_S) : /* lf.sfge.s $rASF,$rBSF */
3005 1.1 christos {
3006 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3007 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3008 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3009 1.1 christos int UNUSED written = 0;
3010 1.1 christos IADDR UNUSED pc = abuf->addr;
3011 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3012 1.1 christos
3013 1.1 christos {
3014 1.1 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
3015 1.1 christos SET_H_SYS_SR_F (opval);
3016 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3017 1.1 christos }
3018 1.1 christos
3019 1.1 christos #undef FLD
3020 1.1 christos }
3021 1.1 christos NEXT (vpc);
3022 1.1 christos
3023 1.1.1.2 christos CASE (sem, INSN_LF_SFGE_D32) : /* lf.sfge.d $rAD32F,$rBD32F */
3024 1.1.1.2 christos {
3025 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3026 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3027 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3028 1.1.1.2 christos int UNUSED written = 0;
3029 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3030 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3031 1.1.1.2 christos
3032 1.1.1.2 christos {
3033 1.1.1.2 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3034 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3035 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3036 1.1.1.2 christos }
3037 1.1.1.2 christos
3038 1.1.1.2 christos #undef FLD
3039 1.1.1.2 christos }
3040 1.1.1.2 christos NEXT (vpc);
3041 1.1.1.2 christos
3042 1.1.1.2 christos CASE (sem, INSN_LF_SFGT_S) : /* lf.sfgt.s $rASF,$rBSF */
3043 1.1 christos {
3044 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3045 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3046 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3047 1.1 christos int UNUSED written = 0;
3048 1.1 christos IADDR UNUSED pc = abuf->addr;
3049 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3050 1.1 christos
3051 1.1 christos {
3052 1.1 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
3053 1.1 christos SET_H_SYS_SR_F (opval);
3054 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3055 1.1 christos }
3056 1.1 christos
3057 1.1 christos #undef FLD
3058 1.1 christos }
3059 1.1 christos NEXT (vpc);
3060 1.1 christos
3061 1.1.1.2 christos CASE (sem, INSN_LF_SFGT_D32) : /* lf.sfgt.d $rAD32F,$rBD32F */
3062 1.1.1.2 christos {
3063 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3064 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3065 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3066 1.1.1.2 christos int UNUSED written = 0;
3067 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3068 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3069 1.1.1.2 christos
3070 1.1.1.2 christos {
3071 1.1.1.2 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3072 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3073 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3074 1.1.1.2 christos }
3075 1.1.1.2 christos
3076 1.1.1.2 christos #undef FLD
3077 1.1.1.2 christos }
3078 1.1.1.2 christos NEXT (vpc);
3079 1.1.1.2 christos
3080 1.1.1.2 christos CASE (sem, INSN_LF_SFLT_S) : /* lf.sflt.s $rASF,$rBSF */
3081 1.1 christos {
3082 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3083 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3084 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3085 1.1 christos int UNUSED written = 0;
3086 1.1 christos IADDR UNUSED pc = abuf->addr;
3087 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3088 1.1 christos
3089 1.1 christos {
3090 1.1 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
3091 1.1 christos SET_H_SYS_SR_F (opval);
3092 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3093 1.1 christos }
3094 1.1 christos
3095 1.1 christos #undef FLD
3096 1.1 christos }
3097 1.1 christos NEXT (vpc);
3098 1.1 christos
3099 1.1.1.2 christos CASE (sem, INSN_LF_SFLT_D32) : /* lf.sflt.d $rAD32F,$rBD32F */
3100 1.1.1.2 christos {
3101 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3102 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3103 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3104 1.1.1.2 christos int UNUSED written = 0;
3105 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3106 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3107 1.1.1.2 christos
3108 1.1.1.2 christos {
3109 1.1.1.2 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3110 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3111 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3112 1.1.1.2 christos }
3113 1.1.1.2 christos
3114 1.1.1.2 christos #undef FLD
3115 1.1.1.2 christos }
3116 1.1.1.2 christos NEXT (vpc);
3117 1.1.1.2 christos
3118 1.1.1.2 christos CASE (sem, INSN_LF_SFLE_S) : /* lf.sfle.s $rASF,$rBSF */
3119 1.1 christos {
3120 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3121 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3122 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3123 1.1 christos int UNUSED written = 0;
3124 1.1 christos IADDR UNUSED pc = abuf->addr;
3125 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3126 1.1 christos
3127 1.1 christos {
3128 1.1 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
3129 1.1 christos SET_H_SYS_SR_F (opval);
3130 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3131 1.1 christos }
3132 1.1 christos
3133 1.1 christos #undef FLD
3134 1.1 christos }
3135 1.1 christos NEXT (vpc);
3136 1.1 christos
3137 1.1.1.2 christos CASE (sem, INSN_LF_SFLE_D32) : /* lf.sfle.d $rAD32F,$rBD32F */
3138 1.1.1.2 christos {
3139 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3140 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3141 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3142 1.1.1.2 christos int UNUSED written = 0;
3143 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3144 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3145 1.1.1.2 christos
3146 1.1.1.2 christos {
3147 1.1.1.2 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3148 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3149 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3150 1.1.1.2 christos }
3151 1.1.1.2 christos
3152 1.1.1.2 christos #undef FLD
3153 1.1.1.2 christos }
3154 1.1.1.2 christos NEXT (vpc);
3155 1.1.1.2 christos
3156 1.1.1.2 christos CASE (sem, INSN_LF_SFUEQ_S) : /* lf.sfueq.s $rASF,$rBSF */
3157 1.1.1.2 christos {
3158 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3159 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3160 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3161 1.1.1.2 christos int UNUSED written = 0;
3162 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3163 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3164 1.1.1.2 christos
3165 1.1.1.2 christos {
3166 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3167 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3168 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3169 1.1.1.2 christos }
3170 1.1.1.2 christos
3171 1.1.1.2 christos #undef FLD
3172 1.1.1.2 christos }
3173 1.1.1.2 christos NEXT (vpc);
3174 1.1.1.2 christos
3175 1.1.1.2 christos CASE (sem, INSN_LF_SFUEQ_D32) : /* lf.sfueq.d $rAD32F,$rBD32F */
3176 1.1.1.2 christos {
3177 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3178 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3179 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3180 1.1.1.2 christos int UNUSED written = 0;
3181 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3182 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3183 1.1.1.2 christos
3184 1.1.1.2 christos {
3185 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3186 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3187 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3188 1.1.1.2 christos }
3189 1.1.1.2 christos
3190 1.1.1.2 christos #undef FLD
3191 1.1.1.2 christos }
3192 1.1.1.2 christos NEXT (vpc);
3193 1.1.1.2 christos
3194 1.1.1.2 christos CASE (sem, INSN_LF_SFUNE_S) : /* lf.sfune.s $rASF,$rBSF */
3195 1.1.1.2 christos {
3196 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3197 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3198 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3199 1.1.1.2 christos int UNUSED written = 0;
3200 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3201 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3202 1.1.1.2 christos
3203 1.1.1.2 christos {
3204 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3205 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3206 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3207 1.1.1.2 christos }
3208 1.1.1.2 christos
3209 1.1.1.2 christos #undef FLD
3210 1.1.1.2 christos }
3211 1.1.1.2 christos NEXT (vpc);
3212 1.1.1.2 christos
3213 1.1.1.2 christos CASE (sem, INSN_LF_SFUNE_D32) : /* lf.sfune.d $rAD32F,$rBD32F */
3214 1.1.1.2 christos {
3215 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3216 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3217 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3218 1.1.1.2 christos int UNUSED written = 0;
3219 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3220 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3221 1.1.1.2 christos
3222 1.1.1.2 christos {
3223 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3224 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3225 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3226 1.1.1.2 christos }
3227 1.1.1.2 christos
3228 1.1.1.2 christos #undef FLD
3229 1.1.1.2 christos }
3230 1.1.1.2 christos NEXT (vpc);
3231 1.1.1.2 christos
3232 1.1.1.2 christos CASE (sem, INSN_LF_SFUGT_S) : /* lf.sfugt.s $rASF,$rBSF */
3233 1.1.1.2 christos {
3234 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3235 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3236 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3237 1.1.1.2 christos int UNUSED written = 0;
3238 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3239 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3240 1.1.1.2 christos
3241 1.1.1.2 christos {
3242 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3243 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3244 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3245 1.1.1.2 christos }
3246 1.1.1.2 christos
3247 1.1.1.2 christos #undef FLD
3248 1.1.1.2 christos }
3249 1.1.1.2 christos NEXT (vpc);
3250 1.1.1.2 christos
3251 1.1.1.2 christos CASE (sem, INSN_LF_SFUGT_D32) : /* lf.sfugt.d $rAD32F,$rBD32F */
3252 1.1.1.2 christos {
3253 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3254 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3255 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3256 1.1.1.2 christos int UNUSED written = 0;
3257 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3258 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3259 1.1.1.2 christos
3260 1.1.1.2 christos {
3261 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3262 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3263 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3264 1.1.1.2 christos }
3265 1.1.1.2 christos
3266 1.1.1.2 christos #undef FLD
3267 1.1.1.2 christos }
3268 1.1.1.2 christos NEXT (vpc);
3269 1.1.1.2 christos
3270 1.1.1.2 christos CASE (sem, INSN_LF_SFUGE_S) : /* lf.sfuge.s $rASF,$rBSF */
3271 1.1.1.2 christos {
3272 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3273 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3274 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3275 1.1.1.2 christos int UNUSED written = 0;
3276 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3277 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3278 1.1.1.2 christos
3279 1.1.1.2 christos {
3280 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3281 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3282 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3283 1.1.1.2 christos }
3284 1.1.1.2 christos
3285 1.1.1.2 christos #undef FLD
3286 1.1.1.2 christos }
3287 1.1.1.2 christos NEXT (vpc);
3288 1.1.1.2 christos
3289 1.1.1.2 christos CASE (sem, INSN_LF_SFUGE_D32) : /* lf.sfuge.d $rAD32F,$rBD32F */
3290 1.1.1.2 christos {
3291 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3292 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3293 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3294 1.1.1.2 christos int UNUSED written = 0;
3295 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3296 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3297 1.1.1.2 christos
3298 1.1.1.2 christos {
3299 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3300 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3301 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3302 1.1.1.2 christos }
3303 1.1.1.2 christos
3304 1.1.1.2 christos #undef FLD
3305 1.1.1.2 christos }
3306 1.1.1.2 christos NEXT (vpc);
3307 1.1.1.2 christos
3308 1.1.1.2 christos CASE (sem, INSN_LF_SFULT_S) : /* lf.sfult.s $rASF,$rBSF */
3309 1.1.1.2 christos {
3310 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3311 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3312 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3313 1.1.1.2 christos int UNUSED written = 0;
3314 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3315 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3316 1.1.1.2 christos
3317 1.1.1.2 christos {
3318 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3319 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3320 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3321 1.1.1.2 christos }
3322 1.1.1.2 christos
3323 1.1.1.2 christos #undef FLD
3324 1.1.1.2 christos }
3325 1.1.1.2 christos NEXT (vpc);
3326 1.1.1.2 christos
3327 1.1.1.2 christos CASE (sem, INSN_LF_SFULT_D32) : /* lf.sfult.d $rAD32F,$rBD32F */
3328 1.1.1.2 christos {
3329 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3330 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3331 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3332 1.1.1.2 christos int UNUSED written = 0;
3333 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3334 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3335 1.1.1.2 christos
3336 1.1.1.2 christos {
3337 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3338 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3339 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3340 1.1.1.2 christos }
3341 1.1.1.2 christos
3342 1.1.1.2 christos #undef FLD
3343 1.1.1.2 christos }
3344 1.1.1.2 christos NEXT (vpc);
3345 1.1.1.2 christos
3346 1.1.1.2 christos CASE (sem, INSN_LF_SFULE_S) : /* lf.sfule.s $rASF,$rBSF */
3347 1.1.1.2 christos {
3348 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3349 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3350 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3351 1.1.1.2 christos int UNUSED written = 0;
3352 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3353 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3354 1.1.1.2 christos
3355 1.1.1.2 christos {
3356 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3357 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3358 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3359 1.1.1.2 christos }
3360 1.1.1.2 christos
3361 1.1.1.2 christos #undef FLD
3362 1.1.1.2 christos }
3363 1.1.1.2 christos NEXT (vpc);
3364 1.1.1.2 christos
3365 1.1.1.2 christos CASE (sem, INSN_LF_SFULE_D32) : /* lf.sfule.d $rAD32F,$rBD32F */
3366 1.1.1.2 christos {
3367 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3368 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3369 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3370 1.1.1.2 christos int UNUSED written = 0;
3371 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3372 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3373 1.1.1.2 christos
3374 1.1.1.2 christos {
3375 1.1.1.2 christos BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3376 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3377 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3378 1.1.1.2 christos }
3379 1.1.1.2 christos
3380 1.1.1.2 christos #undef FLD
3381 1.1.1.2 christos }
3382 1.1.1.2 christos NEXT (vpc);
3383 1.1.1.2 christos
3384 1.1.1.2 christos CASE (sem, INSN_LF_SFUN_S) : /* lf.sfun.s $rASF,$rBSF */
3385 1.1.1.2 christos {
3386 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3387 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3388 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3389 1.1.1.2 christos int UNUSED written = 0;
3390 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3391 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3392 1.1.1.2 christos
3393 1.1.1.2 christos {
3394 1.1.1.2 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
3395 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3396 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3397 1.1.1.2 christos }
3398 1.1.1.2 christos
3399 1.1.1.2 christos #undef FLD
3400 1.1.1.2 christos }
3401 1.1.1.2 christos NEXT (vpc);
3402 1.1.1.2 christos
3403 1.1.1.2 christos CASE (sem, INSN_LF_SFUN_D32) : /* lf.sfun.d $rAD32F,$rBD32F */
3404 1.1.1.2 christos {
3405 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3406 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3407 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3408 1.1.1.2 christos int UNUSED written = 0;
3409 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3410 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3411 1.1.1.2 christos
3412 1.1.1.2 christos {
3413 1.1.1.2 christos BI opval = CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3414 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3415 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3416 1.1.1.2 christos }
3417 1.1.1.2 christos
3418 1.1.1.2 christos #undef FLD
3419 1.1.1.2 christos }
3420 1.1.1.2 christos NEXT (vpc);
3421 1.1.1.2 christos
3422 1.1 christos CASE (sem, INSN_LF_MADD_S) : /* lf.madd.s $rDSF,$rASF,$rBSF */
3423 1.1 christos {
3424 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3425 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3426 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3427 1.1 christos int UNUSED written = 0;
3428 1.1 christos IADDR UNUSED pc = abuf->addr;
3429 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3430 1.1 christos
3431 1.1 christos {
3432 1.1 christos SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), GET_H_FSR (FLD (f_r1)));
3433 1.1 christos SET_H_FSR (FLD (f_r1), opval);
3434 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
3435 1.1 christos }
3436 1.1 christos
3437 1.1 christos #undef FLD
3438 1.1 christos }
3439 1.1 christos NEXT (vpc);
3440 1.1 christos
3441 1.1.1.2 christos CASE (sem, INSN_LF_MADD_D32) : /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */
3442 1.1.1.2 christos {
3443 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3444 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3445 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3446 1.1.1.2 christos int UNUSED written = 0;
3447 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3448 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3449 1.1.1.2 christos
3450 1.1.1.2 christos {
3451 1.1.1.2 christos DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), GET_H_FD32R (FLD (f_rdd32)));
3452 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
3453 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
3454 1.1.1.2 christos }
3455 1.1.1.2 christos
3456 1.1.1.2 christos #undef FLD
3457 1.1.1.2 christos }
3458 1.1.1.2 christos NEXT (vpc);
3459 1.1.1.2 christos
3460 1.1 christos CASE (sem, INSN_LF_CUST1_S) : /* lf.cust1.s $rASF,$rBSF */
3461 1.1 christos {
3462 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3463 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3464 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
3465 1.1 christos int UNUSED written = 0;
3466 1.1 christos IADDR UNUSED pc = abuf->addr;
3467 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3468 1.1 christos
3469 1.1 christos ((void) 0); /*nop*/
3470 1.1 christos
3471 1.1 christos #undef FLD
3472 1.1 christos }
3473 1.1 christos NEXT (vpc);
3474 1.1 christos
3475 1.1.1.2 christos CASE (sem, INSN_LF_CUST1_D32) : /* lf.cust1.d */
3476 1.1.1.2 christos {
3477 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3478 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3479 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_empty.f
3480 1.1.1.2 christos int UNUSED written = 0;
3481 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3482 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3483 1.1.1.2 christos
3484 1.1.1.2 christos ((void) 0); /*nop*/
3485 1.1.1.2 christos
3486 1.1.1.2 christos #undef FLD
3487 1.1.1.2 christos }
3488 1.1.1.2 christos NEXT (vpc);
3489 1.1.1.2 christos
3490 1.1 christos
3491 1.1 christos }
3492 1.1 christos ENDSWITCH (sem) /* End of semantic switch. */
3493 1.1 christos
3494 1.1 christos /* At this point `vpc' contains the next insn to execute. */
3495 1.1 christos }
3496 1.1 christos
3497 1.1 christos #undef DEFINE_SWITCH
3498 1.1 christos #endif /* DEFINE_SWITCH */
3499