sem-switch.c revision 1.1.1.2 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.2 christos Copyright (C) 1996-2020 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU simulators.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.1 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 christos /* FIXME: A better way would be to have 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 BI tmp_flag;
1060 1.1 christos tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
1061 1.1 christos {
1062 1.1 christos USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
1063 1.1 christos SET_H_SYS_SR_F (opval);
1064 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1065 1.1 christos }
1066 1.1 christos if (GET_H_SYS_SR_F ()) {
1067 1.1 christos {
1068 1.1 christos USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
1069 1.1 christos SETMEMUSI (current_cpu, pc, tmp_addr, opval);
1070 1.1 christos written |= (1 << 7);
1071 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1072 1.1 christos }
1073 1.1 christos }
1074 1.1 christos {
1075 1.1 christos BI opval = 0;
1076 1.1 christos CPU (h_atomic_reserve) = opval;
1077 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1078 1.1 christos }
1079 1.1 christos }
1080 1.1 christos
1081 1.1 christos abuf->written = written;
1082 1.1 christos #undef FLD
1083 1.1 christos }
1084 1.1 christos NEXT (vpc);
1085 1.1 christos
1086 1.1 christos CASE (sem, INSN_L_SLL) : /* l.sll $rD,$rA,$rB */
1087 1.1 christos {
1088 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1089 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1090 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1091 1.1 christos int UNUSED written = 0;
1092 1.1 christos IADDR UNUSED pc = abuf->addr;
1093 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1094 1.1 christos
1095 1.1 christos {
1096 1.1 christos USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1097 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1098 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1099 1.1 christos }
1100 1.1 christos
1101 1.1 christos #undef FLD
1102 1.1 christos }
1103 1.1 christos NEXT (vpc);
1104 1.1 christos
1105 1.1 christos CASE (sem, INSN_L_SLLI) : /* l.slli $rD,$rA,${uimm6} */
1106 1.1 christos {
1107 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1108 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1109 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1110 1.1 christos int UNUSED written = 0;
1111 1.1 christos IADDR UNUSED pc = abuf->addr;
1112 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1113 1.1 christos
1114 1.1 christos {
1115 1.1 christos USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1116 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1117 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1118 1.1 christos }
1119 1.1 christos
1120 1.1 christos #undef FLD
1121 1.1 christos }
1122 1.1 christos NEXT (vpc);
1123 1.1 christos
1124 1.1 christos CASE (sem, INSN_L_SRL) : /* l.srl $rD,$rA,$rB */
1125 1.1 christos {
1126 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1127 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1128 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1129 1.1 christos int UNUSED written = 0;
1130 1.1 christos IADDR UNUSED pc = abuf->addr;
1131 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1132 1.1 christos
1133 1.1 christos {
1134 1.1 christos USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1135 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1136 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1137 1.1 christos }
1138 1.1 christos
1139 1.1 christos #undef FLD
1140 1.1 christos }
1141 1.1 christos NEXT (vpc);
1142 1.1 christos
1143 1.1 christos CASE (sem, INSN_L_SRLI) : /* l.srli $rD,$rA,${uimm6} */
1144 1.1 christos {
1145 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1146 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1147 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1148 1.1 christos int UNUSED written = 0;
1149 1.1 christos IADDR UNUSED pc = abuf->addr;
1150 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1151 1.1 christos
1152 1.1 christos {
1153 1.1 christos USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1154 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1155 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1156 1.1 christos }
1157 1.1 christos
1158 1.1 christos #undef FLD
1159 1.1 christos }
1160 1.1 christos NEXT (vpc);
1161 1.1 christos
1162 1.1 christos CASE (sem, INSN_L_SRA) : /* l.sra $rD,$rA,$rB */
1163 1.1 christos {
1164 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1165 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1166 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1167 1.1 christos int UNUSED written = 0;
1168 1.1 christos IADDR UNUSED pc = abuf->addr;
1169 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1170 1.1 christos
1171 1.1 christos {
1172 1.1 christos USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1173 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1174 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1175 1.1 christos }
1176 1.1 christos
1177 1.1 christos #undef FLD
1178 1.1 christos }
1179 1.1 christos NEXT (vpc);
1180 1.1 christos
1181 1.1 christos CASE (sem, INSN_L_SRAI) : /* l.srai $rD,$rA,${uimm6} */
1182 1.1 christos {
1183 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1184 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1185 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1186 1.1 christos int UNUSED written = 0;
1187 1.1 christos IADDR UNUSED pc = abuf->addr;
1188 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1189 1.1 christos
1190 1.1 christos {
1191 1.1 christos USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1192 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1193 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1194 1.1 christos }
1195 1.1 christos
1196 1.1 christos #undef FLD
1197 1.1 christos }
1198 1.1 christos NEXT (vpc);
1199 1.1 christos
1200 1.1 christos CASE (sem, INSN_L_ROR) : /* l.ror $rD,$rA,$rB */
1201 1.1 christos {
1202 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1203 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1204 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1205 1.1 christos int UNUSED written = 0;
1206 1.1 christos IADDR UNUSED pc = abuf->addr;
1207 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1208 1.1 christos
1209 1.1 christos {
1210 1.1 christos USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1211 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1212 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1213 1.1 christos }
1214 1.1 christos
1215 1.1 christos #undef FLD
1216 1.1 christos }
1217 1.1 christos NEXT (vpc);
1218 1.1 christos
1219 1.1 christos CASE (sem, INSN_L_RORI) : /* l.rori $rD,$rA,${uimm6} */
1220 1.1 christos {
1221 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1222 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1223 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1224 1.1 christos int UNUSED written = 0;
1225 1.1 christos IADDR UNUSED pc = abuf->addr;
1226 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1227 1.1 christos
1228 1.1 christos {
1229 1.1 christos USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1230 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1231 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1232 1.1 christos }
1233 1.1 christos
1234 1.1 christos #undef FLD
1235 1.1 christos }
1236 1.1 christos NEXT (vpc);
1237 1.1 christos
1238 1.1 christos CASE (sem, INSN_L_AND) : /* l.and $rD,$rA,$rB */
1239 1.1 christos {
1240 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1241 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1242 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1243 1.1 christos int UNUSED written = 0;
1244 1.1 christos IADDR UNUSED pc = abuf->addr;
1245 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1246 1.1 christos
1247 1.1 christos {
1248 1.1 christos USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1249 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1250 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1251 1.1 christos }
1252 1.1 christos
1253 1.1 christos #undef FLD
1254 1.1 christos }
1255 1.1 christos NEXT (vpc);
1256 1.1 christos
1257 1.1 christos CASE (sem, INSN_L_OR) : /* l.or $rD,$rA,$rB */
1258 1.1 christos {
1259 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1260 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1261 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1262 1.1 christos int UNUSED written = 0;
1263 1.1 christos IADDR UNUSED pc = abuf->addr;
1264 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1265 1.1 christos
1266 1.1 christos {
1267 1.1 christos USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1268 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1269 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1270 1.1 christos }
1271 1.1 christos
1272 1.1 christos #undef FLD
1273 1.1 christos }
1274 1.1 christos NEXT (vpc);
1275 1.1 christos
1276 1.1 christos CASE (sem, INSN_L_XOR) : /* l.xor $rD,$rA,$rB */
1277 1.1 christos {
1278 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1279 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1280 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1281 1.1 christos int UNUSED written = 0;
1282 1.1 christos IADDR UNUSED pc = abuf->addr;
1283 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1284 1.1 christos
1285 1.1 christos {
1286 1.1 christos USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1287 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1288 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1289 1.1 christos }
1290 1.1 christos
1291 1.1 christos #undef FLD
1292 1.1 christos }
1293 1.1 christos NEXT (vpc);
1294 1.1 christos
1295 1.1 christos CASE (sem, INSN_L_ADD) : /* l.add $rD,$rA,$rB */
1296 1.1 christos {
1297 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1298 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1299 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1300 1.1 christos int UNUSED written = 0;
1301 1.1 christos IADDR UNUSED pc = abuf->addr;
1302 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1303 1.1 christos
1304 1.1 christos {
1305 1.1 christos {
1306 1.1 christos {
1307 1.1 christos BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1308 1.1 christos SET_H_SYS_SR_CY (opval);
1309 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1310 1.1 christos }
1311 1.1 christos {
1312 1.1 christos BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1313 1.1 christos SET_H_SYS_SR_OV (opval);
1314 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1315 1.1 christos }
1316 1.1 christos {
1317 1.1 christos USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1318 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1319 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1320 1.1 christos }
1321 1.1 christos }
1322 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1323 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1324 1.1 christos }
1325 1.1 christos }
1326 1.1 christos
1327 1.1 christos #undef FLD
1328 1.1 christos }
1329 1.1 christos NEXT (vpc);
1330 1.1 christos
1331 1.1 christos CASE (sem, INSN_L_SUB) : /* l.sub $rD,$rA,$rB */
1332 1.1 christos {
1333 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1334 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1335 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1336 1.1 christos int UNUSED written = 0;
1337 1.1 christos IADDR UNUSED pc = abuf->addr;
1338 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1339 1.1 christos
1340 1.1 christos {
1341 1.1 christos {
1342 1.1 christos {
1343 1.1 christos BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1344 1.1 christos SET_H_SYS_SR_CY (opval);
1345 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1346 1.1 christos }
1347 1.1 christos {
1348 1.1 christos BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1349 1.1 christos SET_H_SYS_SR_OV (opval);
1350 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1351 1.1 christos }
1352 1.1 christos {
1353 1.1 christos USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1354 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1355 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1356 1.1 christos }
1357 1.1 christos }
1358 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1359 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1360 1.1 christos }
1361 1.1 christos }
1362 1.1 christos
1363 1.1 christos #undef FLD
1364 1.1 christos }
1365 1.1 christos NEXT (vpc);
1366 1.1 christos
1367 1.1 christos CASE (sem, INSN_L_ADDC) : /* l.addc $rD,$rA,$rB */
1368 1.1 christos {
1369 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1370 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1371 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1372 1.1 christos int UNUSED written = 0;
1373 1.1 christos IADDR UNUSED pc = abuf->addr;
1374 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1375 1.1 christos
1376 1.1 christos {
1377 1.1 christos {
1378 1.1 christos BI tmp_tmp_sys_sr_cy;
1379 1.1 christos tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1380 1.1 christos {
1381 1.1 christos BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1382 1.1 christos SET_H_SYS_SR_CY (opval);
1383 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1384 1.1 christos }
1385 1.1 christos {
1386 1.1 christos BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1387 1.1 christos SET_H_SYS_SR_OV (opval);
1388 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1389 1.1 christos }
1390 1.1 christos {
1391 1.1 christos USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1392 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1393 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1394 1.1 christos }
1395 1.1 christos }
1396 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1397 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1398 1.1 christos }
1399 1.1 christos }
1400 1.1 christos
1401 1.1 christos #undef FLD
1402 1.1 christos }
1403 1.1 christos NEXT (vpc);
1404 1.1 christos
1405 1.1 christos CASE (sem, INSN_L_MUL) : /* l.mul $rD,$rA,$rB */
1406 1.1 christos {
1407 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1408 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1409 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1410 1.1 christos int UNUSED written = 0;
1411 1.1 christos IADDR UNUSED pc = abuf->addr;
1412 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1413 1.1 christos
1414 1.1 christos {
1415 1.1 christos {
1416 1.1 christos {
1417 1.1 christos BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1418 1.1 christos SET_H_SYS_SR_OV (opval);
1419 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1420 1.1 christos }
1421 1.1 christos {
1422 1.1 christos USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1423 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1424 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1425 1.1 christos }
1426 1.1 christos }
1427 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1428 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1429 1.1 christos }
1430 1.1 christos }
1431 1.1 christos
1432 1.1 christos #undef FLD
1433 1.1 christos }
1434 1.1 christos NEXT (vpc);
1435 1.1 christos
1436 1.1 christos CASE (sem, INSN_L_MULD) : /* l.muld $rA,$rB */
1437 1.1 christos {
1438 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1439 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1440 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1441 1.1 christos int UNUSED written = 0;
1442 1.1 christos IADDR UNUSED pc = abuf->addr;
1443 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1444 1.1 christos
1445 1.1 christos {
1446 1.1 christos DI tmp_result;
1447 1.1 christos tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
1448 1.1 christos {
1449 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
1450 1.1 christos SET_H_MAC_MACHI (opval);
1451 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1452 1.1 christos }
1453 1.1 christos {
1454 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
1455 1.1 christos SET_H_MAC_MACLO (opval);
1456 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
1457 1.1 christos }
1458 1.1 christos }
1459 1.1 christos
1460 1.1 christos #undef FLD
1461 1.1 christos }
1462 1.1 christos NEXT (vpc);
1463 1.1 christos
1464 1.1 christos CASE (sem, INSN_L_MULU) : /* l.mulu $rD,$rA,$rB */
1465 1.1 christos {
1466 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1467 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1468 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1469 1.1 christos int UNUSED written = 0;
1470 1.1 christos IADDR UNUSED pc = abuf->addr;
1471 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1472 1.1 christos
1473 1.1 christos {
1474 1.1 christos {
1475 1.1 christos {
1476 1.1 christos BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1477 1.1 christos SET_H_SYS_SR_CY (opval);
1478 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1479 1.1 christos }
1480 1.1 christos {
1481 1.1 christos USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1482 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1483 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1484 1.1 christos }
1485 1.1 christos }
1486 1.1 christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
1487 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1488 1.1 christos }
1489 1.1 christos }
1490 1.1 christos
1491 1.1 christos #undef FLD
1492 1.1 christos }
1493 1.1 christos NEXT (vpc);
1494 1.1 christos
1495 1.1 christos CASE (sem, INSN_L_MULDU) : /* l.muldu $rA,$rB */
1496 1.1 christos {
1497 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1498 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1499 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1500 1.1 christos int UNUSED written = 0;
1501 1.1 christos IADDR UNUSED pc = abuf->addr;
1502 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1503 1.1 christos
1504 1.1 christos {
1505 1.1 christos DI tmp_result;
1506 1.1 christos tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
1507 1.1 christos {
1508 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
1509 1.1 christos SET_H_MAC_MACHI (opval);
1510 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1511 1.1 christos }
1512 1.1 christos {
1513 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
1514 1.1 christos SET_H_MAC_MACLO (opval);
1515 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
1516 1.1 christos }
1517 1.1 christos }
1518 1.1 christos
1519 1.1 christos #undef FLD
1520 1.1 christos }
1521 1.1 christos NEXT (vpc);
1522 1.1 christos
1523 1.1 christos CASE (sem, INSN_L_DIV) : /* l.div $rD,$rA,$rB */
1524 1.1 christos {
1525 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1526 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1527 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1528 1.1 christos int UNUSED written = 0;
1529 1.1 christos IADDR UNUSED pc = abuf->addr;
1530 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1531 1.1 christos
1532 1.1 christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1533 1.1 christos {
1534 1.1 christos {
1535 1.1 christos BI opval = 0;
1536 1.1 christos SET_H_SYS_SR_OV (opval);
1537 1.1 christos written |= (1 << 5);
1538 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1539 1.1 christos }
1540 1.1 christos {
1541 1.1 christos SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1542 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1543 1.1 christos written |= (1 << 4);
1544 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1545 1.1 christos }
1546 1.1 christos }
1547 1.1 christos } else {
1548 1.1 christos {
1549 1.1 christos {
1550 1.1 christos BI opval = 1;
1551 1.1 christos SET_H_SYS_SR_OV (opval);
1552 1.1 christos written |= (1 << 5);
1553 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1554 1.1 christos }
1555 1.1 christos if (GET_H_SYS_SR_OVE ()) {
1556 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1557 1.1 christos }
1558 1.1 christos }
1559 1.1 christos }
1560 1.1 christos
1561 1.1 christos abuf->written = written;
1562 1.1 christos #undef FLD
1563 1.1 christos }
1564 1.1 christos NEXT (vpc);
1565 1.1 christos
1566 1.1 christos CASE (sem, INSN_L_DIVU) : /* l.divu $rD,$rA,$rB */
1567 1.1 christos {
1568 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1569 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1570 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1571 1.1 christos int UNUSED written = 0;
1572 1.1 christos IADDR UNUSED pc = abuf->addr;
1573 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1574 1.1 christos
1575 1.1 christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1576 1.1 christos {
1577 1.1 christos {
1578 1.1 christos BI opval = 0;
1579 1.1 christos SET_H_SYS_SR_CY (opval);
1580 1.1 christos written |= (1 << 5);
1581 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1582 1.1 christos }
1583 1.1 christos {
1584 1.1 christos USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1585 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1586 1.1 christos written |= (1 << 4);
1587 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1588 1.1 christos }
1589 1.1 christos }
1590 1.1 christos } else {
1591 1.1 christos {
1592 1.1 christos {
1593 1.1 christos BI opval = 1;
1594 1.1 christos SET_H_SYS_SR_CY (opval);
1595 1.1 christos written |= (1 << 5);
1596 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1597 1.1 christos }
1598 1.1 christos if (GET_H_SYS_SR_OVE ()) {
1599 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1600 1.1 christos }
1601 1.1 christos }
1602 1.1 christos }
1603 1.1 christos
1604 1.1 christos abuf->written = written;
1605 1.1 christos #undef FLD
1606 1.1 christos }
1607 1.1 christos NEXT (vpc);
1608 1.1 christos
1609 1.1 christos CASE (sem, INSN_L_FF1) : /* l.ff1 $rD,$rA */
1610 1.1 christos {
1611 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1612 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1613 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1614 1.1 christos int UNUSED written = 0;
1615 1.1 christos IADDR UNUSED pc = abuf->addr;
1616 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1617 1.1 christos
1618 1.1 christos {
1619 1.1 christos USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1620 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1621 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1622 1.1 christos }
1623 1.1 christos
1624 1.1 christos #undef FLD
1625 1.1 christos }
1626 1.1 christos NEXT (vpc);
1627 1.1 christos
1628 1.1 christos CASE (sem, INSN_L_FL1) : /* l.fl1 $rD,$rA */
1629 1.1 christos {
1630 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1631 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1632 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1633 1.1 christos int UNUSED written = 0;
1634 1.1 christos IADDR UNUSED pc = abuf->addr;
1635 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1636 1.1 christos
1637 1.1 christos {
1638 1.1 christos USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1639 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1640 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1641 1.1 christos }
1642 1.1 christos
1643 1.1 christos #undef FLD
1644 1.1 christos }
1645 1.1 christos NEXT (vpc);
1646 1.1 christos
1647 1.1 christos CASE (sem, INSN_L_ANDI) : /* l.andi $rD,$rA,$uimm16 */
1648 1.1 christos {
1649 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1650 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1651 1.1 christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1652 1.1 christos int UNUSED written = 0;
1653 1.1 christos IADDR UNUSED pc = abuf->addr;
1654 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1655 1.1 christos
1656 1.1 christos {
1657 1.1 christos USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1658 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1659 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1660 1.1 christos }
1661 1.1 christos
1662 1.1 christos #undef FLD
1663 1.1 christos }
1664 1.1 christos NEXT (vpc);
1665 1.1 christos
1666 1.1 christos CASE (sem, INSN_L_ORI) : /* l.ori $rD,$rA,$uimm16 */
1667 1.1 christos {
1668 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1669 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1670 1.1 christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1671 1.1 christos int UNUSED written = 0;
1672 1.1 christos IADDR UNUSED pc = abuf->addr;
1673 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1674 1.1 christos
1675 1.1 christos {
1676 1.1 christos USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1677 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1678 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1679 1.1 christos }
1680 1.1 christos
1681 1.1 christos #undef FLD
1682 1.1 christos }
1683 1.1 christos NEXT (vpc);
1684 1.1 christos
1685 1.1 christos CASE (sem, INSN_L_XORI) : /* l.xori $rD,$rA,$simm16 */
1686 1.1 christos {
1687 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1688 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1689 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1690 1.1 christos int UNUSED written = 0;
1691 1.1 christos IADDR UNUSED pc = abuf->addr;
1692 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1693 1.1 christos
1694 1.1 christos {
1695 1.1 christos USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1696 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1697 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1698 1.1 christos }
1699 1.1 christos
1700 1.1 christos #undef FLD
1701 1.1 christos }
1702 1.1 christos NEXT (vpc);
1703 1.1 christos
1704 1.1 christos CASE (sem, INSN_L_ADDI) : /* l.addi $rD,$rA,$simm16 */
1705 1.1 christos {
1706 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1707 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1708 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1709 1.1 christos int UNUSED written = 0;
1710 1.1 christos IADDR UNUSED pc = abuf->addr;
1711 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1712 1.1 christos
1713 1.1 christos {
1714 1.1 christos {
1715 1.1 christos {
1716 1.1 christos BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1717 1.1 christos SET_H_SYS_SR_CY (opval);
1718 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1719 1.1 christos }
1720 1.1 christos {
1721 1.1 christos BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1722 1.1 christos SET_H_SYS_SR_OV (opval);
1723 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1724 1.1 christos }
1725 1.1 christos {
1726 1.1 christos USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1727 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1728 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1729 1.1 christos }
1730 1.1 christos }
1731 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1732 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1733 1.1 christos }
1734 1.1 christos }
1735 1.1 christos
1736 1.1 christos #undef FLD
1737 1.1 christos }
1738 1.1 christos NEXT (vpc);
1739 1.1 christos
1740 1.1 christos CASE (sem, INSN_L_ADDIC) : /* l.addic $rD,$rA,$simm16 */
1741 1.1 christos {
1742 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1743 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1744 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1745 1.1 christos int UNUSED written = 0;
1746 1.1 christos IADDR UNUSED pc = abuf->addr;
1747 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1748 1.1 christos
1749 1.1 christos {
1750 1.1 christos {
1751 1.1 christos BI tmp_tmp_sys_sr_cy;
1752 1.1 christos tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1753 1.1 christos {
1754 1.1 christos BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1755 1.1 christos SET_H_SYS_SR_CY (opval);
1756 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1757 1.1 christos }
1758 1.1 christos {
1759 1.1 christos BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1760 1.1 christos SET_H_SYS_SR_OV (opval);
1761 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1762 1.1 christos }
1763 1.1 christos {
1764 1.1 christos SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1765 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1766 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1767 1.1 christos }
1768 1.1 christos }
1769 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1770 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1771 1.1 christos }
1772 1.1 christos }
1773 1.1 christos
1774 1.1 christos #undef FLD
1775 1.1 christos }
1776 1.1 christos NEXT (vpc);
1777 1.1 christos
1778 1.1 christos CASE (sem, INSN_L_MULI) : /* l.muli $rD,$rA,$simm16 */
1779 1.1 christos {
1780 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1781 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1782 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1783 1.1 christos int UNUSED written = 0;
1784 1.1 christos IADDR UNUSED pc = abuf->addr;
1785 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1786 1.1 christos
1787 1.1 christos {
1788 1.1 christos {
1789 1.1 christos {
1790 1.1 christos USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1791 1.1 christos SET_H_SYS_SR_OV (opval);
1792 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1793 1.1 christos }
1794 1.1 christos {
1795 1.1 christos USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1796 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1797 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1798 1.1 christos }
1799 1.1 christos }
1800 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1801 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1802 1.1 christos }
1803 1.1 christos }
1804 1.1 christos
1805 1.1 christos #undef FLD
1806 1.1 christos }
1807 1.1 christos NEXT (vpc);
1808 1.1 christos
1809 1.1 christos CASE (sem, INSN_L_EXTHS) : /* l.exths $rD,$rA */
1810 1.1 christos {
1811 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1812 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1813 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1814 1.1 christos int UNUSED written = 0;
1815 1.1 christos IADDR UNUSED pc = abuf->addr;
1816 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1817 1.1 christos
1818 1.1 christos {
1819 1.1 christos USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1820 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1821 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1822 1.1 christos }
1823 1.1 christos
1824 1.1 christos #undef FLD
1825 1.1 christos }
1826 1.1 christos NEXT (vpc);
1827 1.1 christos
1828 1.1 christos CASE (sem, INSN_L_EXTBS) : /* l.extbs $rD,$rA */
1829 1.1 christos {
1830 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1831 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1832 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1833 1.1 christos int UNUSED written = 0;
1834 1.1 christos IADDR UNUSED pc = abuf->addr;
1835 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1836 1.1 christos
1837 1.1 christos {
1838 1.1 christos USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1839 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1840 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1841 1.1 christos }
1842 1.1 christos
1843 1.1 christos #undef FLD
1844 1.1 christos }
1845 1.1 christos NEXT (vpc);
1846 1.1 christos
1847 1.1 christos CASE (sem, INSN_L_EXTHZ) : /* l.exthz $rD,$rA */
1848 1.1 christos {
1849 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1850 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1851 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1852 1.1 christos int UNUSED written = 0;
1853 1.1 christos IADDR UNUSED pc = abuf->addr;
1854 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1855 1.1 christos
1856 1.1 christos {
1857 1.1 christos USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1858 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1859 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1860 1.1 christos }
1861 1.1 christos
1862 1.1 christos #undef FLD
1863 1.1 christos }
1864 1.1 christos NEXT (vpc);
1865 1.1 christos
1866 1.1 christos CASE (sem, INSN_L_EXTBZ) : /* l.extbz $rD,$rA */
1867 1.1 christos {
1868 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1869 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1870 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1871 1.1 christos int UNUSED written = 0;
1872 1.1 christos IADDR UNUSED pc = abuf->addr;
1873 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1874 1.1 christos
1875 1.1 christos {
1876 1.1 christos USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1877 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1878 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1879 1.1 christos }
1880 1.1 christos
1881 1.1 christos #undef FLD
1882 1.1 christos }
1883 1.1 christos NEXT (vpc);
1884 1.1 christos
1885 1.1 christos CASE (sem, INSN_L_EXTWS) : /* l.extws $rD,$rA */
1886 1.1 christos {
1887 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1888 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1889 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1890 1.1 christos int UNUSED written = 0;
1891 1.1 christos IADDR UNUSED pc = abuf->addr;
1892 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1893 1.1 christos
1894 1.1 christos {
1895 1.1 christos USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1896 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1897 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1898 1.1 christos }
1899 1.1 christos
1900 1.1 christos #undef FLD
1901 1.1 christos }
1902 1.1 christos NEXT (vpc);
1903 1.1 christos
1904 1.1 christos CASE (sem, INSN_L_EXTWZ) : /* l.extwz $rD,$rA */
1905 1.1 christos {
1906 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1907 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1908 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
1909 1.1 christos int UNUSED written = 0;
1910 1.1 christos IADDR UNUSED pc = abuf->addr;
1911 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1912 1.1 christos
1913 1.1 christos {
1914 1.1 christos USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1915 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1916 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1917 1.1 christos }
1918 1.1 christos
1919 1.1 christos #undef FLD
1920 1.1 christos }
1921 1.1 christos NEXT (vpc);
1922 1.1 christos
1923 1.1 christos CASE (sem, INSN_L_CMOV) : /* l.cmov $rD,$rA,$rB */
1924 1.1 christos {
1925 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1926 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1927 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1928 1.1 christos int UNUSED written = 0;
1929 1.1 christos IADDR UNUSED pc = abuf->addr;
1930 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1931 1.1 christos
1932 1.1 christos if (GET_H_SYS_SR_F ()) {
1933 1.1 christos {
1934 1.1 christos USI opval = GET_H_GPR (FLD (f_r2));
1935 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1936 1.1 christos written |= (1 << 3);
1937 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1938 1.1 christos }
1939 1.1 christos } else {
1940 1.1 christos {
1941 1.1 christos USI opval = GET_H_GPR (FLD (f_r3));
1942 1.1 christos SET_H_GPR (FLD (f_r1), opval);
1943 1.1 christos written |= (1 << 3);
1944 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1945 1.1 christos }
1946 1.1 christos }
1947 1.1 christos
1948 1.1 christos abuf->written = written;
1949 1.1 christos #undef FLD
1950 1.1 christos }
1951 1.1 christos NEXT (vpc);
1952 1.1 christos
1953 1.1 christos CASE (sem, INSN_L_SFGTS) : /* l.sfgts $rA,$rB */
1954 1.1 christos {
1955 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1956 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1957 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1958 1.1 christos int UNUSED written = 0;
1959 1.1 christos IADDR UNUSED pc = abuf->addr;
1960 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1961 1.1 christos
1962 1.1 christos {
1963 1.1 christos USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1964 1.1 christos SET_H_SYS_SR_F (opval);
1965 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1966 1.1 christos }
1967 1.1 christos
1968 1.1 christos #undef FLD
1969 1.1 christos }
1970 1.1 christos NEXT (vpc);
1971 1.1 christos
1972 1.1 christos CASE (sem, INSN_L_SFGTSI) : /* l.sfgtsi $rA,$simm16 */
1973 1.1 christos {
1974 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1975 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1976 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
1977 1.1 christos int UNUSED written = 0;
1978 1.1 christos IADDR UNUSED pc = abuf->addr;
1979 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1980 1.1 christos
1981 1.1 christos {
1982 1.1 christos USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1983 1.1 christos SET_H_SYS_SR_F (opval);
1984 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1985 1.1 christos }
1986 1.1 christos
1987 1.1 christos #undef FLD
1988 1.1 christos }
1989 1.1 christos NEXT (vpc);
1990 1.1 christos
1991 1.1 christos CASE (sem, INSN_L_SFGTU) : /* l.sfgtu $rA,$rB */
1992 1.1 christos {
1993 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1994 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1995 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
1996 1.1 christos int UNUSED written = 0;
1997 1.1 christos IADDR UNUSED pc = abuf->addr;
1998 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1999 1.1 christos
2000 1.1 christos {
2001 1.1 christos USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2002 1.1 christos SET_H_SYS_SR_F (opval);
2003 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2004 1.1 christos }
2005 1.1 christos
2006 1.1 christos #undef FLD
2007 1.1 christos }
2008 1.1 christos NEXT (vpc);
2009 1.1 christos
2010 1.1 christos CASE (sem, INSN_L_SFGTUI) : /* l.sfgtui $rA,$simm16 */
2011 1.1 christos {
2012 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2013 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2014 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2015 1.1 christos int UNUSED written = 0;
2016 1.1 christos IADDR UNUSED pc = abuf->addr;
2017 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2018 1.1 christos
2019 1.1 christos {
2020 1.1 christos USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2021 1.1 christos SET_H_SYS_SR_F (opval);
2022 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2023 1.1 christos }
2024 1.1 christos
2025 1.1 christos #undef FLD
2026 1.1 christos }
2027 1.1 christos NEXT (vpc);
2028 1.1 christos
2029 1.1 christos CASE (sem, INSN_L_SFGES) : /* l.sfges $rA,$rB */
2030 1.1 christos {
2031 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2032 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2033 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2034 1.1 christos int UNUSED written = 0;
2035 1.1 christos IADDR UNUSED pc = abuf->addr;
2036 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2037 1.1 christos
2038 1.1 christos {
2039 1.1 christos USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2040 1.1 christos SET_H_SYS_SR_F (opval);
2041 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2042 1.1 christos }
2043 1.1 christos
2044 1.1 christos #undef FLD
2045 1.1 christos }
2046 1.1 christos NEXT (vpc);
2047 1.1 christos
2048 1.1 christos CASE (sem, INSN_L_SFGESI) : /* l.sfgesi $rA,$simm16 */
2049 1.1 christos {
2050 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2051 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2052 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2053 1.1 christos int UNUSED written = 0;
2054 1.1 christos IADDR UNUSED pc = abuf->addr;
2055 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2056 1.1 christos
2057 1.1 christos {
2058 1.1 christos USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2059 1.1 christos SET_H_SYS_SR_F (opval);
2060 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2061 1.1 christos }
2062 1.1 christos
2063 1.1 christos #undef FLD
2064 1.1 christos }
2065 1.1 christos NEXT (vpc);
2066 1.1 christos
2067 1.1 christos CASE (sem, INSN_L_SFGEU) : /* l.sfgeu $rA,$rB */
2068 1.1 christos {
2069 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2070 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2071 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2072 1.1 christos int UNUSED written = 0;
2073 1.1 christos IADDR UNUSED pc = abuf->addr;
2074 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2075 1.1 christos
2076 1.1 christos {
2077 1.1 christos USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2078 1.1 christos SET_H_SYS_SR_F (opval);
2079 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2080 1.1 christos }
2081 1.1 christos
2082 1.1 christos #undef FLD
2083 1.1 christos }
2084 1.1 christos NEXT (vpc);
2085 1.1 christos
2086 1.1 christos CASE (sem, INSN_L_SFGEUI) : /* l.sfgeui $rA,$simm16 */
2087 1.1 christos {
2088 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2089 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2090 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2091 1.1 christos int UNUSED written = 0;
2092 1.1 christos IADDR UNUSED pc = abuf->addr;
2093 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2094 1.1 christos
2095 1.1 christos {
2096 1.1 christos USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2097 1.1 christos SET_H_SYS_SR_F (opval);
2098 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2099 1.1 christos }
2100 1.1 christos
2101 1.1 christos #undef FLD
2102 1.1 christos }
2103 1.1 christos NEXT (vpc);
2104 1.1 christos
2105 1.1 christos CASE (sem, INSN_L_SFLTS) : /* l.sflts $rA,$rB */
2106 1.1 christos {
2107 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2108 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2109 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2110 1.1 christos int UNUSED written = 0;
2111 1.1 christos IADDR UNUSED pc = abuf->addr;
2112 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2113 1.1 christos
2114 1.1 christos {
2115 1.1 christos USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2116 1.1 christos SET_H_SYS_SR_F (opval);
2117 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2118 1.1 christos }
2119 1.1 christos
2120 1.1 christos #undef FLD
2121 1.1 christos }
2122 1.1 christos NEXT (vpc);
2123 1.1 christos
2124 1.1 christos CASE (sem, INSN_L_SFLTSI) : /* l.sfltsi $rA,$simm16 */
2125 1.1 christos {
2126 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2127 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2128 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2129 1.1 christos int UNUSED written = 0;
2130 1.1 christos IADDR UNUSED pc = abuf->addr;
2131 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2132 1.1 christos
2133 1.1 christos {
2134 1.1 christos USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2135 1.1 christos SET_H_SYS_SR_F (opval);
2136 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2137 1.1 christos }
2138 1.1 christos
2139 1.1 christos #undef FLD
2140 1.1 christos }
2141 1.1 christos NEXT (vpc);
2142 1.1 christos
2143 1.1 christos CASE (sem, INSN_L_SFLTU) : /* l.sfltu $rA,$rB */
2144 1.1 christos {
2145 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2146 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2147 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2148 1.1 christos int UNUSED written = 0;
2149 1.1 christos IADDR UNUSED pc = abuf->addr;
2150 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2151 1.1 christos
2152 1.1 christos {
2153 1.1 christos USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2154 1.1 christos SET_H_SYS_SR_F (opval);
2155 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2156 1.1 christos }
2157 1.1 christos
2158 1.1 christos #undef FLD
2159 1.1 christos }
2160 1.1 christos NEXT (vpc);
2161 1.1 christos
2162 1.1 christos CASE (sem, INSN_L_SFLTUI) : /* l.sfltui $rA,$simm16 */
2163 1.1 christos {
2164 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2165 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2166 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2167 1.1 christos int UNUSED written = 0;
2168 1.1 christos IADDR UNUSED pc = abuf->addr;
2169 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2170 1.1 christos
2171 1.1 christos {
2172 1.1 christos USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2173 1.1 christos SET_H_SYS_SR_F (opval);
2174 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2175 1.1 christos }
2176 1.1 christos
2177 1.1 christos #undef FLD
2178 1.1 christos }
2179 1.1 christos NEXT (vpc);
2180 1.1 christos
2181 1.1 christos CASE (sem, INSN_L_SFLES) : /* l.sfles $rA,$rB */
2182 1.1 christos {
2183 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2184 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2185 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2186 1.1 christos int UNUSED written = 0;
2187 1.1 christos IADDR UNUSED pc = abuf->addr;
2188 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2189 1.1 christos
2190 1.1 christos {
2191 1.1 christos USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2192 1.1 christos SET_H_SYS_SR_F (opval);
2193 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2194 1.1 christos }
2195 1.1 christos
2196 1.1 christos #undef FLD
2197 1.1 christos }
2198 1.1 christos NEXT (vpc);
2199 1.1 christos
2200 1.1 christos CASE (sem, INSN_L_SFLESI) : /* l.sflesi $rA,$simm16 */
2201 1.1 christos {
2202 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2203 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2204 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2205 1.1 christos int UNUSED written = 0;
2206 1.1 christos IADDR UNUSED pc = abuf->addr;
2207 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2208 1.1 christos
2209 1.1 christos {
2210 1.1 christos USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2211 1.1 christos SET_H_SYS_SR_F (opval);
2212 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2213 1.1 christos }
2214 1.1 christos
2215 1.1 christos #undef FLD
2216 1.1 christos }
2217 1.1 christos NEXT (vpc);
2218 1.1 christos
2219 1.1 christos CASE (sem, INSN_L_SFLEU) : /* l.sfleu $rA,$rB */
2220 1.1 christos {
2221 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2222 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2223 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2224 1.1 christos int UNUSED written = 0;
2225 1.1 christos IADDR UNUSED pc = abuf->addr;
2226 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2227 1.1 christos
2228 1.1 christos {
2229 1.1 christos USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2230 1.1 christos SET_H_SYS_SR_F (opval);
2231 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2232 1.1 christos }
2233 1.1 christos
2234 1.1 christos #undef FLD
2235 1.1 christos }
2236 1.1 christos NEXT (vpc);
2237 1.1 christos
2238 1.1 christos CASE (sem, INSN_L_SFLEUI) : /* l.sfleui $rA,$simm16 */
2239 1.1 christos {
2240 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2241 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2242 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2243 1.1 christos int UNUSED written = 0;
2244 1.1 christos IADDR UNUSED pc = abuf->addr;
2245 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2246 1.1 christos
2247 1.1 christos {
2248 1.1 christos USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2249 1.1 christos SET_H_SYS_SR_F (opval);
2250 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2251 1.1 christos }
2252 1.1 christos
2253 1.1 christos #undef FLD
2254 1.1 christos }
2255 1.1 christos NEXT (vpc);
2256 1.1 christos
2257 1.1 christos CASE (sem, INSN_L_SFEQ) : /* l.sfeq $rA,$rB */
2258 1.1 christos {
2259 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2260 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2261 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2262 1.1 christos int UNUSED written = 0;
2263 1.1 christos IADDR UNUSED pc = abuf->addr;
2264 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2265 1.1 christos
2266 1.1 christos {
2267 1.1 christos USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2268 1.1 christos SET_H_SYS_SR_F (opval);
2269 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2270 1.1 christos }
2271 1.1 christos
2272 1.1 christos #undef FLD
2273 1.1 christos }
2274 1.1 christos NEXT (vpc);
2275 1.1 christos
2276 1.1 christos CASE (sem, INSN_L_SFEQI) : /* l.sfeqi $rA,$simm16 */
2277 1.1 christos {
2278 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2279 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2280 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2281 1.1 christos int UNUSED written = 0;
2282 1.1 christos IADDR UNUSED pc = abuf->addr;
2283 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2284 1.1 christos
2285 1.1 christos {
2286 1.1 christos USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2287 1.1 christos SET_H_SYS_SR_F (opval);
2288 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2289 1.1 christos }
2290 1.1 christos
2291 1.1 christos #undef FLD
2292 1.1 christos }
2293 1.1 christos NEXT (vpc);
2294 1.1 christos
2295 1.1 christos CASE (sem, INSN_L_SFNE) : /* l.sfne $rA,$rB */
2296 1.1 christos {
2297 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2298 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2299 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2300 1.1 christos int UNUSED written = 0;
2301 1.1 christos IADDR UNUSED pc = abuf->addr;
2302 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2303 1.1 christos
2304 1.1 christos {
2305 1.1 christos USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2306 1.1 christos SET_H_SYS_SR_F (opval);
2307 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2308 1.1 christos }
2309 1.1 christos
2310 1.1 christos #undef FLD
2311 1.1 christos }
2312 1.1 christos NEXT (vpc);
2313 1.1 christos
2314 1.1 christos CASE (sem, INSN_L_SFNEI) : /* l.sfnei $rA,$simm16 */
2315 1.1 christos {
2316 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2317 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2318 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2319 1.1 christos int UNUSED written = 0;
2320 1.1 christos IADDR UNUSED pc = abuf->addr;
2321 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2322 1.1 christos
2323 1.1 christos {
2324 1.1 christos USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2325 1.1 christos SET_H_SYS_SR_F (opval);
2326 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2327 1.1 christos }
2328 1.1 christos
2329 1.1 christos #undef FLD
2330 1.1 christos }
2331 1.1 christos NEXT (vpc);
2332 1.1 christos
2333 1.1 christos CASE (sem, INSN_L_MAC) : /* l.mac $rA,$rB */
2334 1.1 christos {
2335 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2336 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2337 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2338 1.1 christos int UNUSED written = 0;
2339 1.1 christos IADDR UNUSED pc = abuf->addr;
2340 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2341 1.1 christos
2342 1.1 christos {
2343 1.1 christos {
2344 1.1 christos DI tmp_prod;
2345 1.1 christos DI tmp_mac;
2346 1.1 christos DI tmp_result;
2347 1.1 christos tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2348 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2349 1.1 christos tmp_result = ADDDI (tmp_prod, tmp_mac);
2350 1.1 christos {
2351 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2352 1.1 christos SET_H_MAC_MACHI (opval);
2353 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2354 1.1 christos }
2355 1.1 christos {
2356 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2357 1.1 christos SET_H_MAC_MACLO (opval);
2358 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2359 1.1 christos }
2360 1.1 christos {
2361 1.1 christos BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2362 1.1 christos SET_H_SYS_SR_OV (opval);
2363 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2364 1.1 christos }
2365 1.1 christos }
2366 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2367 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2368 1.1 christos }
2369 1.1 christos }
2370 1.1 christos
2371 1.1 christos #undef FLD
2372 1.1 christos }
2373 1.1 christos NEXT (vpc);
2374 1.1 christos
2375 1.1 christos CASE (sem, INSN_L_MACI) : /* l.maci $rA,${simm16} */
2376 1.1 christos {
2377 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2378 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2379 1.1 christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
2380 1.1 christos int UNUSED written = 0;
2381 1.1 christos IADDR UNUSED pc = abuf->addr;
2382 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2383 1.1 christos
2384 1.1 christos {
2385 1.1 christos {
2386 1.1 christos DI tmp_prod;
2387 1.1 christos DI tmp_mac;
2388 1.1 christos DI tmp_result;
2389 1.1 christos tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
2390 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2391 1.1 christos tmp_result = ADDDI (tmp_mac, tmp_prod);
2392 1.1 christos {
2393 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2394 1.1 christos SET_H_MAC_MACHI (opval);
2395 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2396 1.1 christos }
2397 1.1 christos {
2398 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2399 1.1 christos SET_H_MAC_MACLO (opval);
2400 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2401 1.1 christos }
2402 1.1 christos {
2403 1.1 christos BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2404 1.1 christos SET_H_SYS_SR_OV (opval);
2405 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2406 1.1 christos }
2407 1.1 christos }
2408 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2409 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2410 1.1 christos }
2411 1.1 christos }
2412 1.1 christos
2413 1.1 christos #undef FLD
2414 1.1 christos }
2415 1.1 christos NEXT (vpc);
2416 1.1 christos
2417 1.1 christos CASE (sem, INSN_L_MACU) : /* l.macu $rA,$rB */
2418 1.1 christos {
2419 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2420 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2421 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2422 1.1 christos int UNUSED written = 0;
2423 1.1 christos IADDR UNUSED pc = abuf->addr;
2424 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2425 1.1 christos
2426 1.1 christos {
2427 1.1 christos {
2428 1.1 christos DI tmp_prod;
2429 1.1 christos DI tmp_mac;
2430 1.1 christos DI tmp_result;
2431 1.1 christos tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2432 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2433 1.1 christos tmp_result = ADDDI (tmp_prod, tmp_mac);
2434 1.1 christos {
2435 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2436 1.1 christos SET_H_MAC_MACHI (opval);
2437 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2438 1.1 christos }
2439 1.1 christos {
2440 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2441 1.1 christos SET_H_MAC_MACLO (opval);
2442 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2443 1.1 christos }
2444 1.1 christos {
2445 1.1 christos BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
2446 1.1 christos SET_H_SYS_SR_CY (opval);
2447 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2448 1.1 christos }
2449 1.1 christos }
2450 1.1 christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2451 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2452 1.1 christos }
2453 1.1 christos }
2454 1.1 christos
2455 1.1 christos #undef FLD
2456 1.1 christos }
2457 1.1 christos NEXT (vpc);
2458 1.1 christos
2459 1.1 christos CASE (sem, INSN_L_MSB) : /* l.msb $rA,$rB */
2460 1.1 christos {
2461 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2462 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2463 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2464 1.1 christos int UNUSED written = 0;
2465 1.1 christos IADDR UNUSED pc = abuf->addr;
2466 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2467 1.1 christos
2468 1.1 christos {
2469 1.1 christos {
2470 1.1 christos DI tmp_prod;
2471 1.1 christos DI tmp_mac;
2472 1.1 christos DI tmp_result;
2473 1.1 christos tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2474 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2475 1.1 christos tmp_result = SUBDI (tmp_mac, tmp_prod);
2476 1.1 christos {
2477 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2478 1.1 christos SET_H_MAC_MACHI (opval);
2479 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2480 1.1 christos }
2481 1.1 christos {
2482 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2483 1.1 christos SET_H_MAC_MACLO (opval);
2484 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2485 1.1 christos }
2486 1.1 christos {
2487 1.1 christos BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
2488 1.1 christos SET_H_SYS_SR_OV (opval);
2489 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2490 1.1 christos }
2491 1.1 christos }
2492 1.1 christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2493 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2494 1.1 christos }
2495 1.1 christos }
2496 1.1 christos
2497 1.1 christos #undef FLD
2498 1.1 christos }
2499 1.1 christos NEXT (vpc);
2500 1.1 christos
2501 1.1 christos CASE (sem, INSN_L_MSBU) : /* l.msbu $rA,$rB */
2502 1.1 christos {
2503 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2504 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2505 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2506 1.1 christos int UNUSED written = 0;
2507 1.1 christos IADDR UNUSED pc = abuf->addr;
2508 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2509 1.1 christos
2510 1.1 christos {
2511 1.1 christos {
2512 1.1 christos DI tmp_prod;
2513 1.1 christos DI tmp_mac;
2514 1.1 christos DI tmp_result;
2515 1.1 christos tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2516 1.1 christos tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2517 1.1 christos tmp_result = SUBDI (tmp_mac, tmp_prod);
2518 1.1 christos {
2519 1.1 christos SI opval = SUBWORDDISI (tmp_result, 0);
2520 1.1 christos SET_H_MAC_MACHI (opval);
2521 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2522 1.1 christos }
2523 1.1 christos {
2524 1.1 christos SI opval = SUBWORDDISI (tmp_result, 1);
2525 1.1 christos SET_H_MAC_MACLO (opval);
2526 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2527 1.1 christos }
2528 1.1 christos {
2529 1.1 christos BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
2530 1.1 christos SET_H_SYS_SR_CY (opval);
2531 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2532 1.1 christos }
2533 1.1 christos }
2534 1.1 christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2535 1.1 christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2536 1.1 christos }
2537 1.1 christos }
2538 1.1 christos
2539 1.1 christos #undef FLD
2540 1.1 christos }
2541 1.1 christos NEXT (vpc);
2542 1.1 christos
2543 1.1 christos CASE (sem, INSN_L_CUST1) : /* l.cust1 */
2544 1.1 christos {
2545 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2546 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2547 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2548 1.1 christos int UNUSED written = 0;
2549 1.1 christos IADDR UNUSED pc = abuf->addr;
2550 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2551 1.1 christos
2552 1.1 christos ((void) 0); /*nop*/
2553 1.1 christos
2554 1.1 christos #undef FLD
2555 1.1 christos }
2556 1.1 christos NEXT (vpc);
2557 1.1 christos
2558 1.1 christos CASE (sem, INSN_L_CUST2) : /* l.cust2 */
2559 1.1 christos {
2560 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2561 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2562 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2563 1.1 christos int UNUSED written = 0;
2564 1.1 christos IADDR UNUSED pc = abuf->addr;
2565 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2566 1.1 christos
2567 1.1 christos ((void) 0); /*nop*/
2568 1.1 christos
2569 1.1 christos #undef FLD
2570 1.1 christos }
2571 1.1 christos NEXT (vpc);
2572 1.1 christos
2573 1.1 christos CASE (sem, INSN_L_CUST3) : /* l.cust3 */
2574 1.1 christos {
2575 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2576 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2577 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2578 1.1 christos int UNUSED written = 0;
2579 1.1 christos IADDR UNUSED pc = abuf->addr;
2580 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2581 1.1 christos
2582 1.1 christos ((void) 0); /*nop*/
2583 1.1 christos
2584 1.1 christos #undef FLD
2585 1.1 christos }
2586 1.1 christos NEXT (vpc);
2587 1.1 christos
2588 1.1 christos CASE (sem, INSN_L_CUST4) : /* l.cust4 */
2589 1.1 christos {
2590 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2591 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2592 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2593 1.1 christos int UNUSED written = 0;
2594 1.1 christos IADDR UNUSED pc = abuf->addr;
2595 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2596 1.1 christos
2597 1.1 christos ((void) 0); /*nop*/
2598 1.1 christos
2599 1.1 christos #undef FLD
2600 1.1 christos }
2601 1.1 christos NEXT (vpc);
2602 1.1 christos
2603 1.1 christos CASE (sem, INSN_L_CUST5) : /* l.cust5 */
2604 1.1 christos {
2605 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2606 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2607 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2608 1.1 christos int UNUSED written = 0;
2609 1.1 christos IADDR UNUSED pc = abuf->addr;
2610 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2611 1.1 christos
2612 1.1 christos ((void) 0); /*nop*/
2613 1.1 christos
2614 1.1 christos #undef FLD
2615 1.1 christos }
2616 1.1 christos NEXT (vpc);
2617 1.1 christos
2618 1.1 christos CASE (sem, INSN_L_CUST6) : /* l.cust6 */
2619 1.1 christos {
2620 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2621 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2622 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2623 1.1 christos int UNUSED written = 0;
2624 1.1 christos IADDR UNUSED pc = abuf->addr;
2625 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2626 1.1 christos
2627 1.1 christos ((void) 0); /*nop*/
2628 1.1 christos
2629 1.1 christos #undef FLD
2630 1.1 christos }
2631 1.1 christos NEXT (vpc);
2632 1.1 christos
2633 1.1 christos CASE (sem, INSN_L_CUST7) : /* l.cust7 */
2634 1.1 christos {
2635 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2636 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2637 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2638 1.1 christos int UNUSED written = 0;
2639 1.1 christos IADDR UNUSED pc = abuf->addr;
2640 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2641 1.1 christos
2642 1.1 christos ((void) 0); /*nop*/
2643 1.1 christos
2644 1.1 christos #undef FLD
2645 1.1 christos }
2646 1.1 christos NEXT (vpc);
2647 1.1 christos
2648 1.1 christos CASE (sem, INSN_L_CUST8) : /* l.cust8 */
2649 1.1 christos {
2650 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2651 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2652 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2653 1.1 christos int UNUSED written = 0;
2654 1.1 christos IADDR UNUSED pc = abuf->addr;
2655 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2656 1.1 christos
2657 1.1 christos ((void) 0); /*nop*/
2658 1.1 christos
2659 1.1 christos #undef FLD
2660 1.1 christos }
2661 1.1 christos NEXT (vpc);
2662 1.1 christos
2663 1.1 christos CASE (sem, INSN_LF_ADD_S) : /* lf.add.s $rDSF,$rASF,$rBSF */
2664 1.1 christos {
2665 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2666 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2667 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2668 1.1 christos int UNUSED written = 0;
2669 1.1 christos IADDR UNUSED pc = abuf->addr;
2670 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2671 1.1 christos
2672 1.1 christos {
2673 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)));
2674 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2675 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2676 1.1 christos }
2677 1.1 christos
2678 1.1 christos #undef FLD
2679 1.1 christos }
2680 1.1 christos NEXT (vpc);
2681 1.1 christos
2682 1.1.1.2 christos CASE (sem, INSN_LF_ADD_D32) : /* lf.add.d $rDD32F,$rAD32F,$rBD32F */
2683 1.1.1.2 christos {
2684 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2685 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2686 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2687 1.1.1.2 christos int UNUSED written = 0;
2688 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2689 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2690 1.1.1.2 christos
2691 1.1.1.2 christos {
2692 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)));
2693 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2694 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2695 1.1.1.2 christos }
2696 1.1.1.2 christos
2697 1.1.1.2 christos #undef FLD
2698 1.1.1.2 christos }
2699 1.1.1.2 christos NEXT (vpc);
2700 1.1.1.2 christos
2701 1.1 christos CASE (sem, INSN_LF_SUB_S) : /* lf.sub.s $rDSF,$rASF,$rBSF */
2702 1.1 christos {
2703 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2704 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2705 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2706 1.1 christos int UNUSED written = 0;
2707 1.1 christos IADDR UNUSED pc = abuf->addr;
2708 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2709 1.1 christos
2710 1.1 christos {
2711 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)));
2712 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2713 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2714 1.1 christos }
2715 1.1 christos
2716 1.1 christos #undef FLD
2717 1.1 christos }
2718 1.1 christos NEXT (vpc);
2719 1.1 christos
2720 1.1.1.2 christos CASE (sem, INSN_LF_SUB_D32) : /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */
2721 1.1.1.2 christos {
2722 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2723 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2724 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2725 1.1.1.2 christos int UNUSED written = 0;
2726 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2727 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2728 1.1.1.2 christos
2729 1.1.1.2 christos {
2730 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)));
2731 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2732 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2733 1.1.1.2 christos }
2734 1.1.1.2 christos
2735 1.1.1.2 christos #undef FLD
2736 1.1.1.2 christos }
2737 1.1.1.2 christos NEXT (vpc);
2738 1.1.1.2 christos
2739 1.1 christos CASE (sem, INSN_LF_MUL_S) : /* lf.mul.s $rDSF,$rASF,$rBSF */
2740 1.1 christos {
2741 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2742 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2743 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2744 1.1 christos int UNUSED written = 0;
2745 1.1 christos IADDR UNUSED pc = abuf->addr;
2746 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2747 1.1 christos
2748 1.1 christos {
2749 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)));
2750 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2751 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2752 1.1 christos }
2753 1.1 christos
2754 1.1 christos #undef FLD
2755 1.1 christos }
2756 1.1 christos NEXT (vpc);
2757 1.1 christos
2758 1.1.1.2 christos CASE (sem, INSN_LF_MUL_D32) : /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */
2759 1.1.1.2 christos {
2760 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2761 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2762 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2763 1.1.1.2 christos int UNUSED written = 0;
2764 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2765 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2766 1.1.1.2 christos
2767 1.1.1.2 christos {
2768 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)));
2769 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2770 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2771 1.1.1.2 christos }
2772 1.1.1.2 christos
2773 1.1.1.2 christos #undef FLD
2774 1.1.1.2 christos }
2775 1.1.1.2 christos NEXT (vpc);
2776 1.1.1.2 christos
2777 1.1 christos CASE (sem, INSN_LF_DIV_S) : /* lf.div.s $rDSF,$rASF,$rBSF */
2778 1.1 christos {
2779 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2780 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2781 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2782 1.1 christos int UNUSED written = 0;
2783 1.1 christos IADDR UNUSED pc = abuf->addr;
2784 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2785 1.1 christos
2786 1.1 christos {
2787 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)));
2788 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2789 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2790 1.1 christos }
2791 1.1 christos
2792 1.1 christos #undef FLD
2793 1.1 christos }
2794 1.1 christos NEXT (vpc);
2795 1.1 christos
2796 1.1.1.2 christos CASE (sem, INSN_LF_DIV_D32) : /* lf.div.d $rDD32F,$rAD32F,$rBD32F */
2797 1.1.1.2 christos {
2798 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2799 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2800 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2801 1.1.1.2 christos int UNUSED written = 0;
2802 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2803 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2804 1.1.1.2 christos
2805 1.1.1.2 christos {
2806 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)));
2807 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2808 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2809 1.1.1.2 christos }
2810 1.1.1.2 christos
2811 1.1.1.2 christos #undef FLD
2812 1.1.1.2 christos }
2813 1.1.1.2 christos NEXT (vpc);
2814 1.1.1.2 christos
2815 1.1 christos CASE (sem, INSN_LF_REM_S) : /* lf.rem.s $rDSF,$rASF,$rBSF */
2816 1.1 christos {
2817 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2818 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2819 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2820 1.1 christos int UNUSED written = 0;
2821 1.1 christos IADDR UNUSED pc = abuf->addr;
2822 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2823 1.1 christos
2824 1.1 christos {
2825 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)));
2826 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2827 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2828 1.1 christos }
2829 1.1 christos
2830 1.1 christos #undef FLD
2831 1.1 christos }
2832 1.1 christos NEXT (vpc);
2833 1.1 christos
2834 1.1.1.2 christos CASE (sem, INSN_LF_REM_D32) : /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */
2835 1.1.1.2 christos {
2836 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2837 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2838 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2839 1.1.1.2 christos int UNUSED written = 0;
2840 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2841 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2842 1.1.1.2 christos
2843 1.1.1.2 christos {
2844 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)));
2845 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2846 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2847 1.1.1.2 christos }
2848 1.1.1.2 christos
2849 1.1.1.2 christos #undef FLD
2850 1.1.1.2 christos }
2851 1.1.1.2 christos NEXT (vpc);
2852 1.1.1.2 christos
2853 1.1 christos CASE (sem, INSN_LF_ITOF_S) : /* lf.itof.s $rDSF,$rA */
2854 1.1 christos {
2855 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2856 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2857 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
2858 1.1 christos int UNUSED written = 0;
2859 1.1 christos IADDR UNUSED pc = abuf->addr;
2860 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2861 1.1 christos
2862 1.1 christos {
2863 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))));
2864 1.1 christos SET_H_FSR (FLD (f_r1), opval);
2865 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2866 1.1 christos }
2867 1.1 christos
2868 1.1 christos #undef FLD
2869 1.1 christos }
2870 1.1 christos NEXT (vpc);
2871 1.1 christos
2872 1.1.1.2 christos CASE (sem, INSN_LF_ITOF_D32) : /* lf.itof.d $rDD32F,$rADI */
2873 1.1.1.2 christos {
2874 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2875 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2876 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2877 1.1.1.2 christos int UNUSED written = 0;
2878 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2879 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2880 1.1.1.2 christos
2881 1.1.1.2 christos {
2882 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)));
2883 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
2884 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2885 1.1.1.2 christos }
2886 1.1.1.2 christos
2887 1.1.1.2 christos #undef FLD
2888 1.1.1.2 christos }
2889 1.1.1.2 christos NEXT (vpc);
2890 1.1.1.2 christos
2891 1.1 christos CASE (sem, INSN_LF_FTOI_S) : /* lf.ftoi.s $rD,$rASF */
2892 1.1 christos {
2893 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2894 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2895 1.1 christos #define FLD(f) abuf->fields.sfmt_l_slli.f
2896 1.1 christos int UNUSED written = 0;
2897 1.1 christos IADDR UNUSED pc = abuf->addr;
2898 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2899 1.1 christos
2900 1.1 christos {
2901 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))));
2902 1.1 christos SET_H_GPR (FLD (f_r1), opval);
2903 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
2904 1.1 christos }
2905 1.1 christos
2906 1.1 christos #undef FLD
2907 1.1 christos }
2908 1.1 christos NEXT (vpc);
2909 1.1 christos
2910 1.1.1.2 christos CASE (sem, INSN_LF_FTOI_D32) : /* lf.ftoi.d $rDDI,$rAD32F */
2911 1.1.1.2 christos {
2912 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2913 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2914 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2915 1.1.1.2 christos int UNUSED written = 0;
2916 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2917 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2918 1.1.1.2 christos
2919 1.1.1.2 christos {
2920 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)));
2921 1.1.1.2 christos SET_H_I64R (FLD (f_rdd32), opval);
2922 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval);
2923 1.1.1.2 christos }
2924 1.1.1.2 christos
2925 1.1.1.2 christos #undef FLD
2926 1.1.1.2 christos }
2927 1.1.1.2 christos NEXT (vpc);
2928 1.1.1.2 christos
2929 1.1.1.2 christos CASE (sem, INSN_LF_SFEQ_S) : /* lf.sfeq.s $rASF,$rBSF */
2930 1.1 christos {
2931 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2932 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2933 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2934 1.1 christos int UNUSED written = 0;
2935 1.1 christos IADDR UNUSED pc = abuf->addr;
2936 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2937 1.1 christos
2938 1.1 christos {
2939 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)));
2940 1.1 christos SET_H_SYS_SR_F (opval);
2941 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2942 1.1 christos }
2943 1.1 christos
2944 1.1 christos #undef FLD
2945 1.1 christos }
2946 1.1 christos NEXT (vpc);
2947 1.1 christos
2948 1.1.1.2 christos CASE (sem, INSN_LF_SFEQ_D32) : /* lf.sfeq.d $rAD32F,$rBD32F */
2949 1.1.1.2 christos {
2950 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2951 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2952 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2953 1.1.1.2 christos int UNUSED written = 0;
2954 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2955 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2956 1.1.1.2 christos
2957 1.1.1.2 christos {
2958 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)));
2959 1.1.1.2 christos SET_H_SYS_SR_F (opval);
2960 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2961 1.1.1.2 christos }
2962 1.1.1.2 christos
2963 1.1.1.2 christos #undef FLD
2964 1.1.1.2 christos }
2965 1.1.1.2 christos NEXT (vpc);
2966 1.1.1.2 christos
2967 1.1.1.2 christos CASE (sem, INSN_LF_SFNE_S) : /* lf.sfne.s $rASF,$rBSF */
2968 1.1 christos {
2969 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2970 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2971 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
2972 1.1 christos int UNUSED written = 0;
2973 1.1 christos IADDR UNUSED pc = abuf->addr;
2974 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2975 1.1 christos
2976 1.1 christos {
2977 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)));
2978 1.1 christos SET_H_SYS_SR_F (opval);
2979 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2980 1.1 christos }
2981 1.1 christos
2982 1.1 christos #undef FLD
2983 1.1 christos }
2984 1.1 christos NEXT (vpc);
2985 1.1 christos
2986 1.1.1.2 christos CASE (sem, INSN_LF_SFNE_D32) : /* lf.sfne.d $rAD32F,$rBD32F */
2987 1.1.1.2 christos {
2988 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2989 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2990 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2991 1.1.1.2 christos int UNUSED written = 0;
2992 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
2993 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2994 1.1.1.2 christos
2995 1.1.1.2 christos {
2996 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)));
2997 1.1.1.2 christos SET_H_SYS_SR_F (opval);
2998 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2999 1.1.1.2 christos }
3000 1.1.1.2 christos
3001 1.1.1.2 christos #undef FLD
3002 1.1.1.2 christos }
3003 1.1.1.2 christos NEXT (vpc);
3004 1.1.1.2 christos
3005 1.1.1.2 christos CASE (sem, INSN_LF_SFGE_S) : /* lf.sfge.s $rASF,$rBSF */
3006 1.1 christos {
3007 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3008 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3009 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3010 1.1 christos int UNUSED written = 0;
3011 1.1 christos IADDR UNUSED pc = abuf->addr;
3012 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3013 1.1 christos
3014 1.1 christos {
3015 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)));
3016 1.1 christos SET_H_SYS_SR_F (opval);
3017 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3018 1.1 christos }
3019 1.1 christos
3020 1.1 christos #undef FLD
3021 1.1 christos }
3022 1.1 christos NEXT (vpc);
3023 1.1 christos
3024 1.1.1.2 christos CASE (sem, INSN_LF_SFGE_D32) : /* lf.sfge.d $rAD32F,$rBD32F */
3025 1.1.1.2 christos {
3026 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3027 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3028 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3029 1.1.1.2 christos int UNUSED written = 0;
3030 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3031 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3032 1.1.1.2 christos
3033 1.1.1.2 christos {
3034 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)));
3035 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3036 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3037 1.1.1.2 christos }
3038 1.1.1.2 christos
3039 1.1.1.2 christos #undef FLD
3040 1.1.1.2 christos }
3041 1.1.1.2 christos NEXT (vpc);
3042 1.1.1.2 christos
3043 1.1.1.2 christos CASE (sem, INSN_LF_SFGT_S) : /* lf.sfgt.s $rASF,$rBSF */
3044 1.1 christos {
3045 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3046 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3047 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3048 1.1 christos int UNUSED written = 0;
3049 1.1 christos IADDR UNUSED pc = abuf->addr;
3050 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3051 1.1 christos
3052 1.1 christos {
3053 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)));
3054 1.1 christos SET_H_SYS_SR_F (opval);
3055 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3056 1.1 christos }
3057 1.1 christos
3058 1.1 christos #undef FLD
3059 1.1 christos }
3060 1.1 christos NEXT (vpc);
3061 1.1 christos
3062 1.1.1.2 christos CASE (sem, INSN_LF_SFGT_D32) : /* lf.sfgt.d $rAD32F,$rBD32F */
3063 1.1.1.2 christos {
3064 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3065 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3066 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3067 1.1.1.2 christos int UNUSED written = 0;
3068 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3069 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3070 1.1.1.2 christos
3071 1.1.1.2 christos {
3072 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)));
3073 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3074 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3075 1.1.1.2 christos }
3076 1.1.1.2 christos
3077 1.1.1.2 christos #undef FLD
3078 1.1.1.2 christos }
3079 1.1.1.2 christos NEXT (vpc);
3080 1.1.1.2 christos
3081 1.1.1.2 christos CASE (sem, INSN_LF_SFLT_S) : /* lf.sflt.s $rASF,$rBSF */
3082 1.1 christos {
3083 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3084 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3085 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3086 1.1 christos int UNUSED written = 0;
3087 1.1 christos IADDR UNUSED pc = abuf->addr;
3088 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3089 1.1 christos
3090 1.1 christos {
3091 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)));
3092 1.1 christos SET_H_SYS_SR_F (opval);
3093 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3094 1.1 christos }
3095 1.1 christos
3096 1.1 christos #undef FLD
3097 1.1 christos }
3098 1.1 christos NEXT (vpc);
3099 1.1 christos
3100 1.1.1.2 christos CASE (sem, INSN_LF_SFLT_D32) : /* lf.sflt.d $rAD32F,$rBD32F */
3101 1.1.1.2 christos {
3102 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3103 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3104 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3105 1.1.1.2 christos int UNUSED written = 0;
3106 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3107 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3108 1.1.1.2 christos
3109 1.1.1.2 christos {
3110 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)));
3111 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3112 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3113 1.1.1.2 christos }
3114 1.1.1.2 christos
3115 1.1.1.2 christos #undef FLD
3116 1.1.1.2 christos }
3117 1.1.1.2 christos NEXT (vpc);
3118 1.1.1.2 christos
3119 1.1.1.2 christos CASE (sem, INSN_LF_SFLE_S) : /* lf.sfle.s $rASF,$rBSF */
3120 1.1 christos {
3121 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3122 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3123 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3124 1.1 christos int UNUSED written = 0;
3125 1.1 christos IADDR UNUSED pc = abuf->addr;
3126 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3127 1.1 christos
3128 1.1 christos {
3129 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)));
3130 1.1 christos SET_H_SYS_SR_F (opval);
3131 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3132 1.1 christos }
3133 1.1 christos
3134 1.1 christos #undef FLD
3135 1.1 christos }
3136 1.1 christos NEXT (vpc);
3137 1.1 christos
3138 1.1.1.2 christos CASE (sem, INSN_LF_SFLE_D32) : /* lf.sfle.d $rAD32F,$rBD32F */
3139 1.1.1.2 christos {
3140 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3141 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3142 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3143 1.1.1.2 christos int UNUSED written = 0;
3144 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3145 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3146 1.1.1.2 christos
3147 1.1.1.2 christos {
3148 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)));
3149 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3150 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3151 1.1.1.2 christos }
3152 1.1.1.2 christos
3153 1.1.1.2 christos #undef FLD
3154 1.1.1.2 christos }
3155 1.1.1.2 christos NEXT (vpc);
3156 1.1.1.2 christos
3157 1.1.1.2 christos CASE (sem, INSN_LF_SFUEQ_S) : /* lf.sfueq.s $rASF,$rBSF */
3158 1.1.1.2 christos {
3159 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3160 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3161 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3162 1.1.1.2 christos int UNUSED written = 0;
3163 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3164 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3165 1.1.1.2 christos
3166 1.1.1.2 christos {
3167 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))));
3168 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3169 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3170 1.1.1.2 christos }
3171 1.1.1.2 christos
3172 1.1.1.2 christos #undef FLD
3173 1.1.1.2 christos }
3174 1.1.1.2 christos NEXT (vpc);
3175 1.1.1.2 christos
3176 1.1.1.2 christos CASE (sem, INSN_LF_SFUEQ_D32) : /* lf.sfueq.d $rAD32F,$rBD32F */
3177 1.1.1.2 christos {
3178 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3179 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3180 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3181 1.1.1.2 christos int UNUSED written = 0;
3182 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3183 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3184 1.1.1.2 christos
3185 1.1.1.2 christos {
3186 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))));
3187 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3188 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3189 1.1.1.2 christos }
3190 1.1.1.2 christos
3191 1.1.1.2 christos #undef FLD
3192 1.1.1.2 christos }
3193 1.1.1.2 christos NEXT (vpc);
3194 1.1.1.2 christos
3195 1.1.1.2 christos CASE (sem, INSN_LF_SFUNE_S) : /* lf.sfune.s $rASF,$rBSF */
3196 1.1.1.2 christos {
3197 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3198 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3199 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3200 1.1.1.2 christos int UNUSED written = 0;
3201 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3202 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3203 1.1.1.2 christos
3204 1.1.1.2 christos {
3205 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))));
3206 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3207 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3208 1.1.1.2 christos }
3209 1.1.1.2 christos
3210 1.1.1.2 christos #undef FLD
3211 1.1.1.2 christos }
3212 1.1.1.2 christos NEXT (vpc);
3213 1.1.1.2 christos
3214 1.1.1.2 christos CASE (sem, INSN_LF_SFUNE_D32) : /* lf.sfune.d $rAD32F,$rBD32F */
3215 1.1.1.2 christos {
3216 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3217 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3218 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3219 1.1.1.2 christos int UNUSED written = 0;
3220 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3221 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3222 1.1.1.2 christos
3223 1.1.1.2 christos {
3224 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))));
3225 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3226 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3227 1.1.1.2 christos }
3228 1.1.1.2 christos
3229 1.1.1.2 christos #undef FLD
3230 1.1.1.2 christos }
3231 1.1.1.2 christos NEXT (vpc);
3232 1.1.1.2 christos
3233 1.1.1.2 christos CASE (sem, INSN_LF_SFUGT_S) : /* lf.sfugt.s $rASF,$rBSF */
3234 1.1.1.2 christos {
3235 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3236 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3237 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3238 1.1.1.2 christos int UNUSED written = 0;
3239 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3240 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3241 1.1.1.2 christos
3242 1.1.1.2 christos {
3243 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))));
3244 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3245 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3246 1.1.1.2 christos }
3247 1.1.1.2 christos
3248 1.1.1.2 christos #undef FLD
3249 1.1.1.2 christos }
3250 1.1.1.2 christos NEXT (vpc);
3251 1.1.1.2 christos
3252 1.1.1.2 christos CASE (sem, INSN_LF_SFUGT_D32) : /* lf.sfugt.d $rAD32F,$rBD32F */
3253 1.1.1.2 christos {
3254 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3255 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3256 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3257 1.1.1.2 christos int UNUSED written = 0;
3258 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3259 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3260 1.1.1.2 christos
3261 1.1.1.2 christos {
3262 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))));
3263 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3264 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3265 1.1.1.2 christos }
3266 1.1.1.2 christos
3267 1.1.1.2 christos #undef FLD
3268 1.1.1.2 christos }
3269 1.1.1.2 christos NEXT (vpc);
3270 1.1.1.2 christos
3271 1.1.1.2 christos CASE (sem, INSN_LF_SFUGE_S) : /* lf.sfuge.s $rASF,$rBSF */
3272 1.1.1.2 christos {
3273 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3274 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3275 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3276 1.1.1.2 christos int UNUSED written = 0;
3277 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3278 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3279 1.1.1.2 christos
3280 1.1.1.2 christos {
3281 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))));
3282 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3283 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3284 1.1.1.2 christos }
3285 1.1.1.2 christos
3286 1.1.1.2 christos #undef FLD
3287 1.1.1.2 christos }
3288 1.1.1.2 christos NEXT (vpc);
3289 1.1.1.2 christos
3290 1.1.1.2 christos CASE (sem, INSN_LF_SFUGE_D32) : /* lf.sfuge.d $rAD32F,$rBD32F */
3291 1.1.1.2 christos {
3292 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3293 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3294 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3295 1.1.1.2 christos int UNUSED written = 0;
3296 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3297 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3298 1.1.1.2 christos
3299 1.1.1.2 christos {
3300 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))));
3301 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3302 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3303 1.1.1.2 christos }
3304 1.1.1.2 christos
3305 1.1.1.2 christos #undef FLD
3306 1.1.1.2 christos }
3307 1.1.1.2 christos NEXT (vpc);
3308 1.1.1.2 christos
3309 1.1.1.2 christos CASE (sem, INSN_LF_SFULT_S) : /* lf.sfult.s $rASF,$rBSF */
3310 1.1.1.2 christos {
3311 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3312 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3313 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3314 1.1.1.2 christos int UNUSED written = 0;
3315 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3316 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3317 1.1.1.2 christos
3318 1.1.1.2 christos {
3319 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))));
3320 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3321 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3322 1.1.1.2 christos }
3323 1.1.1.2 christos
3324 1.1.1.2 christos #undef FLD
3325 1.1.1.2 christos }
3326 1.1.1.2 christos NEXT (vpc);
3327 1.1.1.2 christos
3328 1.1.1.2 christos CASE (sem, INSN_LF_SFULT_D32) : /* lf.sfult.d $rAD32F,$rBD32F */
3329 1.1.1.2 christos {
3330 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3331 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3332 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3333 1.1.1.2 christos int UNUSED written = 0;
3334 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3335 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3336 1.1.1.2 christos
3337 1.1.1.2 christos {
3338 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))));
3339 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3340 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3341 1.1.1.2 christos }
3342 1.1.1.2 christos
3343 1.1.1.2 christos #undef FLD
3344 1.1.1.2 christos }
3345 1.1.1.2 christos NEXT (vpc);
3346 1.1.1.2 christos
3347 1.1.1.2 christos CASE (sem, INSN_LF_SFULE_S) : /* lf.sfule.s $rASF,$rBSF */
3348 1.1.1.2 christos {
3349 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3350 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3351 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3352 1.1.1.2 christos int UNUSED written = 0;
3353 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3354 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3355 1.1.1.2 christos
3356 1.1.1.2 christos {
3357 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))));
3358 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3359 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3360 1.1.1.2 christos }
3361 1.1.1.2 christos
3362 1.1.1.2 christos #undef FLD
3363 1.1.1.2 christos }
3364 1.1.1.2 christos NEXT (vpc);
3365 1.1.1.2 christos
3366 1.1.1.2 christos CASE (sem, INSN_LF_SFULE_D32) : /* lf.sfule.d $rAD32F,$rBD32F */
3367 1.1.1.2 christos {
3368 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3369 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3370 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3371 1.1.1.2 christos int UNUSED written = 0;
3372 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3373 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3374 1.1.1.2 christos
3375 1.1.1.2 christos {
3376 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))));
3377 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3378 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3379 1.1.1.2 christos }
3380 1.1.1.2 christos
3381 1.1.1.2 christos #undef FLD
3382 1.1.1.2 christos }
3383 1.1.1.2 christos NEXT (vpc);
3384 1.1.1.2 christos
3385 1.1.1.2 christos CASE (sem, INSN_LF_SFUN_S) : /* lf.sfun.s $rASF,$rBSF */
3386 1.1.1.2 christos {
3387 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3388 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3389 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3390 1.1.1.2 christos int UNUSED written = 0;
3391 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3392 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3393 1.1.1.2 christos
3394 1.1.1.2 christos {
3395 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)));
3396 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3397 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3398 1.1.1.2 christos }
3399 1.1.1.2 christos
3400 1.1.1.2 christos #undef FLD
3401 1.1.1.2 christos }
3402 1.1.1.2 christos NEXT (vpc);
3403 1.1.1.2 christos
3404 1.1.1.2 christos CASE (sem, INSN_LF_SFUN_D32) : /* lf.sfun.d $rAD32F,$rBD32F */
3405 1.1.1.2 christos {
3406 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3407 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3408 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3409 1.1.1.2 christos int UNUSED written = 0;
3410 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3411 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3412 1.1.1.2 christos
3413 1.1.1.2 christos {
3414 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)));
3415 1.1.1.2 christos SET_H_SYS_SR_F (opval);
3416 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3417 1.1.1.2 christos }
3418 1.1.1.2 christos
3419 1.1.1.2 christos #undef FLD
3420 1.1.1.2 christos }
3421 1.1.1.2 christos NEXT (vpc);
3422 1.1.1.2 christos
3423 1.1 christos CASE (sem, INSN_LF_MADD_S) : /* lf.madd.s $rDSF,$rASF,$rBSF */
3424 1.1 christos {
3425 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3426 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3427 1.1 christos #define FLD(f) abuf->fields.sfmt_l_sll.f
3428 1.1 christos int UNUSED written = 0;
3429 1.1 christos IADDR UNUSED pc = abuf->addr;
3430 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3431 1.1 christos
3432 1.1 christos {
3433 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)));
3434 1.1 christos SET_H_FSR (FLD (f_r1), opval);
3435 1.1 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
3436 1.1 christos }
3437 1.1 christos
3438 1.1 christos #undef FLD
3439 1.1 christos }
3440 1.1 christos NEXT (vpc);
3441 1.1 christos
3442 1.1.1.2 christos CASE (sem, INSN_LF_MADD_D32) : /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */
3443 1.1.1.2 christos {
3444 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3445 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3446 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3447 1.1.1.2 christos int UNUSED written = 0;
3448 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3449 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3450 1.1.1.2 christos
3451 1.1.1.2 christos {
3452 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)));
3453 1.1.1.2 christos SET_H_FD32R (FLD (f_rdd32), opval);
3454 1.1.1.2 christos CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
3455 1.1.1.2 christos }
3456 1.1.1.2 christos
3457 1.1.1.2 christos #undef FLD
3458 1.1.1.2 christos }
3459 1.1.1.2 christos NEXT (vpc);
3460 1.1.1.2 christos
3461 1.1 christos CASE (sem, INSN_LF_CUST1_S) : /* lf.cust1.s $rASF,$rBSF */
3462 1.1 christos {
3463 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3464 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3465 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
3466 1.1 christos int UNUSED written = 0;
3467 1.1 christos IADDR UNUSED pc = abuf->addr;
3468 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3469 1.1 christos
3470 1.1 christos ((void) 0); /*nop*/
3471 1.1 christos
3472 1.1 christos #undef FLD
3473 1.1 christos }
3474 1.1 christos NEXT (vpc);
3475 1.1 christos
3476 1.1.1.2 christos CASE (sem, INSN_LF_CUST1_D32) : /* lf.cust1.d */
3477 1.1.1.2 christos {
3478 1.1.1.2 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3479 1.1.1.2 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3480 1.1.1.2 christos #define FLD(f) abuf->fields.sfmt_empty.f
3481 1.1.1.2 christos int UNUSED written = 0;
3482 1.1.1.2 christos IADDR UNUSED pc = abuf->addr;
3483 1.1.1.2 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3484 1.1.1.2 christos
3485 1.1.1.2 christos ((void) 0); /*nop*/
3486 1.1.1.2 christos
3487 1.1.1.2 christos #undef FLD
3488 1.1.1.2 christos }
3489 1.1.1.2 christos NEXT (vpc);
3490 1.1.1.2 christos
3491 1.1 christos
3492 1.1 christos }
3493 1.1 christos ENDSWITCH (sem) /* End of semantic switch. */
3494 1.1 christos
3495 1.1 christos /* At this point `vpc' contains the next insn to execute. */
3496 1.1 christos }
3497 1.1 christos
3498 1.1 christos #undef DEFINE_SWITCH
3499 1.1 christos #endif /* DEFINE_SWITCH */
3500