]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/sparc/sem64.c
* config/sh/tm-sh.h (BELIEVE_PCC_PROMOTION): Define, so that
[thirdparty/binutils-gdb.git] / sim / sparc / sem64.c
1 /* Simulator instruction semantics for sparc64.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1999 Cygnus Solutions, Inc.
6
7 This file is part of the Cygnus Simulators.
8
9
10 */
11
12 #define WANT_CPU sparc64
13 #define WANT_CPU_SPARC64
14
15 #include "sim-main.h"
16 #include "cgen-mem.h"
17 #include "cgen-ops.h"
18
19 #undef GET_ATTR
20 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
21
22 /* x-invalid: --invalid-- */
23
24 SEM_STATUS
25 SEM_FN_NAME (sparc64,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
26 {
27 SEM_STATUS status = 0;
28 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
29 int UNUSED written = 0;
30 IADDR UNUSED pc = GET_H_PC ();
31 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
32 EXTRACT_IFMT_EMPTY_VARS /* */
33 EXTRACT_IFMT_EMPTY_CODE
34
35 {
36 #if WITH_SCACHE
37 /* Update the recorded pc in the cpu state struct. */
38 SET_H_PC (pc);
39 #endif
40 sim_engine_invalid_insn (current_cpu, pc);
41 sim_io_error (CPU_STATE (current_cpu), "invalid insn not handled\n");
42 /* NOTREACHED */
43 }
44
45 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_VIRTUAL-CGEN_ATTR_BOOL_OFFSET)));
46 return status;
47 }
48
49 /* x-after: --after-- */
50
51 SEM_STATUS
52 SEM_FN_NAME (sparc64,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
53 {
54 SEM_STATUS status = 0;
55 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
56 int UNUSED written = 0;
57 IADDR UNUSED pc = GET_H_PC ();
58 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
59 EXTRACT_IFMT_EMPTY_VARS /* */
60 EXTRACT_IFMT_EMPTY_CODE
61
62 {
63 #if WITH_SCACHE_PBB_SPARC64
64 sparc64_pbb_after (current_cpu, sem_arg);
65 #endif
66 }
67
68 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_PBB-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_VIRTUAL-CGEN_ATTR_BOOL_OFFSET)));
69 return status;
70 }
71
72 /* x-before: --before-- */
73
74 SEM_STATUS
75 SEM_FN_NAME (sparc64,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
76 {
77 SEM_STATUS status = 0;
78 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
79 int UNUSED written = 0;
80 IADDR UNUSED pc = GET_H_PC ();
81 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
82 EXTRACT_IFMT_EMPTY_VARS /* */
83 EXTRACT_IFMT_EMPTY_CODE
84
85 {
86 #if WITH_SCACHE_PBB_SPARC64
87 sparc64_pbb_before (current_cpu, sem_arg);
88 #endif
89 }
90
91 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_PBB-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_VIRTUAL-CGEN_ATTR_BOOL_OFFSET)));
92 return status;
93 }
94
95 /* x-cti-chain: --cti-chain-- */
96
97 SEM_STATUS
98 SEM_FN_NAME (sparc64,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
99 {
100 SEM_STATUS status = 0;
101 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
102 int UNUSED written = 0;
103 IADDR UNUSED pc = GET_H_PC ();
104 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
105 EXTRACT_IFMT_EMPTY_VARS /* */
106 EXTRACT_IFMT_EMPTY_CODE
107
108 {
109 #if WITH_SCACHE_PBB_SPARC64
110 #ifdef DEFINE_SWITCH
111 vpc = sparc64_pbb_cti_chain (current_cpu, sem_arg,
112 pbb_br_npc_ptr, pbb_br_npc);
113 BREAK (sem);
114 #else
115 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
116 vpc = sparc64_pbb_cti_chain (current_cpu, sem_arg,
117 CPU_PBB_BR_NPC_PTR (current_cpu),
118 CPU_PBB_BR_NPC (current_cpu));
119 #endif
120 #endif
121 }
122
123 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_PBB-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_VIRTUAL-CGEN_ATTR_BOOL_OFFSET)));
124 return status;
125 }
126
127 /* x-chain: --chain-- */
128
129 SEM_STATUS
130 SEM_FN_NAME (sparc64,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
131 {
132 SEM_STATUS status = 0;
133 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
134 int UNUSED written = 0;
135 IADDR UNUSED pc = GET_H_PC ();
136 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
137 EXTRACT_IFMT_EMPTY_VARS /* */
138 EXTRACT_IFMT_EMPTY_CODE
139
140 {
141 #if WITH_SCACHE_PBB_SPARC64
142 vpc = sparc64_pbb_chain (current_cpu, sem_arg);
143 #ifdef DEFINE_SWITCH
144 BREAK (sem);
145 #endif
146 #endif
147 }
148
149 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_PBB-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_VIRTUAL-CGEN_ATTR_BOOL_OFFSET)));
150 return status;
151 }
152
153 /* x-begin: --begin-- */
154
155 SEM_STATUS
156 SEM_FN_NAME (sparc64,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
157 {
158 SEM_STATUS status = 0;
159 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
160 int UNUSED written = 0;
161 IADDR UNUSED pc = GET_H_PC ();
162 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
163 EXTRACT_IFMT_EMPTY_VARS /* */
164 EXTRACT_IFMT_EMPTY_CODE
165
166 {
167 #if WITH_SCACHE_PBB_SPARC64
168 #ifdef DEFINE_SWITCH
169 /* In the switch case FAST_P is a constant, allowing several optimizations
170 in any called inline functions. */
171 vpc = sparc64_pbb_begin (current_cpu, FAST_P);
172 #else
173 vpc = sparc64_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
174 #endif
175 #endif
176 }
177
178 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_PBB-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_VIRTUAL-CGEN_ATTR_BOOL_OFFSET)));
179 return status;
180 }
181
182 /* beqz: beqz$a$p $rs1,$disp16 */
183
184 SEM_STATUS
185 SEM_FN_NAME (sparc64,beqz) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
186 {
187 SEM_STATUS status = 0;
188 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
189 int UNUSED written = 0;
190 IADDR UNUSED pc = GET_H_PC ();
191 SEM_BRANCH_INIT
192 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
193 EXTRACT_IFMT_BEQZ_VARS /* f-disp16 f-rs1 f-p f-op2 f-fmt2-rcond f-bpr-res28-1 f-a f-op */
194 IADDR i_disp16;
195 EXTRACT_IFMT_BEQZ_CODE
196 i_disp16 = f_disp16;
197
198 do {
199 if (EQSI (GET_H_GR (f_rs1), 0)) {
200 {
201 USI opval = i_disp16;
202 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
203 written |= (1 << 3);
204 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
205 }
206 } else {
207 SEM_ANNUL_INSN (current_cpu, pc, f_a);
208 }
209 } while (0);
210
211 abuf->written = written;
212 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
213 return status;
214 }
215
216 /* bgez: bgez$a$p $rs1,$disp16 */
217
218 SEM_STATUS
219 SEM_FN_NAME (sparc64,bgez) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
220 {
221 SEM_STATUS status = 0;
222 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
223 int UNUSED written = 0;
224 IADDR UNUSED pc = GET_H_PC ();
225 SEM_BRANCH_INIT
226 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
227 EXTRACT_IFMT_BEQZ_VARS /* f-disp16 f-rs1 f-p f-op2 f-fmt2-rcond f-bpr-res28-1 f-a f-op */
228 IADDR i_disp16;
229 EXTRACT_IFMT_BEQZ_CODE
230 i_disp16 = f_disp16;
231
232 do {
233 if (GESI (GET_H_GR (f_rs1), 0)) {
234 {
235 USI opval = i_disp16;
236 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
237 written |= (1 << 3);
238 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
239 }
240 } else {
241 SEM_ANNUL_INSN (current_cpu, pc, f_a);
242 }
243 } while (0);
244
245 abuf->written = written;
246 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
247 return status;
248 }
249
250 /* bgtz: bgtz$a$p $rs1,$disp16 */
251
252 SEM_STATUS
253 SEM_FN_NAME (sparc64,bgtz) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
254 {
255 SEM_STATUS status = 0;
256 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
257 int UNUSED written = 0;
258 IADDR UNUSED pc = GET_H_PC ();
259 SEM_BRANCH_INIT
260 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
261 EXTRACT_IFMT_BEQZ_VARS /* f-disp16 f-rs1 f-p f-op2 f-fmt2-rcond f-bpr-res28-1 f-a f-op */
262 IADDR i_disp16;
263 EXTRACT_IFMT_BEQZ_CODE
264 i_disp16 = f_disp16;
265
266 do {
267 if (GTSI (GET_H_GR (f_rs1), 0)) {
268 {
269 USI opval = i_disp16;
270 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
271 written |= (1 << 3);
272 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
273 }
274 } else {
275 SEM_ANNUL_INSN (current_cpu, pc, f_a);
276 }
277 } while (0);
278
279 abuf->written = written;
280 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
281 return status;
282 }
283
284 /* blez: blez$a$p $rs1,$disp16 */
285
286 SEM_STATUS
287 SEM_FN_NAME (sparc64,blez) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
288 {
289 SEM_STATUS status = 0;
290 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
291 int UNUSED written = 0;
292 IADDR UNUSED pc = GET_H_PC ();
293 SEM_BRANCH_INIT
294 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
295 EXTRACT_IFMT_BEQZ_VARS /* f-disp16 f-rs1 f-p f-op2 f-fmt2-rcond f-bpr-res28-1 f-a f-op */
296 IADDR i_disp16;
297 EXTRACT_IFMT_BEQZ_CODE
298 i_disp16 = f_disp16;
299
300 do {
301 if (LESI (GET_H_GR (f_rs1), 0)) {
302 {
303 USI opval = i_disp16;
304 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
305 written |= (1 << 3);
306 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
307 }
308 } else {
309 SEM_ANNUL_INSN (current_cpu, pc, f_a);
310 }
311 } while (0);
312
313 abuf->written = written;
314 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
315 return status;
316 }
317
318 /* bltz: bltz$a$p $rs1,$disp16 */
319
320 SEM_STATUS
321 SEM_FN_NAME (sparc64,bltz) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
322 {
323 SEM_STATUS status = 0;
324 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
325 int UNUSED written = 0;
326 IADDR UNUSED pc = GET_H_PC ();
327 SEM_BRANCH_INIT
328 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
329 EXTRACT_IFMT_BEQZ_VARS /* f-disp16 f-rs1 f-p f-op2 f-fmt2-rcond f-bpr-res28-1 f-a f-op */
330 IADDR i_disp16;
331 EXTRACT_IFMT_BEQZ_CODE
332 i_disp16 = f_disp16;
333
334 do {
335 if (LTSI (GET_H_GR (f_rs1), 0)) {
336 {
337 USI opval = i_disp16;
338 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
339 written |= (1 << 3);
340 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
341 }
342 } else {
343 SEM_ANNUL_INSN (current_cpu, pc, f_a);
344 }
345 } while (0);
346
347 abuf->written = written;
348 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
349 return status;
350 }
351
352 /* bnez: bnez$a$p $rs1,$disp16 */
353
354 SEM_STATUS
355 SEM_FN_NAME (sparc64,bnez) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
356 {
357 SEM_STATUS status = 0;
358 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
359 int UNUSED written = 0;
360 IADDR UNUSED pc = GET_H_PC ();
361 SEM_BRANCH_INIT
362 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
363 EXTRACT_IFMT_BEQZ_VARS /* f-disp16 f-rs1 f-p f-op2 f-fmt2-rcond f-bpr-res28-1 f-a f-op */
364 IADDR i_disp16;
365 EXTRACT_IFMT_BEQZ_CODE
366 i_disp16 = f_disp16;
367
368 do {
369 if (NESI (GET_H_GR (f_rs1), 0)) {
370 {
371 USI opval = i_disp16;
372 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
373 written |= (1 << 3);
374 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
375 }
376 } else {
377 SEM_ANNUL_INSN (current_cpu, pc, f_a);
378 }
379 } while (0);
380
381 abuf->written = written;
382 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
383 return status;
384 }
385
386 /* bpcc-ba: ba$a$p %xcc,$disp19 */
387
388 SEM_STATUS
389 SEM_FN_NAME (sparc64,bpcc_ba) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
390 {
391 SEM_STATUS status = 0;
392 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
393 int UNUSED written = 0;
394 IADDR UNUSED pc = GET_H_PC ();
395 SEM_BRANCH_INIT
396 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
397 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
398 IADDR i_disp22;
399 EXTRACT_IFMT_BPCC_BA_CODE
400 i_disp22 = f_disp22;
401
402 do {
403 do {
404 {
405 USI opval = i_disp22;
406 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
407 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
408 }
409 SEM_ANNUL_INSN (current_cpu, pc, f_a);
410 } while (0);
411 } while (0);
412
413 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
414 return status;
415 }
416
417 /* bpcc-bn: bn$a$p %xcc,$disp19 */
418
419 SEM_STATUS
420 SEM_FN_NAME (sparc64,bpcc_bn) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
421 {
422 SEM_STATUS status = 0;
423 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
424 int UNUSED written = 0;
425 IADDR UNUSED pc = GET_H_PC ();
426 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
427 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
428 EXTRACT_IFMT_BPCC_BA_CODE
429
430 do {
431 do {
432 do { } while (0); /*nop*/
433 SEM_ANNUL_INSN (current_cpu, pc, f_a);
434 } while (0);
435 } while (0);
436
437 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
438 return status;
439 }
440
441 /* bpcc-bne: bne$a$p %xcc,$disp19 */
442
443 SEM_STATUS
444 SEM_FN_NAME (sparc64,bpcc_bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
445 {
446 SEM_STATUS status = 0;
447 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
448 int UNUSED written = 0;
449 IADDR UNUSED pc = GET_H_PC ();
450 SEM_BRANCH_INIT
451 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
452 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
453 IADDR i_disp22;
454 EXTRACT_IFMT_BPCC_BA_CODE
455 i_disp22 = f_disp22;
456
457 do {
458 if (NOTBI (CPU (h_xcc_z))) {
459 {
460 USI opval = i_disp22;
461 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
462 written |= (1 << 3);
463 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
464 }
465 } else {
466 SEM_ANNUL_INSN (current_cpu, pc, f_a);
467 }
468 } while (0);
469
470 abuf->written = written;
471 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
472 return status;
473 }
474
475 /* bpcc-be: be$a$p %xcc,$disp19 */
476
477 SEM_STATUS
478 SEM_FN_NAME (sparc64,bpcc_be) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
479 {
480 SEM_STATUS status = 0;
481 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
482 int UNUSED written = 0;
483 IADDR UNUSED pc = GET_H_PC ();
484 SEM_BRANCH_INIT
485 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
486 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
487 IADDR i_disp22;
488 EXTRACT_IFMT_BPCC_BA_CODE
489 i_disp22 = f_disp22;
490
491 do {
492 if (CPU (h_xcc_z)) {
493 {
494 USI opval = i_disp22;
495 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
496 written |= (1 << 3);
497 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
498 }
499 } else {
500 SEM_ANNUL_INSN (current_cpu, pc, f_a);
501 }
502 } while (0);
503
504 abuf->written = written;
505 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
506 return status;
507 }
508
509 /* bpcc-bg: bg$a$p %xcc,$disp19 */
510
511 SEM_STATUS
512 SEM_FN_NAME (sparc64,bpcc_bg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
513 {
514 SEM_STATUS status = 0;
515 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
516 int UNUSED written = 0;
517 IADDR UNUSED pc = GET_H_PC ();
518 SEM_BRANCH_INIT
519 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
520 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
521 IADDR i_disp22;
522 EXTRACT_IFMT_BPCC_BA_CODE
523 i_disp22 = f_disp22;
524
525 do {
526 if (NOTBI (ORBI (CPU (h_xcc_z), XORBI (CPU (h_xcc_n), CPU (h_xcc_v))))) {
527 {
528 USI opval = i_disp22;
529 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
530 written |= (1 << 5);
531 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
532 }
533 } else {
534 SEM_ANNUL_INSN (current_cpu, pc, f_a);
535 }
536 } while (0);
537
538 abuf->written = written;
539 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
540 return status;
541 }
542
543 /* bpcc-ble: ble$a$p %xcc,$disp19 */
544
545 SEM_STATUS
546 SEM_FN_NAME (sparc64,bpcc_ble) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
547 {
548 SEM_STATUS status = 0;
549 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
550 int UNUSED written = 0;
551 IADDR UNUSED pc = GET_H_PC ();
552 SEM_BRANCH_INIT
553 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
554 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
555 IADDR i_disp22;
556 EXTRACT_IFMT_BPCC_BA_CODE
557 i_disp22 = f_disp22;
558
559 do {
560 if (ORBI (CPU (h_xcc_z), XORBI (CPU (h_xcc_n), CPU (h_xcc_v)))) {
561 {
562 USI opval = i_disp22;
563 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
564 written |= (1 << 5);
565 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
566 }
567 } else {
568 SEM_ANNUL_INSN (current_cpu, pc, f_a);
569 }
570 } while (0);
571
572 abuf->written = written;
573 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
574 return status;
575 }
576
577 /* bpcc-bge: bge$a$p %xcc,$disp19 */
578
579 SEM_STATUS
580 SEM_FN_NAME (sparc64,bpcc_bge) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
581 {
582 SEM_STATUS status = 0;
583 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
584 int UNUSED written = 0;
585 IADDR UNUSED pc = GET_H_PC ();
586 SEM_BRANCH_INIT
587 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
588 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
589 IADDR i_disp22;
590 EXTRACT_IFMT_BPCC_BA_CODE
591 i_disp22 = f_disp22;
592
593 do {
594 if (NOTBI (XORBI (CPU (h_xcc_n), CPU (h_xcc_v)))) {
595 {
596 USI opval = i_disp22;
597 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
598 written |= (1 << 4);
599 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
600 }
601 } else {
602 SEM_ANNUL_INSN (current_cpu, pc, f_a);
603 }
604 } while (0);
605
606 abuf->written = written;
607 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
608 return status;
609 }
610
611 /* bpcc-bl: bl$a$p %xcc,$disp19 */
612
613 SEM_STATUS
614 SEM_FN_NAME (sparc64,bpcc_bl) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
615 {
616 SEM_STATUS status = 0;
617 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
618 int UNUSED written = 0;
619 IADDR UNUSED pc = GET_H_PC ();
620 SEM_BRANCH_INIT
621 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
622 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
623 IADDR i_disp22;
624 EXTRACT_IFMT_BPCC_BA_CODE
625 i_disp22 = f_disp22;
626
627 do {
628 if (XORBI (CPU (h_xcc_n), CPU (h_xcc_v))) {
629 {
630 USI opval = i_disp22;
631 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
632 written |= (1 << 4);
633 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
634 }
635 } else {
636 SEM_ANNUL_INSN (current_cpu, pc, f_a);
637 }
638 } while (0);
639
640 abuf->written = written;
641 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
642 return status;
643 }
644
645 /* bpcc-bgu: bgu$a$p %xcc,$disp19 */
646
647 SEM_STATUS
648 SEM_FN_NAME (sparc64,bpcc_bgu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
649 {
650 SEM_STATUS status = 0;
651 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
652 int UNUSED written = 0;
653 IADDR UNUSED pc = GET_H_PC ();
654 SEM_BRANCH_INIT
655 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
656 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
657 IADDR i_disp22;
658 EXTRACT_IFMT_BPCC_BA_CODE
659 i_disp22 = f_disp22;
660
661 do {
662 if (NOTBI (ORBI (CPU (h_xcc_c), CPU (h_xcc_z)))) {
663 {
664 USI opval = i_disp22;
665 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
666 written |= (1 << 4);
667 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
668 }
669 } else {
670 SEM_ANNUL_INSN (current_cpu, pc, f_a);
671 }
672 } while (0);
673
674 abuf->written = written;
675 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
676 return status;
677 }
678
679 /* bpcc-bleu: bleu$a$p %xcc,$disp19 */
680
681 SEM_STATUS
682 SEM_FN_NAME (sparc64,bpcc_bleu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
683 {
684 SEM_STATUS status = 0;
685 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
686 int UNUSED written = 0;
687 IADDR UNUSED pc = GET_H_PC ();
688 SEM_BRANCH_INIT
689 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
690 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
691 IADDR i_disp22;
692 EXTRACT_IFMT_BPCC_BA_CODE
693 i_disp22 = f_disp22;
694
695 do {
696 if (ORBI (CPU (h_xcc_c), CPU (h_xcc_z))) {
697 {
698 USI opval = i_disp22;
699 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
700 written |= (1 << 4);
701 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
702 }
703 } else {
704 SEM_ANNUL_INSN (current_cpu, pc, f_a);
705 }
706 } while (0);
707
708 abuf->written = written;
709 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
710 return status;
711 }
712
713 /* bpcc-bcc: bcc$a$p %xcc,$disp19 */
714
715 SEM_STATUS
716 SEM_FN_NAME (sparc64,bpcc_bcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
717 {
718 SEM_STATUS status = 0;
719 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
720 int UNUSED written = 0;
721 IADDR UNUSED pc = GET_H_PC ();
722 SEM_BRANCH_INIT
723 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
724 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
725 IADDR i_disp22;
726 EXTRACT_IFMT_BPCC_BA_CODE
727 i_disp22 = f_disp22;
728
729 do {
730 if (NOTBI (CPU (h_xcc_c))) {
731 {
732 USI opval = i_disp22;
733 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
734 written |= (1 << 3);
735 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
736 }
737 } else {
738 SEM_ANNUL_INSN (current_cpu, pc, f_a);
739 }
740 } while (0);
741
742 abuf->written = written;
743 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
744 return status;
745 }
746
747 /* bpcc-bcs: bcs$a$p %xcc,$disp19 */
748
749 SEM_STATUS
750 SEM_FN_NAME (sparc64,bpcc_bcs) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
751 {
752 SEM_STATUS status = 0;
753 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
754 int UNUSED written = 0;
755 IADDR UNUSED pc = GET_H_PC ();
756 SEM_BRANCH_INIT
757 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
758 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
759 IADDR i_disp22;
760 EXTRACT_IFMT_BPCC_BA_CODE
761 i_disp22 = f_disp22;
762
763 do {
764 if (CPU (h_xcc_c)) {
765 {
766 USI opval = i_disp22;
767 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
768 written |= (1 << 3);
769 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
770 }
771 } else {
772 SEM_ANNUL_INSN (current_cpu, pc, f_a);
773 }
774 } while (0);
775
776 abuf->written = written;
777 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
778 return status;
779 }
780
781 /* bpcc-bpos: bpos$a$p %xcc,$disp19 */
782
783 SEM_STATUS
784 SEM_FN_NAME (sparc64,bpcc_bpos) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
785 {
786 SEM_STATUS status = 0;
787 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
788 int UNUSED written = 0;
789 IADDR UNUSED pc = GET_H_PC ();
790 SEM_BRANCH_INIT
791 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
792 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
793 IADDR i_disp22;
794 EXTRACT_IFMT_BPCC_BA_CODE
795 i_disp22 = f_disp22;
796
797 do {
798 if (NOTBI (CPU (h_xcc_n))) {
799 {
800 USI opval = i_disp22;
801 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
802 written |= (1 << 3);
803 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
804 }
805 } else {
806 SEM_ANNUL_INSN (current_cpu, pc, f_a);
807 }
808 } while (0);
809
810 abuf->written = written;
811 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
812 return status;
813 }
814
815 /* bpcc-bneg: bneg$a$p %xcc,$disp19 */
816
817 SEM_STATUS
818 SEM_FN_NAME (sparc64,bpcc_bneg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
819 {
820 SEM_STATUS status = 0;
821 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
822 int UNUSED written = 0;
823 IADDR UNUSED pc = GET_H_PC ();
824 SEM_BRANCH_INIT
825 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
826 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
827 IADDR i_disp22;
828 EXTRACT_IFMT_BPCC_BA_CODE
829 i_disp22 = f_disp22;
830
831 do {
832 if (CPU (h_xcc_n)) {
833 {
834 USI opval = i_disp22;
835 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
836 written |= (1 << 3);
837 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
838 }
839 } else {
840 SEM_ANNUL_INSN (current_cpu, pc, f_a);
841 }
842 } while (0);
843
844 abuf->written = written;
845 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
846 return status;
847 }
848
849 /* bpcc-bvc: bvc$a$p %xcc,$disp19 */
850
851 SEM_STATUS
852 SEM_FN_NAME (sparc64,bpcc_bvc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
853 {
854 SEM_STATUS status = 0;
855 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
856 int UNUSED written = 0;
857 IADDR UNUSED pc = GET_H_PC ();
858 SEM_BRANCH_INIT
859 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
860 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
861 IADDR i_disp22;
862 EXTRACT_IFMT_BPCC_BA_CODE
863 i_disp22 = f_disp22;
864
865 do {
866 if (NOTBI (CPU (h_xcc_v))) {
867 {
868 USI opval = i_disp22;
869 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
870 written |= (1 << 3);
871 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
872 }
873 } else {
874 SEM_ANNUL_INSN (current_cpu, pc, f_a);
875 }
876 } while (0);
877
878 abuf->written = written;
879 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
880 return status;
881 }
882
883 /* bpcc-bvs: bvs$a$p %xcc,$disp19 */
884
885 SEM_STATUS
886 SEM_FN_NAME (sparc64,bpcc_bvs) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
887 {
888 SEM_STATUS status = 0;
889 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
890 int UNUSED written = 0;
891 IADDR UNUSED pc = GET_H_PC ();
892 SEM_BRANCH_INIT
893 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
894 EXTRACT_IFMT_BPCC_BA_VARS /* f-disp19 f-p f-fmt2-cc0 f-fmt2-cc1 f-op2 f-fmt2-cond f-a f-op */
895 IADDR i_disp22;
896 EXTRACT_IFMT_BPCC_BA_CODE
897 i_disp22 = f_disp22;
898
899 do {
900 if (CPU (h_xcc_v)) {
901 {
902 USI opval = i_disp22;
903 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
904 written |= (1 << 3);
905 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
906 }
907 } else {
908 SEM_ANNUL_INSN (current_cpu, pc, f_a);
909 }
910 } while (0);
911
912 abuf->written = written;
913 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
914 return status;
915 }
916
917 /* done: done */
918
919 SEM_STATUS
920 SEM_FN_NAME (sparc64,done) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
921 {
922 SEM_STATUS status = 0;
923 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
924 int UNUSED written = 0;
925 IADDR UNUSED pc = GET_H_PC ();
926 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
927 EXTRACT_IFMT_DONE_VARS /* f-res-18-19 f-op3 f-fcn f-op */
928 EXTRACT_IFMT_DONE_CODE
929
930 sparc64_done (current_cpu, pc);
931
932 SEM_NBRANCH_FINI (vpc, 0);
933 return status;
934 }
935
936 /* retry: done */
937
938 SEM_STATUS
939 SEM_FN_NAME (sparc64,retry) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
940 {
941 SEM_STATUS status = 0;
942 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
943 int UNUSED written = 0;
944 IADDR UNUSED pc = GET_H_PC ();
945 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
946 EXTRACT_IFMT_DONE_VARS /* f-res-18-19 f-op3 f-fcn f-op */
947 EXTRACT_IFMT_DONE_CODE
948
949 sparc64_retry (current_cpu, pc);
950
951 SEM_NBRANCH_FINI (vpc, 0);
952 return status;
953 }
954
955 /* flush: flush */
956
957 SEM_STATUS
958 SEM_FN_NAME (sparc64,flush) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
959 {
960 SEM_STATUS status = 0;
961 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
962 int UNUSED written = 0;
963 IADDR UNUSED pc = GET_H_PC ();
964 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
965 EXTRACT_IFMT_FLUSH_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
966 EXTRACT_IFMT_FLUSH_CODE
967
968 sparc64_flush (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
969
970 SEM_NBRANCH_FINI (vpc, 0);
971 return status;
972 }
973
974 /* flush-imm: flush */
975
976 SEM_STATUS
977 SEM_FN_NAME (sparc64,flush_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
978 {
979 SEM_STATUS status = 0;
980 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
981 int UNUSED written = 0;
982 IADDR UNUSED pc = GET_H_PC ();
983 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
984 EXTRACT_IFMT_FLUSH_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
985 EXTRACT_IFMT_FLUSH_IMM_CODE
986
987 sparc64_flush (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
988
989 SEM_NBRANCH_FINI (vpc, 0);
990 return status;
991 }
992
993 /* flushw: flushw */
994
995 SEM_STATUS
996 SEM_FN_NAME (sparc64,flushw) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
997 {
998 SEM_STATUS status = 0;
999 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1000 int UNUSED written = 0;
1001 IADDR UNUSED pc = GET_H_PC ();
1002 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1003 EXTRACT_IFMT_FLUSHW_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1004 EXTRACT_IFMT_FLUSHW_CODE
1005
1006 sparc64_flushw (current_cpu, pc);
1007
1008 SEM_NBRANCH_FINI (vpc, 0);
1009 return status;
1010 }
1011
1012 /* impdep1: impdep1 $impdep5,$impdep19 */
1013
1014 SEM_STATUS
1015 SEM_FN_NAME (sparc64,impdep1) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1016 {
1017 SEM_STATUS status = 0;
1018 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1019 int UNUSED written = 0;
1020 IADDR UNUSED pc = GET_H_PC ();
1021 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1022 EXTRACT_IFMT_IMPDEP1_VARS /* f-impdep19 f-op3 f-impdep5 f-op */
1023 EXTRACT_IFMT_IMPDEP1_CODE
1024
1025 sparc64_impdep1 (current_cpu, pc, f_impdep5, f_impdep19);
1026
1027 SEM_NBRANCH_FINI (vpc, 0);
1028 return status;
1029 }
1030
1031 /* impdep2: impdep2 $impdep5,$impdep19 */
1032
1033 SEM_STATUS
1034 SEM_FN_NAME (sparc64,impdep2) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1035 {
1036 SEM_STATUS status = 0;
1037 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1038 int UNUSED written = 0;
1039 IADDR UNUSED pc = GET_H_PC ();
1040 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1041 EXTRACT_IFMT_IMPDEP1_VARS /* f-impdep19 f-op3 f-impdep5 f-op */
1042 EXTRACT_IFMT_IMPDEP1_CODE
1043
1044 sparc64_impdep2 (current_cpu, pc, f_impdep5, f_impdep19);
1045
1046 SEM_NBRANCH_FINI (vpc, 0);
1047 return status;
1048 }
1049
1050 /* membar: member $membarmask */
1051
1052 SEM_STATUS
1053 SEM_FN_NAME (sparc64,membar) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1054 {
1055 SEM_STATUS status = 0;
1056 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1057 int UNUSED written = 0;
1058 IADDR UNUSED pc = GET_H_PC ();
1059 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1060 EXTRACT_IFMT_MEMBAR_VARS /* f-membarmask f-membar-res12-6 f-i f-rs1 f-op3 f-rd f-op */
1061 EXTRACT_IFMT_MEMBAR_CODE
1062
1063 sparc64_membar (current_cpu, pc, f_membarmask);
1064
1065 SEM_NBRANCH_FINI (vpc, 0);
1066 return status;
1067 }
1068
1069 /* mova-icc-icc: mova-icc %icc,$rs2,$rd */
1070
1071 SEM_STATUS
1072 SEM_FN_NAME (sparc64,mova_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1073 {
1074 SEM_STATUS status = 0;
1075 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1076 int UNUSED written = 0;
1077 IADDR UNUSED pc = GET_H_PC ();
1078 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1079 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1080 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1081
1082 {
1083 SI opval = GET_H_GR (f_rs2);
1084 SET_H_GR (f_rd, opval);
1085 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1086 }
1087
1088 SEM_NBRANCH_FINI (vpc, 0);
1089 return status;
1090 }
1091
1092 /* mova-imm-icc-icc: mova-imm-icc %icc,$simm11,$rd */
1093
1094 SEM_STATUS
1095 SEM_FN_NAME (sparc64,mova_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1096 {
1097 SEM_STATUS status = 0;
1098 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1099 int UNUSED written = 0;
1100 IADDR UNUSED pc = GET_H_PC ();
1101 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1102 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1103 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1104
1105 {
1106 SI opval = f_simm11;
1107 SET_H_GR (f_rd, opval);
1108 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1109 }
1110
1111 SEM_NBRANCH_FINI (vpc, 0);
1112 return status;
1113 }
1114
1115 /* mova-xcc-xcc: mova-xcc %xcc,$rs2,$rd */
1116
1117 SEM_STATUS
1118 SEM_FN_NAME (sparc64,mova_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1119 {
1120 SEM_STATUS status = 0;
1121 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1122 int UNUSED written = 0;
1123 IADDR UNUSED pc = GET_H_PC ();
1124 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1125 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1126 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1127
1128 {
1129 SI opval = GET_H_GR (f_rs2);
1130 SET_H_GR (f_rd, opval);
1131 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1132 }
1133
1134 SEM_NBRANCH_FINI (vpc, 0);
1135 return status;
1136 }
1137
1138 /* mova-imm-xcc-xcc: mova-imm-xcc %xcc,$simm11,$rd */
1139
1140 SEM_STATUS
1141 SEM_FN_NAME (sparc64,mova_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1142 {
1143 SEM_STATUS status = 0;
1144 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1145 int UNUSED written = 0;
1146 IADDR UNUSED pc = GET_H_PC ();
1147 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1148 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1149 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1150
1151 {
1152 SI opval = f_simm11;
1153 SET_H_GR (f_rd, opval);
1154 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1155 }
1156
1157 SEM_NBRANCH_FINI (vpc, 0);
1158 return status;
1159 }
1160
1161 /* movn-icc-icc: movn-icc %icc,$rs2,$rd */
1162
1163 SEM_STATUS
1164 SEM_FN_NAME (sparc64,movn_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1165 {
1166 SEM_STATUS status = 0;
1167 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1168 int UNUSED written = 0;
1169 IADDR UNUSED pc = GET_H_PC ();
1170 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1171 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1172 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1173
1174 do { } while (0); /*nop*/
1175
1176 SEM_NBRANCH_FINI (vpc, 0);
1177 return status;
1178 }
1179
1180 /* movn-imm-icc-icc: movn-imm-icc %icc,$simm11,$rd */
1181
1182 SEM_STATUS
1183 SEM_FN_NAME (sparc64,movn_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1184 {
1185 SEM_STATUS status = 0;
1186 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1187 int UNUSED written = 0;
1188 IADDR UNUSED pc = GET_H_PC ();
1189 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1190 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1191 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1192
1193 do { } while (0); /*nop*/
1194
1195 SEM_NBRANCH_FINI (vpc, 0);
1196 return status;
1197 }
1198
1199 /* movn-xcc-xcc: movn-xcc %xcc,$rs2,$rd */
1200
1201 SEM_STATUS
1202 SEM_FN_NAME (sparc64,movn_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1203 {
1204 SEM_STATUS status = 0;
1205 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1206 int UNUSED written = 0;
1207 IADDR UNUSED pc = GET_H_PC ();
1208 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1209 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1210 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1211
1212 do { } while (0); /*nop*/
1213
1214 SEM_NBRANCH_FINI (vpc, 0);
1215 return status;
1216 }
1217
1218 /* movn-imm-xcc-xcc: movn-imm-xcc %xcc,$simm11,$rd */
1219
1220 SEM_STATUS
1221 SEM_FN_NAME (sparc64,movn_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1222 {
1223 SEM_STATUS status = 0;
1224 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1225 int UNUSED written = 0;
1226 IADDR UNUSED pc = GET_H_PC ();
1227 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1228 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1229 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1230
1231 do { } while (0); /*nop*/
1232
1233 SEM_NBRANCH_FINI (vpc, 0);
1234 return status;
1235 }
1236
1237 /* movne-icc-icc: movne-icc %icc,$rs2,$rd */
1238
1239 SEM_STATUS
1240 SEM_FN_NAME (sparc64,movne_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1241 {
1242 SEM_STATUS status = 0;
1243 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1244 int UNUSED written = 0;
1245 IADDR UNUSED pc = GET_H_PC ();
1246 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1247 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1248 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1249
1250 if (NOTBI (CPU (h_icc_z))) {
1251 {
1252 SI opval = GET_H_GR (f_rs2);
1253 SET_H_GR (f_rd, opval);
1254 written |= (1 << 2);
1255 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1256 }
1257 }
1258
1259 abuf->written = written;
1260 SEM_NBRANCH_FINI (vpc, 0);
1261 return status;
1262 }
1263
1264 /* movne-imm-icc-icc: movne-imm-icc %icc,$simm11,$rd */
1265
1266 SEM_STATUS
1267 SEM_FN_NAME (sparc64,movne_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1268 {
1269 SEM_STATUS status = 0;
1270 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1271 int UNUSED written = 0;
1272 IADDR UNUSED pc = GET_H_PC ();
1273 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1274 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1275 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1276
1277 if (NOTBI (CPU (h_icc_z))) {
1278 {
1279 SI opval = f_simm11;
1280 SET_H_GR (f_rd, opval);
1281 written |= (1 << 2);
1282 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1283 }
1284 }
1285
1286 abuf->written = written;
1287 SEM_NBRANCH_FINI (vpc, 0);
1288 return status;
1289 }
1290
1291 /* movne-xcc-xcc: movne-xcc %xcc,$rs2,$rd */
1292
1293 SEM_STATUS
1294 SEM_FN_NAME (sparc64,movne_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1295 {
1296 SEM_STATUS status = 0;
1297 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1298 int UNUSED written = 0;
1299 IADDR UNUSED pc = GET_H_PC ();
1300 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1301 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1302 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1303
1304 if (NOTBI (CPU (h_xcc_z))) {
1305 {
1306 SI opval = GET_H_GR (f_rs2);
1307 SET_H_GR (f_rd, opval);
1308 written |= (1 << 2);
1309 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1310 }
1311 }
1312
1313 abuf->written = written;
1314 SEM_NBRANCH_FINI (vpc, 0);
1315 return status;
1316 }
1317
1318 /* movne-imm-xcc-xcc: movne-imm-xcc %xcc,$simm11,$rd */
1319
1320 SEM_STATUS
1321 SEM_FN_NAME (sparc64,movne_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1322 {
1323 SEM_STATUS status = 0;
1324 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1325 int UNUSED written = 0;
1326 IADDR UNUSED pc = GET_H_PC ();
1327 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1328 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1329 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1330
1331 if (NOTBI (CPU (h_xcc_z))) {
1332 {
1333 SI opval = f_simm11;
1334 SET_H_GR (f_rd, opval);
1335 written |= (1 << 2);
1336 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1337 }
1338 }
1339
1340 abuf->written = written;
1341 SEM_NBRANCH_FINI (vpc, 0);
1342 return status;
1343 }
1344
1345 /* move-icc-icc: move-icc %icc,$rs2,$rd */
1346
1347 SEM_STATUS
1348 SEM_FN_NAME (sparc64,move_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1349 {
1350 SEM_STATUS status = 0;
1351 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1352 int UNUSED written = 0;
1353 IADDR UNUSED pc = GET_H_PC ();
1354 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1355 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1356 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1357
1358 if (CPU (h_icc_z)) {
1359 {
1360 SI opval = GET_H_GR (f_rs2);
1361 SET_H_GR (f_rd, opval);
1362 written |= (1 << 2);
1363 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1364 }
1365 }
1366
1367 abuf->written = written;
1368 SEM_NBRANCH_FINI (vpc, 0);
1369 return status;
1370 }
1371
1372 /* move-imm-icc-icc: move-imm-icc %icc,$simm11,$rd */
1373
1374 SEM_STATUS
1375 SEM_FN_NAME (sparc64,move_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1376 {
1377 SEM_STATUS status = 0;
1378 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1379 int UNUSED written = 0;
1380 IADDR UNUSED pc = GET_H_PC ();
1381 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1382 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1383 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1384
1385 if (CPU (h_icc_z)) {
1386 {
1387 SI opval = f_simm11;
1388 SET_H_GR (f_rd, opval);
1389 written |= (1 << 2);
1390 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1391 }
1392 }
1393
1394 abuf->written = written;
1395 SEM_NBRANCH_FINI (vpc, 0);
1396 return status;
1397 }
1398
1399 /* move-xcc-xcc: move-xcc %xcc,$rs2,$rd */
1400
1401 SEM_STATUS
1402 SEM_FN_NAME (sparc64,move_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1403 {
1404 SEM_STATUS status = 0;
1405 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1406 int UNUSED written = 0;
1407 IADDR UNUSED pc = GET_H_PC ();
1408 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1409 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1410 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1411
1412 if (CPU (h_xcc_z)) {
1413 {
1414 SI opval = GET_H_GR (f_rs2);
1415 SET_H_GR (f_rd, opval);
1416 written |= (1 << 2);
1417 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1418 }
1419 }
1420
1421 abuf->written = written;
1422 SEM_NBRANCH_FINI (vpc, 0);
1423 return status;
1424 }
1425
1426 /* move-imm-xcc-xcc: move-imm-xcc %xcc,$simm11,$rd */
1427
1428 SEM_STATUS
1429 SEM_FN_NAME (sparc64,move_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1430 {
1431 SEM_STATUS status = 0;
1432 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1433 int UNUSED written = 0;
1434 IADDR UNUSED pc = GET_H_PC ();
1435 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1436 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1437 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1438
1439 if (CPU (h_xcc_z)) {
1440 {
1441 SI opval = f_simm11;
1442 SET_H_GR (f_rd, opval);
1443 written |= (1 << 2);
1444 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1445 }
1446 }
1447
1448 abuf->written = written;
1449 SEM_NBRANCH_FINI (vpc, 0);
1450 return status;
1451 }
1452
1453 /* movg-icc-icc: movg-icc %icc,$rs2,$rd */
1454
1455 SEM_STATUS
1456 SEM_FN_NAME (sparc64,movg_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1457 {
1458 SEM_STATUS status = 0;
1459 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1460 int UNUSED written = 0;
1461 IADDR UNUSED pc = GET_H_PC ();
1462 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1463 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1464 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1465
1466 if (NOTBI (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v))))) {
1467 {
1468 SI opval = GET_H_GR (f_rs2);
1469 SET_H_GR (f_rd, opval);
1470 written |= (1 << 4);
1471 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1472 }
1473 }
1474
1475 abuf->written = written;
1476 SEM_NBRANCH_FINI (vpc, 0);
1477 return status;
1478 }
1479
1480 /* movg-imm-icc-icc: movg-imm-icc %icc,$simm11,$rd */
1481
1482 SEM_STATUS
1483 SEM_FN_NAME (sparc64,movg_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1484 {
1485 SEM_STATUS status = 0;
1486 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1487 int UNUSED written = 0;
1488 IADDR UNUSED pc = GET_H_PC ();
1489 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1490 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1491 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1492
1493 if (NOTBI (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v))))) {
1494 {
1495 SI opval = f_simm11;
1496 SET_H_GR (f_rd, opval);
1497 written |= (1 << 4);
1498 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1499 }
1500 }
1501
1502 abuf->written = written;
1503 SEM_NBRANCH_FINI (vpc, 0);
1504 return status;
1505 }
1506
1507 /* movg-xcc-xcc: movg-xcc %xcc,$rs2,$rd */
1508
1509 SEM_STATUS
1510 SEM_FN_NAME (sparc64,movg_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1511 {
1512 SEM_STATUS status = 0;
1513 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1514 int UNUSED written = 0;
1515 IADDR UNUSED pc = GET_H_PC ();
1516 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1517 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1518 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1519
1520 if (NOTBI (ORBI (CPU (h_xcc_z), XORBI (CPU (h_xcc_n), CPU (h_xcc_v))))) {
1521 {
1522 SI opval = GET_H_GR (f_rs2);
1523 SET_H_GR (f_rd, opval);
1524 written |= (1 << 4);
1525 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1526 }
1527 }
1528
1529 abuf->written = written;
1530 SEM_NBRANCH_FINI (vpc, 0);
1531 return status;
1532 }
1533
1534 /* movg-imm-xcc-xcc: movg-imm-xcc %xcc,$simm11,$rd */
1535
1536 SEM_STATUS
1537 SEM_FN_NAME (sparc64,movg_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1538 {
1539 SEM_STATUS status = 0;
1540 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1541 int UNUSED written = 0;
1542 IADDR UNUSED pc = GET_H_PC ();
1543 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1544 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1545 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1546
1547 if (NOTBI (ORBI (CPU (h_xcc_z), XORBI (CPU (h_xcc_n), CPU (h_xcc_v))))) {
1548 {
1549 SI opval = f_simm11;
1550 SET_H_GR (f_rd, opval);
1551 written |= (1 << 4);
1552 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1553 }
1554 }
1555
1556 abuf->written = written;
1557 SEM_NBRANCH_FINI (vpc, 0);
1558 return status;
1559 }
1560
1561 /* movle-icc-icc: movle-icc %icc,$rs2,$rd */
1562
1563 SEM_STATUS
1564 SEM_FN_NAME (sparc64,movle_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1565 {
1566 SEM_STATUS status = 0;
1567 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1568 int UNUSED written = 0;
1569 IADDR UNUSED pc = GET_H_PC ();
1570 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1571 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1572 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1573
1574 if (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
1575 {
1576 SI opval = GET_H_GR (f_rs2);
1577 SET_H_GR (f_rd, opval);
1578 written |= (1 << 4);
1579 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1580 }
1581 }
1582
1583 abuf->written = written;
1584 SEM_NBRANCH_FINI (vpc, 0);
1585 return status;
1586 }
1587
1588 /* movle-imm-icc-icc: movle-imm-icc %icc,$simm11,$rd */
1589
1590 SEM_STATUS
1591 SEM_FN_NAME (sparc64,movle_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1592 {
1593 SEM_STATUS status = 0;
1594 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1595 int UNUSED written = 0;
1596 IADDR UNUSED pc = GET_H_PC ();
1597 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1598 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1599 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1600
1601 if (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
1602 {
1603 SI opval = f_simm11;
1604 SET_H_GR (f_rd, opval);
1605 written |= (1 << 4);
1606 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1607 }
1608 }
1609
1610 abuf->written = written;
1611 SEM_NBRANCH_FINI (vpc, 0);
1612 return status;
1613 }
1614
1615 /* movle-xcc-xcc: movle-xcc %xcc,$rs2,$rd */
1616
1617 SEM_STATUS
1618 SEM_FN_NAME (sparc64,movle_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1619 {
1620 SEM_STATUS status = 0;
1621 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1622 int UNUSED written = 0;
1623 IADDR UNUSED pc = GET_H_PC ();
1624 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1625 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1626 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1627
1628 if (ORBI (CPU (h_xcc_z), XORBI (CPU (h_xcc_n), CPU (h_xcc_v)))) {
1629 {
1630 SI opval = GET_H_GR (f_rs2);
1631 SET_H_GR (f_rd, opval);
1632 written |= (1 << 4);
1633 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1634 }
1635 }
1636
1637 abuf->written = written;
1638 SEM_NBRANCH_FINI (vpc, 0);
1639 return status;
1640 }
1641
1642 /* movle-imm-xcc-xcc: movle-imm-xcc %xcc,$simm11,$rd */
1643
1644 SEM_STATUS
1645 SEM_FN_NAME (sparc64,movle_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1646 {
1647 SEM_STATUS status = 0;
1648 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1649 int UNUSED written = 0;
1650 IADDR UNUSED pc = GET_H_PC ();
1651 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1652 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1653 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1654
1655 if (ORBI (CPU (h_xcc_z), XORBI (CPU (h_xcc_n), CPU (h_xcc_v)))) {
1656 {
1657 SI opval = f_simm11;
1658 SET_H_GR (f_rd, opval);
1659 written |= (1 << 4);
1660 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1661 }
1662 }
1663
1664 abuf->written = written;
1665 SEM_NBRANCH_FINI (vpc, 0);
1666 return status;
1667 }
1668
1669 /* movge-icc-icc: movge-icc %icc,$rs2,$rd */
1670
1671 SEM_STATUS
1672 SEM_FN_NAME (sparc64,movge_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1673 {
1674 SEM_STATUS status = 0;
1675 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1676 int UNUSED written = 0;
1677 IADDR UNUSED pc = GET_H_PC ();
1678 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1679 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1680 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1681
1682 if (NOTBI (XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
1683 {
1684 SI opval = GET_H_GR (f_rs2);
1685 SET_H_GR (f_rd, opval);
1686 written |= (1 << 3);
1687 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1688 }
1689 }
1690
1691 abuf->written = written;
1692 SEM_NBRANCH_FINI (vpc, 0);
1693 return status;
1694 }
1695
1696 /* movge-imm-icc-icc: movge-imm-icc %icc,$simm11,$rd */
1697
1698 SEM_STATUS
1699 SEM_FN_NAME (sparc64,movge_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1700 {
1701 SEM_STATUS status = 0;
1702 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1703 int UNUSED written = 0;
1704 IADDR UNUSED pc = GET_H_PC ();
1705 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1706 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1707 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1708
1709 if (NOTBI (XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
1710 {
1711 SI opval = f_simm11;
1712 SET_H_GR (f_rd, opval);
1713 written |= (1 << 3);
1714 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1715 }
1716 }
1717
1718 abuf->written = written;
1719 SEM_NBRANCH_FINI (vpc, 0);
1720 return status;
1721 }
1722
1723 /* movge-xcc-xcc: movge-xcc %xcc,$rs2,$rd */
1724
1725 SEM_STATUS
1726 SEM_FN_NAME (sparc64,movge_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1727 {
1728 SEM_STATUS status = 0;
1729 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1730 int UNUSED written = 0;
1731 IADDR UNUSED pc = GET_H_PC ();
1732 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1733 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1734 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1735
1736 if (NOTBI (XORBI (CPU (h_xcc_n), CPU (h_xcc_v)))) {
1737 {
1738 SI opval = GET_H_GR (f_rs2);
1739 SET_H_GR (f_rd, opval);
1740 written |= (1 << 3);
1741 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1742 }
1743 }
1744
1745 abuf->written = written;
1746 SEM_NBRANCH_FINI (vpc, 0);
1747 return status;
1748 }
1749
1750 /* movge-imm-xcc-xcc: movge-imm-xcc %xcc,$simm11,$rd */
1751
1752 SEM_STATUS
1753 SEM_FN_NAME (sparc64,movge_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1754 {
1755 SEM_STATUS status = 0;
1756 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1757 int UNUSED written = 0;
1758 IADDR UNUSED pc = GET_H_PC ();
1759 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1760 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1761 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1762
1763 if (NOTBI (XORBI (CPU (h_xcc_n), CPU (h_xcc_v)))) {
1764 {
1765 SI opval = f_simm11;
1766 SET_H_GR (f_rd, opval);
1767 written |= (1 << 3);
1768 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1769 }
1770 }
1771
1772 abuf->written = written;
1773 SEM_NBRANCH_FINI (vpc, 0);
1774 return status;
1775 }
1776
1777 /* movl-icc-icc: movl-icc %icc,$rs2,$rd */
1778
1779 SEM_STATUS
1780 SEM_FN_NAME (sparc64,movl_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1781 {
1782 SEM_STATUS status = 0;
1783 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1784 int UNUSED written = 0;
1785 IADDR UNUSED pc = GET_H_PC ();
1786 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1787 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1788 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1789
1790 if (XORBI (CPU (h_icc_n), CPU (h_icc_v))) {
1791 {
1792 SI opval = GET_H_GR (f_rs2);
1793 SET_H_GR (f_rd, opval);
1794 written |= (1 << 3);
1795 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1796 }
1797 }
1798
1799 abuf->written = written;
1800 SEM_NBRANCH_FINI (vpc, 0);
1801 return status;
1802 }
1803
1804 /* movl-imm-icc-icc: movl-imm-icc %icc,$simm11,$rd */
1805
1806 SEM_STATUS
1807 SEM_FN_NAME (sparc64,movl_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1808 {
1809 SEM_STATUS status = 0;
1810 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1811 int UNUSED written = 0;
1812 IADDR UNUSED pc = GET_H_PC ();
1813 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1814 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1815 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1816
1817 if (XORBI (CPU (h_icc_n), CPU (h_icc_v))) {
1818 {
1819 SI opval = f_simm11;
1820 SET_H_GR (f_rd, opval);
1821 written |= (1 << 3);
1822 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1823 }
1824 }
1825
1826 abuf->written = written;
1827 SEM_NBRANCH_FINI (vpc, 0);
1828 return status;
1829 }
1830
1831 /* movl-xcc-xcc: movl-xcc %xcc,$rs2,$rd */
1832
1833 SEM_STATUS
1834 SEM_FN_NAME (sparc64,movl_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1835 {
1836 SEM_STATUS status = 0;
1837 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1838 int UNUSED written = 0;
1839 IADDR UNUSED pc = GET_H_PC ();
1840 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1841 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1842 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1843
1844 if (XORBI (CPU (h_xcc_n), CPU (h_xcc_v))) {
1845 {
1846 SI opval = GET_H_GR (f_rs2);
1847 SET_H_GR (f_rd, opval);
1848 written |= (1 << 3);
1849 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1850 }
1851 }
1852
1853 abuf->written = written;
1854 SEM_NBRANCH_FINI (vpc, 0);
1855 return status;
1856 }
1857
1858 /* movl-imm-xcc-xcc: movl-imm-xcc %xcc,$simm11,$rd */
1859
1860 SEM_STATUS
1861 SEM_FN_NAME (sparc64,movl_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1862 {
1863 SEM_STATUS status = 0;
1864 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1865 int UNUSED written = 0;
1866 IADDR UNUSED pc = GET_H_PC ();
1867 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1868 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1869 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1870
1871 if (XORBI (CPU (h_xcc_n), CPU (h_xcc_v))) {
1872 {
1873 SI opval = f_simm11;
1874 SET_H_GR (f_rd, opval);
1875 written |= (1 << 3);
1876 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1877 }
1878 }
1879
1880 abuf->written = written;
1881 SEM_NBRANCH_FINI (vpc, 0);
1882 return status;
1883 }
1884
1885 /* movgu-icc-icc: movgu-icc %icc,$rs2,$rd */
1886
1887 SEM_STATUS
1888 SEM_FN_NAME (sparc64,movgu_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1889 {
1890 SEM_STATUS status = 0;
1891 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1892 int UNUSED written = 0;
1893 IADDR UNUSED pc = GET_H_PC ();
1894 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1895 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1896 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1897
1898 if (NOTBI (ORBI (CPU (h_icc_c), CPU (h_icc_z)))) {
1899 {
1900 SI opval = GET_H_GR (f_rs2);
1901 SET_H_GR (f_rd, opval);
1902 written |= (1 << 3);
1903 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1904 }
1905 }
1906
1907 abuf->written = written;
1908 SEM_NBRANCH_FINI (vpc, 0);
1909 return status;
1910 }
1911
1912 /* movgu-imm-icc-icc: movgu-imm-icc %icc,$simm11,$rd */
1913
1914 SEM_STATUS
1915 SEM_FN_NAME (sparc64,movgu_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1916 {
1917 SEM_STATUS status = 0;
1918 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1919 int UNUSED written = 0;
1920 IADDR UNUSED pc = GET_H_PC ();
1921 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1922 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1923 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1924
1925 if (NOTBI (ORBI (CPU (h_icc_c), CPU (h_icc_z)))) {
1926 {
1927 SI opval = f_simm11;
1928 SET_H_GR (f_rd, opval);
1929 written |= (1 << 3);
1930 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1931 }
1932 }
1933
1934 abuf->written = written;
1935 SEM_NBRANCH_FINI (vpc, 0);
1936 return status;
1937 }
1938
1939 /* movgu-xcc-xcc: movgu-xcc %xcc,$rs2,$rd */
1940
1941 SEM_STATUS
1942 SEM_FN_NAME (sparc64,movgu_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1943 {
1944 SEM_STATUS status = 0;
1945 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1946 int UNUSED written = 0;
1947 IADDR UNUSED pc = GET_H_PC ();
1948 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1949 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1950 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
1951
1952 if (NOTBI (ORBI (CPU (h_xcc_c), CPU (h_xcc_z)))) {
1953 {
1954 SI opval = GET_H_GR (f_rs2);
1955 SET_H_GR (f_rd, opval);
1956 written |= (1 << 3);
1957 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1958 }
1959 }
1960
1961 abuf->written = written;
1962 SEM_NBRANCH_FINI (vpc, 0);
1963 return status;
1964 }
1965
1966 /* movgu-imm-xcc-xcc: movgu-imm-xcc %xcc,$simm11,$rd */
1967
1968 SEM_STATUS
1969 SEM_FN_NAME (sparc64,movgu_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1970 {
1971 SEM_STATUS status = 0;
1972 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1973 int UNUSED written = 0;
1974 IADDR UNUSED pc = GET_H_PC ();
1975 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1976 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
1977 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
1978
1979 if (NOTBI (ORBI (CPU (h_xcc_c), CPU (h_xcc_z)))) {
1980 {
1981 SI opval = f_simm11;
1982 SET_H_GR (f_rd, opval);
1983 written |= (1 << 3);
1984 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
1985 }
1986 }
1987
1988 abuf->written = written;
1989 SEM_NBRANCH_FINI (vpc, 0);
1990 return status;
1991 }
1992
1993 /* movleu-icc-icc: movleu-icc %icc,$rs2,$rd */
1994
1995 SEM_STATUS
1996 SEM_FN_NAME (sparc64,movleu_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
1997 {
1998 SEM_STATUS status = 0;
1999 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2000 int UNUSED written = 0;
2001 IADDR UNUSED pc = GET_H_PC ();
2002 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2003 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2004 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2005
2006 if (ORBI (CPU (h_icc_c), CPU (h_icc_z))) {
2007 {
2008 SI opval = GET_H_GR (f_rs2);
2009 SET_H_GR (f_rd, opval);
2010 written |= (1 << 3);
2011 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2012 }
2013 }
2014
2015 abuf->written = written;
2016 SEM_NBRANCH_FINI (vpc, 0);
2017 return status;
2018 }
2019
2020 /* movleu-imm-icc-icc: movleu-imm-icc %icc,$simm11,$rd */
2021
2022 SEM_STATUS
2023 SEM_FN_NAME (sparc64,movleu_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2024 {
2025 SEM_STATUS status = 0;
2026 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2027 int UNUSED written = 0;
2028 IADDR UNUSED pc = GET_H_PC ();
2029 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2030 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2031 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2032
2033 if (ORBI (CPU (h_icc_c), CPU (h_icc_z))) {
2034 {
2035 SI opval = f_simm11;
2036 SET_H_GR (f_rd, opval);
2037 written |= (1 << 3);
2038 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2039 }
2040 }
2041
2042 abuf->written = written;
2043 SEM_NBRANCH_FINI (vpc, 0);
2044 return status;
2045 }
2046
2047 /* movleu-xcc-xcc: movleu-xcc %xcc,$rs2,$rd */
2048
2049 SEM_STATUS
2050 SEM_FN_NAME (sparc64,movleu_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2051 {
2052 SEM_STATUS status = 0;
2053 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2054 int UNUSED written = 0;
2055 IADDR UNUSED pc = GET_H_PC ();
2056 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2057 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2058 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2059
2060 if (ORBI (CPU (h_xcc_c), CPU (h_xcc_z))) {
2061 {
2062 SI opval = GET_H_GR (f_rs2);
2063 SET_H_GR (f_rd, opval);
2064 written |= (1 << 3);
2065 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2066 }
2067 }
2068
2069 abuf->written = written;
2070 SEM_NBRANCH_FINI (vpc, 0);
2071 return status;
2072 }
2073
2074 /* movleu-imm-xcc-xcc: movleu-imm-xcc %xcc,$simm11,$rd */
2075
2076 SEM_STATUS
2077 SEM_FN_NAME (sparc64,movleu_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2078 {
2079 SEM_STATUS status = 0;
2080 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2081 int UNUSED written = 0;
2082 IADDR UNUSED pc = GET_H_PC ();
2083 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2084 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2085 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2086
2087 if (ORBI (CPU (h_xcc_c), CPU (h_xcc_z))) {
2088 {
2089 SI opval = f_simm11;
2090 SET_H_GR (f_rd, opval);
2091 written |= (1 << 3);
2092 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2093 }
2094 }
2095
2096 abuf->written = written;
2097 SEM_NBRANCH_FINI (vpc, 0);
2098 return status;
2099 }
2100
2101 /* movcc-icc-icc: movcc-icc %icc,$rs2,$rd */
2102
2103 SEM_STATUS
2104 SEM_FN_NAME (sparc64,movcc_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2105 {
2106 SEM_STATUS status = 0;
2107 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2108 int UNUSED written = 0;
2109 IADDR UNUSED pc = GET_H_PC ();
2110 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2111 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2112 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2113
2114 if (NOTBI (CPU (h_icc_c))) {
2115 {
2116 SI opval = GET_H_GR (f_rs2);
2117 SET_H_GR (f_rd, opval);
2118 written |= (1 << 2);
2119 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2120 }
2121 }
2122
2123 abuf->written = written;
2124 SEM_NBRANCH_FINI (vpc, 0);
2125 return status;
2126 }
2127
2128 /* movcc-imm-icc-icc: movcc-imm-icc %icc,$simm11,$rd */
2129
2130 SEM_STATUS
2131 SEM_FN_NAME (sparc64,movcc_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2132 {
2133 SEM_STATUS status = 0;
2134 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2135 int UNUSED written = 0;
2136 IADDR UNUSED pc = GET_H_PC ();
2137 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2138 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2139 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2140
2141 if (NOTBI (CPU (h_icc_c))) {
2142 {
2143 SI opval = f_simm11;
2144 SET_H_GR (f_rd, opval);
2145 written |= (1 << 2);
2146 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2147 }
2148 }
2149
2150 abuf->written = written;
2151 SEM_NBRANCH_FINI (vpc, 0);
2152 return status;
2153 }
2154
2155 /* movcc-xcc-xcc: movcc-xcc %xcc,$rs2,$rd */
2156
2157 SEM_STATUS
2158 SEM_FN_NAME (sparc64,movcc_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2159 {
2160 SEM_STATUS status = 0;
2161 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2162 int UNUSED written = 0;
2163 IADDR UNUSED pc = GET_H_PC ();
2164 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2165 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2166 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2167
2168 if (NOTBI (CPU (h_xcc_c))) {
2169 {
2170 SI opval = GET_H_GR (f_rs2);
2171 SET_H_GR (f_rd, opval);
2172 written |= (1 << 2);
2173 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2174 }
2175 }
2176
2177 abuf->written = written;
2178 SEM_NBRANCH_FINI (vpc, 0);
2179 return status;
2180 }
2181
2182 /* movcc-imm-xcc-xcc: movcc-imm-xcc %xcc,$simm11,$rd */
2183
2184 SEM_STATUS
2185 SEM_FN_NAME (sparc64,movcc_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2186 {
2187 SEM_STATUS status = 0;
2188 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2189 int UNUSED written = 0;
2190 IADDR UNUSED pc = GET_H_PC ();
2191 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2192 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2193 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2194
2195 if (NOTBI (CPU (h_xcc_c))) {
2196 {
2197 SI opval = f_simm11;
2198 SET_H_GR (f_rd, opval);
2199 written |= (1 << 2);
2200 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2201 }
2202 }
2203
2204 abuf->written = written;
2205 SEM_NBRANCH_FINI (vpc, 0);
2206 return status;
2207 }
2208
2209 /* movcs-icc-icc: movcs-icc %icc,$rs2,$rd */
2210
2211 SEM_STATUS
2212 SEM_FN_NAME (sparc64,movcs_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2213 {
2214 SEM_STATUS status = 0;
2215 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2216 int UNUSED written = 0;
2217 IADDR UNUSED pc = GET_H_PC ();
2218 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2219 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2220 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2221
2222 if (CPU (h_icc_c)) {
2223 {
2224 SI opval = GET_H_GR (f_rs2);
2225 SET_H_GR (f_rd, opval);
2226 written |= (1 << 2);
2227 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2228 }
2229 }
2230
2231 abuf->written = written;
2232 SEM_NBRANCH_FINI (vpc, 0);
2233 return status;
2234 }
2235
2236 /* movcs-imm-icc-icc: movcs-imm-icc %icc,$simm11,$rd */
2237
2238 SEM_STATUS
2239 SEM_FN_NAME (sparc64,movcs_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2240 {
2241 SEM_STATUS status = 0;
2242 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2243 int UNUSED written = 0;
2244 IADDR UNUSED pc = GET_H_PC ();
2245 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2246 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2247 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2248
2249 if (CPU (h_icc_c)) {
2250 {
2251 SI opval = f_simm11;
2252 SET_H_GR (f_rd, opval);
2253 written |= (1 << 2);
2254 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2255 }
2256 }
2257
2258 abuf->written = written;
2259 SEM_NBRANCH_FINI (vpc, 0);
2260 return status;
2261 }
2262
2263 /* movcs-xcc-xcc: movcs-xcc %xcc,$rs2,$rd */
2264
2265 SEM_STATUS
2266 SEM_FN_NAME (sparc64,movcs_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2267 {
2268 SEM_STATUS status = 0;
2269 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2270 int UNUSED written = 0;
2271 IADDR UNUSED pc = GET_H_PC ();
2272 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2273 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2274 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2275
2276 if (CPU (h_xcc_c)) {
2277 {
2278 SI opval = GET_H_GR (f_rs2);
2279 SET_H_GR (f_rd, opval);
2280 written |= (1 << 2);
2281 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2282 }
2283 }
2284
2285 abuf->written = written;
2286 SEM_NBRANCH_FINI (vpc, 0);
2287 return status;
2288 }
2289
2290 /* movcs-imm-xcc-xcc: movcs-imm-xcc %xcc,$simm11,$rd */
2291
2292 SEM_STATUS
2293 SEM_FN_NAME (sparc64,movcs_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2294 {
2295 SEM_STATUS status = 0;
2296 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2297 int UNUSED written = 0;
2298 IADDR UNUSED pc = GET_H_PC ();
2299 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2300 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2301 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2302
2303 if (CPU (h_xcc_c)) {
2304 {
2305 SI opval = f_simm11;
2306 SET_H_GR (f_rd, opval);
2307 written |= (1 << 2);
2308 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2309 }
2310 }
2311
2312 abuf->written = written;
2313 SEM_NBRANCH_FINI (vpc, 0);
2314 return status;
2315 }
2316
2317 /* movpos-icc-icc: movpos-icc %icc,$rs2,$rd */
2318
2319 SEM_STATUS
2320 SEM_FN_NAME (sparc64,movpos_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2321 {
2322 SEM_STATUS status = 0;
2323 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2324 int UNUSED written = 0;
2325 IADDR UNUSED pc = GET_H_PC ();
2326 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2327 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2328 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2329
2330 if (NOTBI (CPU (h_icc_n))) {
2331 {
2332 SI opval = GET_H_GR (f_rs2);
2333 SET_H_GR (f_rd, opval);
2334 written |= (1 << 2);
2335 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2336 }
2337 }
2338
2339 abuf->written = written;
2340 SEM_NBRANCH_FINI (vpc, 0);
2341 return status;
2342 }
2343
2344 /* movpos-imm-icc-icc: movpos-imm-icc %icc,$simm11,$rd */
2345
2346 SEM_STATUS
2347 SEM_FN_NAME (sparc64,movpos_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2348 {
2349 SEM_STATUS status = 0;
2350 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2351 int UNUSED written = 0;
2352 IADDR UNUSED pc = GET_H_PC ();
2353 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2354 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2355 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2356
2357 if (NOTBI (CPU (h_icc_n))) {
2358 {
2359 SI opval = f_simm11;
2360 SET_H_GR (f_rd, opval);
2361 written |= (1 << 2);
2362 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2363 }
2364 }
2365
2366 abuf->written = written;
2367 SEM_NBRANCH_FINI (vpc, 0);
2368 return status;
2369 }
2370
2371 /* movpos-xcc-xcc: movpos-xcc %xcc,$rs2,$rd */
2372
2373 SEM_STATUS
2374 SEM_FN_NAME (sparc64,movpos_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2375 {
2376 SEM_STATUS status = 0;
2377 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2378 int UNUSED written = 0;
2379 IADDR UNUSED pc = GET_H_PC ();
2380 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2381 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2382 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2383
2384 if (NOTBI (CPU (h_xcc_n))) {
2385 {
2386 SI opval = GET_H_GR (f_rs2);
2387 SET_H_GR (f_rd, opval);
2388 written |= (1 << 2);
2389 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2390 }
2391 }
2392
2393 abuf->written = written;
2394 SEM_NBRANCH_FINI (vpc, 0);
2395 return status;
2396 }
2397
2398 /* movpos-imm-xcc-xcc: movpos-imm-xcc %xcc,$simm11,$rd */
2399
2400 SEM_STATUS
2401 SEM_FN_NAME (sparc64,movpos_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2402 {
2403 SEM_STATUS status = 0;
2404 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2405 int UNUSED written = 0;
2406 IADDR UNUSED pc = GET_H_PC ();
2407 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2408 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2409 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2410
2411 if (NOTBI (CPU (h_xcc_n))) {
2412 {
2413 SI opval = f_simm11;
2414 SET_H_GR (f_rd, opval);
2415 written |= (1 << 2);
2416 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2417 }
2418 }
2419
2420 abuf->written = written;
2421 SEM_NBRANCH_FINI (vpc, 0);
2422 return status;
2423 }
2424
2425 /* movneg-icc-icc: movneg-icc %icc,$rs2,$rd */
2426
2427 SEM_STATUS
2428 SEM_FN_NAME (sparc64,movneg_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2429 {
2430 SEM_STATUS status = 0;
2431 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2432 int UNUSED written = 0;
2433 IADDR UNUSED pc = GET_H_PC ();
2434 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2435 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2436 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2437
2438 if (CPU (h_icc_n)) {
2439 {
2440 SI opval = GET_H_GR (f_rs2);
2441 SET_H_GR (f_rd, opval);
2442 written |= (1 << 2);
2443 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2444 }
2445 }
2446
2447 abuf->written = written;
2448 SEM_NBRANCH_FINI (vpc, 0);
2449 return status;
2450 }
2451
2452 /* movneg-imm-icc-icc: movneg-imm-icc %icc,$simm11,$rd */
2453
2454 SEM_STATUS
2455 SEM_FN_NAME (sparc64,movneg_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2456 {
2457 SEM_STATUS status = 0;
2458 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2459 int UNUSED written = 0;
2460 IADDR UNUSED pc = GET_H_PC ();
2461 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2462 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2463 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2464
2465 if (CPU (h_icc_n)) {
2466 {
2467 SI opval = f_simm11;
2468 SET_H_GR (f_rd, opval);
2469 written |= (1 << 2);
2470 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2471 }
2472 }
2473
2474 abuf->written = written;
2475 SEM_NBRANCH_FINI (vpc, 0);
2476 return status;
2477 }
2478
2479 /* movneg-xcc-xcc: movneg-xcc %xcc,$rs2,$rd */
2480
2481 SEM_STATUS
2482 SEM_FN_NAME (sparc64,movneg_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2483 {
2484 SEM_STATUS status = 0;
2485 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2486 int UNUSED written = 0;
2487 IADDR UNUSED pc = GET_H_PC ();
2488 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2489 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2490 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2491
2492 if (CPU (h_xcc_n)) {
2493 {
2494 SI opval = GET_H_GR (f_rs2);
2495 SET_H_GR (f_rd, opval);
2496 written |= (1 << 2);
2497 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2498 }
2499 }
2500
2501 abuf->written = written;
2502 SEM_NBRANCH_FINI (vpc, 0);
2503 return status;
2504 }
2505
2506 /* movneg-imm-xcc-xcc: movneg-imm-xcc %xcc,$simm11,$rd */
2507
2508 SEM_STATUS
2509 SEM_FN_NAME (sparc64,movneg_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2510 {
2511 SEM_STATUS status = 0;
2512 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2513 int UNUSED written = 0;
2514 IADDR UNUSED pc = GET_H_PC ();
2515 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2516 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2517 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2518
2519 if (CPU (h_xcc_n)) {
2520 {
2521 SI opval = f_simm11;
2522 SET_H_GR (f_rd, opval);
2523 written |= (1 << 2);
2524 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2525 }
2526 }
2527
2528 abuf->written = written;
2529 SEM_NBRANCH_FINI (vpc, 0);
2530 return status;
2531 }
2532
2533 /* movvc-icc-icc: movvc-icc %icc,$rs2,$rd */
2534
2535 SEM_STATUS
2536 SEM_FN_NAME (sparc64,movvc_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2537 {
2538 SEM_STATUS status = 0;
2539 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2540 int UNUSED written = 0;
2541 IADDR UNUSED pc = GET_H_PC ();
2542 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2543 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2544 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2545
2546 if (NOTBI (CPU (h_icc_v))) {
2547 {
2548 SI opval = GET_H_GR (f_rs2);
2549 SET_H_GR (f_rd, opval);
2550 written |= (1 << 2);
2551 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2552 }
2553 }
2554
2555 abuf->written = written;
2556 SEM_NBRANCH_FINI (vpc, 0);
2557 return status;
2558 }
2559
2560 /* movvc-imm-icc-icc: movvc-imm-icc %icc,$simm11,$rd */
2561
2562 SEM_STATUS
2563 SEM_FN_NAME (sparc64,movvc_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2564 {
2565 SEM_STATUS status = 0;
2566 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2567 int UNUSED written = 0;
2568 IADDR UNUSED pc = GET_H_PC ();
2569 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2570 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2571 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2572
2573 if (NOTBI (CPU (h_icc_v))) {
2574 {
2575 SI opval = f_simm11;
2576 SET_H_GR (f_rd, opval);
2577 written |= (1 << 2);
2578 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2579 }
2580 }
2581
2582 abuf->written = written;
2583 SEM_NBRANCH_FINI (vpc, 0);
2584 return status;
2585 }
2586
2587 /* movvc-xcc-xcc: movvc-xcc %xcc,$rs2,$rd */
2588
2589 SEM_STATUS
2590 SEM_FN_NAME (sparc64,movvc_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2591 {
2592 SEM_STATUS status = 0;
2593 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2594 int UNUSED written = 0;
2595 IADDR UNUSED pc = GET_H_PC ();
2596 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2597 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2598 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2599
2600 if (NOTBI (CPU (h_xcc_v))) {
2601 {
2602 SI opval = GET_H_GR (f_rs2);
2603 SET_H_GR (f_rd, opval);
2604 written |= (1 << 2);
2605 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2606 }
2607 }
2608
2609 abuf->written = written;
2610 SEM_NBRANCH_FINI (vpc, 0);
2611 return status;
2612 }
2613
2614 /* movvc-imm-xcc-xcc: movvc-imm-xcc %xcc,$simm11,$rd */
2615
2616 SEM_STATUS
2617 SEM_FN_NAME (sparc64,movvc_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2618 {
2619 SEM_STATUS status = 0;
2620 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2621 int UNUSED written = 0;
2622 IADDR UNUSED pc = GET_H_PC ();
2623 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2624 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2625 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2626
2627 if (NOTBI (CPU (h_xcc_v))) {
2628 {
2629 SI opval = f_simm11;
2630 SET_H_GR (f_rd, opval);
2631 written |= (1 << 2);
2632 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2633 }
2634 }
2635
2636 abuf->written = written;
2637 SEM_NBRANCH_FINI (vpc, 0);
2638 return status;
2639 }
2640
2641 /* movvs-icc-icc: movvs-icc %icc,$rs2,$rd */
2642
2643 SEM_STATUS
2644 SEM_FN_NAME (sparc64,movvs_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2645 {
2646 SEM_STATUS status = 0;
2647 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2648 int UNUSED written = 0;
2649 IADDR UNUSED pc = GET_H_PC ();
2650 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2651 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2652 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2653
2654 if (CPU (h_icc_v)) {
2655 {
2656 SI opval = GET_H_GR (f_rs2);
2657 SET_H_GR (f_rd, opval);
2658 written |= (1 << 2);
2659 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2660 }
2661 }
2662
2663 abuf->written = written;
2664 SEM_NBRANCH_FINI (vpc, 0);
2665 return status;
2666 }
2667
2668 /* movvs-imm-icc-icc: movvs-imm-icc %icc,$simm11,$rd */
2669
2670 SEM_STATUS
2671 SEM_FN_NAME (sparc64,movvs_imm_icc_icc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2672 {
2673 SEM_STATUS status = 0;
2674 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2675 int UNUSED written = 0;
2676 IADDR UNUSED pc = GET_H_PC ();
2677 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2678 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2679 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2680
2681 if (CPU (h_icc_v)) {
2682 {
2683 SI opval = f_simm11;
2684 SET_H_GR (f_rd, opval);
2685 written |= (1 << 2);
2686 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2687 }
2688 }
2689
2690 abuf->written = written;
2691 SEM_NBRANCH_FINI (vpc, 0);
2692 return status;
2693 }
2694
2695 /* movvs-xcc-xcc: movvs-xcc %xcc,$rs2,$rd */
2696
2697 SEM_STATUS
2698 SEM_FN_NAME (sparc64,movvs_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2699 {
2700 SEM_STATUS status = 0;
2701 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2702 int UNUSED written = 0;
2703 IADDR UNUSED pc = GET_H_PC ();
2704 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2705 EXTRACT_IFMT_MOVA_ICC_ICC_VARS /* f-rs2 f-fmt4-res10-6 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2706 EXTRACT_IFMT_MOVA_ICC_ICC_CODE
2707
2708 if (CPU (h_xcc_v)) {
2709 {
2710 SI opval = GET_H_GR (f_rs2);
2711 SET_H_GR (f_rd, opval);
2712 written |= (1 << 2);
2713 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2714 }
2715 }
2716
2717 abuf->written = written;
2718 SEM_NBRANCH_FINI (vpc, 0);
2719 return status;
2720 }
2721
2722 /* movvs-imm-xcc-xcc: movvs-imm-xcc %xcc,$simm11,$rd */
2723
2724 SEM_STATUS
2725 SEM_FN_NAME (sparc64,movvs_imm_xcc_xcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2726 {
2727 SEM_STATUS status = 0;
2728 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2729 int UNUSED written = 0;
2730 IADDR UNUSED pc = GET_H_PC ();
2731 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2732 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS /* f-simm11 f-fmt4-cc1-0 f-i f-fmt4-cc2 f-op3 f-fmt2-cond f-rd f-op */
2733 EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE
2734
2735 if (CPU (h_xcc_v)) {
2736 {
2737 SI opval = f_simm11;
2738 SET_H_GR (f_rd, opval);
2739 written |= (1 << 2);
2740 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2741 }
2742 }
2743
2744 abuf->written = written;
2745 SEM_NBRANCH_FINI (vpc, 0);
2746 return status;
2747 }
2748
2749 /* ldsb-reg+reg: ldsb [$rs1+$rs2],$rd */
2750
2751 SEM_STATUS
2752 SEM_FN_NAME (sparc64,ldsb_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2753 {
2754 SEM_STATUS status = 0;
2755 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2756 int UNUSED written = 0;
2757 IADDR UNUSED pc = GET_H_PC ();
2758 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2759 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2760 EXTRACT_IFMT_LDSB_REG_REG_CODE
2761
2762 {
2763 QI opval = GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
2764 SET_H_GR (f_rd, opval);
2765 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2766 }
2767
2768 SEM_NBRANCH_FINI (vpc, 0);
2769 return status;
2770 }
2771
2772 /* ldsb-reg+imm: ldsb [$rs1+$simm13],$rd */
2773
2774 SEM_STATUS
2775 SEM_FN_NAME (sparc64,ldsb_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2776 {
2777 SEM_STATUS status = 0;
2778 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2779 int UNUSED written = 0;
2780 IADDR UNUSED pc = GET_H_PC ();
2781 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2782 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2783 EXTRACT_IFMT_LDSB_REG_IMM_CODE
2784
2785 {
2786 QI opval = GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
2787 SET_H_GR (f_rd, opval);
2788 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2789 }
2790
2791 SEM_NBRANCH_FINI (vpc, 0);
2792 return status;
2793 }
2794
2795 /* ldsb-reg+reg/asi: ldsb [$rs1+$rs2]$asi,$rd */
2796
2797 SEM_STATUS
2798 SEM_FN_NAME (sparc64,ldsb_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2799 {
2800 SEM_STATUS status = 0;
2801 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2802 int UNUSED written = 0;
2803 IADDR UNUSED pc = GET_H_PC ();
2804 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2805 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
2806 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
2807
2808 {
2809 QI opval = GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
2810 SET_H_GR (f_rd, opval);
2811 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2812 }
2813
2814 SEM_NBRANCH_FINI (vpc, 0);
2815 return status;
2816 }
2817
2818 /* ldub-reg+reg: ldub [$rs1+$rs2],$rd */
2819
2820 SEM_STATUS
2821 SEM_FN_NAME (sparc64,ldub_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2822 {
2823 SEM_STATUS status = 0;
2824 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2825 int UNUSED written = 0;
2826 IADDR UNUSED pc = GET_H_PC ();
2827 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2828 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2829 EXTRACT_IFMT_LDSB_REG_REG_CODE
2830
2831 {
2832 QI opval = GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
2833 SET_H_GR (f_rd, opval);
2834 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2835 }
2836
2837 SEM_NBRANCH_FINI (vpc, 0);
2838 return status;
2839 }
2840
2841 /* ldub-reg+imm: ldub [$rs1+$simm13],$rd */
2842
2843 SEM_STATUS
2844 SEM_FN_NAME (sparc64,ldub_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2845 {
2846 SEM_STATUS status = 0;
2847 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2848 int UNUSED written = 0;
2849 IADDR UNUSED pc = GET_H_PC ();
2850 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2851 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2852 EXTRACT_IFMT_LDSB_REG_IMM_CODE
2853
2854 {
2855 QI opval = GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
2856 SET_H_GR (f_rd, opval);
2857 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2858 }
2859
2860 SEM_NBRANCH_FINI (vpc, 0);
2861 return status;
2862 }
2863
2864 /* ldub-reg+reg/asi: ldub [$rs1+$rs2]$asi,$rd */
2865
2866 SEM_STATUS
2867 SEM_FN_NAME (sparc64,ldub_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2868 {
2869 SEM_STATUS status = 0;
2870 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2871 int UNUSED written = 0;
2872 IADDR UNUSED pc = GET_H_PC ();
2873 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2874 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
2875 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
2876
2877 {
2878 QI opval = GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
2879 SET_H_GR (f_rd, opval);
2880 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2881 }
2882
2883 SEM_NBRANCH_FINI (vpc, 0);
2884 return status;
2885 }
2886
2887 /* ldsh-reg+reg: ldsh [$rs1+$rs2],$rd */
2888
2889 SEM_STATUS
2890 SEM_FN_NAME (sparc64,ldsh_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2891 {
2892 SEM_STATUS status = 0;
2893 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2894 int UNUSED written = 0;
2895 IADDR UNUSED pc = GET_H_PC ();
2896 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2897 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2898 EXTRACT_IFMT_LDSB_REG_REG_CODE
2899
2900 {
2901 HI opval = GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
2902 SET_H_GR (f_rd, opval);
2903 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2904 }
2905
2906 SEM_NBRANCH_FINI (vpc, 0);
2907 return status;
2908 }
2909
2910 /* ldsh-reg+imm: ldsh [$rs1+$simm13],$rd */
2911
2912 SEM_STATUS
2913 SEM_FN_NAME (sparc64,ldsh_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2914 {
2915 SEM_STATUS status = 0;
2916 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2917 int UNUSED written = 0;
2918 IADDR UNUSED pc = GET_H_PC ();
2919 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2920 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2921 EXTRACT_IFMT_LDSB_REG_IMM_CODE
2922
2923 {
2924 HI opval = GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
2925 SET_H_GR (f_rd, opval);
2926 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2927 }
2928
2929 SEM_NBRANCH_FINI (vpc, 0);
2930 return status;
2931 }
2932
2933 /* ldsh-reg+reg/asi: ldsh [$rs1+$rs2]$asi,$rd */
2934
2935 SEM_STATUS
2936 SEM_FN_NAME (sparc64,ldsh_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2937 {
2938 SEM_STATUS status = 0;
2939 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2940 int UNUSED written = 0;
2941 IADDR UNUSED pc = GET_H_PC ();
2942 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2943 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
2944 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
2945
2946 {
2947 HI opval = GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
2948 SET_H_GR (f_rd, opval);
2949 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2950 }
2951
2952 SEM_NBRANCH_FINI (vpc, 0);
2953 return status;
2954 }
2955
2956 /* lduh-reg+reg: lduh [$rs1+$rs2],$rd */
2957
2958 SEM_STATUS
2959 SEM_FN_NAME (sparc64,lduh_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2960 {
2961 SEM_STATUS status = 0;
2962 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2963 int UNUSED written = 0;
2964 IADDR UNUSED pc = GET_H_PC ();
2965 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2966 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2967 EXTRACT_IFMT_LDSB_REG_REG_CODE
2968
2969 {
2970 HI opval = GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
2971 SET_H_GR (f_rd, opval);
2972 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2973 }
2974
2975 SEM_NBRANCH_FINI (vpc, 0);
2976 return status;
2977 }
2978
2979 /* lduh-reg+imm: lduh [$rs1+$simm13],$rd */
2980
2981 SEM_STATUS
2982 SEM_FN_NAME (sparc64,lduh_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
2983 {
2984 SEM_STATUS status = 0;
2985 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2986 int UNUSED written = 0;
2987 IADDR UNUSED pc = GET_H_PC ();
2988 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2989 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2990 EXTRACT_IFMT_LDSB_REG_IMM_CODE
2991
2992 {
2993 HI opval = GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
2994 SET_H_GR (f_rd, opval);
2995 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
2996 }
2997
2998 SEM_NBRANCH_FINI (vpc, 0);
2999 return status;
3000 }
3001
3002 /* lduh-reg+reg/asi: lduh [$rs1+$rs2]$asi,$rd */
3003
3004 SEM_STATUS
3005 SEM_FN_NAME (sparc64,lduh_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3006 {
3007 SEM_STATUS status = 0;
3008 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3009 int UNUSED written = 0;
3010 IADDR UNUSED pc = GET_H_PC ();
3011 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3012 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3013 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
3014
3015 {
3016 HI opval = GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3017 SET_H_GR (f_rd, opval);
3018 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3019 }
3020
3021 SEM_NBRANCH_FINI (vpc, 0);
3022 return status;
3023 }
3024
3025 /* ldsw-reg+reg: ldsw [$rs1+$rs2],$rd */
3026
3027 SEM_STATUS
3028 SEM_FN_NAME (sparc64,ldsw_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3029 {
3030 SEM_STATUS status = 0;
3031 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3032 int UNUSED written = 0;
3033 IADDR UNUSED pc = GET_H_PC ();
3034 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3035 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3036 EXTRACT_IFMT_LDSB_REG_REG_CODE
3037
3038 {
3039 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3040 SET_H_GR (f_rd, opval);
3041 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3042 }
3043
3044 SEM_NBRANCH_FINI (vpc, 0);
3045 return status;
3046 }
3047
3048 /* ldsw-reg+imm: ldsw [$rs1+$simm13],$rd */
3049
3050 SEM_STATUS
3051 SEM_FN_NAME (sparc64,ldsw_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3052 {
3053 SEM_STATUS status = 0;
3054 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3055 int UNUSED written = 0;
3056 IADDR UNUSED pc = GET_H_PC ();
3057 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3058 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3059 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3060
3061 {
3062 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
3063 SET_H_GR (f_rd, opval);
3064 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3065 }
3066
3067 SEM_NBRANCH_FINI (vpc, 0);
3068 return status;
3069 }
3070
3071 /* ldsw-reg+reg/asi: ldsw [$rs1+$rs2]$asi,$rd */
3072
3073 SEM_STATUS
3074 SEM_FN_NAME (sparc64,ldsw_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3075 {
3076 SEM_STATUS status = 0;
3077 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3078 int UNUSED written = 0;
3079 IADDR UNUSED pc = GET_H_PC ();
3080 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3081 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3082 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
3083
3084 {
3085 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3086 SET_H_GR (f_rd, opval);
3087 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3088 }
3089
3090 SEM_NBRANCH_FINI (vpc, 0);
3091 return status;
3092 }
3093
3094 /* lduw-reg+reg: lduw [$rs1+$rs2],$rd */
3095
3096 SEM_STATUS
3097 SEM_FN_NAME (sparc64,lduw_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3098 {
3099 SEM_STATUS status = 0;
3100 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3101 int UNUSED written = 0;
3102 IADDR UNUSED pc = GET_H_PC ();
3103 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3104 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3105 EXTRACT_IFMT_LDSB_REG_REG_CODE
3106
3107 {
3108 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3109 SET_H_GR (f_rd, opval);
3110 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3111 }
3112
3113 SEM_NBRANCH_FINI (vpc, 0);
3114 return status;
3115 }
3116
3117 /* lduw-reg+imm: lduw [$rs1+$simm13],$rd */
3118
3119 SEM_STATUS
3120 SEM_FN_NAME (sparc64,lduw_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3121 {
3122 SEM_STATUS status = 0;
3123 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3124 int UNUSED written = 0;
3125 IADDR UNUSED pc = GET_H_PC ();
3126 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3127 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3128 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3129
3130 {
3131 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
3132 SET_H_GR (f_rd, opval);
3133 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3134 }
3135
3136 SEM_NBRANCH_FINI (vpc, 0);
3137 return status;
3138 }
3139
3140 /* lduw-reg+reg/asi: lduw [$rs1+$rs2]$asi,$rd */
3141
3142 SEM_STATUS
3143 SEM_FN_NAME (sparc64,lduw_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3144 {
3145 SEM_STATUS status = 0;
3146 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3147 int UNUSED written = 0;
3148 IADDR UNUSED pc = GET_H_PC ();
3149 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3150 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3151 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
3152
3153 {
3154 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3155 SET_H_GR (f_rd, opval);
3156 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3157 }
3158
3159 SEM_NBRANCH_FINI (vpc, 0);
3160 return status;
3161 }
3162
3163 /* ldx-reg+reg: ldx [$rs1+$rs2],$rd */
3164
3165 SEM_STATUS
3166 SEM_FN_NAME (sparc64,ldx_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3167 {
3168 SEM_STATUS status = 0;
3169 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3170 int UNUSED written = 0;
3171 IADDR UNUSED pc = GET_H_PC ();
3172 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3173 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3174 EXTRACT_IFMT_LDSB_REG_REG_CODE
3175
3176 {
3177 DI opval = GETMEMDI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3178 SET_H_GR (f_rd, opval);
3179 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3180 }
3181
3182 SEM_NBRANCH_FINI (vpc, 0);
3183 return status;
3184 }
3185
3186 /* ldx-reg+imm: ldx [$rs1+$simm13],$rd */
3187
3188 SEM_STATUS
3189 SEM_FN_NAME (sparc64,ldx_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3190 {
3191 SEM_STATUS status = 0;
3192 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3193 int UNUSED written = 0;
3194 IADDR UNUSED pc = GET_H_PC ();
3195 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3196 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3197 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3198
3199 {
3200 DI opval = GETMEMDI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
3201 SET_H_GR (f_rd, opval);
3202 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3203 }
3204
3205 SEM_NBRANCH_FINI (vpc, 0);
3206 return status;
3207 }
3208
3209 /* ldx-reg+reg/asi: ldx [$rs1+$rs2]$asi,$rd */
3210
3211 SEM_STATUS
3212 SEM_FN_NAME (sparc64,ldx_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3213 {
3214 SEM_STATUS status = 0;
3215 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3216 int UNUSED written = 0;
3217 IADDR UNUSED pc = GET_H_PC ();
3218 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3219 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3220 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
3221
3222 {
3223 DI opval = GETMEMDI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3224 SET_H_GR (f_rd, opval);
3225 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3226 }
3227
3228 SEM_NBRANCH_FINI (vpc, 0);
3229 return status;
3230 }
3231
3232 /* ldd-reg+reg: ldd [$rs1+$rs2],$rdd */
3233
3234 SEM_STATUS
3235 SEM_FN_NAME (sparc64,ldd_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3236 {
3237 SEM_STATUS status = 0;
3238 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3239 int UNUSED written = 0;
3240 IADDR UNUSED pc = GET_H_PC ();
3241 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3242 EXTRACT_IFMT_LDD_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3243 EXTRACT_IFMT_LDD_REG_REG_CODE
3244
3245 do {
3246 {
3247 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3248 SET_H_GR (f_rd, opval);
3249 TRACE_RESULT (current_cpu, abuf, "rdd", 'x', opval);
3250 }
3251 {
3252 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), ADDSI (GET_H_GR (f_rs2), 4)));
3253 SET_H_GR (((f_rd) + (1)), opval);
3254 TRACE_RESULT (current_cpu, abuf, "gr-add:-VM-regno-rdd-const:-WI-1", 'x', opval);
3255 }
3256 } while (0);
3257
3258 SEM_NBRANCH_FINI (vpc, 0);
3259 return status;
3260 }
3261
3262 /* ldd-reg+imm: ldd [$rs1+$simm13],$rdd */
3263
3264 SEM_STATUS
3265 SEM_FN_NAME (sparc64,ldd_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3266 {
3267 SEM_STATUS status = 0;
3268 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3269 int UNUSED written = 0;
3270 IADDR UNUSED pc = GET_H_PC ();
3271 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3272 EXTRACT_IFMT_LDD_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3273 EXTRACT_IFMT_LDD_REG_IMM_CODE
3274
3275 do {
3276 {
3277 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
3278 SET_H_GR (f_rd, opval);
3279 TRACE_RESULT (current_cpu, abuf, "rdd", 'x', opval);
3280 }
3281 {
3282 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), ADDHI (f_simm13, 4)));
3283 SET_H_GR (((f_rd) + (1)), opval);
3284 TRACE_RESULT (current_cpu, abuf, "gr-add:-VM-regno-rdd-const:-WI-1", 'x', opval);
3285 }
3286 } while (0);
3287
3288 SEM_NBRANCH_FINI (vpc, 0);
3289 return status;
3290 }
3291
3292 /* ldd-reg+reg/asi: ldd [$rs1+$rs2]$asi,$rdd */
3293
3294 SEM_STATUS
3295 SEM_FN_NAME (sparc64,ldd_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3296 {
3297 SEM_STATUS status = 0;
3298 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3299 int UNUSED written = 0;
3300 IADDR UNUSED pc = GET_H_PC ();
3301 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3302 EXTRACT_IFMT_LDD_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3303 EXTRACT_IFMT_LDD_REG_REG_ASI_CODE
3304
3305 do {
3306 {
3307 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3308 SET_H_GR (f_rd, opval);
3309 TRACE_RESULT (current_cpu, abuf, "rdd", 'x', opval);
3310 }
3311 {
3312 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), ADDSI (GET_H_GR (f_rs2), 4)));
3313 SET_H_GR (((f_rd) + (1)), opval);
3314 TRACE_RESULT (current_cpu, abuf, "gr-add:-VM-regno-rdd-const:-WI-1", 'x', opval);
3315 }
3316 } while (0);
3317
3318 SEM_NBRANCH_FINI (vpc, 0);
3319 return status;
3320 }
3321
3322 /* stb-reg+reg: stb $rd,[$rs1+$rs2] */
3323
3324 SEM_STATUS
3325 SEM_FN_NAME (sparc64,stb_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3326 {
3327 SEM_STATUS status = 0;
3328 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3329 int UNUSED written = 0;
3330 IADDR UNUSED pc = GET_H_PC ();
3331 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3332 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3333 EXTRACT_IFMT_LDSB_REG_REG_CODE
3334
3335 {
3336 QI opval = GET_H_GR (f_rd);
3337 SETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3338 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3339 }
3340
3341 SEM_NBRANCH_FINI (vpc, 0);
3342 return status;
3343 }
3344
3345 /* stb-reg+imm: stb $rd,[$rs1+$simm13] */
3346
3347 SEM_STATUS
3348 SEM_FN_NAME (sparc64,stb_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3349 {
3350 SEM_STATUS status = 0;
3351 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3352 int UNUSED written = 0;
3353 IADDR UNUSED pc = GET_H_PC ();
3354 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3355 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3356 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3357
3358 {
3359 QI opval = GET_H_GR (f_rd);
3360 SETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13), opval);
3361 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3362 }
3363
3364 SEM_NBRANCH_FINI (vpc, 0);
3365 return status;
3366 }
3367
3368 /* stb-reg+reg/asi: stb $rd,[$rs1+$rs2]$asi */
3369
3370 SEM_STATUS
3371 SEM_FN_NAME (sparc64,stb_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3372 {
3373 SEM_STATUS status = 0;
3374 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3375 int UNUSED written = 0;
3376 IADDR UNUSED pc = GET_H_PC ();
3377 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3378 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3379 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
3380
3381 {
3382 QI opval = GET_H_GR (f_rd);
3383 SETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3384 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3385 }
3386
3387 SEM_NBRANCH_FINI (vpc, 0);
3388 return status;
3389 }
3390
3391 /* sth-reg+reg: sth $rd,[$rs1+$rs2] */
3392
3393 SEM_STATUS
3394 SEM_FN_NAME (sparc64,sth_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3395 {
3396 SEM_STATUS status = 0;
3397 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3398 int UNUSED written = 0;
3399 IADDR UNUSED pc = GET_H_PC ();
3400 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3401 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3402 EXTRACT_IFMT_LDSB_REG_REG_CODE
3403
3404 {
3405 HI opval = GET_H_GR (f_rd);
3406 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3407 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3408 }
3409
3410 SEM_NBRANCH_FINI (vpc, 0);
3411 return status;
3412 }
3413
3414 /* sth-reg+imm: sth $rd,[$rs1+$simm13] */
3415
3416 SEM_STATUS
3417 SEM_FN_NAME (sparc64,sth_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3418 {
3419 SEM_STATUS status = 0;
3420 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3421 int UNUSED written = 0;
3422 IADDR UNUSED pc = GET_H_PC ();
3423 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3424 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3425 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3426
3427 {
3428 HI opval = GET_H_GR (f_rd);
3429 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13), opval);
3430 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3431 }
3432
3433 SEM_NBRANCH_FINI (vpc, 0);
3434 return status;
3435 }
3436
3437 /* sth-reg+reg/asi: sth $rd,[$rs1+$rs2]$asi */
3438
3439 SEM_STATUS
3440 SEM_FN_NAME (sparc64,sth_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3441 {
3442 SEM_STATUS status = 0;
3443 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3444 int UNUSED written = 0;
3445 IADDR UNUSED pc = GET_H_PC ();
3446 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3447 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3448 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
3449
3450 {
3451 HI opval = GET_H_GR (f_rd);
3452 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3453 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3454 }
3455
3456 SEM_NBRANCH_FINI (vpc, 0);
3457 return status;
3458 }
3459
3460 /* st-reg+reg: st $rd,[$rs1+$rs2] */
3461
3462 SEM_STATUS
3463 SEM_FN_NAME (sparc64,st_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3464 {
3465 SEM_STATUS status = 0;
3466 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3467 int UNUSED written = 0;
3468 IADDR UNUSED pc = GET_H_PC ();
3469 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3470 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3471 EXTRACT_IFMT_LDSB_REG_REG_CODE
3472
3473 {
3474 SI opval = GET_H_GR (f_rd);
3475 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3476 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3477 }
3478
3479 SEM_NBRANCH_FINI (vpc, 0);
3480 return status;
3481 }
3482
3483 /* st-reg+imm: st $rd,[$rs1+$simm13] */
3484
3485 SEM_STATUS
3486 SEM_FN_NAME (sparc64,st_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3487 {
3488 SEM_STATUS status = 0;
3489 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3490 int UNUSED written = 0;
3491 IADDR UNUSED pc = GET_H_PC ();
3492 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3493 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3494 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3495
3496 {
3497 SI opval = GET_H_GR (f_rd);
3498 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13), opval);
3499 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3500 }
3501
3502 SEM_NBRANCH_FINI (vpc, 0);
3503 return status;
3504 }
3505
3506 /* st-reg+reg/asi: st $rd,[$rs1+$rs2]$asi */
3507
3508 SEM_STATUS
3509 SEM_FN_NAME (sparc64,st_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3510 {
3511 SEM_STATUS status = 0;
3512 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3513 int UNUSED written = 0;
3514 IADDR UNUSED pc = GET_H_PC ();
3515 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3516 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3517 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
3518
3519 {
3520 SI opval = GET_H_GR (f_rd);
3521 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3522 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3523 }
3524
3525 SEM_NBRANCH_FINI (vpc, 0);
3526 return status;
3527 }
3528
3529 /* stx-reg+reg: stx $rd,[$rs1+$rs2] */
3530
3531 SEM_STATUS
3532 SEM_FN_NAME (sparc64,stx_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3533 {
3534 SEM_STATUS status = 0;
3535 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3536 int UNUSED written = 0;
3537 IADDR UNUSED pc = GET_H_PC ();
3538 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3539 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3540 EXTRACT_IFMT_LDSB_REG_REG_CODE
3541
3542 {
3543 DI opval = GET_H_GR (f_rd);
3544 SETMEMDI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3545 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
3546 }
3547
3548 SEM_NBRANCH_FINI (vpc, 0);
3549 return status;
3550 }
3551
3552 /* stx-reg+imm: stx $rd,[$rs1+$simm13] */
3553
3554 SEM_STATUS
3555 SEM_FN_NAME (sparc64,stx_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3556 {
3557 SEM_STATUS status = 0;
3558 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3559 int UNUSED written = 0;
3560 IADDR UNUSED pc = GET_H_PC ();
3561 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3562 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3563 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3564
3565 {
3566 DI opval = GET_H_GR (f_rd);
3567 SETMEMDI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13), opval);
3568 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
3569 }
3570
3571 SEM_NBRANCH_FINI (vpc, 0);
3572 return status;
3573 }
3574
3575 /* stx-reg+reg/asi: stx $rd,[$rs1+$rs2]$asi */
3576
3577 SEM_STATUS
3578 SEM_FN_NAME (sparc64,stx_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3579 {
3580 SEM_STATUS status = 0;
3581 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3582 int UNUSED written = 0;
3583 IADDR UNUSED pc = GET_H_PC ();
3584 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3585 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3586 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
3587
3588 {
3589 DI opval = GET_H_GR (f_rd);
3590 SETMEMDI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3591 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
3592 }
3593
3594 SEM_NBRANCH_FINI (vpc, 0);
3595 return status;
3596 }
3597
3598 /* std-reg+reg: std $rdd,[$rs1+$rs2] */
3599
3600 SEM_STATUS
3601 SEM_FN_NAME (sparc64,std_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3602 {
3603 SEM_STATUS status = 0;
3604 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3605 int UNUSED written = 0;
3606 IADDR UNUSED pc = GET_H_PC ();
3607 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3608 EXTRACT_IFMT_LDD_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3609 EXTRACT_IFMT_LDD_REG_REG_CODE
3610
3611 do {
3612 {
3613 SI opval = GET_H_GR (f_rd);
3614 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3615 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3616 }
3617 {
3618 SI opval = GET_H_GR (((f_rd) + (1)));
3619 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), ADDSI (GET_H_GR (f_rs2), 4)), opval);
3620 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3621 }
3622 } while (0);
3623
3624 SEM_NBRANCH_FINI (vpc, 0);
3625 return status;
3626 }
3627
3628 /* std-reg+imm: std $rdd,[$rs1+$simm13] */
3629
3630 SEM_STATUS
3631 SEM_FN_NAME (sparc64,std_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3632 {
3633 SEM_STATUS status = 0;
3634 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3635 int UNUSED written = 0;
3636 IADDR UNUSED pc = GET_H_PC ();
3637 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3638 EXTRACT_IFMT_LDD_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3639 EXTRACT_IFMT_LDD_REG_IMM_CODE
3640
3641 do {
3642 {
3643 SI opval = GET_H_GR (f_rd);
3644 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13), opval);
3645 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3646 }
3647 {
3648 SI opval = GET_H_GR (((f_rd) + (1)));
3649 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), ADDHI (f_simm13, 4)), opval);
3650 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3651 }
3652 } while (0);
3653
3654 SEM_NBRANCH_FINI (vpc, 0);
3655 return status;
3656 }
3657
3658 /* std-reg+reg/asi: std $rdd,[$rs1+$rs2]$asi */
3659
3660 SEM_STATUS
3661 SEM_FN_NAME (sparc64,std_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3662 {
3663 SEM_STATUS status = 0;
3664 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3665 int UNUSED written = 0;
3666 IADDR UNUSED pc = GET_H_PC ();
3667 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3668 EXTRACT_IFMT_LDD_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3669 EXTRACT_IFMT_LDD_REG_REG_ASI_CODE
3670
3671 do {
3672 {
3673 SI opval = GET_H_GR (f_rd);
3674 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), opval);
3675 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3676 }
3677 {
3678 SI opval = GET_H_GR (((f_rd) + (1)));
3679 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), ADDSI (GET_H_GR (f_rs2), 4)), opval);
3680 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3681 }
3682 } while (0);
3683
3684 SEM_NBRANCH_FINI (vpc, 0);
3685 return status;
3686 }
3687
3688 /* fp-ld-reg+reg: ld [$rs1+$rs2],$frd */
3689
3690 SEM_STATUS
3691 SEM_FN_NAME (sparc64,fp_ld_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3692 {
3693 SEM_STATUS status = 0;
3694 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3695 int UNUSED written = 0;
3696 IADDR UNUSED pc = GET_H_PC ();
3697 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3698 EXTRACT_IFMT_FP_LD_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3699 EXTRACT_IFMT_FP_LD_REG_REG_CODE
3700
3701 do {
3702 sparc64_hw_trap (current_cpu, pc, TRAP32_FP_DIS);
3703 {
3704 SF opval = GETMEMSF (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3705 CPU (h_fr[f_rd]) = opval;
3706 TRACE_RESULT (current_cpu, abuf, "frd", 'f', opval);
3707 }
3708 } while (0);
3709
3710 SEM_NBRANCH_FINI (vpc, 0);
3711 return status;
3712 }
3713
3714 /* fp-ld-reg+imm: ld [$rs1+$simm13],$frd */
3715
3716 SEM_STATUS
3717 SEM_FN_NAME (sparc64,fp_ld_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3718 {
3719 SEM_STATUS status = 0;
3720 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3721 int UNUSED written = 0;
3722 IADDR UNUSED pc = GET_H_PC ();
3723 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3724 EXTRACT_IFMT_FP_LD_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3725 EXTRACT_IFMT_FP_LD_REG_IMM_CODE
3726
3727 do {
3728 sparc64_hw_trap (current_cpu, pc, TRAP32_FP_DIS);
3729 {
3730 SF opval = GETMEMSF (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), f_simm13));
3731 CPU (h_fr[f_rd]) = opval;
3732 TRACE_RESULT (current_cpu, abuf, "frd", 'f', opval);
3733 }
3734 } while (0);
3735
3736 SEM_NBRANCH_FINI (vpc, 0);
3737 return status;
3738 }
3739
3740 /* fp-ld-reg+reg/asi: ld [$rs1+$rs2]$asi,$frd */
3741
3742 SEM_STATUS
3743 SEM_FN_NAME (sparc64,fp_ld_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3744 {
3745 SEM_STATUS status = 0;
3746 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3747 int UNUSED written = 0;
3748 IADDR UNUSED pc = GET_H_PC ();
3749 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3750 EXTRACT_IFMT_FP_LD_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
3751 EXTRACT_IFMT_FP_LD_REG_REG_ASI_CODE
3752
3753 do {
3754 sparc64_hw_trap (current_cpu, pc, TRAP32_FP_DIS);
3755 {
3756 SF opval = GETMEMSF (current_cpu, pc, ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)));
3757 CPU (h_fr[f_rd]) = opval;
3758 TRACE_RESULT (current_cpu, abuf, "frd", 'f', opval);
3759 }
3760 } while (0);
3761
3762 SEM_NBRANCH_FINI (vpc, 0);
3763 return status;
3764 }
3765
3766 /* sethi: sethi $hi22,$rd */
3767
3768 SEM_STATUS
3769 SEM_FN_NAME (sparc64,sethi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3770 {
3771 SEM_STATUS status = 0;
3772 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3773 int UNUSED written = 0;
3774 IADDR UNUSED pc = GET_H_PC ();
3775 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3776 EXTRACT_IFMT_SETHI_VARS /* f-hi22 f-op2 f-rd f-op */
3777 EXTRACT_IFMT_SETHI_CODE
3778
3779 {
3780 SI opval = SLLSI (f_hi22, 10);
3781 SET_H_GR (f_rd, opval);
3782 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3783 }
3784
3785 SEM_NBRANCH_FINI (vpc, 0);
3786 return status;
3787 }
3788
3789 /* add: add $rs1,$rs2,$rd */
3790
3791 SEM_STATUS
3792 SEM_FN_NAME (sparc64,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3793 {
3794 SEM_STATUS status = 0;
3795 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3796 int UNUSED written = 0;
3797 IADDR UNUSED pc = GET_H_PC ();
3798 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3799 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3800 EXTRACT_IFMT_LDSB_REG_REG_CODE
3801
3802 {
3803 SI opval = ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
3804 SET_H_GR (f_rd, opval);
3805 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3806 }
3807
3808 SEM_NBRANCH_FINI (vpc, 0);
3809 return status;
3810 }
3811
3812 /* add-imm: add $rs1,$simm13,$rd */
3813
3814 SEM_STATUS
3815 SEM_FN_NAME (sparc64,add_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3816 {
3817 SEM_STATUS status = 0;
3818 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3819 int UNUSED written = 0;
3820 IADDR UNUSED pc = GET_H_PC ();
3821 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3822 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3823 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3824
3825 {
3826 SI opval = ADDSI (GET_H_GR (f_rs1), f_simm13);
3827 SET_H_GR (f_rd, opval);
3828 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3829 }
3830
3831 SEM_NBRANCH_FINI (vpc, 0);
3832 return status;
3833 }
3834
3835 /* sub: sub $rs1,$rs2,$rd */
3836
3837 SEM_STATUS
3838 SEM_FN_NAME (sparc64,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3839 {
3840 SEM_STATUS status = 0;
3841 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3842 int UNUSED written = 0;
3843 IADDR UNUSED pc = GET_H_PC ();
3844 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3845 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3846 EXTRACT_IFMT_LDSB_REG_REG_CODE
3847
3848 {
3849 SI opval = SUBSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
3850 SET_H_GR (f_rd, opval);
3851 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3852 }
3853
3854 SEM_NBRANCH_FINI (vpc, 0);
3855 return status;
3856 }
3857
3858 /* sub-imm: sub $rs1,$simm13,$rd */
3859
3860 SEM_STATUS
3861 SEM_FN_NAME (sparc64,sub_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3862 {
3863 SEM_STATUS status = 0;
3864 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3865 int UNUSED written = 0;
3866 IADDR UNUSED pc = GET_H_PC ();
3867 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3868 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3869 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3870
3871 {
3872 SI opval = SUBSI (GET_H_GR (f_rs1), f_simm13);
3873 SET_H_GR (f_rd, opval);
3874 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3875 }
3876
3877 SEM_NBRANCH_FINI (vpc, 0);
3878 return status;
3879 }
3880
3881 /* addcc: addcc $rs1,$rs2,$rd */
3882
3883 SEM_STATUS
3884 SEM_FN_NAME (sparc64,addcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3885 {
3886 SEM_STATUS status = 0;
3887 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3888 int UNUSED written = 0;
3889 IADDR UNUSED pc = GET_H_PC ();
3890 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3891 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3892 EXTRACT_IFMT_LDSB_REG_REG_CODE
3893
3894 do {
3895 do {
3896 SI tmp_x;
3897 tmp_x = ADDCSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), 0);
3898 {
3899 BI opval = ADDCFSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), 0);
3900 CPU (h_icc_c) = opval;
3901 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
3902 }
3903 {
3904 BI opval = ADDOFSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), 0);
3905 CPU (h_icc_v) = opval;
3906 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
3907 }
3908 {
3909 BI opval = LTSI (tmp_x, 0);
3910 CPU (h_icc_n) = opval;
3911 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
3912 }
3913 {
3914 BI opval = EQSI (tmp_x, 0);
3915 CPU (h_icc_z) = opval;
3916 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
3917 }
3918 } while (0);
3919 {
3920 SI opval = ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
3921 SET_H_GR (f_rd, opval);
3922 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3923 }
3924 } while (0);
3925
3926 SEM_NBRANCH_FINI (vpc, 0);
3927 return status;
3928 }
3929
3930 /* addcc-imm: addcc $rs1,$simm13,$rd */
3931
3932 SEM_STATUS
3933 SEM_FN_NAME (sparc64,addcc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3934 {
3935 SEM_STATUS status = 0;
3936 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3937 int UNUSED written = 0;
3938 IADDR UNUSED pc = GET_H_PC ();
3939 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3940 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3941 EXTRACT_IFMT_LDSB_REG_IMM_CODE
3942
3943 do {
3944 do {
3945 SI tmp_x;
3946 tmp_x = ADDCSI (GET_H_GR (f_rs1), f_simm13, 0);
3947 {
3948 BI opval = ADDCFSI (GET_H_GR (f_rs1), f_simm13, 0);
3949 CPU (h_icc_c) = opval;
3950 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
3951 }
3952 {
3953 BI opval = ADDOFSI (GET_H_GR (f_rs1), f_simm13, 0);
3954 CPU (h_icc_v) = opval;
3955 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
3956 }
3957 {
3958 BI opval = LTSI (tmp_x, 0);
3959 CPU (h_icc_n) = opval;
3960 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
3961 }
3962 {
3963 BI opval = EQSI (tmp_x, 0);
3964 CPU (h_icc_z) = opval;
3965 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
3966 }
3967 } while (0);
3968 {
3969 SI opval = ADDSI (GET_H_GR (f_rs1), f_simm13);
3970 SET_H_GR (f_rd, opval);
3971 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
3972 }
3973 } while (0);
3974
3975 SEM_NBRANCH_FINI (vpc, 0);
3976 return status;
3977 }
3978
3979 /* subcc: subcc $rs1,$rs2,$rd */
3980
3981 SEM_STATUS
3982 SEM_FN_NAME (sparc64,subcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
3983 {
3984 SEM_STATUS status = 0;
3985 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3986 int UNUSED written = 0;
3987 IADDR UNUSED pc = GET_H_PC ();
3988 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3989 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3990 EXTRACT_IFMT_LDSB_REG_REG_CODE
3991
3992 do {
3993 do {
3994 SI tmp_x;
3995 tmp_x = SUBCSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), 0);
3996 {
3997 BI opval = SUBCFSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), 0);
3998 CPU (h_icc_c) = opval;
3999 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4000 }
4001 {
4002 BI opval = SUBOFSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), 0);
4003 CPU (h_icc_v) = opval;
4004 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4005 }
4006 {
4007 BI opval = LTSI (tmp_x, 0);
4008 CPU (h_icc_n) = opval;
4009 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4010 }
4011 {
4012 BI opval = EQSI (tmp_x, 0);
4013 CPU (h_icc_z) = opval;
4014 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4015 }
4016 } while (0);
4017 {
4018 SI opval = SUBSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
4019 SET_H_GR (f_rd, opval);
4020 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4021 }
4022 } while (0);
4023
4024 SEM_NBRANCH_FINI (vpc, 0);
4025 return status;
4026 }
4027
4028 /* subcc-imm: subcc $rs1,$simm13,$rd */
4029
4030 SEM_STATUS
4031 SEM_FN_NAME (sparc64,subcc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4032 {
4033 SEM_STATUS status = 0;
4034 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4035 int UNUSED written = 0;
4036 IADDR UNUSED pc = GET_H_PC ();
4037 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4038 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4039 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4040
4041 do {
4042 do {
4043 SI tmp_x;
4044 tmp_x = SUBCSI (GET_H_GR (f_rs1), f_simm13, 0);
4045 {
4046 BI opval = SUBCFSI (GET_H_GR (f_rs1), f_simm13, 0);
4047 CPU (h_icc_c) = opval;
4048 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4049 }
4050 {
4051 BI opval = SUBOFSI (GET_H_GR (f_rs1), f_simm13, 0);
4052 CPU (h_icc_v) = opval;
4053 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4054 }
4055 {
4056 BI opval = LTSI (tmp_x, 0);
4057 CPU (h_icc_n) = opval;
4058 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4059 }
4060 {
4061 BI opval = EQSI (tmp_x, 0);
4062 CPU (h_icc_z) = opval;
4063 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4064 }
4065 } while (0);
4066 {
4067 SI opval = SUBSI (GET_H_GR (f_rs1), f_simm13);
4068 SET_H_GR (f_rd, opval);
4069 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4070 }
4071 } while (0);
4072
4073 SEM_NBRANCH_FINI (vpc, 0);
4074 return status;
4075 }
4076
4077 /* addc: addc $rs1,$rs2,$rd */
4078
4079 SEM_STATUS
4080 SEM_FN_NAME (sparc64,addc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4081 {
4082 SEM_STATUS status = 0;
4083 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4084 int UNUSED written = 0;
4085 IADDR UNUSED pc = GET_H_PC ();
4086 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4087 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4088 EXTRACT_IFMT_LDSB_REG_REG_CODE
4089
4090 {
4091 SI opval = ADDCSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4092 SET_H_GR (f_rd, opval);
4093 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4094 }
4095
4096 SEM_NBRANCH_FINI (vpc, 0);
4097 return status;
4098 }
4099
4100 /* addc-imm: addc $rs1,$simm13,$rd */
4101
4102 SEM_STATUS
4103 SEM_FN_NAME (sparc64,addc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4104 {
4105 SEM_STATUS status = 0;
4106 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4107 int UNUSED written = 0;
4108 IADDR UNUSED pc = GET_H_PC ();
4109 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4110 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4111 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4112
4113 {
4114 SI opval = ADDCSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4115 SET_H_GR (f_rd, opval);
4116 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4117 }
4118
4119 SEM_NBRANCH_FINI (vpc, 0);
4120 return status;
4121 }
4122
4123 /* subc: subc $rs1,$rs2,$rd */
4124
4125 SEM_STATUS
4126 SEM_FN_NAME (sparc64,subc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4127 {
4128 SEM_STATUS status = 0;
4129 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4130 int UNUSED written = 0;
4131 IADDR UNUSED pc = GET_H_PC ();
4132 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4133 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4134 EXTRACT_IFMT_LDSB_REG_REG_CODE
4135
4136 {
4137 SI opval = SUBCSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4138 SET_H_GR (f_rd, opval);
4139 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4140 }
4141
4142 SEM_NBRANCH_FINI (vpc, 0);
4143 return status;
4144 }
4145
4146 /* subc-imm: subc $rs1,$simm13,$rd */
4147
4148 SEM_STATUS
4149 SEM_FN_NAME (sparc64,subc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4150 {
4151 SEM_STATUS status = 0;
4152 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4153 int UNUSED written = 0;
4154 IADDR UNUSED pc = GET_H_PC ();
4155 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4156 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4157 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4158
4159 {
4160 SI opval = SUBCSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4161 SET_H_GR (f_rd, opval);
4162 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4163 }
4164
4165 SEM_NBRANCH_FINI (vpc, 0);
4166 return status;
4167 }
4168
4169 /* addccc: addccc $rs1,$rs2,$rd */
4170
4171 SEM_STATUS
4172 SEM_FN_NAME (sparc64,addccc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4173 {
4174 SEM_STATUS status = 0;
4175 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4176 int UNUSED written = 0;
4177 IADDR UNUSED pc = GET_H_PC ();
4178 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4179 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4180 EXTRACT_IFMT_LDSB_REG_REG_CODE
4181
4182 do {
4183 do {
4184 SI tmp_x;
4185 tmp_x = ADDCSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4186 {
4187 BI opval = ADDCFSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4188 CPU (h_icc_c) = opval;
4189 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4190 }
4191 {
4192 BI opval = ADDOFSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4193 CPU (h_icc_v) = opval;
4194 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4195 }
4196 {
4197 BI opval = LTSI (tmp_x, 0);
4198 CPU (h_icc_n) = opval;
4199 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4200 }
4201 {
4202 BI opval = EQSI (tmp_x, 0);
4203 CPU (h_icc_z) = opval;
4204 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4205 }
4206 } while (0);
4207 {
4208 SI opval = ADDCSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4209 SET_H_GR (f_rd, opval);
4210 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4211 }
4212 } while (0);
4213
4214 SEM_NBRANCH_FINI (vpc, 0);
4215 return status;
4216 }
4217
4218 /* addccc-imm: addccc $rs1,$simm13,$rd */
4219
4220 SEM_STATUS
4221 SEM_FN_NAME (sparc64,addccc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4222 {
4223 SEM_STATUS status = 0;
4224 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4225 int UNUSED written = 0;
4226 IADDR UNUSED pc = GET_H_PC ();
4227 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4228 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4229 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4230
4231 do {
4232 do {
4233 SI tmp_x;
4234 tmp_x = ADDCSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4235 {
4236 BI opval = ADDCFSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4237 CPU (h_icc_c) = opval;
4238 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4239 }
4240 {
4241 BI opval = ADDOFSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4242 CPU (h_icc_v) = opval;
4243 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4244 }
4245 {
4246 BI opval = LTSI (tmp_x, 0);
4247 CPU (h_icc_n) = opval;
4248 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4249 }
4250 {
4251 BI opval = EQSI (tmp_x, 0);
4252 CPU (h_icc_z) = opval;
4253 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4254 }
4255 } while (0);
4256 {
4257 SI opval = ADDCSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4258 SET_H_GR (f_rd, opval);
4259 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4260 }
4261 } while (0);
4262
4263 SEM_NBRANCH_FINI (vpc, 0);
4264 return status;
4265 }
4266
4267 /* subccc: subccc $rs1,$rs2,$rd */
4268
4269 SEM_STATUS
4270 SEM_FN_NAME (sparc64,subccc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4271 {
4272 SEM_STATUS status = 0;
4273 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4274 int UNUSED written = 0;
4275 IADDR UNUSED pc = GET_H_PC ();
4276 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4277 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4278 EXTRACT_IFMT_LDSB_REG_REG_CODE
4279
4280 do {
4281 do {
4282 SI tmp_x;
4283 tmp_x = SUBCSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4284 {
4285 BI opval = SUBCFSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4286 CPU (h_icc_c) = opval;
4287 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4288 }
4289 {
4290 BI opval = SUBOFSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4291 CPU (h_icc_v) = opval;
4292 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4293 }
4294 {
4295 BI opval = LTSI (tmp_x, 0);
4296 CPU (h_icc_n) = opval;
4297 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4298 }
4299 {
4300 BI opval = EQSI (tmp_x, 0);
4301 CPU (h_icc_z) = opval;
4302 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4303 }
4304 } while (0);
4305 {
4306 SI opval = SUBCSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2), CPU (h_icc_c));
4307 SET_H_GR (f_rd, opval);
4308 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4309 }
4310 } while (0);
4311
4312 SEM_NBRANCH_FINI (vpc, 0);
4313 return status;
4314 }
4315
4316 /* subccc-imm: subccc $rs1,$simm13,$rd */
4317
4318 SEM_STATUS
4319 SEM_FN_NAME (sparc64,subccc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4320 {
4321 SEM_STATUS status = 0;
4322 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4323 int UNUSED written = 0;
4324 IADDR UNUSED pc = GET_H_PC ();
4325 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4326 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4327 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4328
4329 do {
4330 do {
4331 SI tmp_x;
4332 tmp_x = SUBCSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4333 {
4334 BI opval = SUBCFSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4335 CPU (h_icc_c) = opval;
4336 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4337 }
4338 {
4339 BI opval = SUBOFSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4340 CPU (h_icc_v) = opval;
4341 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4342 }
4343 {
4344 BI opval = LTSI (tmp_x, 0);
4345 CPU (h_icc_n) = opval;
4346 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4347 }
4348 {
4349 BI opval = EQSI (tmp_x, 0);
4350 CPU (h_icc_z) = opval;
4351 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4352 }
4353 } while (0);
4354 {
4355 SI opval = SUBCSI (GET_H_GR (f_rs1), f_simm13, CPU (h_icc_c));
4356 SET_H_GR (f_rd, opval);
4357 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4358 }
4359 } while (0);
4360
4361 SEM_NBRANCH_FINI (vpc, 0);
4362 return status;
4363 }
4364
4365 /* and: and $rs1,$rs2,$rd */
4366
4367 SEM_STATUS
4368 SEM_FN_NAME (sparc64,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4369 {
4370 SEM_STATUS status = 0;
4371 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4372 int UNUSED written = 0;
4373 IADDR UNUSED pc = GET_H_PC ();
4374 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4375 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4376 EXTRACT_IFMT_LDSB_REG_REG_CODE
4377
4378 {
4379 SI opval = ANDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
4380 SET_H_GR (f_rd, opval);
4381 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4382 }
4383
4384 SEM_NBRANCH_FINI (vpc, 0);
4385 return status;
4386 }
4387
4388 /* and-imm: and $rs1,$simm13,$rd */
4389
4390 SEM_STATUS
4391 SEM_FN_NAME (sparc64,and_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4392 {
4393 SEM_STATUS status = 0;
4394 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4395 int UNUSED written = 0;
4396 IADDR UNUSED pc = GET_H_PC ();
4397 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4398 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4399 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4400
4401 {
4402 SI opval = ANDSI (GET_H_GR (f_rs1), f_simm13);
4403 SET_H_GR (f_rd, opval);
4404 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4405 }
4406
4407 SEM_NBRANCH_FINI (vpc, 0);
4408 return status;
4409 }
4410
4411 /* andcc: andcc $rs1,$rs2,$rd */
4412
4413 SEM_STATUS
4414 SEM_FN_NAME (sparc64,andcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4415 {
4416 SEM_STATUS status = 0;
4417 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4418 int UNUSED written = 0;
4419 IADDR UNUSED pc = GET_H_PC ();
4420 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4421 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4422 EXTRACT_IFMT_LDSB_REG_REG_CODE
4423
4424 do {
4425 do {
4426 {
4427 BI opval = EQSI (ANDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), 0);
4428 CPU (h_icc_z) = opval;
4429 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4430 }
4431 {
4432 BI opval = LTSI (ANDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), 0);
4433 CPU (h_icc_n) = opval;
4434 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4435 }
4436 {
4437 BI opval = 0;
4438 CPU (h_icc_c) = opval;
4439 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4440 }
4441 {
4442 BI opval = 0;
4443 CPU (h_icc_v) = opval;
4444 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4445 }
4446 } while (0);
4447 {
4448 SI opval = ANDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
4449 SET_H_GR (f_rd, opval);
4450 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4451 }
4452 } while (0);
4453
4454 SEM_NBRANCH_FINI (vpc, 0);
4455 return status;
4456 }
4457
4458 /* andcc-imm: andcc $rs1,$simm13,$rd */
4459
4460 SEM_STATUS
4461 SEM_FN_NAME (sparc64,andcc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4462 {
4463 SEM_STATUS status = 0;
4464 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4465 int UNUSED written = 0;
4466 IADDR UNUSED pc = GET_H_PC ();
4467 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4468 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4469 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4470
4471 do {
4472 do {
4473 {
4474 BI opval = EQSI (ANDSI (GET_H_GR (f_rs1), f_simm13), 0);
4475 CPU (h_icc_z) = opval;
4476 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4477 }
4478 {
4479 BI opval = LTSI (ANDSI (GET_H_GR (f_rs1), f_simm13), 0);
4480 CPU (h_icc_n) = opval;
4481 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4482 }
4483 {
4484 BI opval = 0;
4485 CPU (h_icc_c) = opval;
4486 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4487 }
4488 {
4489 BI opval = 0;
4490 CPU (h_icc_v) = opval;
4491 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4492 }
4493 } while (0);
4494 {
4495 SI opval = ANDSI (GET_H_GR (f_rs1), f_simm13);
4496 SET_H_GR (f_rd, opval);
4497 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4498 }
4499 } while (0);
4500
4501 SEM_NBRANCH_FINI (vpc, 0);
4502 return status;
4503 }
4504
4505 /* or: or $rs1,$rs2,$rd */
4506
4507 SEM_STATUS
4508 SEM_FN_NAME (sparc64,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4509 {
4510 SEM_STATUS status = 0;
4511 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4512 int UNUSED written = 0;
4513 IADDR UNUSED pc = GET_H_PC ();
4514 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4515 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4516 EXTRACT_IFMT_LDSB_REG_REG_CODE
4517
4518 {
4519 SI opval = ORSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
4520 SET_H_GR (f_rd, opval);
4521 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4522 }
4523
4524 SEM_NBRANCH_FINI (vpc, 0);
4525 return status;
4526 }
4527
4528 /* or-imm: or $rs1,$simm13,$rd */
4529
4530 SEM_STATUS
4531 SEM_FN_NAME (sparc64,or_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4532 {
4533 SEM_STATUS status = 0;
4534 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4535 int UNUSED written = 0;
4536 IADDR UNUSED pc = GET_H_PC ();
4537 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4538 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4539 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4540
4541 {
4542 SI opval = ORSI (GET_H_GR (f_rs1), f_simm13);
4543 SET_H_GR (f_rd, opval);
4544 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4545 }
4546
4547 SEM_NBRANCH_FINI (vpc, 0);
4548 return status;
4549 }
4550
4551 /* orcc: orcc $rs1,$rs2,$rd */
4552
4553 SEM_STATUS
4554 SEM_FN_NAME (sparc64,orcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4555 {
4556 SEM_STATUS status = 0;
4557 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4558 int UNUSED written = 0;
4559 IADDR UNUSED pc = GET_H_PC ();
4560 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4561 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4562 EXTRACT_IFMT_LDSB_REG_REG_CODE
4563
4564 do {
4565 do {
4566 {
4567 BI opval = EQSI (ORSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), 0);
4568 CPU (h_icc_z) = opval;
4569 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4570 }
4571 {
4572 BI opval = LTSI (ORSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), 0);
4573 CPU (h_icc_n) = opval;
4574 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4575 }
4576 {
4577 BI opval = 0;
4578 CPU (h_icc_c) = opval;
4579 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4580 }
4581 {
4582 BI opval = 0;
4583 CPU (h_icc_v) = opval;
4584 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4585 }
4586 } while (0);
4587 {
4588 SI opval = ORSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
4589 SET_H_GR (f_rd, opval);
4590 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4591 }
4592 } while (0);
4593
4594 SEM_NBRANCH_FINI (vpc, 0);
4595 return status;
4596 }
4597
4598 /* orcc-imm: orcc $rs1,$simm13,$rd */
4599
4600 SEM_STATUS
4601 SEM_FN_NAME (sparc64,orcc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4602 {
4603 SEM_STATUS status = 0;
4604 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4605 int UNUSED written = 0;
4606 IADDR UNUSED pc = GET_H_PC ();
4607 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4608 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4609 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4610
4611 do {
4612 do {
4613 {
4614 BI opval = EQSI (ORSI (GET_H_GR (f_rs1), f_simm13), 0);
4615 CPU (h_icc_z) = opval;
4616 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4617 }
4618 {
4619 BI opval = LTSI (ORSI (GET_H_GR (f_rs1), f_simm13), 0);
4620 CPU (h_icc_n) = opval;
4621 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4622 }
4623 {
4624 BI opval = 0;
4625 CPU (h_icc_c) = opval;
4626 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4627 }
4628 {
4629 BI opval = 0;
4630 CPU (h_icc_v) = opval;
4631 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4632 }
4633 } while (0);
4634 {
4635 SI opval = ORSI (GET_H_GR (f_rs1), f_simm13);
4636 SET_H_GR (f_rd, opval);
4637 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4638 }
4639 } while (0);
4640
4641 SEM_NBRANCH_FINI (vpc, 0);
4642 return status;
4643 }
4644
4645 /* xor: xor $rs1,$rs2,$rd */
4646
4647 SEM_STATUS
4648 SEM_FN_NAME (sparc64,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4649 {
4650 SEM_STATUS status = 0;
4651 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4652 int UNUSED written = 0;
4653 IADDR UNUSED pc = GET_H_PC ();
4654 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4655 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4656 EXTRACT_IFMT_LDSB_REG_REG_CODE
4657
4658 {
4659 SI opval = XORSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
4660 SET_H_GR (f_rd, opval);
4661 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4662 }
4663
4664 SEM_NBRANCH_FINI (vpc, 0);
4665 return status;
4666 }
4667
4668 /* xor-imm: xor $rs1,$simm13,$rd */
4669
4670 SEM_STATUS
4671 SEM_FN_NAME (sparc64,xor_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4672 {
4673 SEM_STATUS status = 0;
4674 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4675 int UNUSED written = 0;
4676 IADDR UNUSED pc = GET_H_PC ();
4677 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4678 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4679 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4680
4681 {
4682 SI opval = XORSI (GET_H_GR (f_rs1), f_simm13);
4683 SET_H_GR (f_rd, opval);
4684 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4685 }
4686
4687 SEM_NBRANCH_FINI (vpc, 0);
4688 return status;
4689 }
4690
4691 /* xorcc: xorcc $rs1,$rs2,$rd */
4692
4693 SEM_STATUS
4694 SEM_FN_NAME (sparc64,xorcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4695 {
4696 SEM_STATUS status = 0;
4697 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4698 int UNUSED written = 0;
4699 IADDR UNUSED pc = GET_H_PC ();
4700 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4701 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4702 EXTRACT_IFMT_LDSB_REG_REG_CODE
4703
4704 do {
4705 do {
4706 {
4707 BI opval = EQSI (XORSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), 0);
4708 CPU (h_icc_z) = opval;
4709 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4710 }
4711 {
4712 BI opval = LTSI (XORSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2)), 0);
4713 CPU (h_icc_n) = opval;
4714 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4715 }
4716 {
4717 BI opval = 0;
4718 CPU (h_icc_c) = opval;
4719 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4720 }
4721 {
4722 BI opval = 0;
4723 CPU (h_icc_v) = opval;
4724 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4725 }
4726 } while (0);
4727 {
4728 SI opval = XORSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
4729 SET_H_GR (f_rd, opval);
4730 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4731 }
4732 } while (0);
4733
4734 SEM_NBRANCH_FINI (vpc, 0);
4735 return status;
4736 }
4737
4738 /* xorcc-imm: xorcc $rs1,$simm13,$rd */
4739
4740 SEM_STATUS
4741 SEM_FN_NAME (sparc64,xorcc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4742 {
4743 SEM_STATUS status = 0;
4744 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4745 int UNUSED written = 0;
4746 IADDR UNUSED pc = GET_H_PC ();
4747 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4748 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4749 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4750
4751 do {
4752 do {
4753 {
4754 BI opval = EQSI (XORSI (GET_H_GR (f_rs1), f_simm13), 0);
4755 CPU (h_icc_z) = opval;
4756 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4757 }
4758 {
4759 BI opval = LTSI (XORSI (GET_H_GR (f_rs1), f_simm13), 0);
4760 CPU (h_icc_n) = opval;
4761 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4762 }
4763 {
4764 BI opval = 0;
4765 CPU (h_icc_c) = opval;
4766 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4767 }
4768 {
4769 BI opval = 0;
4770 CPU (h_icc_v) = opval;
4771 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4772 }
4773 } while (0);
4774 {
4775 SI opval = XORSI (GET_H_GR (f_rs1), f_simm13);
4776 SET_H_GR (f_rd, opval);
4777 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4778 }
4779 } while (0);
4780
4781 SEM_NBRANCH_FINI (vpc, 0);
4782 return status;
4783 }
4784
4785 /* andn: andn $rs1,$rs2,$rd */
4786
4787 SEM_STATUS
4788 SEM_FN_NAME (sparc64,andn) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4789 {
4790 SEM_STATUS status = 0;
4791 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4792 int UNUSED written = 0;
4793 IADDR UNUSED pc = GET_H_PC ();
4794 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4795 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4796 EXTRACT_IFMT_LDSB_REG_REG_CODE
4797
4798 {
4799 SI opval = ANDSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2)));
4800 SET_H_GR (f_rd, opval);
4801 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4802 }
4803
4804 SEM_NBRANCH_FINI (vpc, 0);
4805 return status;
4806 }
4807
4808 /* andn-imm: andn $rs1,$simm13,$rd */
4809
4810 SEM_STATUS
4811 SEM_FN_NAME (sparc64,andn_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4812 {
4813 SEM_STATUS status = 0;
4814 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4815 int UNUSED written = 0;
4816 IADDR UNUSED pc = GET_H_PC ();
4817 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4818 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4819 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4820
4821 {
4822 SI opval = ANDSI (GET_H_GR (f_rs1), INVHI (f_simm13));
4823 SET_H_GR (f_rd, opval);
4824 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4825 }
4826
4827 SEM_NBRANCH_FINI (vpc, 0);
4828 return status;
4829 }
4830
4831 /* andncc: andncc $rs1,$rs2,$rd */
4832
4833 SEM_STATUS
4834 SEM_FN_NAME (sparc64,andncc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4835 {
4836 SEM_STATUS status = 0;
4837 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4838 int UNUSED written = 0;
4839 IADDR UNUSED pc = GET_H_PC ();
4840 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4841 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4842 EXTRACT_IFMT_LDSB_REG_REG_CODE
4843
4844 do {
4845 do {
4846 {
4847 BI opval = EQSI (ANDSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2))), 0);
4848 CPU (h_icc_z) = opval;
4849 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4850 }
4851 {
4852 BI opval = LTSI (ANDSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2))), 0);
4853 CPU (h_icc_n) = opval;
4854 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4855 }
4856 {
4857 BI opval = 0;
4858 CPU (h_icc_c) = opval;
4859 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4860 }
4861 {
4862 BI opval = 0;
4863 CPU (h_icc_v) = opval;
4864 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4865 }
4866 } while (0);
4867 {
4868 SI opval = ANDSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2)));
4869 SET_H_GR (f_rd, opval);
4870 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4871 }
4872 } while (0);
4873
4874 SEM_NBRANCH_FINI (vpc, 0);
4875 return status;
4876 }
4877
4878 /* andncc-imm: andncc $rs1,$simm13,$rd */
4879
4880 SEM_STATUS
4881 SEM_FN_NAME (sparc64,andncc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4882 {
4883 SEM_STATUS status = 0;
4884 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4885 int UNUSED written = 0;
4886 IADDR UNUSED pc = GET_H_PC ();
4887 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4888 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4889 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4890
4891 do {
4892 do {
4893 {
4894 BI opval = EQSI (ANDSI (GET_H_GR (f_rs1), INVHI (f_simm13)), 0);
4895 CPU (h_icc_z) = opval;
4896 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4897 }
4898 {
4899 BI opval = LTSI (ANDSI (GET_H_GR (f_rs1), INVHI (f_simm13)), 0);
4900 CPU (h_icc_n) = opval;
4901 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4902 }
4903 {
4904 BI opval = 0;
4905 CPU (h_icc_c) = opval;
4906 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
4907 }
4908 {
4909 BI opval = 0;
4910 CPU (h_icc_v) = opval;
4911 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
4912 }
4913 } while (0);
4914 {
4915 SI opval = ANDSI (GET_H_GR (f_rs1), INVHI (f_simm13));
4916 SET_H_GR (f_rd, opval);
4917 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4918 }
4919 } while (0);
4920
4921 SEM_NBRANCH_FINI (vpc, 0);
4922 return status;
4923 }
4924
4925 /* orn: orn $rs1,$rs2,$rd */
4926
4927 SEM_STATUS
4928 SEM_FN_NAME (sparc64,orn) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4929 {
4930 SEM_STATUS status = 0;
4931 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4932 int UNUSED written = 0;
4933 IADDR UNUSED pc = GET_H_PC ();
4934 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4935 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4936 EXTRACT_IFMT_LDSB_REG_REG_CODE
4937
4938 {
4939 SI opval = ORSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2)));
4940 SET_H_GR (f_rd, opval);
4941 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4942 }
4943
4944 SEM_NBRANCH_FINI (vpc, 0);
4945 return status;
4946 }
4947
4948 /* orn-imm: orn $rs1,$simm13,$rd */
4949
4950 SEM_STATUS
4951 SEM_FN_NAME (sparc64,orn_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4952 {
4953 SEM_STATUS status = 0;
4954 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4955 int UNUSED written = 0;
4956 IADDR UNUSED pc = GET_H_PC ();
4957 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4958 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
4959 EXTRACT_IFMT_LDSB_REG_IMM_CODE
4960
4961 {
4962 SI opval = ORSI (GET_H_GR (f_rs1), INVHI (f_simm13));
4963 SET_H_GR (f_rd, opval);
4964 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
4965 }
4966
4967 SEM_NBRANCH_FINI (vpc, 0);
4968 return status;
4969 }
4970
4971 /* orncc: orncc $rs1,$rs2,$rd */
4972
4973 SEM_STATUS
4974 SEM_FN_NAME (sparc64,orncc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
4975 {
4976 SEM_STATUS status = 0;
4977 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4978 int UNUSED written = 0;
4979 IADDR UNUSED pc = GET_H_PC ();
4980 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4981 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
4982 EXTRACT_IFMT_LDSB_REG_REG_CODE
4983
4984 do {
4985 do {
4986 {
4987 BI opval = EQSI (ORSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2))), 0);
4988 CPU (h_icc_z) = opval;
4989 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
4990 }
4991 {
4992 BI opval = LTSI (ORSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2))), 0);
4993 CPU (h_icc_n) = opval;
4994 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
4995 }
4996 {
4997 BI opval = 0;
4998 CPU (h_icc_c) = opval;
4999 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5000 }
5001 {
5002 BI opval = 0;
5003 CPU (h_icc_v) = opval;
5004 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5005 }
5006 } while (0);
5007 {
5008 SI opval = ORSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2)));
5009 SET_H_GR (f_rd, opval);
5010 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5011 }
5012 } while (0);
5013
5014 SEM_NBRANCH_FINI (vpc, 0);
5015 return status;
5016 }
5017
5018 /* orncc-imm: orncc $rs1,$simm13,$rd */
5019
5020 SEM_STATUS
5021 SEM_FN_NAME (sparc64,orncc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5022 {
5023 SEM_STATUS status = 0;
5024 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5025 int UNUSED written = 0;
5026 IADDR UNUSED pc = GET_H_PC ();
5027 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5028 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5029 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5030
5031 do {
5032 do {
5033 {
5034 BI opval = EQSI (ORSI (GET_H_GR (f_rs1), INVHI (f_simm13)), 0);
5035 CPU (h_icc_z) = opval;
5036 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
5037 }
5038 {
5039 BI opval = LTSI (ORSI (GET_H_GR (f_rs1), INVHI (f_simm13)), 0);
5040 CPU (h_icc_n) = opval;
5041 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
5042 }
5043 {
5044 BI opval = 0;
5045 CPU (h_icc_c) = opval;
5046 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5047 }
5048 {
5049 BI opval = 0;
5050 CPU (h_icc_v) = opval;
5051 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5052 }
5053 } while (0);
5054 {
5055 SI opval = ORSI (GET_H_GR (f_rs1), INVHI (f_simm13));
5056 SET_H_GR (f_rd, opval);
5057 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5058 }
5059 } while (0);
5060
5061 SEM_NBRANCH_FINI (vpc, 0);
5062 return status;
5063 }
5064
5065 /* xnor: xnor $rs1,$rs2,$rd */
5066
5067 SEM_STATUS
5068 SEM_FN_NAME (sparc64,xnor) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5069 {
5070 SEM_STATUS status = 0;
5071 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5072 int UNUSED written = 0;
5073 IADDR UNUSED pc = GET_H_PC ();
5074 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5075 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5076 EXTRACT_IFMT_LDSB_REG_REG_CODE
5077
5078 {
5079 SI opval = XORSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2)));
5080 SET_H_GR (f_rd, opval);
5081 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5082 }
5083
5084 SEM_NBRANCH_FINI (vpc, 0);
5085 return status;
5086 }
5087
5088 /* xnor-imm: xnor $rs1,$simm13,$rd */
5089
5090 SEM_STATUS
5091 SEM_FN_NAME (sparc64,xnor_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5092 {
5093 SEM_STATUS status = 0;
5094 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5095 int UNUSED written = 0;
5096 IADDR UNUSED pc = GET_H_PC ();
5097 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5098 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5099 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5100
5101 {
5102 SI opval = XORSI (GET_H_GR (f_rs1), INVHI (f_simm13));
5103 SET_H_GR (f_rd, opval);
5104 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5105 }
5106
5107 SEM_NBRANCH_FINI (vpc, 0);
5108 return status;
5109 }
5110
5111 /* xnorcc: xnorcc $rs1,$rs2,$rd */
5112
5113 SEM_STATUS
5114 SEM_FN_NAME (sparc64,xnorcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5115 {
5116 SEM_STATUS status = 0;
5117 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5118 int UNUSED written = 0;
5119 IADDR UNUSED pc = GET_H_PC ();
5120 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5121 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5122 EXTRACT_IFMT_LDSB_REG_REG_CODE
5123
5124 do {
5125 do {
5126 {
5127 BI opval = EQSI (XORSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2))), 0);
5128 CPU (h_icc_z) = opval;
5129 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
5130 }
5131 {
5132 BI opval = LTSI (XORSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2))), 0);
5133 CPU (h_icc_n) = opval;
5134 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
5135 }
5136 {
5137 BI opval = 0;
5138 CPU (h_icc_c) = opval;
5139 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5140 }
5141 {
5142 BI opval = 0;
5143 CPU (h_icc_v) = opval;
5144 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5145 }
5146 } while (0);
5147 {
5148 SI opval = XORSI (GET_H_GR (f_rs1), INVSI (GET_H_GR (f_rs2)));
5149 SET_H_GR (f_rd, opval);
5150 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5151 }
5152 } while (0);
5153
5154 SEM_NBRANCH_FINI (vpc, 0);
5155 return status;
5156 }
5157
5158 /* xnorcc-imm: xnorcc $rs1,$simm13,$rd */
5159
5160 SEM_STATUS
5161 SEM_FN_NAME (sparc64,xnorcc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5162 {
5163 SEM_STATUS status = 0;
5164 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5165 int UNUSED written = 0;
5166 IADDR UNUSED pc = GET_H_PC ();
5167 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5168 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5169 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5170
5171 do {
5172 do {
5173 {
5174 BI opval = EQSI (XORSI (GET_H_GR (f_rs1), INVHI (f_simm13)), 0);
5175 CPU (h_icc_z) = opval;
5176 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
5177 }
5178 {
5179 BI opval = LTSI (XORSI (GET_H_GR (f_rs1), INVHI (f_simm13)), 0);
5180 CPU (h_icc_n) = opval;
5181 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
5182 }
5183 {
5184 BI opval = 0;
5185 CPU (h_icc_c) = opval;
5186 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5187 }
5188 {
5189 BI opval = 0;
5190 CPU (h_icc_v) = opval;
5191 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5192 }
5193 } while (0);
5194 {
5195 SI opval = XORSI (GET_H_GR (f_rs1), INVHI (f_simm13));
5196 SET_H_GR (f_rd, opval);
5197 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5198 }
5199 } while (0);
5200
5201 SEM_NBRANCH_FINI (vpc, 0);
5202 return status;
5203 }
5204
5205 /* sll: sll $rs1,$rs2,$rd */
5206
5207 SEM_STATUS
5208 SEM_FN_NAME (sparc64,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5209 {
5210 SEM_STATUS status = 0;
5211 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5212 int UNUSED written = 0;
5213 IADDR UNUSED pc = GET_H_PC ();
5214 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5215 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5216 EXTRACT_IFMT_LDSB_REG_REG_CODE
5217
5218 {
5219 SI opval = SLLSI (GET_H_GR (f_rs1), ANDSI (GET_H_GR (f_rs2), 31));
5220 SET_H_GR (f_rd, opval);
5221 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5222 }
5223
5224 SEM_NBRANCH_FINI (vpc, 0);
5225 return status;
5226 }
5227
5228 /* sll-imm: sll $rs1,$simm13,$rd */
5229
5230 SEM_STATUS
5231 SEM_FN_NAME (sparc64,sll_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5232 {
5233 SEM_STATUS status = 0;
5234 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5235 int UNUSED written = 0;
5236 IADDR UNUSED pc = GET_H_PC ();
5237 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5238 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5239 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5240
5241 {
5242 SI opval = SLLSI (GET_H_GR (f_rs1), ANDHI (f_simm13, 31));
5243 SET_H_GR (f_rd, opval);
5244 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5245 }
5246
5247 SEM_NBRANCH_FINI (vpc, 0);
5248 return status;
5249 }
5250
5251 /* srl: srl $rs1,$rs2,$rd */
5252
5253 SEM_STATUS
5254 SEM_FN_NAME (sparc64,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5255 {
5256 SEM_STATUS status = 0;
5257 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5258 int UNUSED written = 0;
5259 IADDR UNUSED pc = GET_H_PC ();
5260 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5261 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5262 EXTRACT_IFMT_LDSB_REG_REG_CODE
5263
5264 {
5265 SI opval = SRLSI (GET_H_GR (f_rs1), ANDSI (GET_H_GR (f_rs2), 31));
5266 SET_H_GR (f_rd, opval);
5267 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5268 }
5269
5270 SEM_NBRANCH_FINI (vpc, 0);
5271 return status;
5272 }
5273
5274 /* srl-imm: srl $rs1,$simm13,$rd */
5275
5276 SEM_STATUS
5277 SEM_FN_NAME (sparc64,srl_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5278 {
5279 SEM_STATUS status = 0;
5280 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5281 int UNUSED written = 0;
5282 IADDR UNUSED pc = GET_H_PC ();
5283 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5284 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5285 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5286
5287 {
5288 SI opval = SRLSI (GET_H_GR (f_rs1), ANDHI (f_simm13, 31));
5289 SET_H_GR (f_rd, opval);
5290 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5291 }
5292
5293 SEM_NBRANCH_FINI (vpc, 0);
5294 return status;
5295 }
5296
5297 /* sra: sra $rs1,$rs2,$rd */
5298
5299 SEM_STATUS
5300 SEM_FN_NAME (sparc64,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5301 {
5302 SEM_STATUS status = 0;
5303 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5304 int UNUSED written = 0;
5305 IADDR UNUSED pc = GET_H_PC ();
5306 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5307 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5308 EXTRACT_IFMT_LDSB_REG_REG_CODE
5309
5310 {
5311 SI opval = SRASI (GET_H_GR (f_rs1), ANDSI (GET_H_GR (f_rs2), 31));
5312 SET_H_GR (f_rd, opval);
5313 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5314 }
5315
5316 SEM_NBRANCH_FINI (vpc, 0);
5317 return status;
5318 }
5319
5320 /* sra-imm: sra $rs1,$simm13,$rd */
5321
5322 SEM_STATUS
5323 SEM_FN_NAME (sparc64,sra_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5324 {
5325 SEM_STATUS status = 0;
5326 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5327 int UNUSED written = 0;
5328 IADDR UNUSED pc = GET_H_PC ();
5329 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5330 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5331 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5332
5333 {
5334 SI opval = SRASI (GET_H_GR (f_rs1), ANDHI (f_simm13, 31));
5335 SET_H_GR (f_rd, opval);
5336 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5337 }
5338
5339 SEM_NBRANCH_FINI (vpc, 0);
5340 return status;
5341 }
5342
5343 /* smul: smul $rs1,$rs2,$rd */
5344
5345 SEM_STATUS
5346 SEM_FN_NAME (sparc64,smul) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5347 {
5348 SEM_STATUS status = 0;
5349 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5350 int UNUSED written = 0;
5351 IADDR UNUSED pc = GET_H_PC ();
5352 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5353 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5354 EXTRACT_IFMT_LDSB_REG_REG_CODE
5355
5356 do {
5357 DI tmp_res;
5358 tmp_res = MULDI (EXTSIDI (GET_H_GR (f_rs1)), EXTSIDI (GET_H_GR (f_rs2)));
5359 {
5360 SI opval = TRUNCDISI (SRLDI (tmp_res, 32));
5361 SET_H_Y (opval);
5362 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5363 }
5364 {
5365 SI opval = TRUNCDISI (tmp_res);
5366 SET_H_GR (f_rd, opval);
5367 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5368 }
5369 } while (0);
5370
5371 SEM_NBRANCH_FINI (vpc, 0);
5372 return status;
5373 }
5374
5375 /* smul-imm: smul $rs1,$simm13,$rd */
5376
5377 SEM_STATUS
5378 SEM_FN_NAME (sparc64,smul_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5379 {
5380 SEM_STATUS status = 0;
5381 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5382 int UNUSED written = 0;
5383 IADDR UNUSED pc = GET_H_PC ();
5384 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5385 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5386 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5387
5388 do {
5389 DI tmp_res;
5390 tmp_res = MULDI (EXTSIDI (GET_H_GR (f_rs1)), EXTHIDI (f_simm13));
5391 {
5392 SI opval = TRUNCDISI (SRLDI (tmp_res, 32));
5393 SET_H_Y (opval);
5394 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5395 }
5396 {
5397 SI opval = TRUNCDISI (tmp_res);
5398 SET_H_GR (f_rd, opval);
5399 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5400 }
5401 } while (0);
5402
5403 SEM_NBRANCH_FINI (vpc, 0);
5404 return status;
5405 }
5406
5407 /* smul-cc: smulcc $rs1,$rs2,$rd */
5408
5409 SEM_STATUS
5410 SEM_FN_NAME (sparc64,smul_cc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5411 {
5412 SEM_STATUS status = 0;
5413 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5414 int UNUSED written = 0;
5415 IADDR UNUSED pc = GET_H_PC ();
5416 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5417 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5418 EXTRACT_IFMT_LDSB_REG_REG_CODE
5419
5420 do {
5421 DI tmp_res;
5422 tmp_res = MULDI (EXTSIDI (GET_H_GR (f_rs1)), EXTSIDI (GET_H_GR (f_rs2)));
5423 {
5424 SI opval = TRUNCDISI (SRLDI (tmp_res, 32));
5425 SET_H_Y (opval);
5426 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5427 }
5428 {
5429 SI opval = TRUNCDISI (tmp_res);
5430 SET_H_GR (f_rd, opval);
5431 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5432 }
5433 do {
5434 {
5435 BI opval = EQSI (TRUNCDISI (tmp_res), 0);
5436 CPU (h_icc_z) = opval;
5437 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
5438 }
5439 {
5440 BI opval = LTSI (TRUNCDISI (tmp_res), 0);
5441 CPU (h_icc_n) = opval;
5442 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
5443 }
5444 {
5445 BI opval = 0;
5446 CPU (h_icc_c) = opval;
5447 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5448 }
5449 {
5450 BI opval = 0;
5451 CPU (h_icc_v) = opval;
5452 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5453 }
5454 } while (0);
5455 } while (0);
5456
5457 SEM_NBRANCH_FINI (vpc, 0);
5458 return status;
5459 }
5460
5461 /* smul-cc-imm: smulcc $rs1,$simm13,$rd */
5462
5463 SEM_STATUS
5464 SEM_FN_NAME (sparc64,smul_cc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5465 {
5466 SEM_STATUS status = 0;
5467 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5468 int UNUSED written = 0;
5469 IADDR UNUSED pc = GET_H_PC ();
5470 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5471 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5472 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5473
5474 do {
5475 DI tmp_res;
5476 tmp_res = MULDI (EXTSIDI (GET_H_GR (f_rs1)), EXTHIDI (f_simm13));
5477 {
5478 SI opval = TRUNCDISI (SRLDI (tmp_res, 32));
5479 SET_H_Y (opval);
5480 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5481 }
5482 {
5483 SI opval = TRUNCDISI (tmp_res);
5484 SET_H_GR (f_rd, opval);
5485 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5486 }
5487 do {
5488 {
5489 BI opval = EQSI (TRUNCDISI (tmp_res), 0);
5490 CPU (h_icc_z) = opval;
5491 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
5492 }
5493 {
5494 BI opval = LTSI (TRUNCDISI (tmp_res), 0);
5495 CPU (h_icc_n) = opval;
5496 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
5497 }
5498 {
5499 BI opval = 0;
5500 CPU (h_icc_c) = opval;
5501 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5502 }
5503 {
5504 BI opval = 0;
5505 CPU (h_icc_v) = opval;
5506 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5507 }
5508 } while (0);
5509 } while (0);
5510
5511 SEM_NBRANCH_FINI (vpc, 0);
5512 return status;
5513 }
5514
5515 /* umul: umul $rs1,$rs2,$rd */
5516
5517 SEM_STATUS
5518 SEM_FN_NAME (sparc64,umul) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5519 {
5520 SEM_STATUS status = 0;
5521 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5522 int UNUSED written = 0;
5523 IADDR UNUSED pc = GET_H_PC ();
5524 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5525 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5526 EXTRACT_IFMT_LDSB_REG_REG_CODE
5527
5528 do {
5529 DI tmp_res;
5530 tmp_res = MULDI (ZEXTSIDI (GET_H_GR (f_rs1)), ZEXTSIDI (GET_H_GR (f_rs2)));
5531 {
5532 SI opval = TRUNCDISI (SRLDI (tmp_res, 32));
5533 SET_H_Y (opval);
5534 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5535 }
5536 {
5537 SI opval = TRUNCDISI (tmp_res);
5538 SET_H_GR (f_rd, opval);
5539 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5540 }
5541 } while (0);
5542
5543 SEM_NBRANCH_FINI (vpc, 0);
5544 return status;
5545 }
5546
5547 /* umul-imm: umul $rs1,$simm13,$rd */
5548
5549 SEM_STATUS
5550 SEM_FN_NAME (sparc64,umul_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5551 {
5552 SEM_STATUS status = 0;
5553 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5554 int UNUSED written = 0;
5555 IADDR UNUSED pc = GET_H_PC ();
5556 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5557 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5558 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5559
5560 do {
5561 DI tmp_res;
5562 tmp_res = MULDI (ZEXTSIDI (GET_H_GR (f_rs1)), ZEXTHIDI (f_simm13));
5563 {
5564 SI opval = TRUNCDISI (SRLDI (tmp_res, 32));
5565 SET_H_Y (opval);
5566 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5567 }
5568 {
5569 SI opval = TRUNCDISI (tmp_res);
5570 SET_H_GR (f_rd, opval);
5571 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5572 }
5573 } while (0);
5574
5575 SEM_NBRANCH_FINI (vpc, 0);
5576 return status;
5577 }
5578
5579 /* umul-cc: umulcc $rs1,$rs2,$rd */
5580
5581 SEM_STATUS
5582 SEM_FN_NAME (sparc64,umul_cc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5583 {
5584 SEM_STATUS status = 0;
5585 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5586 int UNUSED written = 0;
5587 IADDR UNUSED pc = GET_H_PC ();
5588 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5589 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5590 EXTRACT_IFMT_LDSB_REG_REG_CODE
5591
5592 do {
5593 DI tmp_res;
5594 tmp_res = MULDI (ZEXTSIDI (GET_H_GR (f_rs1)), ZEXTSIDI (GET_H_GR (f_rs2)));
5595 {
5596 SI opval = TRUNCDISI (SRLDI (tmp_res, 32));
5597 SET_H_Y (opval);
5598 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5599 }
5600 {
5601 SI opval = TRUNCDISI (tmp_res);
5602 SET_H_GR (f_rd, opval);
5603 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5604 }
5605 do {
5606 {
5607 BI opval = EQSI (TRUNCDISI (tmp_res), 0);
5608 CPU (h_icc_z) = opval;
5609 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
5610 }
5611 {
5612 BI opval = LTSI (TRUNCDISI (tmp_res), 0);
5613 CPU (h_icc_n) = opval;
5614 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
5615 }
5616 {
5617 BI opval = 0;
5618 CPU (h_icc_c) = opval;
5619 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5620 }
5621 {
5622 BI opval = 0;
5623 CPU (h_icc_v) = opval;
5624 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5625 }
5626 } while (0);
5627 } while (0);
5628
5629 SEM_NBRANCH_FINI (vpc, 0);
5630 return status;
5631 }
5632
5633 /* umul-cc-imm: umulcc $rs1,$simm13,$rd */
5634
5635 SEM_STATUS
5636 SEM_FN_NAME (sparc64,umul_cc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5637 {
5638 SEM_STATUS status = 0;
5639 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5640 int UNUSED written = 0;
5641 IADDR UNUSED pc = GET_H_PC ();
5642 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5643 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5644 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5645
5646 do {
5647 DI tmp_res;
5648 tmp_res = MULDI (ZEXTSIDI (GET_H_GR (f_rs1)), ZEXTHIDI (f_simm13));
5649 {
5650 SI opval = TRUNCDISI (SRLDI (tmp_res, 32));
5651 SET_H_Y (opval);
5652 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5653 }
5654 {
5655 SI opval = TRUNCDISI (tmp_res);
5656 SET_H_GR (f_rd, opval);
5657 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5658 }
5659 do {
5660 {
5661 BI opval = EQSI (TRUNCDISI (tmp_res), 0);
5662 CPU (h_icc_z) = opval;
5663 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
5664 }
5665 {
5666 BI opval = LTSI (TRUNCDISI (tmp_res), 0);
5667 CPU (h_icc_n) = opval;
5668 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
5669 }
5670 {
5671 BI opval = 0;
5672 CPU (h_icc_c) = opval;
5673 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5674 }
5675 {
5676 BI opval = 0;
5677 CPU (h_icc_v) = opval;
5678 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5679 }
5680 } while (0);
5681 } while (0);
5682
5683 SEM_NBRANCH_FINI (vpc, 0);
5684 return status;
5685 }
5686
5687 /* mulscc: mulscc $rs1,$rs2,$rd */
5688
5689 SEM_STATUS
5690 SEM_FN_NAME (sparc64,mulscc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5691 {
5692 SEM_STATUS status = 0;
5693 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5694 int UNUSED written = 0;
5695 IADDR UNUSED pc = GET_H_PC ();
5696 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5697 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5698 EXTRACT_IFMT_LDSB_REG_REG_CODE
5699
5700 do {
5701 SI tmp_rd_tmp;
5702 SI tmp_add_tmp;
5703 SI tmp_tmp;
5704 tmp_tmp = SRLSI (GET_H_GR (f_rs1), 1);
5705 if (NEBI (XORBI (CPU (h_icc_n), CPU (h_icc_v)), 0)) {
5706 tmp_tmp = ORSI (tmp_tmp, 0x80000000);
5707 }
5708 if (NESI (ANDSI (GET_H_Y (), 1), 0)) {
5709 tmp_add_tmp = GET_H_GR (f_rs2);
5710 } else {
5711 tmp_add_tmp = 0;
5712 }
5713 tmp_rd_tmp = ADDSI (tmp_tmp, tmp_add_tmp);
5714 do {
5715 SI tmp_x;
5716 tmp_x = ADDCSI (tmp_tmp, tmp_add_tmp, 0);
5717 {
5718 BI opval = ADDCFSI (tmp_tmp, tmp_add_tmp, 0);
5719 CPU (h_icc_c) = opval;
5720 TRACE_RESULT (current_cpu, abuf, "icc-c", 'x', opval);
5721 }
5722 {
5723 BI opval = ADDOFSI (tmp_tmp, tmp_add_tmp, 0);
5724 CPU (h_icc_v) = opval;
5725 TRACE_RESULT (current_cpu, abuf, "icc-v", 'x', opval);
5726 }
5727 {
5728 BI opval = LTSI (tmp_x, 0);
5729 CPU (h_icc_n) = opval;
5730 TRACE_RESULT (current_cpu, abuf, "icc-n", 'x', opval);
5731 }
5732 {
5733 BI opval = EQSI (tmp_x, 0);
5734 CPU (h_icc_z) = opval;
5735 TRACE_RESULT (current_cpu, abuf, "icc-z", 'x', opval);
5736 }
5737 } while (0);
5738 {
5739 SI opval = SRLSI (GET_H_Y (), 1);
5740 SET_H_Y (opval);
5741 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5742 }
5743 if (NESI (ANDSI (GET_H_GR (f_rs1), 1), 0)) {
5744 {
5745 SI opval = ORSI (GET_H_Y (), 0x80000000);
5746 SET_H_Y (opval);
5747 TRACE_RESULT (current_cpu, abuf, "y-0", 'x', opval);
5748 }
5749 }
5750 {
5751 SI opval = tmp_rd_tmp;
5752 SET_H_GR (f_rd, opval);
5753 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5754 }
5755 } while (0);
5756
5757 SEM_NBRANCH_FINI (vpc, 0);
5758 return status;
5759 }
5760
5761 /* save: save $rs1,$rs2,$rd */
5762
5763 SEM_STATUS
5764 SEM_FN_NAME (sparc64,save) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5765 {
5766 SEM_STATUS status = 0;
5767 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5768 int UNUSED written = 0;
5769 IADDR UNUSED pc = GET_H_PC ();
5770 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5771 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5772 EXTRACT_IFMT_LDSB_REG_REG_CODE
5773
5774 {
5775 SI opval = sparc64_do_save (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
5776 SET_H_GR (f_rd, opval);
5777 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5778 }
5779
5780 SEM_NBRANCH_FINI (vpc, 0);
5781 return status;
5782 }
5783
5784 /* save-imm: save $rs1,$simm13,$rd */
5785
5786 SEM_STATUS
5787 SEM_FN_NAME (sparc64,save_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5788 {
5789 SEM_STATUS status = 0;
5790 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5791 int UNUSED written = 0;
5792 IADDR UNUSED pc = GET_H_PC ();
5793 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5794 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5795 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5796
5797 {
5798 SI opval = sparc64_do_save (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
5799 SET_H_GR (f_rd, opval);
5800 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5801 }
5802
5803 SEM_NBRANCH_FINI (vpc, 0);
5804 return status;
5805 }
5806
5807 /* restore: restore $rs1,$rs2,$rd */
5808
5809 SEM_STATUS
5810 SEM_FN_NAME (sparc64,restore) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5811 {
5812 SEM_STATUS status = 0;
5813 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5814 int UNUSED written = 0;
5815 IADDR UNUSED pc = GET_H_PC ();
5816 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5817 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5818 EXTRACT_IFMT_LDSB_REG_REG_CODE
5819
5820 {
5821 SI opval = sparc64_do_restore (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
5822 SET_H_GR (f_rd, opval);
5823 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5824 }
5825
5826 SEM_NBRANCH_FINI (vpc, 0);
5827 return status;
5828 }
5829
5830 /* restore-imm: restore $rs1,$simm13,$rd */
5831
5832 SEM_STATUS
5833 SEM_FN_NAME (sparc64,restore_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5834 {
5835 SEM_STATUS status = 0;
5836 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5837 int UNUSED written = 0;
5838 IADDR UNUSED pc = GET_H_PC ();
5839 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5840 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5841 EXTRACT_IFMT_LDSB_REG_IMM_CODE
5842
5843 {
5844 SI opval = sparc64_do_restore (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
5845 SET_H_GR (f_rd, opval);
5846 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5847 }
5848
5849 SEM_NBRANCH_FINI (vpc, 0);
5850 return status;
5851 }
5852
5853 /* rett: rett $rs1,$rs2 */
5854
5855 SEM_STATUS
5856 SEM_FN_NAME (sparc64,rett) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5857 {
5858 SEM_STATUS status = 0;
5859 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5860 int UNUSED written = 0;
5861 IADDR UNUSED pc = GET_H_PC ();
5862 SEM_BRANCH_INIT
5863 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5864 EXTRACT_IFMT_FLUSH_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5865 EXTRACT_IFMT_FLUSH_CODE
5866
5867 do {
5868 {
5869 USI opval = sparc64_do_rett (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
5870 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
5871 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5872 }
5873 } while (0);
5874
5875 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
5876 return status;
5877 }
5878
5879 /* rett-imm: rett $rs1,$simm13 */
5880
5881 SEM_STATUS
5882 SEM_FN_NAME (sparc64,rett_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5883 {
5884 SEM_STATUS status = 0;
5885 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5886 int UNUSED written = 0;
5887 IADDR UNUSED pc = GET_H_PC ();
5888 SEM_BRANCH_INIT
5889 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5890 EXTRACT_IFMT_FLUSH_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
5891 EXTRACT_IFMT_FLUSH_IMM_CODE
5892
5893 do {
5894 {
5895 USI opval = sparc64_do_rett (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
5896 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
5897 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5898 }
5899 } while (0);
5900
5901 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
5902 return status;
5903 }
5904
5905 /* unimp: unimp $imm22 */
5906
5907 SEM_STATUS
5908 SEM_FN_NAME (sparc64,unimp) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5909 {
5910 SEM_STATUS status = 0;
5911 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5912 int UNUSED written = 0;
5913 IADDR UNUSED pc = GET_H_PC ();
5914 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5915 EXTRACT_IFMT_UNIMP_VARS /* f-imm22 f-op2 f-rd-res f-op */
5916 EXTRACT_IFMT_UNIMP_CODE
5917
5918 sparc_do_unimp (current_cpu, pc, f_imm22);
5919
5920 SEM_NBRANCH_FINI (vpc, 0);
5921 return status;
5922 }
5923
5924 /* call: call $disp30 */
5925
5926 SEM_STATUS
5927 SEM_FN_NAME (sparc64,call) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5928 {
5929 SEM_STATUS status = 0;
5930 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5931 int UNUSED written = 0;
5932 IADDR UNUSED pc = GET_H_PC ();
5933 SEM_BRANCH_INIT
5934 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5935 EXTRACT_IFMT_CALL_VARS /* f-disp30 f-op */
5936 IADDR i_disp30;
5937 EXTRACT_IFMT_CALL_CODE
5938 i_disp30 = f_disp30;
5939
5940 do {
5941 {
5942 SI opval = pc;
5943 SET_H_GR (((UINT) 15), opval);
5944 TRACE_RESULT (current_cpu, abuf, "gr-15", 'x', opval);
5945 }
5946 do {
5947 {
5948 USI opval = i_disp30;
5949 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
5950 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5951 }
5952 } while (0);
5953 } while (0);
5954
5955 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET)));
5956 return status;
5957 }
5958
5959 /* jmpl: jmpl $rs1+$rs2,$rd */
5960
5961 SEM_STATUS
5962 SEM_FN_NAME (sparc64,jmpl) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5963 {
5964 SEM_STATUS status = 0;
5965 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5966 int UNUSED written = 0;
5967 IADDR UNUSED pc = GET_H_PC ();
5968 SEM_BRANCH_INIT
5969 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5970 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
5971 EXTRACT_IFMT_LDSB_REG_REG_CODE
5972
5973 do {
5974 {
5975 SI opval = pc;
5976 SET_H_GR (f_rd, opval);
5977 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
5978 }
5979 do {
5980 {
5981 USI opval = ADDSI (GET_H_GR (f_rs1), GET_H_GR (f_rs2));
5982 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
5983 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5984 }
5985 } while (0);
5986 } while (0);
5987
5988 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET)));
5989 return status;
5990 }
5991
5992 /* jmpl-imm: jmpl $rs1+$simm13,$rd */
5993
5994 SEM_STATUS
5995 SEM_FN_NAME (sparc64,jmpl_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
5996 {
5997 SEM_STATUS status = 0;
5998 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5999 int UNUSED written = 0;
6000 IADDR UNUSED pc = GET_H_PC ();
6001 SEM_BRANCH_INIT
6002 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6003 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
6004 EXTRACT_IFMT_LDSB_REG_IMM_CODE
6005
6006 do {
6007 {
6008 SI opval = pc;
6009 SET_H_GR (f_rd, opval);
6010 TRACE_RESULT (current_cpu, abuf, "rd", 'x', opval);
6011 }
6012 do {
6013 {
6014 USI opval = ADDSI (GET_H_GR (f_rs1), f_simm13);
6015 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6016 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6017 }
6018 } while (0);
6019 } while (0);
6020
6021 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6022 return status;
6023 }
6024
6025 /* ba: ba$a $disp22 */
6026
6027 SEM_STATUS
6028 SEM_FN_NAME (sparc64,ba) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6029 {
6030 SEM_STATUS status = 0;
6031 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6032 int UNUSED written = 0;
6033 IADDR UNUSED pc = GET_H_PC ();
6034 SEM_BRANCH_INIT
6035 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6036 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6037 IADDR i_disp22;
6038 EXTRACT_IFMT_BA_CODE
6039 i_disp22 = f_disp22;
6040
6041 do {
6042 do {
6043 {
6044 USI opval = i_disp22;
6045 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6046 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6047 }
6048 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6049 } while (0);
6050 } while (0);
6051
6052 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6053 return status;
6054 }
6055
6056 /* ta: ta $rs1,$rs2 */
6057
6058 SEM_STATUS
6059 SEM_FN_NAME (sparc64,ta) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6060 {
6061 SEM_STATUS status = 0;
6062 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6063 int UNUSED written = 0;
6064 IADDR UNUSED pc = GET_H_PC ();
6065 SEM_BRANCH_INIT
6066 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6067 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6068 EXTRACT_IFMT_TA_CODE
6069
6070 {
6071 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6072 ;
6073 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6074 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6075 }
6076
6077 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6078 return status;
6079 }
6080
6081 /* ta-imm: ta $rs1,$simm13 */
6082
6083 SEM_STATUS
6084 SEM_FN_NAME (sparc64,ta_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6085 {
6086 SEM_STATUS status = 0;
6087 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6088 int UNUSED written = 0;
6089 IADDR UNUSED pc = GET_H_PC ();
6090 SEM_BRANCH_INIT
6091 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6092 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6093 EXTRACT_IFMT_TA_IMM_CODE
6094
6095 {
6096 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6097 ;
6098 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6099 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6100 }
6101
6102 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_UNCOND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6103 return status;
6104 }
6105
6106 /* bn: bn$a $disp22 */
6107
6108 SEM_STATUS
6109 SEM_FN_NAME (sparc64,bn) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6110 {
6111 SEM_STATUS status = 0;
6112 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6113 int UNUSED written = 0;
6114 IADDR UNUSED pc = GET_H_PC ();
6115 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6116 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6117 EXTRACT_IFMT_BA_CODE
6118
6119 do {
6120 do {
6121 do { } while (0); /*nop*/
6122 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6123 } while (0);
6124 } while (0);
6125
6126 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6127 return status;
6128 }
6129
6130 /* tn: tn $rs1,$rs2 */
6131
6132 SEM_STATUS
6133 SEM_FN_NAME (sparc64,tn) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6134 {
6135 SEM_STATUS status = 0;
6136 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6137 int UNUSED written = 0;
6138 IADDR UNUSED pc = GET_H_PC ();
6139 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6140 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6141 EXTRACT_IFMT_TA_CODE
6142
6143 do { } while (0); /*nop*/
6144
6145 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET)));
6146 return status;
6147 }
6148
6149 /* tn-imm: tn $rs1,$simm13 */
6150
6151 SEM_STATUS
6152 SEM_FN_NAME (sparc64,tn_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6153 {
6154 SEM_STATUS status = 0;
6155 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6156 int UNUSED written = 0;
6157 IADDR UNUSED pc = GET_H_PC ();
6158 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6159 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6160 EXTRACT_IFMT_TA_IMM_CODE
6161
6162 do { } while (0); /*nop*/
6163
6164 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET)));
6165 return status;
6166 }
6167
6168 /* bne: bne$a $disp22 */
6169
6170 SEM_STATUS
6171 SEM_FN_NAME (sparc64,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6172 {
6173 SEM_STATUS status = 0;
6174 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6175 int UNUSED written = 0;
6176 IADDR UNUSED pc = GET_H_PC ();
6177 SEM_BRANCH_INIT
6178 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6179 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6180 IADDR i_disp22;
6181 EXTRACT_IFMT_BA_CODE
6182 i_disp22 = f_disp22;
6183
6184 do {
6185 if (NOTBI (CPU (h_icc_z))) {
6186 {
6187 USI opval = i_disp22;
6188 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6189 written |= (1 << 3);
6190 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6191 }
6192 } else {
6193 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6194 }
6195 } while (0);
6196
6197 abuf->written = written;
6198 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6199 return status;
6200 }
6201
6202 /* tne: tne $rs1,$rs2 */
6203
6204 SEM_STATUS
6205 SEM_FN_NAME (sparc64,tne) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6206 {
6207 SEM_STATUS status = 0;
6208 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6209 int UNUSED written = 0;
6210 IADDR UNUSED pc = GET_H_PC ();
6211 SEM_BRANCH_INIT
6212 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6213 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6214 EXTRACT_IFMT_TA_CODE
6215
6216 if (NOTBI (CPU (h_icc_z))) {
6217 {
6218 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6219 ;
6220 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6221 written |= (1 << 4);
6222 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6223 }
6224 }
6225
6226 abuf->written = written;
6227 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6228 return status;
6229 }
6230
6231 /* tne-imm: tne $rs1,$simm13 */
6232
6233 SEM_STATUS
6234 SEM_FN_NAME (sparc64,tne_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6235 {
6236 SEM_STATUS status = 0;
6237 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6238 int UNUSED written = 0;
6239 IADDR UNUSED pc = GET_H_PC ();
6240 SEM_BRANCH_INIT
6241 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6242 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6243 EXTRACT_IFMT_TA_IMM_CODE
6244
6245 if (NOTBI (CPU (h_icc_z))) {
6246 {
6247 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6248 ;
6249 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6250 written |= (1 << 4);
6251 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6252 }
6253 }
6254
6255 abuf->written = written;
6256 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6257 return status;
6258 }
6259
6260 /* be: be$a $disp22 */
6261
6262 SEM_STATUS
6263 SEM_FN_NAME (sparc64,be) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6264 {
6265 SEM_STATUS status = 0;
6266 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6267 int UNUSED written = 0;
6268 IADDR UNUSED pc = GET_H_PC ();
6269 SEM_BRANCH_INIT
6270 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6271 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6272 IADDR i_disp22;
6273 EXTRACT_IFMT_BA_CODE
6274 i_disp22 = f_disp22;
6275
6276 do {
6277 if (CPU (h_icc_z)) {
6278 {
6279 USI opval = i_disp22;
6280 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6281 written |= (1 << 3);
6282 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6283 }
6284 } else {
6285 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6286 }
6287 } while (0);
6288
6289 abuf->written = written;
6290 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6291 return status;
6292 }
6293
6294 /* te: te $rs1,$rs2 */
6295
6296 SEM_STATUS
6297 SEM_FN_NAME (sparc64,te) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6298 {
6299 SEM_STATUS status = 0;
6300 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6301 int UNUSED written = 0;
6302 IADDR UNUSED pc = GET_H_PC ();
6303 SEM_BRANCH_INIT
6304 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6305 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6306 EXTRACT_IFMT_TA_CODE
6307
6308 if (CPU (h_icc_z)) {
6309 {
6310 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6311 ;
6312 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6313 written |= (1 << 4);
6314 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6315 }
6316 }
6317
6318 abuf->written = written;
6319 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6320 return status;
6321 }
6322
6323 /* te-imm: te $rs1,$simm13 */
6324
6325 SEM_STATUS
6326 SEM_FN_NAME (sparc64,te_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6327 {
6328 SEM_STATUS status = 0;
6329 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6330 int UNUSED written = 0;
6331 IADDR UNUSED pc = GET_H_PC ();
6332 SEM_BRANCH_INIT
6333 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6334 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6335 EXTRACT_IFMT_TA_IMM_CODE
6336
6337 if (CPU (h_icc_z)) {
6338 {
6339 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6340 ;
6341 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6342 written |= (1 << 4);
6343 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6344 }
6345 }
6346
6347 abuf->written = written;
6348 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6349 return status;
6350 }
6351
6352 /* bg: bg$a $disp22 */
6353
6354 SEM_STATUS
6355 SEM_FN_NAME (sparc64,bg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6356 {
6357 SEM_STATUS status = 0;
6358 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6359 int UNUSED written = 0;
6360 IADDR UNUSED pc = GET_H_PC ();
6361 SEM_BRANCH_INIT
6362 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6363 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6364 IADDR i_disp22;
6365 EXTRACT_IFMT_BA_CODE
6366 i_disp22 = f_disp22;
6367
6368 do {
6369 if (NOTBI (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v))))) {
6370 {
6371 USI opval = i_disp22;
6372 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6373 written |= (1 << 5);
6374 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6375 }
6376 } else {
6377 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6378 }
6379 } while (0);
6380
6381 abuf->written = written;
6382 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6383 return status;
6384 }
6385
6386 /* tg: tg $rs1,$rs2 */
6387
6388 SEM_STATUS
6389 SEM_FN_NAME (sparc64,tg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6390 {
6391 SEM_STATUS status = 0;
6392 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6393 int UNUSED written = 0;
6394 IADDR UNUSED pc = GET_H_PC ();
6395 SEM_BRANCH_INIT
6396 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6397 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6398 EXTRACT_IFMT_TA_CODE
6399
6400 if (NOTBI (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v))))) {
6401 {
6402 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6403 ;
6404 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6405 written |= (1 << 6);
6406 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6407 }
6408 }
6409
6410 abuf->written = written;
6411 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6412 return status;
6413 }
6414
6415 /* tg-imm: tg $rs1,$simm13 */
6416
6417 SEM_STATUS
6418 SEM_FN_NAME (sparc64,tg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6419 {
6420 SEM_STATUS status = 0;
6421 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6422 int UNUSED written = 0;
6423 IADDR UNUSED pc = GET_H_PC ();
6424 SEM_BRANCH_INIT
6425 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6426 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6427 EXTRACT_IFMT_TA_IMM_CODE
6428
6429 if (NOTBI (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v))))) {
6430 {
6431 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6432 ;
6433 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6434 written |= (1 << 6);
6435 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6436 }
6437 }
6438
6439 abuf->written = written;
6440 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6441 return status;
6442 }
6443
6444 /* ble: ble$a $disp22 */
6445
6446 SEM_STATUS
6447 SEM_FN_NAME (sparc64,ble) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6448 {
6449 SEM_STATUS status = 0;
6450 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6451 int UNUSED written = 0;
6452 IADDR UNUSED pc = GET_H_PC ();
6453 SEM_BRANCH_INIT
6454 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6455 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6456 IADDR i_disp22;
6457 EXTRACT_IFMT_BA_CODE
6458 i_disp22 = f_disp22;
6459
6460 do {
6461 if (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
6462 {
6463 USI opval = i_disp22;
6464 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6465 written |= (1 << 5);
6466 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6467 }
6468 } else {
6469 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6470 }
6471 } while (0);
6472
6473 abuf->written = written;
6474 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6475 return status;
6476 }
6477
6478 /* tle: tle $rs1,$rs2 */
6479
6480 SEM_STATUS
6481 SEM_FN_NAME (sparc64,tle) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6482 {
6483 SEM_STATUS status = 0;
6484 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6485 int UNUSED written = 0;
6486 IADDR UNUSED pc = GET_H_PC ();
6487 SEM_BRANCH_INIT
6488 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6489 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6490 EXTRACT_IFMT_TA_CODE
6491
6492 if (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
6493 {
6494 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6495 ;
6496 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6497 written |= (1 << 6);
6498 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6499 }
6500 }
6501
6502 abuf->written = written;
6503 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6504 return status;
6505 }
6506
6507 /* tle-imm: tle $rs1,$simm13 */
6508
6509 SEM_STATUS
6510 SEM_FN_NAME (sparc64,tle_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6511 {
6512 SEM_STATUS status = 0;
6513 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6514 int UNUSED written = 0;
6515 IADDR UNUSED pc = GET_H_PC ();
6516 SEM_BRANCH_INIT
6517 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6518 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6519 EXTRACT_IFMT_TA_IMM_CODE
6520
6521 if (ORBI (CPU (h_icc_z), XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
6522 {
6523 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6524 ;
6525 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6526 written |= (1 << 6);
6527 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6528 }
6529 }
6530
6531 abuf->written = written;
6532 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6533 return status;
6534 }
6535
6536 /* bge: bge$a $disp22 */
6537
6538 SEM_STATUS
6539 SEM_FN_NAME (sparc64,bge) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6540 {
6541 SEM_STATUS status = 0;
6542 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6543 int UNUSED written = 0;
6544 IADDR UNUSED pc = GET_H_PC ();
6545 SEM_BRANCH_INIT
6546 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6547 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6548 IADDR i_disp22;
6549 EXTRACT_IFMT_BA_CODE
6550 i_disp22 = f_disp22;
6551
6552 do {
6553 if (NOTBI (XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
6554 {
6555 USI opval = i_disp22;
6556 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6557 written |= (1 << 4);
6558 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6559 }
6560 } else {
6561 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6562 }
6563 } while (0);
6564
6565 abuf->written = written;
6566 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6567 return status;
6568 }
6569
6570 /* tge: tge $rs1,$rs2 */
6571
6572 SEM_STATUS
6573 SEM_FN_NAME (sparc64,tge) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6574 {
6575 SEM_STATUS status = 0;
6576 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6577 int UNUSED written = 0;
6578 IADDR UNUSED pc = GET_H_PC ();
6579 SEM_BRANCH_INIT
6580 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6581 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6582 EXTRACT_IFMT_TA_CODE
6583
6584 if (NOTBI (XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
6585 {
6586 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6587 ;
6588 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6589 written |= (1 << 5);
6590 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6591 }
6592 }
6593
6594 abuf->written = written;
6595 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6596 return status;
6597 }
6598
6599 /* tge-imm: tge $rs1,$simm13 */
6600
6601 SEM_STATUS
6602 SEM_FN_NAME (sparc64,tge_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6603 {
6604 SEM_STATUS status = 0;
6605 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6606 int UNUSED written = 0;
6607 IADDR UNUSED pc = GET_H_PC ();
6608 SEM_BRANCH_INIT
6609 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6610 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6611 EXTRACT_IFMT_TA_IMM_CODE
6612
6613 if (NOTBI (XORBI (CPU (h_icc_n), CPU (h_icc_v)))) {
6614 {
6615 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6616 ;
6617 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6618 written |= (1 << 5);
6619 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6620 }
6621 }
6622
6623 abuf->written = written;
6624 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6625 return status;
6626 }
6627
6628 /* bl: bl$a $disp22 */
6629
6630 SEM_STATUS
6631 SEM_FN_NAME (sparc64,bl) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6632 {
6633 SEM_STATUS status = 0;
6634 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6635 int UNUSED written = 0;
6636 IADDR UNUSED pc = GET_H_PC ();
6637 SEM_BRANCH_INIT
6638 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6639 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6640 IADDR i_disp22;
6641 EXTRACT_IFMT_BA_CODE
6642 i_disp22 = f_disp22;
6643
6644 do {
6645 if (XORBI (CPU (h_icc_n), CPU (h_icc_v))) {
6646 {
6647 USI opval = i_disp22;
6648 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6649 written |= (1 << 4);
6650 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6651 }
6652 } else {
6653 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6654 }
6655 } while (0);
6656
6657 abuf->written = written;
6658 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6659 return status;
6660 }
6661
6662 /* tl: tl $rs1,$rs2 */
6663
6664 SEM_STATUS
6665 SEM_FN_NAME (sparc64,tl) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6666 {
6667 SEM_STATUS status = 0;
6668 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6669 int UNUSED written = 0;
6670 IADDR UNUSED pc = GET_H_PC ();
6671 SEM_BRANCH_INIT
6672 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6673 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6674 EXTRACT_IFMT_TA_CODE
6675
6676 if (XORBI (CPU (h_icc_n), CPU (h_icc_v))) {
6677 {
6678 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6679 ;
6680 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6681 written |= (1 << 5);
6682 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6683 }
6684 }
6685
6686 abuf->written = written;
6687 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6688 return status;
6689 }
6690
6691 /* tl-imm: tl $rs1,$simm13 */
6692
6693 SEM_STATUS
6694 SEM_FN_NAME (sparc64,tl_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6695 {
6696 SEM_STATUS status = 0;
6697 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6698 int UNUSED written = 0;
6699 IADDR UNUSED pc = GET_H_PC ();
6700 SEM_BRANCH_INIT
6701 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6702 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6703 EXTRACT_IFMT_TA_IMM_CODE
6704
6705 if (XORBI (CPU (h_icc_n), CPU (h_icc_v))) {
6706 {
6707 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6708 ;
6709 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6710 written |= (1 << 5);
6711 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6712 }
6713 }
6714
6715 abuf->written = written;
6716 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6717 return status;
6718 }
6719
6720 /* bgu: bgu$a $disp22 */
6721
6722 SEM_STATUS
6723 SEM_FN_NAME (sparc64,bgu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6724 {
6725 SEM_STATUS status = 0;
6726 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6727 int UNUSED written = 0;
6728 IADDR UNUSED pc = GET_H_PC ();
6729 SEM_BRANCH_INIT
6730 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6731 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6732 IADDR i_disp22;
6733 EXTRACT_IFMT_BA_CODE
6734 i_disp22 = f_disp22;
6735
6736 do {
6737 if (NOTBI (ORBI (CPU (h_icc_c), CPU (h_icc_z)))) {
6738 {
6739 USI opval = i_disp22;
6740 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6741 written |= (1 << 4);
6742 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6743 }
6744 } else {
6745 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6746 }
6747 } while (0);
6748
6749 abuf->written = written;
6750 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6751 return status;
6752 }
6753
6754 /* tgu: tgu $rs1,$rs2 */
6755
6756 SEM_STATUS
6757 SEM_FN_NAME (sparc64,tgu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6758 {
6759 SEM_STATUS status = 0;
6760 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6761 int UNUSED written = 0;
6762 IADDR UNUSED pc = GET_H_PC ();
6763 SEM_BRANCH_INIT
6764 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6765 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6766 EXTRACT_IFMT_TA_CODE
6767
6768 if (NOTBI (ORBI (CPU (h_icc_c), CPU (h_icc_z)))) {
6769 {
6770 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6771 ;
6772 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6773 written |= (1 << 5);
6774 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6775 }
6776 }
6777
6778 abuf->written = written;
6779 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6780 return status;
6781 }
6782
6783 /* tgu-imm: tgu $rs1,$simm13 */
6784
6785 SEM_STATUS
6786 SEM_FN_NAME (sparc64,tgu_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6787 {
6788 SEM_STATUS status = 0;
6789 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6790 int UNUSED written = 0;
6791 IADDR UNUSED pc = GET_H_PC ();
6792 SEM_BRANCH_INIT
6793 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6794 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6795 EXTRACT_IFMT_TA_IMM_CODE
6796
6797 if (NOTBI (ORBI (CPU (h_icc_c), CPU (h_icc_z)))) {
6798 {
6799 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6800 ;
6801 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6802 written |= (1 << 5);
6803 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6804 }
6805 }
6806
6807 abuf->written = written;
6808 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6809 return status;
6810 }
6811
6812 /* bleu: bleu$a $disp22 */
6813
6814 SEM_STATUS
6815 SEM_FN_NAME (sparc64,bleu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6816 {
6817 SEM_STATUS status = 0;
6818 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6819 int UNUSED written = 0;
6820 IADDR UNUSED pc = GET_H_PC ();
6821 SEM_BRANCH_INIT
6822 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6823 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6824 IADDR i_disp22;
6825 EXTRACT_IFMT_BA_CODE
6826 i_disp22 = f_disp22;
6827
6828 do {
6829 if (ORBI (CPU (h_icc_c), CPU (h_icc_z))) {
6830 {
6831 USI opval = i_disp22;
6832 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6833 written |= (1 << 4);
6834 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6835 }
6836 } else {
6837 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6838 }
6839 } while (0);
6840
6841 abuf->written = written;
6842 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6843 return status;
6844 }
6845
6846 /* tleu: tleu $rs1,$rs2 */
6847
6848 SEM_STATUS
6849 SEM_FN_NAME (sparc64,tleu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6850 {
6851 SEM_STATUS status = 0;
6852 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6853 int UNUSED written = 0;
6854 IADDR UNUSED pc = GET_H_PC ();
6855 SEM_BRANCH_INIT
6856 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6857 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6858 EXTRACT_IFMT_TA_CODE
6859
6860 if (ORBI (CPU (h_icc_c), CPU (h_icc_z))) {
6861 {
6862 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6863 ;
6864 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6865 written |= (1 << 5);
6866 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6867 }
6868 }
6869
6870 abuf->written = written;
6871 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6872 return status;
6873 }
6874
6875 /* tleu-imm: tleu $rs1,$simm13 */
6876
6877 SEM_STATUS
6878 SEM_FN_NAME (sparc64,tleu_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6879 {
6880 SEM_STATUS status = 0;
6881 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6882 int UNUSED written = 0;
6883 IADDR UNUSED pc = GET_H_PC ();
6884 SEM_BRANCH_INIT
6885 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6886 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6887 EXTRACT_IFMT_TA_IMM_CODE
6888
6889 if (ORBI (CPU (h_icc_c), CPU (h_icc_z))) {
6890 {
6891 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6892 ;
6893 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6894 written |= (1 << 5);
6895 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6896 }
6897 }
6898
6899 abuf->written = written;
6900 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6901 return status;
6902 }
6903
6904 /* bcc: bcc$a $disp22 */
6905
6906 SEM_STATUS
6907 SEM_FN_NAME (sparc64,bcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6908 {
6909 SEM_STATUS status = 0;
6910 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6911 int UNUSED written = 0;
6912 IADDR UNUSED pc = GET_H_PC ();
6913 SEM_BRANCH_INIT
6914 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6915 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
6916 IADDR i_disp22;
6917 EXTRACT_IFMT_BA_CODE
6918 i_disp22 = f_disp22;
6919
6920 do {
6921 if (NOTBI (CPU (h_icc_c))) {
6922 {
6923 USI opval = i_disp22;
6924 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6925 written |= (1 << 3);
6926 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6927 }
6928 } else {
6929 SEM_ANNUL_INSN (current_cpu, pc, f_a);
6930 }
6931 } while (0);
6932
6933 abuf->written = written;
6934 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
6935 return status;
6936 }
6937
6938 /* tcc: tcc $rs1,$rs2 */
6939
6940 SEM_STATUS
6941 SEM_FN_NAME (sparc64,tcc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6942 {
6943 SEM_STATUS status = 0;
6944 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6945 int UNUSED written = 0;
6946 IADDR UNUSED pc = GET_H_PC ();
6947 SEM_BRANCH_INIT
6948 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6949 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6950 EXTRACT_IFMT_TA_CODE
6951
6952 if (NOTBI (CPU (h_icc_c))) {
6953 {
6954 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
6955 ;
6956 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6957 written |= (1 << 4);
6958 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6959 }
6960 }
6961
6962 abuf->written = written;
6963 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6964 return status;
6965 }
6966
6967 /* tcc-imm: tcc $rs1,$simm13 */
6968
6969 SEM_STATUS
6970 SEM_FN_NAME (sparc64,tcc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
6971 {
6972 SEM_STATUS status = 0;
6973 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6974 int UNUSED written = 0;
6975 IADDR UNUSED pc = GET_H_PC ();
6976 SEM_BRANCH_INIT
6977 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6978 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
6979 EXTRACT_IFMT_TA_IMM_CODE
6980
6981 if (NOTBI (CPU (h_icc_c))) {
6982 {
6983 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
6984 ;
6985 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
6986 written |= (1 << 4);
6987 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6988 }
6989 }
6990
6991 abuf->written = written;
6992 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
6993 return status;
6994 }
6995
6996 /* bcs: bcs$a $disp22 */
6997
6998 SEM_STATUS
6999 SEM_FN_NAME (sparc64,bcs) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7000 {
7001 SEM_STATUS status = 0;
7002 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7003 int UNUSED written = 0;
7004 IADDR UNUSED pc = GET_H_PC ();
7005 SEM_BRANCH_INIT
7006 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7007 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
7008 IADDR i_disp22;
7009 EXTRACT_IFMT_BA_CODE
7010 i_disp22 = f_disp22;
7011
7012 do {
7013 if (CPU (h_icc_c)) {
7014 {
7015 USI opval = i_disp22;
7016 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7017 written |= (1 << 3);
7018 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7019 }
7020 } else {
7021 SEM_ANNUL_INSN (current_cpu, pc, f_a);
7022 }
7023 } while (0);
7024
7025 abuf->written = written;
7026 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
7027 return status;
7028 }
7029
7030 /* tcs: tcs $rs1,$rs2 */
7031
7032 SEM_STATUS
7033 SEM_FN_NAME (sparc64,tcs) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7034 {
7035 SEM_STATUS status = 0;
7036 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7037 int UNUSED written = 0;
7038 IADDR UNUSED pc = GET_H_PC ();
7039 SEM_BRANCH_INIT
7040 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7041 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7042 EXTRACT_IFMT_TA_CODE
7043
7044 if (CPU (h_icc_c)) {
7045 {
7046 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
7047 ;
7048 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7049 written |= (1 << 4);
7050 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7051 }
7052 }
7053
7054 abuf->written = written;
7055 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7056 return status;
7057 }
7058
7059 /* tcs-imm: tcs $rs1,$simm13 */
7060
7061 SEM_STATUS
7062 SEM_FN_NAME (sparc64,tcs_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7063 {
7064 SEM_STATUS status = 0;
7065 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7066 int UNUSED written = 0;
7067 IADDR UNUSED pc = GET_H_PC ();
7068 SEM_BRANCH_INIT
7069 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7070 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7071 EXTRACT_IFMT_TA_IMM_CODE
7072
7073 if (CPU (h_icc_c)) {
7074 {
7075 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
7076 ;
7077 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7078 written |= (1 << 4);
7079 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7080 }
7081 }
7082
7083 abuf->written = written;
7084 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7085 return status;
7086 }
7087
7088 /* bpos: bpos$a $disp22 */
7089
7090 SEM_STATUS
7091 SEM_FN_NAME (sparc64,bpos) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7092 {
7093 SEM_STATUS status = 0;
7094 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7095 int UNUSED written = 0;
7096 IADDR UNUSED pc = GET_H_PC ();
7097 SEM_BRANCH_INIT
7098 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7099 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
7100 IADDR i_disp22;
7101 EXTRACT_IFMT_BA_CODE
7102 i_disp22 = f_disp22;
7103
7104 do {
7105 if (NOTBI (CPU (h_icc_n))) {
7106 {
7107 USI opval = i_disp22;
7108 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7109 written |= (1 << 3);
7110 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7111 }
7112 } else {
7113 SEM_ANNUL_INSN (current_cpu, pc, f_a);
7114 }
7115 } while (0);
7116
7117 abuf->written = written;
7118 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
7119 return status;
7120 }
7121
7122 /* tpos: tpos $rs1,$rs2 */
7123
7124 SEM_STATUS
7125 SEM_FN_NAME (sparc64,tpos) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7126 {
7127 SEM_STATUS status = 0;
7128 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7129 int UNUSED written = 0;
7130 IADDR UNUSED pc = GET_H_PC ();
7131 SEM_BRANCH_INIT
7132 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7133 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7134 EXTRACT_IFMT_TA_CODE
7135
7136 if (NOTBI (CPU (h_icc_n))) {
7137 {
7138 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
7139 ;
7140 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7141 written |= (1 << 4);
7142 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7143 }
7144 }
7145
7146 abuf->written = written;
7147 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7148 return status;
7149 }
7150
7151 /* tpos-imm: tpos $rs1,$simm13 */
7152
7153 SEM_STATUS
7154 SEM_FN_NAME (sparc64,tpos_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7155 {
7156 SEM_STATUS status = 0;
7157 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7158 int UNUSED written = 0;
7159 IADDR UNUSED pc = GET_H_PC ();
7160 SEM_BRANCH_INIT
7161 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7162 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7163 EXTRACT_IFMT_TA_IMM_CODE
7164
7165 if (NOTBI (CPU (h_icc_n))) {
7166 {
7167 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
7168 ;
7169 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7170 written |= (1 << 4);
7171 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7172 }
7173 }
7174
7175 abuf->written = written;
7176 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7177 return status;
7178 }
7179
7180 /* bneg: bneg$a $disp22 */
7181
7182 SEM_STATUS
7183 SEM_FN_NAME (sparc64,bneg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7184 {
7185 SEM_STATUS status = 0;
7186 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7187 int UNUSED written = 0;
7188 IADDR UNUSED pc = GET_H_PC ();
7189 SEM_BRANCH_INIT
7190 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7191 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
7192 IADDR i_disp22;
7193 EXTRACT_IFMT_BA_CODE
7194 i_disp22 = f_disp22;
7195
7196 do {
7197 if (CPU (h_icc_n)) {
7198 {
7199 USI opval = i_disp22;
7200 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7201 written |= (1 << 3);
7202 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7203 }
7204 } else {
7205 SEM_ANNUL_INSN (current_cpu, pc, f_a);
7206 }
7207 } while (0);
7208
7209 abuf->written = written;
7210 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
7211 return status;
7212 }
7213
7214 /* tneg: tneg $rs1,$rs2 */
7215
7216 SEM_STATUS
7217 SEM_FN_NAME (sparc64,tneg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7218 {
7219 SEM_STATUS status = 0;
7220 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7221 int UNUSED written = 0;
7222 IADDR UNUSED pc = GET_H_PC ();
7223 SEM_BRANCH_INIT
7224 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7225 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7226 EXTRACT_IFMT_TA_CODE
7227
7228 if (CPU (h_icc_n)) {
7229 {
7230 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
7231 ;
7232 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7233 written |= (1 << 4);
7234 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7235 }
7236 }
7237
7238 abuf->written = written;
7239 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7240 return status;
7241 }
7242
7243 /* tneg-imm: tneg $rs1,$simm13 */
7244
7245 SEM_STATUS
7246 SEM_FN_NAME (sparc64,tneg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7247 {
7248 SEM_STATUS status = 0;
7249 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7250 int UNUSED written = 0;
7251 IADDR UNUSED pc = GET_H_PC ();
7252 SEM_BRANCH_INIT
7253 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7254 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7255 EXTRACT_IFMT_TA_IMM_CODE
7256
7257 if (CPU (h_icc_n)) {
7258 {
7259 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
7260 ;
7261 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7262 written |= (1 << 4);
7263 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7264 }
7265 }
7266
7267 abuf->written = written;
7268 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7269 return status;
7270 }
7271
7272 /* bvc: bvc$a $disp22 */
7273
7274 SEM_STATUS
7275 SEM_FN_NAME (sparc64,bvc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7276 {
7277 SEM_STATUS status = 0;
7278 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7279 int UNUSED written = 0;
7280 IADDR UNUSED pc = GET_H_PC ();
7281 SEM_BRANCH_INIT
7282 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7283 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
7284 IADDR i_disp22;
7285 EXTRACT_IFMT_BA_CODE
7286 i_disp22 = f_disp22;
7287
7288 do {
7289 if (NOTBI (CPU (h_icc_v))) {
7290 {
7291 USI opval = i_disp22;
7292 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7293 written |= (1 << 3);
7294 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7295 }
7296 } else {
7297 SEM_ANNUL_INSN (current_cpu, pc, f_a);
7298 }
7299 } while (0);
7300
7301 abuf->written = written;
7302 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
7303 return status;
7304 }
7305
7306 /* tvc: tvc $rs1,$rs2 */
7307
7308 SEM_STATUS
7309 SEM_FN_NAME (sparc64,tvc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7310 {
7311 SEM_STATUS status = 0;
7312 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7313 int UNUSED written = 0;
7314 IADDR UNUSED pc = GET_H_PC ();
7315 SEM_BRANCH_INIT
7316 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7317 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7318 EXTRACT_IFMT_TA_CODE
7319
7320 if (NOTBI (CPU (h_icc_v))) {
7321 {
7322 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
7323 ;
7324 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7325 written |= (1 << 4);
7326 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7327 }
7328 }
7329
7330 abuf->written = written;
7331 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7332 return status;
7333 }
7334
7335 /* tvc-imm: tvc $rs1,$simm13 */
7336
7337 SEM_STATUS
7338 SEM_FN_NAME (sparc64,tvc_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7339 {
7340 SEM_STATUS status = 0;
7341 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7342 int UNUSED written = 0;
7343 IADDR UNUSED pc = GET_H_PC ();
7344 SEM_BRANCH_INIT
7345 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7346 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7347 EXTRACT_IFMT_TA_IMM_CODE
7348
7349 if (NOTBI (CPU (h_icc_v))) {
7350 {
7351 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
7352 ;
7353 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7354 written |= (1 << 4);
7355 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7356 }
7357 }
7358
7359 abuf->written = written;
7360 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7361 return status;
7362 }
7363
7364 /* bvs: bvs$a $disp22 */
7365
7366 SEM_STATUS
7367 SEM_FN_NAME (sparc64,bvs) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7368 {
7369 SEM_STATUS status = 0;
7370 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7371 int UNUSED written = 0;
7372 IADDR UNUSED pc = GET_H_PC ();
7373 SEM_BRANCH_INIT
7374 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7375 EXTRACT_IFMT_BA_VARS /* f-disp22 f-op2 f-fmt2-cond f-a f-op */
7376 IADDR i_disp22;
7377 EXTRACT_IFMT_BA_CODE
7378 i_disp22 = f_disp22;
7379
7380 do {
7381 if (CPU (h_icc_v)) {
7382 {
7383 USI opval = i_disp22;
7384 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7385 written |= (1 << 3);
7386 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7387 }
7388 } else {
7389 SEM_ANNUL_INSN (current_cpu, pc, f_a);
7390 }
7391 } while (0);
7392
7393 abuf->written = written;
7394 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_DELAY_SLOT-CGEN_ATTR_BOOL_OFFSET)));
7395 return status;
7396 }
7397
7398 /* tvs: tvs $rs1,$rs2 */
7399
7400 SEM_STATUS
7401 SEM_FN_NAME (sparc64,tvs) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7402 {
7403 SEM_STATUS status = 0;
7404 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7405 int UNUSED written = 0;
7406 IADDR UNUSED pc = GET_H_PC ();
7407 SEM_BRANCH_INIT
7408 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7409 EXTRACT_IFMT_TA_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7410 EXTRACT_IFMT_TA_CODE
7411
7412 if (CPU (h_icc_v)) {
7413 {
7414 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), GET_H_GR (f_rs2));
7415 ;
7416 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7417 written |= (1 << 4);
7418 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7419 }
7420 }
7421
7422 abuf->written = written;
7423 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7424 return status;
7425 }
7426
7427 /* tvs-imm: tvs $rs1,$simm13 */
7428
7429 SEM_STATUS
7430 SEM_FN_NAME (sparc64,tvs_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7431 {
7432 SEM_STATUS status = 0;
7433 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7434 int UNUSED written = 0;
7435 IADDR UNUSED pc = GET_H_PC ();
7436 SEM_BRANCH_INIT
7437 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7438 EXTRACT_IFMT_TA_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
7439 EXTRACT_IFMT_TA_IMM_CODE
7440
7441 if (CPU (h_icc_v)) {
7442 {
7443 USI opval = sparc64_sw_trap (current_cpu, pc, GET_H_GR (f_rs1), f_simm13);
7444 ;
7445 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
7446 written |= (1 << 4);
7447 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
7448 }
7449 }
7450
7451 abuf->written = written;
7452 SEM_BRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_TRAP-CGEN_ATTR_BOOL_OFFSET))|(1<<(CGEN_INSN_COND_CTI-CGEN_ATTR_BOOL_OFFSET)));
7453 return status;
7454 }
7455
7456 /* ldstub-reg+reg: ldstub [$rs1+$rs2],$rd */
7457
7458 SEM_STATUS
7459 SEM_FN_NAME (sparc64,ldstub_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7460 {
7461 SEM_STATUS status = 0;
7462 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7463 int UNUSED written = 0;
7464 IADDR UNUSED pc = GET_H_PC ();
7465 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7466 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
7467 EXTRACT_IFMT_LDSB_REG_REG_CODE
7468
7469 sparc64_do_ldstub (current_cpu, pc, f_rd, GET_H_GR (f_rs1), GET_H_GR (f_rs2), -1);
7470
7471 SEM_NBRANCH_FINI (vpc, 0);
7472 return status;
7473 }
7474
7475 /* ldstub-reg+imm: ldstub [$rs1+$simm13],$rd */
7476
7477 SEM_STATUS
7478 SEM_FN_NAME (sparc64,ldstub_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7479 {
7480 SEM_STATUS status = 0;
7481 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7482 int UNUSED written = 0;
7483 IADDR UNUSED pc = GET_H_PC ();
7484 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7485 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
7486 EXTRACT_IFMT_LDSB_REG_IMM_CODE
7487
7488 sparc64_do_ldstub (current_cpu, pc, f_rd, GET_H_GR (f_rs1), f_simm13, -1);
7489
7490 SEM_NBRANCH_FINI (vpc, 0);
7491 return status;
7492 }
7493
7494 /* ldstub-reg+reg/asi: ldstub [$rs1+$rs2]$asi,$rd */
7495
7496 SEM_STATUS
7497 SEM_FN_NAME (sparc64,ldstub_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7498 {
7499 SEM_STATUS status = 0;
7500 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7501 int UNUSED written = 0;
7502 IADDR UNUSED pc = GET_H_PC ();
7503 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7504 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
7505 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
7506
7507 sparc64_do_ldstub (current_cpu, pc, f_rd, GET_H_GR (f_rs1), GET_H_GR (f_rs2), f_asi);
7508
7509 SEM_NBRANCH_FINI (vpc, 0);
7510 return status;
7511 }
7512
7513 /* swap-reg+reg: swap [$rs1+$rs2],$rd */
7514
7515 SEM_STATUS
7516 SEM_FN_NAME (sparc64,swap_reg_reg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7517 {
7518 SEM_STATUS status = 0;
7519 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7520 int UNUSED written = 0;
7521 IADDR UNUSED pc = GET_H_PC ();
7522 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7523 EXTRACT_IFMT_LDSB_REG_REG_VARS /* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
7524 EXTRACT_IFMT_LDSB_REG_REG_CODE
7525
7526 sparc64_do_swap (current_cpu, pc, f_rd, GET_H_GR (f_rs1), GET_H_GR (f_rs2), -1);
7527
7528 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET)));
7529 return status;
7530 }
7531
7532 /* swap-reg+imm: swap [$rs1+$simm13],$rd */
7533
7534 SEM_STATUS
7535 SEM_FN_NAME (sparc64,swap_reg_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7536 {
7537 SEM_STATUS status = 0;
7538 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7539 int UNUSED written = 0;
7540 IADDR UNUSED pc = GET_H_PC ();
7541 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7542 EXTRACT_IFMT_LDSB_REG_IMM_VARS /* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
7543 EXTRACT_IFMT_LDSB_REG_IMM_CODE
7544
7545 sparc64_do_swap (current_cpu, pc, f_rd, GET_H_GR (f_rs1), f_simm13, -1);
7546
7547 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET)));
7548 return status;
7549 }
7550
7551 /* swap-reg+reg/asi: swap [$rs1+$rs2]$asi,$rd */
7552
7553 SEM_STATUS
7554 SEM_FN_NAME (sparc64,swap_reg_reg_asi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, CGEN_INSN_INT insn)
7555 {
7556 SEM_STATUS status = 0;
7557 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7558 int UNUSED written = 0;
7559 IADDR UNUSED pc = GET_H_PC ();
7560 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7561 EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS /* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
7562 EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE
7563
7564 sparc64_do_swap (current_cpu, pc, f_rd, GET_H_GR (f_rs1), GET_H_GR (f_rs2), f_asi);
7565
7566 SEM_NBRANCH_FINI (vpc, 0|(1<<(CGEN_INSN_V9_DEPRECATED-CGEN_ATTR_BOOL_OFFSET)));
7567 return status;
7568 }
7569