1 /* Simulator instruction semantics for or1k32bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996-2024 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
35 { OR1K32BF_INSN_X_INVALID
, && case_sem_INSN_X_INVALID
},
36 { OR1K32BF_INSN_X_AFTER
, && case_sem_INSN_X_AFTER
},
37 { OR1K32BF_INSN_X_BEFORE
, && case_sem_INSN_X_BEFORE
},
38 { OR1K32BF_INSN_X_CTI_CHAIN
, && case_sem_INSN_X_CTI_CHAIN
},
39 { OR1K32BF_INSN_X_CHAIN
, && case_sem_INSN_X_CHAIN
},
40 { OR1K32BF_INSN_X_BEGIN
, && case_sem_INSN_X_BEGIN
},
41 { OR1K32BF_INSN_L_J
, && case_sem_INSN_L_J
},
42 { OR1K32BF_INSN_L_ADRP
, && case_sem_INSN_L_ADRP
},
43 { OR1K32BF_INSN_L_JAL
, && case_sem_INSN_L_JAL
},
44 { OR1K32BF_INSN_L_JR
, && case_sem_INSN_L_JR
},
45 { OR1K32BF_INSN_L_JALR
, && case_sem_INSN_L_JALR
},
46 { OR1K32BF_INSN_L_BNF
, && case_sem_INSN_L_BNF
},
47 { OR1K32BF_INSN_L_BF
, && case_sem_INSN_L_BF
},
48 { OR1K32BF_INSN_L_TRAP
, && case_sem_INSN_L_TRAP
},
49 { OR1K32BF_INSN_L_SYS
, && case_sem_INSN_L_SYS
},
50 { OR1K32BF_INSN_L_MSYNC
, && case_sem_INSN_L_MSYNC
},
51 { OR1K32BF_INSN_L_PSYNC
, && case_sem_INSN_L_PSYNC
},
52 { OR1K32BF_INSN_L_CSYNC
, && case_sem_INSN_L_CSYNC
},
53 { OR1K32BF_INSN_L_RFE
, && case_sem_INSN_L_RFE
},
54 { OR1K32BF_INSN_L_NOP_IMM
, && case_sem_INSN_L_NOP_IMM
},
55 { OR1K32BF_INSN_L_MOVHI
, && case_sem_INSN_L_MOVHI
},
56 { OR1K32BF_INSN_L_MACRC
, && case_sem_INSN_L_MACRC
},
57 { OR1K32BF_INSN_L_MFSPR
, && case_sem_INSN_L_MFSPR
},
58 { OR1K32BF_INSN_L_MTSPR
, && case_sem_INSN_L_MTSPR
},
59 { OR1K32BF_INSN_L_LWZ
, && case_sem_INSN_L_LWZ
},
60 { OR1K32BF_INSN_L_LWS
, && case_sem_INSN_L_LWS
},
61 { OR1K32BF_INSN_L_LWA
, && case_sem_INSN_L_LWA
},
62 { OR1K32BF_INSN_L_LBZ
, && case_sem_INSN_L_LBZ
},
63 { OR1K32BF_INSN_L_LBS
, && case_sem_INSN_L_LBS
},
64 { OR1K32BF_INSN_L_LHZ
, && case_sem_INSN_L_LHZ
},
65 { OR1K32BF_INSN_L_LHS
, && case_sem_INSN_L_LHS
},
66 { OR1K32BF_INSN_L_SW
, && case_sem_INSN_L_SW
},
67 { OR1K32BF_INSN_L_SB
, && case_sem_INSN_L_SB
},
68 { OR1K32BF_INSN_L_SH
, && case_sem_INSN_L_SH
},
69 { OR1K32BF_INSN_L_SWA
, && case_sem_INSN_L_SWA
},
70 { OR1K32BF_INSN_L_SLL
, && case_sem_INSN_L_SLL
},
71 { OR1K32BF_INSN_L_SLLI
, && case_sem_INSN_L_SLLI
},
72 { OR1K32BF_INSN_L_SRL
, && case_sem_INSN_L_SRL
},
73 { OR1K32BF_INSN_L_SRLI
, && case_sem_INSN_L_SRLI
},
74 { OR1K32BF_INSN_L_SRA
, && case_sem_INSN_L_SRA
},
75 { OR1K32BF_INSN_L_SRAI
, && case_sem_INSN_L_SRAI
},
76 { OR1K32BF_INSN_L_ROR
, && case_sem_INSN_L_ROR
},
77 { OR1K32BF_INSN_L_RORI
, && case_sem_INSN_L_RORI
},
78 { OR1K32BF_INSN_L_AND
, && case_sem_INSN_L_AND
},
79 { OR1K32BF_INSN_L_OR
, && case_sem_INSN_L_OR
},
80 { OR1K32BF_INSN_L_XOR
, && case_sem_INSN_L_XOR
},
81 { OR1K32BF_INSN_L_ADD
, && case_sem_INSN_L_ADD
},
82 { OR1K32BF_INSN_L_SUB
, && case_sem_INSN_L_SUB
},
83 { OR1K32BF_INSN_L_ADDC
, && case_sem_INSN_L_ADDC
},
84 { OR1K32BF_INSN_L_MUL
, && case_sem_INSN_L_MUL
},
85 { OR1K32BF_INSN_L_MULD
, && case_sem_INSN_L_MULD
},
86 { OR1K32BF_INSN_L_MULU
, && case_sem_INSN_L_MULU
},
87 { OR1K32BF_INSN_L_MULDU
, && case_sem_INSN_L_MULDU
},
88 { OR1K32BF_INSN_L_DIV
, && case_sem_INSN_L_DIV
},
89 { OR1K32BF_INSN_L_DIVU
, && case_sem_INSN_L_DIVU
},
90 { OR1K32BF_INSN_L_FF1
, && case_sem_INSN_L_FF1
},
91 { OR1K32BF_INSN_L_FL1
, && case_sem_INSN_L_FL1
},
92 { OR1K32BF_INSN_L_ANDI
, && case_sem_INSN_L_ANDI
},
93 { OR1K32BF_INSN_L_ORI
, && case_sem_INSN_L_ORI
},
94 { OR1K32BF_INSN_L_XORI
, && case_sem_INSN_L_XORI
},
95 { OR1K32BF_INSN_L_ADDI
, && case_sem_INSN_L_ADDI
},
96 { OR1K32BF_INSN_L_ADDIC
, && case_sem_INSN_L_ADDIC
},
97 { OR1K32BF_INSN_L_MULI
, && case_sem_INSN_L_MULI
},
98 { OR1K32BF_INSN_L_EXTHS
, && case_sem_INSN_L_EXTHS
},
99 { OR1K32BF_INSN_L_EXTBS
, && case_sem_INSN_L_EXTBS
},
100 { OR1K32BF_INSN_L_EXTHZ
, && case_sem_INSN_L_EXTHZ
},
101 { OR1K32BF_INSN_L_EXTBZ
, && case_sem_INSN_L_EXTBZ
},
102 { OR1K32BF_INSN_L_EXTWS
, && case_sem_INSN_L_EXTWS
},
103 { OR1K32BF_INSN_L_EXTWZ
, && case_sem_INSN_L_EXTWZ
},
104 { OR1K32BF_INSN_L_CMOV
, && case_sem_INSN_L_CMOV
},
105 { OR1K32BF_INSN_L_SFGTS
, && case_sem_INSN_L_SFGTS
},
106 { OR1K32BF_INSN_L_SFGTSI
, && case_sem_INSN_L_SFGTSI
},
107 { OR1K32BF_INSN_L_SFGTU
, && case_sem_INSN_L_SFGTU
},
108 { OR1K32BF_INSN_L_SFGTUI
, && case_sem_INSN_L_SFGTUI
},
109 { OR1K32BF_INSN_L_SFGES
, && case_sem_INSN_L_SFGES
},
110 { OR1K32BF_INSN_L_SFGESI
, && case_sem_INSN_L_SFGESI
},
111 { OR1K32BF_INSN_L_SFGEU
, && case_sem_INSN_L_SFGEU
},
112 { OR1K32BF_INSN_L_SFGEUI
, && case_sem_INSN_L_SFGEUI
},
113 { OR1K32BF_INSN_L_SFLTS
, && case_sem_INSN_L_SFLTS
},
114 { OR1K32BF_INSN_L_SFLTSI
, && case_sem_INSN_L_SFLTSI
},
115 { OR1K32BF_INSN_L_SFLTU
, && case_sem_INSN_L_SFLTU
},
116 { OR1K32BF_INSN_L_SFLTUI
, && case_sem_INSN_L_SFLTUI
},
117 { OR1K32BF_INSN_L_SFLES
, && case_sem_INSN_L_SFLES
},
118 { OR1K32BF_INSN_L_SFLESI
, && case_sem_INSN_L_SFLESI
},
119 { OR1K32BF_INSN_L_SFLEU
, && case_sem_INSN_L_SFLEU
},
120 { OR1K32BF_INSN_L_SFLEUI
, && case_sem_INSN_L_SFLEUI
},
121 { OR1K32BF_INSN_L_SFEQ
, && case_sem_INSN_L_SFEQ
},
122 { OR1K32BF_INSN_L_SFEQI
, && case_sem_INSN_L_SFEQI
},
123 { OR1K32BF_INSN_L_SFNE
, && case_sem_INSN_L_SFNE
},
124 { OR1K32BF_INSN_L_SFNEI
, && case_sem_INSN_L_SFNEI
},
125 { OR1K32BF_INSN_L_MAC
, && case_sem_INSN_L_MAC
},
126 { OR1K32BF_INSN_L_MACI
, && case_sem_INSN_L_MACI
},
127 { OR1K32BF_INSN_L_MACU
, && case_sem_INSN_L_MACU
},
128 { OR1K32BF_INSN_L_MSB
, && case_sem_INSN_L_MSB
},
129 { OR1K32BF_INSN_L_MSBU
, && case_sem_INSN_L_MSBU
},
130 { OR1K32BF_INSN_L_CUST1
, && case_sem_INSN_L_CUST1
},
131 { OR1K32BF_INSN_L_CUST2
, && case_sem_INSN_L_CUST2
},
132 { OR1K32BF_INSN_L_CUST3
, && case_sem_INSN_L_CUST3
},
133 { OR1K32BF_INSN_L_CUST4
, && case_sem_INSN_L_CUST4
},
134 { OR1K32BF_INSN_L_CUST5
, && case_sem_INSN_L_CUST5
},
135 { OR1K32BF_INSN_L_CUST6
, && case_sem_INSN_L_CUST6
},
136 { OR1K32BF_INSN_L_CUST7
, && case_sem_INSN_L_CUST7
},
137 { OR1K32BF_INSN_L_CUST8
, && case_sem_INSN_L_CUST8
},
138 { OR1K32BF_INSN_LF_ADD_S
, && case_sem_INSN_LF_ADD_S
},
139 { OR1K32BF_INSN_LF_ADD_D32
, && case_sem_INSN_LF_ADD_D32
},
140 { OR1K32BF_INSN_LF_SUB_S
, && case_sem_INSN_LF_SUB_S
},
141 { OR1K32BF_INSN_LF_SUB_D32
, && case_sem_INSN_LF_SUB_D32
},
142 { OR1K32BF_INSN_LF_MUL_S
, && case_sem_INSN_LF_MUL_S
},
143 { OR1K32BF_INSN_LF_MUL_D32
, && case_sem_INSN_LF_MUL_D32
},
144 { OR1K32BF_INSN_LF_DIV_S
, && case_sem_INSN_LF_DIV_S
},
145 { OR1K32BF_INSN_LF_DIV_D32
, && case_sem_INSN_LF_DIV_D32
},
146 { OR1K32BF_INSN_LF_REM_S
, && case_sem_INSN_LF_REM_S
},
147 { OR1K32BF_INSN_LF_REM_D32
, && case_sem_INSN_LF_REM_D32
},
148 { OR1K32BF_INSN_LF_ITOF_S
, && case_sem_INSN_LF_ITOF_S
},
149 { OR1K32BF_INSN_LF_ITOF_D32
, && case_sem_INSN_LF_ITOF_D32
},
150 { OR1K32BF_INSN_LF_FTOI_S
, && case_sem_INSN_LF_FTOI_S
},
151 { OR1K32BF_INSN_LF_FTOI_D32
, && case_sem_INSN_LF_FTOI_D32
},
152 { OR1K32BF_INSN_LF_SFEQ_S
, && case_sem_INSN_LF_SFEQ_S
},
153 { OR1K32BF_INSN_LF_SFEQ_D32
, && case_sem_INSN_LF_SFEQ_D32
},
154 { OR1K32BF_INSN_LF_SFNE_S
, && case_sem_INSN_LF_SFNE_S
},
155 { OR1K32BF_INSN_LF_SFNE_D32
, && case_sem_INSN_LF_SFNE_D32
},
156 { OR1K32BF_INSN_LF_SFGE_S
, && case_sem_INSN_LF_SFGE_S
},
157 { OR1K32BF_INSN_LF_SFGE_D32
, && case_sem_INSN_LF_SFGE_D32
},
158 { OR1K32BF_INSN_LF_SFGT_S
, && case_sem_INSN_LF_SFGT_S
},
159 { OR1K32BF_INSN_LF_SFGT_D32
, && case_sem_INSN_LF_SFGT_D32
},
160 { OR1K32BF_INSN_LF_SFLT_S
, && case_sem_INSN_LF_SFLT_S
},
161 { OR1K32BF_INSN_LF_SFLT_D32
, && case_sem_INSN_LF_SFLT_D32
},
162 { OR1K32BF_INSN_LF_SFLE_S
, && case_sem_INSN_LF_SFLE_S
},
163 { OR1K32BF_INSN_LF_SFLE_D32
, && case_sem_INSN_LF_SFLE_D32
},
164 { OR1K32BF_INSN_LF_SFUEQ_S
, && case_sem_INSN_LF_SFUEQ_S
},
165 { OR1K32BF_INSN_LF_SFUEQ_D32
, && case_sem_INSN_LF_SFUEQ_D32
},
166 { OR1K32BF_INSN_LF_SFUNE_S
, && case_sem_INSN_LF_SFUNE_S
},
167 { OR1K32BF_INSN_LF_SFUNE_D32
, && case_sem_INSN_LF_SFUNE_D32
},
168 { OR1K32BF_INSN_LF_SFUGT_S
, && case_sem_INSN_LF_SFUGT_S
},
169 { OR1K32BF_INSN_LF_SFUGT_D32
, && case_sem_INSN_LF_SFUGT_D32
},
170 { OR1K32BF_INSN_LF_SFUGE_S
, && case_sem_INSN_LF_SFUGE_S
},
171 { OR1K32BF_INSN_LF_SFUGE_D32
, && case_sem_INSN_LF_SFUGE_D32
},
172 { OR1K32BF_INSN_LF_SFULT_S
, && case_sem_INSN_LF_SFULT_S
},
173 { OR1K32BF_INSN_LF_SFULT_D32
, && case_sem_INSN_LF_SFULT_D32
},
174 { OR1K32BF_INSN_LF_SFULE_S
, && case_sem_INSN_LF_SFULE_S
},
175 { OR1K32BF_INSN_LF_SFULE_D32
, && case_sem_INSN_LF_SFULE_D32
},
176 { OR1K32BF_INSN_LF_SFUN_S
, && case_sem_INSN_LF_SFUN_S
},
177 { OR1K32BF_INSN_LF_SFUN_D32
, && case_sem_INSN_LF_SFUN_D32
},
178 { OR1K32BF_INSN_LF_MADD_S
, && case_sem_INSN_LF_MADD_S
},
179 { OR1K32BF_INSN_LF_MADD_D32
, && case_sem_INSN_LF_MADD_D32
},
180 { OR1K32BF_INSN_LF_CUST1_S
, && case_sem_INSN_LF_CUST1_S
},
181 { OR1K32BF_INSN_LF_CUST1_D32
, && case_sem_INSN_LF_CUST1_D32
},
186 for (i
= 0; labels
[i
].label
!= 0; ++i
)
189 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_fast_lab
= labels
[i
].label
;
191 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_full_lab
= labels
[i
].label
;
196 #endif /* DEFINE_LABELS */
200 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
201 off frills like tracing and profiling. */
202 /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
203 that can cause it to be optimized out. Another way would be to emit
204 special handlers into the instruction "stream". */
207 #undef CGEN_TRACE_RESULT
208 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
212 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
218 /* Branch to next handler without going around main loop. */
219 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
220 SWITCH (sem
, SEM_ARGBUF (vpc
) -> semantic
.sem_case
)
222 #else /* ! WITH_SCACHE_PBB */
224 #define NEXT(vpc) BREAK (sem)
227 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_fast_lab
)
229 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_full_lab
)
232 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->num
)
235 #endif /* ! WITH_SCACHE_PBB */
239 CASE (sem
, INSN_X_INVALID
) : /* --invalid-- */
241 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
242 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
243 #define FLD(f) abuf->fields.sfmt_empty.f
244 int UNUSED written
= 0;
245 IADDR UNUSED pc
= abuf
->addr
;
246 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
249 /* Update the recorded pc in the cpu state struct.
250 Only necessary for WITH_SCACHE case, but to avoid the
251 conditional compilation .... */
253 /* Virtual insns have zero size. Overwrite vpc with address of next insn
254 using the default-insn-bitsize spec. When executing insns in parallel
255 we may want to queue the fault and continue execution. */
256 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
257 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
264 CASE (sem
, INSN_X_AFTER
) : /* --after-- */
266 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
267 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
268 #define FLD(f) abuf->fields.sfmt_empty.f
269 int UNUSED written
= 0;
270 IADDR UNUSED pc
= abuf
->addr
;
271 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
274 #if WITH_SCACHE_PBB_OR1K32BF
275 or1k32bf_pbb_after (current_cpu
, sem_arg
);
283 CASE (sem
, INSN_X_BEFORE
) : /* --before-- */
285 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
286 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
287 #define FLD(f) abuf->fields.sfmt_empty.f
288 int UNUSED written
= 0;
289 IADDR UNUSED pc
= abuf
->addr
;
290 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
293 #if WITH_SCACHE_PBB_OR1K32BF
294 or1k32bf_pbb_before (current_cpu
, sem_arg
);
302 CASE (sem
, INSN_X_CTI_CHAIN
) : /* --cti-chain-- */
304 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
305 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
306 #define FLD(f) abuf->fields.sfmt_empty.f
307 int UNUSED written
= 0;
308 IADDR UNUSED pc
= abuf
->addr
;
309 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
312 #if WITH_SCACHE_PBB_OR1K32BF
314 vpc
= or1k32bf_pbb_cti_chain (current_cpu
, sem_arg
,
315 pbb_br_type
, pbb_br_npc
);
318 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
319 vpc
= or1k32bf_pbb_cti_chain (current_cpu
, sem_arg
,
320 CPU_PBB_BR_TYPE (current_cpu
),
321 CPU_PBB_BR_NPC (current_cpu
));
330 CASE (sem
, INSN_X_CHAIN
) : /* --chain-- */
332 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
333 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
334 #define FLD(f) abuf->fields.sfmt_empty.f
335 int UNUSED written
= 0;
336 IADDR UNUSED pc
= abuf
->addr
;
337 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
340 #if WITH_SCACHE_PBB_OR1K32BF
341 vpc
= or1k32bf_pbb_chain (current_cpu
, sem_arg
);
352 CASE (sem
, INSN_X_BEGIN
) : /* --begin-- */
354 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
355 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
356 #define FLD(f) abuf->fields.sfmt_empty.f
357 int UNUSED written
= 0;
358 IADDR UNUSED pc
= abuf
->addr
;
359 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
362 #if WITH_SCACHE_PBB_OR1K32BF
363 #if defined DEFINE_SWITCH || defined FAST_P
364 /* In the switch case FAST_P is a constant, allowing several optimizations
365 in any called inline functions. */
366 vpc
= or1k32bf_pbb_begin (current_cpu
, FAST_P
);
368 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
369 vpc
= or1k32bf_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
371 vpc
= or1k32bf_pbb_begin (current_cpu
, 0);
381 CASE (sem
, INSN_L_J
) : /* l.j ${disp26} */
383 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
384 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
385 #define FLD(f) abuf->fields.sfmt_l_j.f
386 int UNUSED written
= 0;
387 IADDR UNUSED pc
= abuf
->addr
;
389 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
394 USI opval
= FLD (i_disp26
);
395 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
396 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
399 if (GET_H_SYS_CPUCFGR_ND ()) {
401 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
405 SEM_BRANCH_FINI (vpc
);
410 CASE (sem
, INSN_L_ADRP
) : /* l.adrp $rD,${disp21} */
412 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
413 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
414 #define FLD(f) abuf->fields.sfmt_l_adrp.f
415 int UNUSED written
= 0;
416 IADDR UNUSED pc
= abuf
->addr
;
417 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
420 USI opval
= FLD (i_disp21
);
421 SET_H_GPR (FLD (f_r1
), opval
);
422 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
429 CASE (sem
, INSN_L_JAL
) : /* l.jal ${disp26} */
431 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
432 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
433 #define FLD(f) abuf->fields.sfmt_l_j.f
434 int UNUSED written
= 0;
435 IADDR UNUSED pc
= abuf
->addr
;
437 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
441 USI opval
= ADDSI (pc
, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
442 SET_H_GPR (((UINT
) 9), opval
);
443 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
448 USI opval
= FLD (i_disp26
);
449 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
450 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
453 if (GET_H_SYS_CPUCFGR_ND ()) {
455 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
460 SEM_BRANCH_FINI (vpc
);
465 CASE (sem
, INSN_L_JR
) : /* l.jr $rB */
467 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
468 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
469 #define FLD(f) abuf->fields.sfmt_l_sll.f
470 int UNUSED written
= 0;
471 IADDR UNUSED pc
= abuf
->addr
;
473 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
478 USI opval
= GET_H_GPR (FLD (f_r3
));
479 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
480 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
483 if (GET_H_SYS_CPUCFGR_ND ()) {
485 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
489 SEM_BRANCH_FINI (vpc
);
494 CASE (sem
, INSN_L_JALR
) : /* l.jalr $rB */
496 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
497 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
498 #define FLD(f) abuf->fields.sfmt_l_sll.f
499 int UNUSED written
= 0;
500 IADDR UNUSED pc
= abuf
->addr
;
502 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
506 USI opval
= ADDSI (pc
, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
507 SET_H_GPR (((UINT
) 9), opval
);
508 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
513 USI opval
= GET_H_GPR (FLD (f_r3
));
514 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
515 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
518 if (GET_H_SYS_CPUCFGR_ND ()) {
520 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
525 SEM_BRANCH_FINI (vpc
);
530 CASE (sem
, INSN_L_BNF
) : /* l.bnf ${disp26} */
532 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
533 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
534 #define FLD(f) abuf->fields.sfmt_l_j.f
535 int UNUSED written
= 0;
536 IADDR UNUSED pc
= abuf
->addr
;
538 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
541 if (NOTSI (GET_H_SYS_SR_F ())) {
544 USI opval
= FLD (i_disp26
);
545 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
547 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
551 if (GET_H_SYS_CPUCFGR_ND ()) {
554 USI opval
= ADDSI (pc
, 4);
555 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
557 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
562 if (GET_H_SYS_CPUCFGR_ND ()) {
564 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
568 abuf
->written
= written
;
569 SEM_BRANCH_FINI (vpc
);
574 CASE (sem
, INSN_L_BF
) : /* l.bf ${disp26} */
576 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
577 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
578 #define FLD(f) abuf->fields.sfmt_l_j.f
579 int UNUSED written
= 0;
580 IADDR UNUSED pc
= abuf
->addr
;
582 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
585 if (GET_H_SYS_SR_F ()) {
588 USI opval
= FLD (i_disp26
);
589 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
591 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
595 if (GET_H_SYS_CPUCFGR_ND ()) {
598 USI opval
= ADDSI (pc
, 4);
599 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
601 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
606 if (GET_H_SYS_CPUCFGR_ND ()) {
608 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
612 abuf
->written
= written
;
613 SEM_BRANCH_FINI (vpc
);
618 CASE (sem
, INSN_L_TRAP
) : /* l.trap ${uimm16} */
620 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
621 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
622 #define FLD(f) abuf->fields.sfmt_empty.f
623 int UNUSED written
= 0;
624 IADDR UNUSED pc
= abuf
->addr
;
625 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
627 or1k32bf_exception (current_cpu
, pc
, EXCEPT_TRAP
);
633 CASE (sem
, INSN_L_SYS
) : /* l.sys ${uimm16} */
635 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
636 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
637 #define FLD(f) abuf->fields.sfmt_empty.f
638 int UNUSED written
= 0;
639 IADDR UNUSED pc
= abuf
->addr
;
640 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
642 or1k32bf_exception (current_cpu
, pc
, EXCEPT_SYSCALL
);
648 CASE (sem
, INSN_L_MSYNC
) : /* l.msync */
650 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
651 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
652 #define FLD(f) abuf->fields.sfmt_empty.f
653 int UNUSED written
= 0;
654 IADDR UNUSED pc
= abuf
->addr
;
655 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
663 CASE (sem
, INSN_L_PSYNC
) : /* l.psync */
665 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
666 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
667 #define FLD(f) abuf->fields.sfmt_empty.f
668 int UNUSED written
= 0;
669 IADDR UNUSED pc
= abuf
->addr
;
670 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
678 CASE (sem
, INSN_L_CSYNC
) : /* l.csync */
680 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
681 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
682 #define FLD(f) abuf->fields.sfmt_empty.f
683 int UNUSED written
= 0;
684 IADDR UNUSED pc
= abuf
->addr
;
685 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
693 CASE (sem
, INSN_L_RFE
) : /* l.rfe */
695 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
696 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
697 #define FLD(f) abuf->fields.sfmt_empty.f
698 int UNUSED written
= 0;
699 IADDR UNUSED pc
= abuf
->addr
;
700 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
702 or1k32bf_rfe (current_cpu
);
708 CASE (sem
, INSN_L_NOP_IMM
) : /* l.nop ${uimm16} */
710 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
711 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
712 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
713 int UNUSED written
= 0;
714 IADDR UNUSED pc
= abuf
->addr
;
715 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
717 or1k32bf_nop (current_cpu
, ZEXTSISI (FLD (f_uimm16
)));
723 CASE (sem
, INSN_L_MOVHI
) : /* l.movhi $rD,$uimm16 */
725 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
726 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
727 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
728 int UNUSED written
= 0;
729 IADDR UNUSED pc
= abuf
->addr
;
730 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
733 USI opval
= SLLSI (ZEXTSISI (FLD (f_uimm16
)), 16);
734 SET_H_GPR (FLD (f_r1
), opval
);
735 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
742 CASE (sem
, INSN_L_MACRC
) : /* l.macrc $rD */
744 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
745 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
746 #define FLD(f) abuf->fields.sfmt_l_adrp.f
747 int UNUSED written
= 0;
748 IADDR UNUSED pc
= abuf
->addr
;
749 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
753 USI opval
= GET_H_MAC_MACLO ();
754 SET_H_GPR (FLD (f_r1
), opval
);
755 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
759 SET_H_MAC_MACLO (opval
);
760 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
764 SET_H_MAC_MACHI (opval
);
765 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
773 CASE (sem
, INSN_L_MFSPR
) : /* l.mfspr $rD,$rA,${uimm16} */
775 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
777 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
778 int UNUSED written
= 0;
779 IADDR UNUSED pc
= abuf
->addr
;
780 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
783 USI opval
= or1k32bf_mfspr (current_cpu
, ORSI (GET_H_GPR (FLD (f_r2
)), ZEXTSISI (FLD (f_uimm16
))));
784 SET_H_GPR (FLD (f_r1
), opval
);
785 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
792 CASE (sem
, INSN_L_MTSPR
) : /* l.mtspr $rA,$rB,${uimm16-split} */
794 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
795 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
796 #define FLD(f) abuf->fields.sfmt_l_mtspr.f
797 int UNUSED written
= 0;
798 IADDR UNUSED pc
= abuf
->addr
;
799 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
801 or1k32bf_mtspr (current_cpu
, ORSI (GET_H_GPR (FLD (f_r2
)), ZEXTSISI (FLD (f_uimm16_split
))), GET_H_GPR (FLD (f_r3
)));
807 CASE (sem
, INSN_L_LWZ
) : /* l.lwz $rD,${simm16}($rA) */
809 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
810 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
811 #define FLD(f) abuf->fields.sfmt_l_lwz.f
812 int UNUSED written
= 0;
813 IADDR UNUSED pc
= abuf
->addr
;
814 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
817 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 SET_H_GPR (FLD (f_r1
), opval
);
819 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
826 CASE (sem
, INSN_L_LWS
) : /* l.lws $rD,${simm16}($rA) */
828 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
829 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
830 #define FLD(f) abuf->fields.sfmt_l_lwz.f
831 int UNUSED written
= 0;
832 IADDR UNUSED pc
= abuf
->addr
;
833 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
836 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 SET_H_GPR (FLD (f_r1
), opval
);
838 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
845 CASE (sem
, INSN_L_LWA
) : /* l.lwa $rD,${simm16}($rA) */
847 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
848 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
849 #define FLD(f) abuf->fields.sfmt_l_lwz.f
850 int UNUSED written
= 0;
851 IADDR UNUSED pc
= abuf
->addr
;
852 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
856 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 SET_H_GPR (FLD (f_r1
), opval
);
858 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
862 CPU (h_atomic_reserve
) = opval
;
863 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
866 SI opval
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), 4);
867 CPU (h_atomic_address
) = opval
;
868 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-address", 'x', opval
);
876 CASE (sem
, INSN_L_LBZ
) : /* l.lbz $rD,${simm16}($rA) */
878 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
879 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
880 #define FLD(f) abuf->fields.sfmt_l_lwz.f
881 int UNUSED written
= 0;
882 IADDR UNUSED pc
= abuf
->addr
;
883 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
886 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 SET_H_GPR (FLD (f_r1
), opval
);
888 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
895 CASE (sem
, INSN_L_LBS
) : /* l.lbs $rD,${simm16}($rA) */
897 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
898 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
899 #define FLD(f) abuf->fields.sfmt_l_lwz.f
900 int UNUSED written
= 0;
901 IADDR UNUSED pc
= abuf
->addr
;
902 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
905 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 SET_H_GPR (FLD (f_r1
), opval
);
907 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
914 CASE (sem
, INSN_L_LHZ
) : /* l.lhz $rD,${simm16}($rA) */
916 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
917 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
918 #define FLD(f) abuf->fields.sfmt_l_lwz.f
919 int UNUSED written
= 0;
920 IADDR UNUSED pc
= abuf
->addr
;
921 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
924 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 SET_H_GPR (FLD (f_r1
), opval
);
926 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
933 CASE (sem
, INSN_L_LHS
) : /* l.lhs $rD,${simm16}($rA) */
935 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
936 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
937 #define FLD(f) abuf->fields.sfmt_l_lwz.f
938 int UNUSED written
= 0;
939 IADDR UNUSED pc
= abuf
->addr
;
940 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
943 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 SET_H_GPR (FLD (f_r1
), opval
);
945 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
952 CASE (sem
, INSN_L_SW
) : /* l.sw ${simm16-split}($rA),$rB */
954 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
955 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
956 #define FLD(f) abuf->fields.sfmt_l_sw.f
957 int UNUSED written
= 0;
958 IADDR UNUSED pc
= abuf
->addr
;
959 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
963 tmp_addr
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16_split
)), 4);
965 USI opval
= TRUNCSISI (GET_H_GPR (FLD (f_r3
)));
966 SETMEMUSI (current_cpu
, pc
, tmp_addr
, opval
);
967 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
969 if (EQSI (ANDSI (tmp_addr
, 268435452), CPU (h_atomic_address
))) {
972 CPU (h_atomic_reserve
) = opval
;
974 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
979 abuf
->written
= written
;
984 CASE (sem
, INSN_L_SB
) : /* l.sb ${simm16-split}($rA),$rB */
986 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
987 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
988 #define FLD(f) abuf->fields.sfmt_l_sw.f
989 int UNUSED written
= 0;
990 IADDR UNUSED pc
= abuf
->addr
;
991 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
995 tmp_addr
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16_split
)), 1);
997 UQI opval
= TRUNCSIQI (GET_H_GPR (FLD (f_r3
)));
998 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
999 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1001 if (EQSI (ANDSI (tmp_addr
, 268435452), CPU (h_atomic_address
))) {
1004 CPU (h_atomic_reserve
) = opval
;
1005 written
|= (1 << 4);
1006 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
1011 abuf
->written
= written
;
1016 CASE (sem
, INSN_L_SH
) : /* l.sh ${simm16-split}($rA),$rB */
1018 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1019 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1020 #define FLD(f) abuf->fields.sfmt_l_sw.f
1021 int UNUSED written
= 0;
1022 IADDR UNUSED pc
= abuf
->addr
;
1023 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1027 tmp_addr
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16_split
)), 2);
1029 UHI opval
= TRUNCSIHI (GET_H_GPR (FLD (f_r3
)));
1030 SETMEMUHI (current_cpu
, pc
, tmp_addr
, opval
);
1031 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1033 if (EQSI (ANDSI (tmp_addr
, 268435452), CPU (h_atomic_address
))) {
1036 CPU (h_atomic_reserve
) = opval
;
1037 written
|= (1 << 4);
1038 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
1043 abuf
->written
= written
;
1048 CASE (sem
, INSN_L_SWA
) : /* l.swa ${simm16-split}($rA),$rB */
1050 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1051 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1052 #define FLD(f) abuf->fields.sfmt_l_sw.f
1053 int UNUSED written
= 0;
1054 IADDR UNUSED pc
= abuf
->addr
;
1055 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1059 tmp_addr
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16_split
)), 4);
1061 USI opval
= ANDBI (CPU (h_atomic_reserve
), EQSI (tmp_addr
, CPU (h_atomic_address
)));
1062 SET_H_SYS_SR_F (opval
);
1063 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1065 if (GET_H_SYS_SR_F ()) {
1067 USI opval
= TRUNCSISI (GET_H_GPR (FLD (f_r3
)));
1068 SETMEMUSI (current_cpu
, pc
, tmp_addr
, opval
);
1069 written
|= (1 << 7);
1070 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1075 CPU (h_atomic_reserve
) = opval
;
1076 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
1080 abuf
->written
= written
;
1085 CASE (sem
, INSN_L_SLL
) : /* l.sll $rD,$rA,$rB */
1087 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1088 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1089 #define FLD(f) abuf->fields.sfmt_l_sll.f
1090 int UNUSED written
= 0;
1091 IADDR UNUSED pc
= abuf
->addr
;
1092 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1095 USI opval
= SLLSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1096 SET_H_GPR (FLD (f_r1
), opval
);
1097 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1104 CASE (sem
, INSN_L_SLLI
) : /* l.slli $rD,$rA,${uimm6} */
1106 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1107 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1108 #define FLD(f) abuf->fields.sfmt_l_slli.f
1109 int UNUSED written
= 0;
1110 IADDR UNUSED pc
= abuf
->addr
;
1111 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1114 USI opval
= SLLSI (GET_H_GPR (FLD (f_r2
)), FLD (f_uimm6
));
1115 SET_H_GPR (FLD (f_r1
), opval
);
1116 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1123 CASE (sem
, INSN_L_SRL
) : /* l.srl $rD,$rA,$rB */
1125 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1126 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1127 #define FLD(f) abuf->fields.sfmt_l_sll.f
1128 int UNUSED written
= 0;
1129 IADDR UNUSED pc
= abuf
->addr
;
1130 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1133 USI opval
= SRLSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1134 SET_H_GPR (FLD (f_r1
), opval
);
1135 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1142 CASE (sem
, INSN_L_SRLI
) : /* l.srli $rD,$rA,${uimm6} */
1144 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1145 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1146 #define FLD(f) abuf->fields.sfmt_l_slli.f
1147 int UNUSED written
= 0;
1148 IADDR UNUSED pc
= abuf
->addr
;
1149 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1152 USI opval
= SRLSI (GET_H_GPR (FLD (f_r2
)), FLD (f_uimm6
));
1153 SET_H_GPR (FLD (f_r1
), opval
);
1154 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1161 CASE (sem
, INSN_L_SRA
) : /* l.sra $rD,$rA,$rB */
1163 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1164 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1165 #define FLD(f) abuf->fields.sfmt_l_sll.f
1166 int UNUSED written
= 0;
1167 IADDR UNUSED pc
= abuf
->addr
;
1168 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1171 USI opval
= SRASI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1172 SET_H_GPR (FLD (f_r1
), opval
);
1173 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1180 CASE (sem
, INSN_L_SRAI
) : /* l.srai $rD,$rA,${uimm6} */
1182 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1183 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1184 #define FLD(f) abuf->fields.sfmt_l_slli.f
1185 int UNUSED written
= 0;
1186 IADDR UNUSED pc
= abuf
->addr
;
1187 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1190 USI opval
= SRASI (GET_H_GPR (FLD (f_r2
)), FLD (f_uimm6
));
1191 SET_H_GPR (FLD (f_r1
), opval
);
1192 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1199 CASE (sem
, INSN_L_ROR
) : /* l.ror $rD,$rA,$rB */
1201 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1202 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1203 #define FLD(f) abuf->fields.sfmt_l_sll.f
1204 int UNUSED written
= 0;
1205 IADDR UNUSED pc
= abuf
->addr
;
1206 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1209 USI opval
= RORSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1210 SET_H_GPR (FLD (f_r1
), opval
);
1211 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1218 CASE (sem
, INSN_L_RORI
) : /* l.rori $rD,$rA,${uimm6} */
1220 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1221 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1222 #define FLD(f) abuf->fields.sfmt_l_slli.f
1223 int UNUSED written
= 0;
1224 IADDR UNUSED pc
= abuf
->addr
;
1225 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1228 USI opval
= RORSI (GET_H_GPR (FLD (f_r2
)), FLD (f_uimm6
));
1229 SET_H_GPR (FLD (f_r1
), opval
);
1230 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1237 CASE (sem
, INSN_L_AND
) : /* l.and $rD,$rA,$rB */
1239 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1240 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1241 #define FLD(f) abuf->fields.sfmt_l_sll.f
1242 int UNUSED written
= 0;
1243 IADDR UNUSED pc
= abuf
->addr
;
1244 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1247 USI opval
= ANDSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1248 SET_H_GPR (FLD (f_r1
), opval
);
1249 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1256 CASE (sem
, INSN_L_OR
) : /* l.or $rD,$rA,$rB */
1258 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1259 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1260 #define FLD(f) abuf->fields.sfmt_l_sll.f
1261 int UNUSED written
= 0;
1262 IADDR UNUSED pc
= abuf
->addr
;
1263 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1266 USI opval
= ORSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1267 SET_H_GPR (FLD (f_r1
), opval
);
1268 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1275 CASE (sem
, INSN_L_XOR
) : /* l.xor $rD,$rA,$rB */
1277 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1278 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1279 #define FLD(f) abuf->fields.sfmt_l_sll.f
1280 int UNUSED written
= 0;
1281 IADDR UNUSED pc
= abuf
->addr
;
1282 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1285 USI opval
= XORSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1286 SET_H_GPR (FLD (f_r1
), opval
);
1287 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1294 CASE (sem
, INSN_L_ADD
) : /* l.add $rD,$rA,$rB */
1296 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1297 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1298 #define FLD(f) abuf->fields.sfmt_l_sll.f
1299 int UNUSED written
= 0;
1300 IADDR UNUSED pc
= abuf
->addr
;
1301 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1306 BI opval
= ADDCFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), 0);
1307 SET_H_SYS_SR_CY (opval
);
1308 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1311 BI opval
= ADDOFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), 0);
1312 SET_H_SYS_SR_OV (opval
);
1313 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1316 USI opval
= ADDSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1317 SET_H_GPR (FLD (f_r1
), opval
);
1318 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1321 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1322 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1330 CASE (sem
, INSN_L_SUB
) : /* l.sub $rD,$rA,$rB */
1332 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1333 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1334 #define FLD(f) abuf->fields.sfmt_l_sll.f
1335 int UNUSED written
= 0;
1336 IADDR UNUSED pc
= abuf
->addr
;
1337 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1342 BI opval
= SUBCFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), 0);
1343 SET_H_SYS_SR_CY (opval
);
1344 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1347 BI opval
= SUBOFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), 0);
1348 SET_H_SYS_SR_OV (opval
);
1349 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1352 USI opval
= SUBSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1353 SET_H_GPR (FLD (f_r1
), opval
);
1354 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1357 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1358 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1366 CASE (sem
, INSN_L_ADDC
) : /* l.addc $rD,$rA,$rB */
1368 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1369 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1370 #define FLD(f) abuf->fields.sfmt_l_sll.f
1371 int UNUSED written
= 0;
1372 IADDR UNUSED pc
= abuf
->addr
;
1373 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1377 BI tmp_tmp_sys_sr_cy
;
1378 tmp_tmp_sys_sr_cy
= GET_H_SYS_SR_CY ();
1380 BI opval
= ADDCFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), tmp_tmp_sys_sr_cy
);
1381 SET_H_SYS_SR_CY (opval
);
1382 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1385 BI opval
= ADDOFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), tmp_tmp_sys_sr_cy
);
1386 SET_H_SYS_SR_OV (opval
);
1387 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1390 USI opval
= ADDCSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), tmp_tmp_sys_sr_cy
);
1391 SET_H_GPR (FLD (f_r1
), opval
);
1392 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1395 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1396 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1404 CASE (sem
, INSN_L_MUL
) : /* l.mul $rD,$rA,$rB */
1406 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1407 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1408 #define FLD(f) abuf->fields.sfmt_l_sll.f
1409 int UNUSED written
= 0;
1410 IADDR UNUSED pc
= abuf
->addr
;
1411 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1416 BI opval
= MUL2OFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1417 SET_H_SYS_SR_OV (opval
);
1418 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1421 USI opval
= MULSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1422 SET_H_GPR (FLD (f_r1
), opval
);
1423 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1426 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1427 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1435 CASE (sem
, INSN_L_MULD
) : /* l.muld $rA,$rB */
1437 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1438 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1439 #define FLD(f) abuf->fields.sfmt_l_sll.f
1440 int UNUSED written
= 0;
1441 IADDR UNUSED pc
= abuf
->addr
;
1442 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1446 tmp_result
= MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2
))), EXTSIDI (GET_H_GPR (FLD (f_r3
))));
1448 SI opval
= SUBWORDDISI (tmp_result
, 0);
1449 SET_H_MAC_MACHI (opval
);
1450 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
1453 SI opval
= SUBWORDDISI (tmp_result
, 1);
1454 SET_H_MAC_MACLO (opval
);
1455 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
1463 CASE (sem
, INSN_L_MULU
) : /* l.mulu $rD,$rA,$rB */
1465 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1466 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1467 #define FLD(f) abuf->fields.sfmt_l_sll.f
1468 int UNUSED written
= 0;
1469 IADDR UNUSED pc
= abuf
->addr
;
1470 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1475 BI opval
= MUL1OFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1476 SET_H_SYS_SR_CY (opval
);
1477 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1480 USI opval
= MULSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1481 SET_H_GPR (FLD (f_r1
), opval
);
1482 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1485 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
1486 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1494 CASE (sem
, INSN_L_MULDU
) : /* l.muldu $rA,$rB */
1496 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1497 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1498 #define FLD(f) abuf->fields.sfmt_l_sll.f
1499 int UNUSED written
= 0;
1500 IADDR UNUSED pc
= abuf
->addr
;
1501 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1505 tmp_result
= MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2
))), ZEXTSIDI (GET_H_GPR (FLD (f_r3
))));
1507 SI opval
= SUBWORDDISI (tmp_result
, 0);
1508 SET_H_MAC_MACHI (opval
);
1509 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
1512 SI opval
= SUBWORDDISI (tmp_result
, 1);
1513 SET_H_MAC_MACLO (opval
);
1514 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
1522 CASE (sem
, INSN_L_DIV
) : /* l.div $rD,$rA,$rB */
1524 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1525 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1526 #define FLD(f) abuf->fields.sfmt_l_sll.f
1527 int UNUSED written
= 0;
1528 IADDR UNUSED pc
= abuf
->addr
;
1529 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1531 if (NESI (GET_H_GPR (FLD (f_r3
)), 0)) {
1535 SET_H_SYS_SR_OV (opval
);
1536 written
|= (1 << 5);
1537 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1540 SI opval
= DIVSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1541 SET_H_GPR (FLD (f_r1
), opval
);
1542 written
|= (1 << 4);
1543 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1550 SET_H_SYS_SR_OV (opval
);
1551 written
|= (1 << 5);
1552 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1554 if (GET_H_SYS_SR_OVE ()) {
1555 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1560 abuf
->written
= written
;
1565 CASE (sem
, INSN_L_DIVU
) : /* l.divu $rD,$rA,$rB */
1567 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1568 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1569 #define FLD(f) abuf->fields.sfmt_l_sll.f
1570 int UNUSED written
= 0;
1571 IADDR UNUSED pc
= abuf
->addr
;
1572 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1574 if (NESI (GET_H_GPR (FLD (f_r3
)), 0)) {
1578 SET_H_SYS_SR_CY (opval
);
1579 written
|= (1 << 5);
1580 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1583 USI opval
= UDIVSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1584 SET_H_GPR (FLD (f_r1
), opval
);
1585 written
|= (1 << 4);
1586 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1593 SET_H_SYS_SR_CY (opval
);
1594 written
|= (1 << 5);
1595 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1597 if (GET_H_SYS_SR_OVE ()) {
1598 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1603 abuf
->written
= written
;
1608 CASE (sem
, INSN_L_FF1
) : /* l.ff1 $rD,$rA */
1610 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1611 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1612 #define FLD(f) abuf->fields.sfmt_l_slli.f
1613 int UNUSED written
= 0;
1614 IADDR UNUSED pc
= abuf
->addr
;
1615 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1618 USI opval
= or1k32bf_ff1 (current_cpu
, GET_H_GPR (FLD (f_r2
)));
1619 SET_H_GPR (FLD (f_r1
), opval
);
1620 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1627 CASE (sem
, INSN_L_FL1
) : /* l.fl1 $rD,$rA */
1629 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1630 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1631 #define FLD(f) abuf->fields.sfmt_l_slli.f
1632 int UNUSED written
= 0;
1633 IADDR UNUSED pc
= abuf
->addr
;
1634 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1637 USI opval
= or1k32bf_fl1 (current_cpu
, GET_H_GPR (FLD (f_r2
)));
1638 SET_H_GPR (FLD (f_r1
), opval
);
1639 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1646 CASE (sem
, INSN_L_ANDI
) : /* l.andi $rD,$rA,$uimm16 */
1648 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1649 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1650 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1651 int UNUSED written
= 0;
1652 IADDR UNUSED pc
= abuf
->addr
;
1653 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1656 USI opval
= ANDSI (GET_H_GPR (FLD (f_r2
)), ZEXTSISI (FLD (f_uimm16
)));
1657 SET_H_GPR (FLD (f_r1
), opval
);
1658 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1665 CASE (sem
, INSN_L_ORI
) : /* l.ori $rD,$rA,$uimm16 */
1667 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1668 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1669 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1670 int UNUSED written
= 0;
1671 IADDR UNUSED pc
= abuf
->addr
;
1672 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1675 USI opval
= ORSI (GET_H_GPR (FLD (f_r2
)), ZEXTSISI (FLD (f_uimm16
)));
1676 SET_H_GPR (FLD (f_r1
), opval
);
1677 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1684 CASE (sem
, INSN_L_XORI
) : /* l.xori $rD,$rA,$simm16 */
1686 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1687 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1688 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1689 int UNUSED written
= 0;
1690 IADDR UNUSED pc
= abuf
->addr
;
1691 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1694 USI opval
= XORSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1695 SET_H_GPR (FLD (f_r1
), opval
);
1696 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1703 CASE (sem
, INSN_L_ADDI
) : /* l.addi $rD,$rA,$simm16 */
1705 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1706 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1707 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1708 int UNUSED written
= 0;
1709 IADDR UNUSED pc
= abuf
->addr
;
1710 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1715 BI opval
= ADDCFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), 0);
1716 SET_H_SYS_SR_CY (opval
);
1717 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1720 BI opval
= ADDOFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), 0);
1721 SET_H_SYS_SR_OV (opval
);
1722 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1725 USI opval
= ADDSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1726 SET_H_GPR (FLD (f_r1
), opval
);
1727 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1730 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1731 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1739 CASE (sem
, INSN_L_ADDIC
) : /* l.addic $rD,$rA,$simm16 */
1741 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1742 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1743 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1744 int UNUSED written
= 0;
1745 IADDR UNUSED pc
= abuf
->addr
;
1746 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1750 BI tmp_tmp_sys_sr_cy
;
1751 tmp_tmp_sys_sr_cy
= GET_H_SYS_SR_CY ();
1753 BI opval
= ADDCFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), tmp_tmp_sys_sr_cy
);
1754 SET_H_SYS_SR_CY (opval
);
1755 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1758 BI opval
= ADDOFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), tmp_tmp_sys_sr_cy
);
1759 SET_H_SYS_SR_OV (opval
);
1760 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1763 SI opval
= ADDCSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), tmp_tmp_sys_sr_cy
);
1764 SET_H_GPR (FLD (f_r1
), opval
);
1765 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1768 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1769 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1777 CASE (sem
, INSN_L_MULI
) : /* l.muli $rD,$rA,$simm16 */
1779 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1780 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1781 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1782 int UNUSED written
= 0;
1783 IADDR UNUSED pc
= abuf
->addr
;
1784 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1789 USI opval
= MUL2OFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1790 SET_H_SYS_SR_OV (opval
);
1791 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1794 USI opval
= MULSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1795 SET_H_GPR (FLD (f_r1
), opval
);
1796 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1799 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1800 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1808 CASE (sem
, INSN_L_EXTHS
) : /* l.exths $rD,$rA */
1810 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1811 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1812 #define FLD(f) abuf->fields.sfmt_l_slli.f
1813 int UNUSED written
= 0;
1814 IADDR UNUSED pc
= abuf
->addr
;
1815 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1818 USI opval
= EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2
))));
1819 SET_H_GPR (FLD (f_r1
), opval
);
1820 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1827 CASE (sem
, INSN_L_EXTBS
) : /* l.extbs $rD,$rA */
1829 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1830 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1831 #define FLD(f) abuf->fields.sfmt_l_slli.f
1832 int UNUSED written
= 0;
1833 IADDR UNUSED pc
= abuf
->addr
;
1834 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1837 USI opval
= EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2
))));
1838 SET_H_GPR (FLD (f_r1
), opval
);
1839 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1846 CASE (sem
, INSN_L_EXTHZ
) : /* l.exthz $rD,$rA */
1848 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1849 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1850 #define FLD(f) abuf->fields.sfmt_l_slli.f
1851 int UNUSED written
= 0;
1852 IADDR UNUSED pc
= abuf
->addr
;
1853 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1856 USI opval
= ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2
))));
1857 SET_H_GPR (FLD (f_r1
), opval
);
1858 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1865 CASE (sem
, INSN_L_EXTBZ
) : /* l.extbz $rD,$rA */
1867 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1868 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1869 #define FLD(f) abuf->fields.sfmt_l_slli.f
1870 int UNUSED written
= 0;
1871 IADDR UNUSED pc
= abuf
->addr
;
1872 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1875 USI opval
= ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2
))));
1876 SET_H_GPR (FLD (f_r1
), opval
);
1877 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1884 CASE (sem
, INSN_L_EXTWS
) : /* l.extws $rD,$rA */
1886 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1887 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1888 #define FLD(f) abuf->fields.sfmt_l_slli.f
1889 int UNUSED written
= 0;
1890 IADDR UNUSED pc
= abuf
->addr
;
1891 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1894 USI opval
= EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2
))));
1895 SET_H_GPR (FLD (f_r1
), opval
);
1896 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1903 CASE (sem
, INSN_L_EXTWZ
) : /* l.extwz $rD,$rA */
1905 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1906 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1907 #define FLD(f) abuf->fields.sfmt_l_slli.f
1908 int UNUSED written
= 0;
1909 IADDR UNUSED pc
= abuf
->addr
;
1910 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1913 USI opval
= ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2
))));
1914 SET_H_GPR (FLD (f_r1
), opval
);
1915 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1922 CASE (sem
, INSN_L_CMOV
) : /* l.cmov $rD,$rA,$rB */
1924 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1925 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1926 #define FLD(f) abuf->fields.sfmt_l_sll.f
1927 int UNUSED written
= 0;
1928 IADDR UNUSED pc
= abuf
->addr
;
1929 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1931 if (GET_H_SYS_SR_F ()) {
1933 USI opval
= GET_H_GPR (FLD (f_r2
));
1934 SET_H_GPR (FLD (f_r1
), opval
);
1935 written
|= (1 << 3);
1936 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1940 USI opval
= GET_H_GPR (FLD (f_r3
));
1941 SET_H_GPR (FLD (f_r1
), opval
);
1942 written
|= (1 << 3);
1943 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1947 abuf
->written
= written
;
1952 CASE (sem
, INSN_L_SFGTS
) : /* l.sfgts $rA,$rB */
1954 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1955 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1956 #define FLD(f) abuf->fields.sfmt_l_sll.f
1957 int UNUSED written
= 0;
1958 IADDR UNUSED pc
= abuf
->addr
;
1959 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1962 USI opval
= GTSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1963 SET_H_SYS_SR_F (opval
);
1964 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1971 CASE (sem
, INSN_L_SFGTSI
) : /* l.sfgtsi $rA,$simm16 */
1973 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1974 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1975 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1976 int UNUSED written
= 0;
1977 IADDR UNUSED pc
= abuf
->addr
;
1978 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1981 USI opval
= GTSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1982 SET_H_SYS_SR_F (opval
);
1983 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1990 CASE (sem
, INSN_L_SFGTU
) : /* l.sfgtu $rA,$rB */
1992 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1993 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1994 #define FLD(f) abuf->fields.sfmt_l_sll.f
1995 int UNUSED written
= 0;
1996 IADDR UNUSED pc
= abuf
->addr
;
1997 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2000 USI opval
= GTUSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2001 SET_H_SYS_SR_F (opval
);
2002 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2009 CASE (sem
, INSN_L_SFGTUI
) : /* l.sfgtui $rA,$simm16 */
2011 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2012 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2013 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2014 int UNUSED written
= 0;
2015 IADDR UNUSED pc
= abuf
->addr
;
2016 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2019 USI opval
= GTUSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2020 SET_H_SYS_SR_F (opval
);
2021 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2028 CASE (sem
, INSN_L_SFGES
) : /* l.sfges $rA,$rB */
2030 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2031 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2032 #define FLD(f) abuf->fields.sfmt_l_sll.f
2033 int UNUSED written
= 0;
2034 IADDR UNUSED pc
= abuf
->addr
;
2035 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2038 USI opval
= GESI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2039 SET_H_SYS_SR_F (opval
);
2040 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2047 CASE (sem
, INSN_L_SFGESI
) : /* l.sfgesi $rA,$simm16 */
2049 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2050 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2051 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2052 int UNUSED written
= 0;
2053 IADDR UNUSED pc
= abuf
->addr
;
2054 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2057 USI opval
= GESI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2058 SET_H_SYS_SR_F (opval
);
2059 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2066 CASE (sem
, INSN_L_SFGEU
) : /* l.sfgeu $rA,$rB */
2068 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2069 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2070 #define FLD(f) abuf->fields.sfmt_l_sll.f
2071 int UNUSED written
= 0;
2072 IADDR UNUSED pc
= abuf
->addr
;
2073 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2076 USI opval
= GEUSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2077 SET_H_SYS_SR_F (opval
);
2078 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2085 CASE (sem
, INSN_L_SFGEUI
) : /* l.sfgeui $rA,$simm16 */
2087 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2088 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2089 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2090 int UNUSED written
= 0;
2091 IADDR UNUSED pc
= abuf
->addr
;
2092 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2095 USI opval
= GEUSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2096 SET_H_SYS_SR_F (opval
);
2097 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2104 CASE (sem
, INSN_L_SFLTS
) : /* l.sflts $rA,$rB */
2106 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2107 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2108 #define FLD(f) abuf->fields.sfmt_l_sll.f
2109 int UNUSED written
= 0;
2110 IADDR UNUSED pc
= abuf
->addr
;
2111 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2114 USI opval
= LTSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2115 SET_H_SYS_SR_F (opval
);
2116 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2123 CASE (sem
, INSN_L_SFLTSI
) : /* l.sfltsi $rA,$simm16 */
2125 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2126 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2127 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2128 int UNUSED written
= 0;
2129 IADDR UNUSED pc
= abuf
->addr
;
2130 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2133 USI opval
= LTSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2134 SET_H_SYS_SR_F (opval
);
2135 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2142 CASE (sem
, INSN_L_SFLTU
) : /* l.sfltu $rA,$rB */
2144 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2145 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2146 #define FLD(f) abuf->fields.sfmt_l_sll.f
2147 int UNUSED written
= 0;
2148 IADDR UNUSED pc
= abuf
->addr
;
2149 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2152 USI opval
= LTUSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2153 SET_H_SYS_SR_F (opval
);
2154 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2161 CASE (sem
, INSN_L_SFLTUI
) : /* l.sfltui $rA,$simm16 */
2163 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2164 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2165 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2166 int UNUSED written
= 0;
2167 IADDR UNUSED pc
= abuf
->addr
;
2168 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2171 USI opval
= LTUSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2172 SET_H_SYS_SR_F (opval
);
2173 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2180 CASE (sem
, INSN_L_SFLES
) : /* l.sfles $rA,$rB */
2182 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2183 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2184 #define FLD(f) abuf->fields.sfmt_l_sll.f
2185 int UNUSED written
= 0;
2186 IADDR UNUSED pc
= abuf
->addr
;
2187 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2190 USI opval
= LESI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2191 SET_H_SYS_SR_F (opval
);
2192 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2199 CASE (sem
, INSN_L_SFLESI
) : /* l.sflesi $rA,$simm16 */
2201 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2202 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2203 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2204 int UNUSED written
= 0;
2205 IADDR UNUSED pc
= abuf
->addr
;
2206 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2209 USI opval
= LESI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2210 SET_H_SYS_SR_F (opval
);
2211 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2218 CASE (sem
, INSN_L_SFLEU
) : /* l.sfleu $rA,$rB */
2220 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2221 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2222 #define FLD(f) abuf->fields.sfmt_l_sll.f
2223 int UNUSED written
= 0;
2224 IADDR UNUSED pc
= abuf
->addr
;
2225 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2228 USI opval
= LEUSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2229 SET_H_SYS_SR_F (opval
);
2230 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2237 CASE (sem
, INSN_L_SFLEUI
) : /* l.sfleui $rA,$simm16 */
2239 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2240 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2241 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2242 int UNUSED written
= 0;
2243 IADDR UNUSED pc
= abuf
->addr
;
2244 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2247 USI opval
= LEUSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2248 SET_H_SYS_SR_F (opval
);
2249 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2256 CASE (sem
, INSN_L_SFEQ
) : /* l.sfeq $rA,$rB */
2258 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2259 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2260 #define FLD(f) abuf->fields.sfmt_l_sll.f
2261 int UNUSED written
= 0;
2262 IADDR UNUSED pc
= abuf
->addr
;
2263 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2266 USI opval
= EQSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2267 SET_H_SYS_SR_F (opval
);
2268 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2275 CASE (sem
, INSN_L_SFEQI
) : /* l.sfeqi $rA,$simm16 */
2277 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2278 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2279 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2280 int UNUSED written
= 0;
2281 IADDR UNUSED pc
= abuf
->addr
;
2282 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2285 USI opval
= EQSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2286 SET_H_SYS_SR_F (opval
);
2287 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2294 CASE (sem
, INSN_L_SFNE
) : /* l.sfne $rA,$rB */
2296 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2297 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2298 #define FLD(f) abuf->fields.sfmt_l_sll.f
2299 int UNUSED written
= 0;
2300 IADDR UNUSED pc
= abuf
->addr
;
2301 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2304 USI opval
= NESI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2305 SET_H_SYS_SR_F (opval
);
2306 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2313 CASE (sem
, INSN_L_SFNEI
) : /* l.sfnei $rA,$simm16 */
2315 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2316 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2317 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2318 int UNUSED written
= 0;
2319 IADDR UNUSED pc
= abuf
->addr
;
2320 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2323 USI opval
= NESI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2324 SET_H_SYS_SR_F (opval
);
2325 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2332 CASE (sem
, INSN_L_MAC
) : /* l.mac $rA,$rB */
2334 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2335 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2336 #define FLD(f) abuf->fields.sfmt_l_sll.f
2337 int UNUSED written
= 0;
2338 IADDR UNUSED pc
= abuf
->addr
;
2339 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2346 tmp_prod
= MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2
))), EXTSIDI (GET_H_GPR (FLD (f_r3
))));
2347 tmp_mac
= JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2348 tmp_result
= ADDDI (tmp_prod
, tmp_mac
);
2350 SI opval
= SUBWORDDISI (tmp_result
, 0);
2351 SET_H_MAC_MACHI (opval
);
2352 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
2355 SI opval
= SUBWORDDISI (tmp_result
, 1);
2356 SET_H_MAC_MACLO (opval
);
2357 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
2360 BI opval
= ADDOFDI (tmp_prod
, tmp_mac
, 0);
2361 SET_H_SYS_SR_OV (opval
);
2362 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
2365 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2366 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
2374 CASE (sem
, INSN_L_MACI
) : /* l.maci $rA,${simm16} */
2376 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2377 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2378 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2379 int UNUSED written
= 0;
2380 IADDR UNUSED pc
= abuf
->addr
;
2381 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2388 tmp_prod
= MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2
))), EXTSIDI (FLD (f_simm16
)));
2389 tmp_mac
= JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2390 tmp_result
= ADDDI (tmp_mac
, tmp_prod
);
2392 SI opval
= SUBWORDDISI (tmp_result
, 0);
2393 SET_H_MAC_MACHI (opval
);
2394 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
2397 SI opval
= SUBWORDDISI (tmp_result
, 1);
2398 SET_H_MAC_MACLO (opval
);
2399 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
2402 BI opval
= ADDOFDI (tmp_prod
, tmp_mac
, 0);
2403 SET_H_SYS_SR_OV (opval
);
2404 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
2407 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2408 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
2416 CASE (sem
, INSN_L_MACU
) : /* l.macu $rA,$rB */
2418 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2419 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2420 #define FLD(f) abuf->fields.sfmt_l_sll.f
2421 int UNUSED written
= 0;
2422 IADDR UNUSED pc
= abuf
->addr
;
2423 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2430 tmp_prod
= MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2
))), ZEXTSIDI (GET_H_GPR (FLD (f_r3
))));
2431 tmp_mac
= JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2432 tmp_result
= ADDDI (tmp_prod
, tmp_mac
);
2434 SI opval
= SUBWORDDISI (tmp_result
, 0);
2435 SET_H_MAC_MACHI (opval
);
2436 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
2439 SI opval
= SUBWORDDISI (tmp_result
, 1);
2440 SET_H_MAC_MACLO (opval
);
2441 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
2444 BI opval
= ADDCFDI (tmp_prod
, tmp_mac
, 0);
2445 SET_H_SYS_SR_CY (opval
);
2446 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
2449 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2450 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
2458 CASE (sem
, INSN_L_MSB
) : /* l.msb $rA,$rB */
2460 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2461 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2462 #define FLD(f) abuf->fields.sfmt_l_sll.f
2463 int UNUSED written
= 0;
2464 IADDR UNUSED pc
= abuf
->addr
;
2465 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2472 tmp_prod
= MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2
))), EXTSIDI (GET_H_GPR (FLD (f_r3
))));
2473 tmp_mac
= JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2474 tmp_result
= SUBDI (tmp_mac
, tmp_prod
);
2476 SI opval
= SUBWORDDISI (tmp_result
, 0);
2477 SET_H_MAC_MACHI (opval
);
2478 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
2481 SI opval
= SUBWORDDISI (tmp_result
, 1);
2482 SET_H_MAC_MACLO (opval
);
2483 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
2486 BI opval
= SUBOFDI (tmp_mac
, tmp_result
, 0);
2487 SET_H_SYS_SR_OV (opval
);
2488 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
2491 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2492 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
2500 CASE (sem
, INSN_L_MSBU
) : /* l.msbu $rA,$rB */
2502 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2503 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2504 #define FLD(f) abuf->fields.sfmt_l_sll.f
2505 int UNUSED written
= 0;
2506 IADDR UNUSED pc
= abuf
->addr
;
2507 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2514 tmp_prod
= MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2
))), ZEXTSIDI (GET_H_GPR (FLD (f_r3
))));
2515 tmp_mac
= JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2516 tmp_result
= SUBDI (tmp_mac
, tmp_prod
);
2518 SI opval
= SUBWORDDISI (tmp_result
, 0);
2519 SET_H_MAC_MACHI (opval
);
2520 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
2523 SI opval
= SUBWORDDISI (tmp_result
, 1);
2524 SET_H_MAC_MACLO (opval
);
2525 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
2528 BI opval
= SUBCFDI (tmp_mac
, tmp_result
, 0);
2529 SET_H_SYS_SR_CY (opval
);
2530 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
2533 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2534 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
2542 CASE (sem
, INSN_L_CUST1
) : /* l.cust1 */
2544 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2545 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2546 #define FLD(f) abuf->fields.sfmt_empty.f
2547 int UNUSED written
= 0;
2548 IADDR UNUSED pc
= abuf
->addr
;
2549 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2557 CASE (sem
, INSN_L_CUST2
) : /* l.cust2 */
2559 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2560 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2561 #define FLD(f) abuf->fields.sfmt_empty.f
2562 int UNUSED written
= 0;
2563 IADDR UNUSED pc
= abuf
->addr
;
2564 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2572 CASE (sem
, INSN_L_CUST3
) : /* l.cust3 */
2574 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2575 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2576 #define FLD(f) abuf->fields.sfmt_empty.f
2577 int UNUSED written
= 0;
2578 IADDR UNUSED pc
= abuf
->addr
;
2579 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2587 CASE (sem
, INSN_L_CUST4
) : /* l.cust4 */
2589 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2590 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2591 #define FLD(f) abuf->fields.sfmt_empty.f
2592 int UNUSED written
= 0;
2593 IADDR UNUSED pc
= abuf
->addr
;
2594 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2602 CASE (sem
, INSN_L_CUST5
) : /* l.cust5 */
2604 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2605 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2606 #define FLD(f) abuf->fields.sfmt_empty.f
2607 int UNUSED written
= 0;
2608 IADDR UNUSED pc
= abuf
->addr
;
2609 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2617 CASE (sem
, INSN_L_CUST6
) : /* l.cust6 */
2619 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2620 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2621 #define FLD(f) abuf->fields.sfmt_empty.f
2622 int UNUSED written
= 0;
2623 IADDR UNUSED pc
= abuf
->addr
;
2624 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2632 CASE (sem
, INSN_L_CUST7
) : /* l.cust7 */
2634 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2635 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2636 #define FLD(f) abuf->fields.sfmt_empty.f
2637 int UNUSED written
= 0;
2638 IADDR UNUSED pc
= abuf
->addr
;
2639 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2647 CASE (sem
, INSN_L_CUST8
) : /* l.cust8 */
2649 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2650 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2651 #define FLD(f) abuf->fields.sfmt_empty.f
2652 int UNUSED written
= 0;
2653 IADDR UNUSED pc
= abuf
->addr
;
2654 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2662 CASE (sem
, INSN_LF_ADD_S
) : /* lf.add.s $rDSF,$rASF,$rBSF */
2664 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2665 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2666 #define FLD(f) abuf->fields.sfmt_l_sll.f
2667 int UNUSED written
= 0;
2668 IADDR UNUSED pc
= abuf
->addr
;
2669 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2672 SF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->addsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
2673 SET_H_FSR (FLD (f_r1
), opval
);
2674 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2681 CASE (sem
, INSN_LF_ADD_D32
) : /* lf.add.d $rDD32F,$rAD32F,$rBD32F */
2683 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2684 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2685 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2686 int UNUSED written
= 0;
2687 IADDR UNUSED pc
= abuf
->addr
;
2688 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2691 DF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->adddf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
2692 SET_H_FD32R (FLD (f_rdd32
), opval
);
2693 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fd32r", 'f', opval
);
2700 CASE (sem
, INSN_LF_SUB_S
) : /* lf.sub.s $rDSF,$rASF,$rBSF */
2702 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2703 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2704 #define FLD(f) abuf->fields.sfmt_l_sll.f
2705 int UNUSED written
= 0;
2706 IADDR UNUSED pc
= abuf
->addr
;
2707 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2710 SF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->subsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
2711 SET_H_FSR (FLD (f_r1
), opval
);
2712 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2719 CASE (sem
, INSN_LF_SUB_D32
) : /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */
2721 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2722 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2723 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2724 int UNUSED written
= 0;
2725 IADDR UNUSED pc
= abuf
->addr
;
2726 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2729 DF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->subdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
2730 SET_H_FD32R (FLD (f_rdd32
), opval
);
2731 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fd32r", 'f', opval
);
2738 CASE (sem
, INSN_LF_MUL_S
) : /* lf.mul.s $rDSF,$rASF,$rBSF */
2740 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2741 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2742 #define FLD(f) abuf->fields.sfmt_l_sll.f
2743 int UNUSED written
= 0;
2744 IADDR UNUSED pc
= abuf
->addr
;
2745 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2748 SF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->mulsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
2749 SET_H_FSR (FLD (f_r1
), opval
);
2750 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2757 CASE (sem
, INSN_LF_MUL_D32
) : /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */
2759 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2760 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2761 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2762 int UNUSED written
= 0;
2763 IADDR UNUSED pc
= abuf
->addr
;
2764 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2767 DF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->muldf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
2768 SET_H_FD32R (FLD (f_rdd32
), opval
);
2769 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fd32r", 'f', opval
);
2776 CASE (sem
, INSN_LF_DIV_S
) : /* lf.div.s $rDSF,$rASF,$rBSF */
2778 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2779 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2780 #define FLD(f) abuf->fields.sfmt_l_sll.f
2781 int UNUSED written
= 0;
2782 IADDR UNUSED pc
= abuf
->addr
;
2783 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2786 SF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->divsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
2787 SET_H_FSR (FLD (f_r1
), opval
);
2788 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2795 CASE (sem
, INSN_LF_DIV_D32
) : /* lf.div.d $rDD32F,$rAD32F,$rBD32F */
2797 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2798 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2799 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2800 int UNUSED written
= 0;
2801 IADDR UNUSED pc
= abuf
->addr
;
2802 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2805 DF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->divdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
2806 SET_H_FD32R (FLD (f_rdd32
), opval
);
2807 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fd32r", 'f', opval
);
2814 CASE (sem
, INSN_LF_REM_S
) : /* lf.rem.s $rDSF,$rASF,$rBSF */
2816 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2817 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2818 #define FLD(f) abuf->fields.sfmt_l_sll.f
2819 int UNUSED written
= 0;
2820 IADDR UNUSED pc
= abuf
->addr
;
2821 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2824 SF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->remsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
2825 SET_H_FSR (FLD (f_r1
), opval
);
2826 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2833 CASE (sem
, INSN_LF_REM_D32
) : /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */
2835 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2836 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2837 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2838 int UNUSED written
= 0;
2839 IADDR UNUSED pc
= abuf
->addr
;
2840 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2843 DF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->remdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
2844 SET_H_FD32R (FLD (f_rdd32
), opval
);
2845 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fd32r", 'f', opval
);
2852 CASE (sem
, INSN_LF_ITOF_S
) : /* lf.itof.s $rDSF,$rA */
2854 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2855 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2856 #define FLD(f) abuf->fields.sfmt_l_slli.f
2857 int UNUSED written
= 0;
2858 IADDR UNUSED pc
= abuf
->addr
;
2859 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2862 SF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->floatsisf (CGEN_CPU_FPU (current_cpu
), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), TRUNCSISI (GET_H_GPR (FLD (f_r2
))));
2863 SET_H_FSR (FLD (f_r1
), opval
);
2864 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2871 CASE (sem
, INSN_LF_ITOF_D32
) : /* lf.itof.d $rDD32F,$rADI */
2873 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2874 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2875 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2876 int UNUSED written
= 0;
2877 IADDR UNUSED pc
= abuf
->addr
;
2878 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2881 DF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->floatdidf (CGEN_CPU_FPU (current_cpu
), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_I64R (FLD (f_rad32
)));
2882 SET_H_FD32R (FLD (f_rdd32
), opval
);
2883 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fd32r", 'f', opval
);
2890 CASE (sem
, INSN_LF_FTOI_S
) : /* lf.ftoi.s $rD,$rASF */
2892 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2893 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2894 #define FLD(f) abuf->fields.sfmt_l_slli.f
2895 int UNUSED written
= 0;
2896 IADDR UNUSED pc
= abuf
->addr
;
2897 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2900 SI opval
= EXTSISI (CGEN_CPU_FPU (current_cpu
)->ops
->fixsfsi (CGEN_CPU_FPU (current_cpu
), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FSR (FLD (f_r2
))));
2901 SET_H_GPR (FLD (f_r1
), opval
);
2902 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
2909 CASE (sem
, INSN_LF_FTOI_D32
) : /* lf.ftoi.d $rDDI,$rAD32F */
2911 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2912 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2913 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2914 int UNUSED written
= 0;
2915 IADDR UNUSED pc
= abuf
->addr
;
2916 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2919 DI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->fixdfdi (CGEN_CPU_FPU (current_cpu
), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FD32R (FLD (f_rad32
)));
2920 SET_H_I64R (FLD (f_rdd32
), opval
);
2921 CGEN_TRACE_RESULT (current_cpu
, abuf
, "i64r", 'D', opval
);
2928 CASE (sem
, INSN_LF_SFEQ_S
) : /* lf.sfeq.s $rASF,$rBSF */
2930 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2931 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2932 #define FLD(f) abuf->fields.sfmt_l_sll.f
2933 int UNUSED written
= 0;
2934 IADDR UNUSED pc
= abuf
->addr
;
2935 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2938 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->eqsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
2939 SET_H_SYS_SR_F (opval
);
2940 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2947 CASE (sem
, INSN_LF_SFEQ_D32
) : /* lf.sfeq.d $rAD32F,$rBD32F */
2949 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2950 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2951 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2952 int UNUSED written
= 0;
2953 IADDR UNUSED pc
= abuf
->addr
;
2954 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2957 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->eqdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
2958 SET_H_SYS_SR_F (opval
);
2959 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2966 CASE (sem
, INSN_LF_SFNE_S
) : /* lf.sfne.s $rASF,$rBSF */
2968 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2969 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2970 #define FLD(f) abuf->fields.sfmt_l_sll.f
2971 int UNUSED written
= 0;
2972 IADDR UNUSED pc
= abuf
->addr
;
2973 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2976 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->nesf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
2977 SET_H_SYS_SR_F (opval
);
2978 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2985 CASE (sem
, INSN_LF_SFNE_D32
) : /* lf.sfne.d $rAD32F,$rBD32F */
2987 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2988 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2989 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2990 int UNUSED written
= 0;
2991 IADDR UNUSED pc
= abuf
->addr
;
2992 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2995 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->nedf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
2996 SET_H_SYS_SR_F (opval
);
2997 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3004 CASE (sem
, INSN_LF_SFGE_S
) : /* lf.sfge.s $rASF,$rBSF */
3006 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3007 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3008 #define FLD(f) abuf->fields.sfmt_l_sll.f
3009 int UNUSED written
= 0;
3010 IADDR UNUSED pc
= abuf
->addr
;
3011 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3014 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->gesf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
3015 SET_H_SYS_SR_F (opval
);
3016 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3023 CASE (sem
, INSN_LF_SFGE_D32
) : /* lf.sfge.d $rAD32F,$rBD32F */
3025 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3026 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3027 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3028 int UNUSED written
= 0;
3029 IADDR UNUSED pc
= abuf
->addr
;
3030 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3033 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->gedf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
3034 SET_H_SYS_SR_F (opval
);
3035 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3042 CASE (sem
, INSN_LF_SFGT_S
) : /* lf.sfgt.s $rASF,$rBSF */
3044 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3045 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3046 #define FLD(f) abuf->fields.sfmt_l_sll.f
3047 int UNUSED written
= 0;
3048 IADDR UNUSED pc
= abuf
->addr
;
3049 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3052 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->gtsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
3053 SET_H_SYS_SR_F (opval
);
3054 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3061 CASE (sem
, INSN_LF_SFGT_D32
) : /* lf.sfgt.d $rAD32F,$rBD32F */
3063 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3064 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3065 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3066 int UNUSED written
= 0;
3067 IADDR UNUSED pc
= abuf
->addr
;
3068 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3071 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->gtdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
3072 SET_H_SYS_SR_F (opval
);
3073 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3080 CASE (sem
, INSN_LF_SFLT_S
) : /* lf.sflt.s $rASF,$rBSF */
3082 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3083 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3084 #define FLD(f) abuf->fields.sfmt_l_sll.f
3085 int UNUSED written
= 0;
3086 IADDR UNUSED pc
= abuf
->addr
;
3087 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3090 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->ltsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
3091 SET_H_SYS_SR_F (opval
);
3092 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3099 CASE (sem
, INSN_LF_SFLT_D32
) : /* lf.sflt.d $rAD32F,$rBD32F */
3101 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3102 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3103 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3104 int UNUSED written
= 0;
3105 IADDR UNUSED pc
= abuf
->addr
;
3106 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3109 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->ltdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
3110 SET_H_SYS_SR_F (opval
);
3111 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3118 CASE (sem
, INSN_LF_SFLE_S
) : /* lf.sfle.s $rASF,$rBSF */
3120 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3121 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3122 #define FLD(f) abuf->fields.sfmt_l_sll.f
3123 int UNUSED written
= 0;
3124 IADDR UNUSED pc
= abuf
->addr
;
3125 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3128 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->lesf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
3129 SET_H_SYS_SR_F (opval
);
3130 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3137 CASE (sem
, INSN_LF_SFLE_D32
) : /* lf.sfle.d $rAD32F,$rBD32F */
3139 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3140 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3141 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3142 int UNUSED written
= 0;
3143 IADDR UNUSED pc
= abuf
->addr
;
3144 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3147 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->ledf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
3148 SET_H_SYS_SR_F (opval
);
3149 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3156 CASE (sem
, INSN_LF_SFUEQ_S
) : /* lf.sfueq.s $rASF,$rBSF */
3158 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3159 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3160 #define FLD(f) abuf->fields.sfmt_l_sll.f
3161 int UNUSED written
= 0;
3162 IADDR UNUSED pc
= abuf
->addr
;
3163 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3166 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unorderedsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))), CGEN_CPU_FPU (current_cpu
)->ops
->eqsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))));
3167 SET_H_SYS_SR_F (opval
);
3168 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3175 CASE (sem
, INSN_LF_SFUEQ_D32
) : /* lf.sfueq.d $rAD32F,$rBD32F */
3177 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3178 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3179 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3180 int UNUSED written
= 0;
3181 IADDR UNUSED pc
= abuf
->addr
;
3182 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3185 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unordereddf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))), CGEN_CPU_FPU (current_cpu
)->ops
->eqdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))));
3186 SET_H_SYS_SR_F (opval
);
3187 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3194 CASE (sem
, INSN_LF_SFUNE_S
) : /* lf.sfune.s $rASF,$rBSF */
3196 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3197 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3198 #define FLD(f) abuf->fields.sfmt_l_sll.f
3199 int UNUSED written
= 0;
3200 IADDR UNUSED pc
= abuf
->addr
;
3201 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3204 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unorderedsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))), CGEN_CPU_FPU (current_cpu
)->ops
->nesf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))));
3205 SET_H_SYS_SR_F (opval
);
3206 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3213 CASE (sem
, INSN_LF_SFUNE_D32
) : /* lf.sfune.d $rAD32F,$rBD32F */
3215 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3216 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3217 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3218 int UNUSED written
= 0;
3219 IADDR UNUSED pc
= abuf
->addr
;
3220 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3223 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unordereddf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))), CGEN_CPU_FPU (current_cpu
)->ops
->nedf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))));
3224 SET_H_SYS_SR_F (opval
);
3225 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3232 CASE (sem
, INSN_LF_SFUGT_S
) : /* lf.sfugt.s $rASF,$rBSF */
3234 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3235 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3236 #define FLD(f) abuf->fields.sfmt_l_sll.f
3237 int UNUSED written
= 0;
3238 IADDR UNUSED pc
= abuf
->addr
;
3239 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3242 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unorderedsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))), CGEN_CPU_FPU (current_cpu
)->ops
->gtsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))));
3243 SET_H_SYS_SR_F (opval
);
3244 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3251 CASE (sem
, INSN_LF_SFUGT_D32
) : /* lf.sfugt.d $rAD32F,$rBD32F */
3253 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3254 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3255 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3256 int UNUSED written
= 0;
3257 IADDR UNUSED pc
= abuf
->addr
;
3258 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3261 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unordereddf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))), CGEN_CPU_FPU (current_cpu
)->ops
->gtdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))));
3262 SET_H_SYS_SR_F (opval
);
3263 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3270 CASE (sem
, INSN_LF_SFUGE_S
) : /* lf.sfuge.s $rASF,$rBSF */
3272 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3273 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3274 #define FLD(f) abuf->fields.sfmt_l_sll.f
3275 int UNUSED written
= 0;
3276 IADDR UNUSED pc
= abuf
->addr
;
3277 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3280 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unorderedsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))), CGEN_CPU_FPU (current_cpu
)->ops
->gesf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))));
3281 SET_H_SYS_SR_F (opval
);
3282 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3289 CASE (sem
, INSN_LF_SFUGE_D32
) : /* lf.sfuge.d $rAD32F,$rBD32F */
3291 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3292 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3293 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3294 int UNUSED written
= 0;
3295 IADDR UNUSED pc
= abuf
->addr
;
3296 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3299 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unordereddf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))), CGEN_CPU_FPU (current_cpu
)->ops
->gedf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))));
3300 SET_H_SYS_SR_F (opval
);
3301 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3308 CASE (sem
, INSN_LF_SFULT_S
) : /* lf.sfult.s $rASF,$rBSF */
3310 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3311 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3312 #define FLD(f) abuf->fields.sfmt_l_sll.f
3313 int UNUSED written
= 0;
3314 IADDR UNUSED pc
= abuf
->addr
;
3315 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3318 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unorderedsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))), CGEN_CPU_FPU (current_cpu
)->ops
->ltsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))));
3319 SET_H_SYS_SR_F (opval
);
3320 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3327 CASE (sem
, INSN_LF_SFULT_D32
) : /* lf.sfult.d $rAD32F,$rBD32F */
3329 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3330 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3331 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3332 int UNUSED written
= 0;
3333 IADDR UNUSED pc
= abuf
->addr
;
3334 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3337 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unordereddf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))), CGEN_CPU_FPU (current_cpu
)->ops
->ltdf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))));
3338 SET_H_SYS_SR_F (opval
);
3339 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3346 CASE (sem
, INSN_LF_SFULE_S
) : /* lf.sfule.s $rASF,$rBSF */
3348 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3349 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3350 #define FLD(f) abuf->fields.sfmt_l_sll.f
3351 int UNUSED written
= 0;
3352 IADDR UNUSED pc
= abuf
->addr
;
3353 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3356 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unorderedsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))), CGEN_CPU_FPU (current_cpu
)->ops
->lesf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))));
3357 SET_H_SYS_SR_F (opval
);
3358 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3365 CASE (sem
, INSN_LF_SFULE_D32
) : /* lf.sfule.d $rAD32F,$rBD32F */
3367 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3368 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3369 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3370 int UNUSED written
= 0;
3371 IADDR UNUSED pc
= abuf
->addr
;
3372 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3375 BI opval
= ORBI (CGEN_CPU_FPU (current_cpu
)->ops
->unordereddf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))), CGEN_CPU_FPU (current_cpu
)->ops
->ledf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))));
3376 SET_H_SYS_SR_F (opval
);
3377 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3384 CASE (sem
, INSN_LF_SFUN_S
) : /* lf.sfun.s $rASF,$rBSF */
3386 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3387 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3388 #define FLD(f) abuf->fields.sfmt_l_sll.f
3389 int UNUSED written
= 0;
3390 IADDR UNUSED pc
= abuf
->addr
;
3391 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3394 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->unorderedsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
)));
3395 SET_H_SYS_SR_F (opval
);
3396 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3403 CASE (sem
, INSN_LF_SFUN_D32
) : /* lf.sfun.d $rAD32F,$rBD32F */
3405 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3406 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3407 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3408 int UNUSED written
= 0;
3409 IADDR UNUSED pc
= abuf
->addr
;
3410 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3413 BI opval
= CGEN_CPU_FPU (current_cpu
)->ops
->unordereddf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
)));
3414 SET_H_SYS_SR_F (opval
);
3415 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
3422 CASE (sem
, INSN_LF_MADD_S
) : /* lf.madd.s $rDSF,$rASF,$rBSF */
3424 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3425 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3426 #define FLD(f) abuf->fields.sfmt_l_sll.f
3427 int UNUSED written
= 0;
3428 IADDR UNUSED pc
= abuf
->addr
;
3429 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3432 SF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->addsf (CGEN_CPU_FPU (current_cpu
), CGEN_CPU_FPU (current_cpu
)->ops
->mulsf (CGEN_CPU_FPU (current_cpu
), GET_H_FSR (FLD (f_r2
)), GET_H_FSR (FLD (f_r3
))), GET_H_FSR (FLD (f_r1
)));
3433 SET_H_FSR (FLD (f_r1
), opval
);
3434 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
3441 CASE (sem
, INSN_LF_MADD_D32
) : /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */
3443 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3444 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3445 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3446 int UNUSED written
= 0;
3447 IADDR UNUSED pc
= abuf
->addr
;
3448 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3451 DF opval
= CGEN_CPU_FPU (current_cpu
)->ops
->adddf (CGEN_CPU_FPU (current_cpu
), CGEN_CPU_FPU (current_cpu
)->ops
->muldf (CGEN_CPU_FPU (current_cpu
), GET_H_FD32R (FLD (f_rad32
)), GET_H_FD32R (FLD (f_rbd32
))), GET_H_FD32R (FLD (f_rdd32
)));
3452 SET_H_FD32R (FLD (f_rdd32
), opval
);
3453 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fd32r", 'f', opval
);
3460 CASE (sem
, INSN_LF_CUST1_S
) : /* lf.cust1.s $rASF,$rBSF */
3462 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3463 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3464 #define FLD(f) abuf->fields.sfmt_empty.f
3465 int UNUSED written
= 0;
3466 IADDR UNUSED pc
= abuf
->addr
;
3467 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3475 CASE (sem
, INSN_LF_CUST1_D32
) : /* lf.cust1.d */
3477 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3478 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3479 #define FLD(f) abuf->fields.sfmt_empty.f
3480 int UNUSED written
= 0;
3481 IADDR UNUSED pc
= abuf
->addr
;
3482 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3492 ENDSWITCH (sem
) /* End of semantic switch. */
3494 /* At this point `vpc' contains the next insn to execute. */
3497 #undef DEFINE_SWITCH
3498 #endif /* DEFINE_SWITCH */