1 /* Simulator instruction semantics for sparc64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1999 Cygnus Solutions, Inc.
7 This file is part of the Cygnus Simulators.
12 #define WANT_CPU sparc64
13 #define WANT_CPU_SPARC64
20 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
22 /* x-invalid: --invalid-- */
25 SEM_FN_NAME (sparc64
,x_invalid
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
37 /* Update the recorded pc in the cpu state struct. */
40 sim_engine_invalid_insn (current_cpu
, pc
);
41 sim_io_error (CPU_STATE (current_cpu
), "invalid insn not handled\n");
45 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_VIRTUAL
-CGEN_ATTR_BOOL_OFFSET
)));
49 /* x-after: --after-- */
52 SEM_FN_NAME (sparc64
,x_after
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
63 #if WITH_SCACHE_PBB_SPARC64
64 sparc64_pbb_after (current_cpu
, sem_arg
);
68 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_PBB
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_VIRTUAL
-CGEN_ATTR_BOOL_OFFSET
)));
72 /* x-before: --before-- */
75 SEM_FN_NAME (sparc64
,x_before
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
86 #if WITH_SCACHE_PBB_SPARC64
87 sparc64_pbb_before (current_cpu
, sem_arg
);
91 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_PBB
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_VIRTUAL
-CGEN_ATTR_BOOL_OFFSET
)));
95 /* x-cti-chain: --cti-chain-- */
98 SEM_FN_NAME (sparc64
,x_cti_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
109 #if WITH_SCACHE_PBB_SPARC64
111 vpc
= sparc64_pbb_cti_chain (current_cpu
, sem_arg
,
112 pbb_br_npc_ptr
, pbb_br_npc
);
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
));
123 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_PBB
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_VIRTUAL
-CGEN_ATTR_BOOL_OFFSET
)));
127 /* x-chain: --chain-- */
130 SEM_FN_NAME (sparc64
,x_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
141 #if WITH_SCACHE_PBB_SPARC64
142 vpc
= sparc64_pbb_chain (current_cpu
, sem_arg
);
149 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_PBB
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_VIRTUAL
-CGEN_ATTR_BOOL_OFFSET
)));
153 /* x-begin: --begin-- */
156 SEM_FN_NAME (sparc64
,x_begin
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
167 #if WITH_SCACHE_PBB_SPARC64
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
);
173 vpc
= sparc64_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
178 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_PBB
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_VIRTUAL
-CGEN_ATTR_BOOL_OFFSET
)));
182 /* beqz: beqz$a$p $rs1,$disp16 */
185 SEM_FN_NAME (sparc64
,beqz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
187 SEM_STATUS status
= 0;
188 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
189 int UNUSED written
= 0;
190 IADDR UNUSED pc
= GET_H_PC ();
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 */
195 EXTRACT_IFMT_BEQZ_CODE
199 if (EQSI (GET_H_GR (f_rs1
), 0)) {
201 USI opval
= i_disp16
;
202 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
204 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
207 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
216 /* bgez: bgez$a$p $rs1,$disp16 */
219 SEM_FN_NAME (sparc64
,bgez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
221 SEM_STATUS status
= 0;
222 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
223 int UNUSED written
= 0;
224 IADDR UNUSED pc
= GET_H_PC ();
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 */
229 EXTRACT_IFMT_BEQZ_CODE
233 if (GESI (GET_H_GR (f_rs1
), 0)) {
235 USI opval
= i_disp16
;
236 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
238 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
241 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
250 /* bgtz: bgtz$a$p $rs1,$disp16 */
253 SEM_FN_NAME (sparc64
,bgtz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
255 SEM_STATUS status
= 0;
256 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
257 int UNUSED written
= 0;
258 IADDR UNUSED pc
= GET_H_PC ();
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 */
263 EXTRACT_IFMT_BEQZ_CODE
267 if (GTSI (GET_H_GR (f_rs1
), 0)) {
269 USI opval
= i_disp16
;
270 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
272 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
275 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
284 /* blez: blez$a$p $rs1,$disp16 */
287 SEM_FN_NAME (sparc64
,blez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
289 SEM_STATUS status
= 0;
290 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
291 int UNUSED written
= 0;
292 IADDR UNUSED pc
= GET_H_PC ();
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 */
297 EXTRACT_IFMT_BEQZ_CODE
301 if (LESI (GET_H_GR (f_rs1
), 0)) {
303 USI opval
= i_disp16
;
304 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
306 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
309 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
318 /* bltz: bltz$a$p $rs1,$disp16 */
321 SEM_FN_NAME (sparc64
,bltz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
323 SEM_STATUS status
= 0;
324 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
325 int UNUSED written
= 0;
326 IADDR UNUSED pc
= GET_H_PC ();
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 */
331 EXTRACT_IFMT_BEQZ_CODE
335 if (LTSI (GET_H_GR (f_rs1
), 0)) {
337 USI opval
= i_disp16
;
338 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
340 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
343 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
352 /* bnez: bnez$a$p $rs1,$disp16 */
355 SEM_FN_NAME (sparc64
,bnez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
357 SEM_STATUS status
= 0;
358 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
359 int UNUSED written
= 0;
360 IADDR UNUSED pc
= GET_H_PC ();
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 */
365 EXTRACT_IFMT_BEQZ_CODE
369 if (NESI (GET_H_GR (f_rs1
), 0)) {
371 USI opval
= i_disp16
;
372 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
374 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
377 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
386 /* bpcc-ba: ba$a$p %xcc,$disp19 */
389 SEM_FN_NAME (sparc64
,bpcc_ba
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
391 SEM_STATUS status
= 0;
392 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
393 int UNUSED written
= 0;
394 IADDR UNUSED pc
= GET_H_PC ();
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 */
399 EXTRACT_IFMT_BPCC_BA_CODE
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
);
409 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
413 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
417 /* bpcc-bn: bn$a$p %xcc,$disp19 */
420 SEM_FN_NAME (sparc64
,bpcc_bn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
432 do { } while (0); /*nop*/
433 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
437 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
441 /* bpcc-bne: bne$a$p %xcc,$disp19 */
444 SEM_FN_NAME (sparc64
,bpcc_bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
446 SEM_STATUS status
= 0;
447 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
448 int UNUSED written
= 0;
449 IADDR UNUSED pc
= GET_H_PC ();
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 */
454 EXTRACT_IFMT_BPCC_BA_CODE
458 if (NOTBI (CPU (h_xcc_z
))) {
460 USI opval
= i_disp22
;
461 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
463 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
466 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
475 /* bpcc-be: be$a$p %xcc,$disp19 */
478 SEM_FN_NAME (sparc64
,bpcc_be
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
480 SEM_STATUS status
= 0;
481 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
482 int UNUSED written
= 0;
483 IADDR UNUSED pc
= GET_H_PC ();
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 */
488 EXTRACT_IFMT_BPCC_BA_CODE
494 USI opval
= i_disp22
;
495 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
497 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
500 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
509 /* bpcc-bg: bg$a$p %xcc,$disp19 */
512 SEM_FN_NAME (sparc64
,bpcc_bg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
514 SEM_STATUS status
= 0;
515 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
516 int UNUSED written
= 0;
517 IADDR UNUSED pc
= GET_H_PC ();
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 */
522 EXTRACT_IFMT_BPCC_BA_CODE
526 if (NOTBI (ORBI (CPU (h_xcc_z
), XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
))))) {
528 USI opval
= i_disp22
;
529 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
531 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
534 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
543 /* bpcc-ble: ble$a$p %xcc,$disp19 */
546 SEM_FN_NAME (sparc64
,bpcc_ble
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
548 SEM_STATUS status
= 0;
549 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
550 int UNUSED written
= 0;
551 IADDR UNUSED pc
= GET_H_PC ();
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 */
556 EXTRACT_IFMT_BPCC_BA_CODE
560 if (ORBI (CPU (h_xcc_z
), XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
)))) {
562 USI opval
= i_disp22
;
563 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
565 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
568 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
577 /* bpcc-bge: bge$a$p %xcc,$disp19 */
580 SEM_FN_NAME (sparc64
,bpcc_bge
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
582 SEM_STATUS status
= 0;
583 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
584 int UNUSED written
= 0;
585 IADDR UNUSED pc
= GET_H_PC ();
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 */
590 EXTRACT_IFMT_BPCC_BA_CODE
594 if (NOTBI (XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
)))) {
596 USI opval
= i_disp22
;
597 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
599 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
602 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
611 /* bpcc-bl: bl$a$p %xcc,$disp19 */
614 SEM_FN_NAME (sparc64
,bpcc_bl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
616 SEM_STATUS status
= 0;
617 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
618 int UNUSED written
= 0;
619 IADDR UNUSED pc
= GET_H_PC ();
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 */
624 EXTRACT_IFMT_BPCC_BA_CODE
628 if (XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
))) {
630 USI opval
= i_disp22
;
631 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
633 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
636 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
645 /* bpcc-bgu: bgu$a$p %xcc,$disp19 */
648 SEM_FN_NAME (sparc64
,bpcc_bgu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
650 SEM_STATUS status
= 0;
651 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
652 int UNUSED written
= 0;
653 IADDR UNUSED pc
= GET_H_PC ();
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 */
658 EXTRACT_IFMT_BPCC_BA_CODE
662 if (NOTBI (ORBI (CPU (h_xcc_c
), CPU (h_xcc_z
)))) {
664 USI opval
= i_disp22
;
665 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
667 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
670 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
679 /* bpcc-bleu: bleu$a$p %xcc,$disp19 */
682 SEM_FN_NAME (sparc64
,bpcc_bleu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
684 SEM_STATUS status
= 0;
685 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
686 int UNUSED written
= 0;
687 IADDR UNUSED pc
= GET_H_PC ();
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 */
692 EXTRACT_IFMT_BPCC_BA_CODE
696 if (ORBI (CPU (h_xcc_c
), CPU (h_xcc_z
))) {
698 USI opval
= i_disp22
;
699 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
701 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
704 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
713 /* bpcc-bcc: bcc$a$p %xcc,$disp19 */
716 SEM_FN_NAME (sparc64
,bpcc_bcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
718 SEM_STATUS status
= 0;
719 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
720 int UNUSED written
= 0;
721 IADDR UNUSED pc
= GET_H_PC ();
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 */
726 EXTRACT_IFMT_BPCC_BA_CODE
730 if (NOTBI (CPU (h_xcc_c
))) {
732 USI opval
= i_disp22
;
733 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
735 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
738 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
747 /* bpcc-bcs: bcs$a$p %xcc,$disp19 */
750 SEM_FN_NAME (sparc64
,bpcc_bcs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
752 SEM_STATUS status
= 0;
753 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
754 int UNUSED written
= 0;
755 IADDR UNUSED pc
= GET_H_PC ();
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 */
760 EXTRACT_IFMT_BPCC_BA_CODE
766 USI opval
= i_disp22
;
767 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
769 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
772 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
781 /* bpcc-bpos: bpos$a$p %xcc,$disp19 */
784 SEM_FN_NAME (sparc64
,bpcc_bpos
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
786 SEM_STATUS status
= 0;
787 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
788 int UNUSED written
= 0;
789 IADDR UNUSED pc
= GET_H_PC ();
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 */
794 EXTRACT_IFMT_BPCC_BA_CODE
798 if (NOTBI (CPU (h_xcc_n
))) {
800 USI opval
= i_disp22
;
801 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
803 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
806 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
815 /* bpcc-bneg: bneg$a$p %xcc,$disp19 */
818 SEM_FN_NAME (sparc64
,bpcc_bneg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
820 SEM_STATUS status
= 0;
821 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
822 int UNUSED written
= 0;
823 IADDR UNUSED pc
= GET_H_PC ();
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 */
828 EXTRACT_IFMT_BPCC_BA_CODE
834 USI opval
= i_disp22
;
835 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
837 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
840 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
849 /* bpcc-bvc: bvc$a$p %xcc,$disp19 */
852 SEM_FN_NAME (sparc64
,bpcc_bvc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
854 SEM_STATUS status
= 0;
855 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
856 int UNUSED written
= 0;
857 IADDR UNUSED pc
= GET_H_PC ();
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 */
862 EXTRACT_IFMT_BPCC_BA_CODE
866 if (NOTBI (CPU (h_xcc_v
))) {
868 USI opval
= i_disp22
;
869 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
871 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
874 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
883 /* bpcc-bvs: bvs$a$p %xcc,$disp19 */
886 SEM_FN_NAME (sparc64
,bpcc_bvs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
888 SEM_STATUS status
= 0;
889 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
890 int UNUSED written
= 0;
891 IADDR UNUSED pc
= GET_H_PC ();
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 */
896 EXTRACT_IFMT_BPCC_BA_CODE
902 USI opval
= i_disp22
;
903 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
905 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
908 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
920 SEM_FN_NAME (sparc64
,done
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
930 sparc64_done (current_cpu
, pc
);
932 SEM_NBRANCH_FINI (vpc
, 0);
939 SEM_FN_NAME (sparc64
,retry
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
949 sparc64_retry (current_cpu
, pc
);
951 SEM_NBRANCH_FINI (vpc
, 0);
958 SEM_FN_NAME (sparc64
,flush
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
968 sparc64_flush (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
970 SEM_NBRANCH_FINI (vpc
, 0);
974 /* flush-imm: flush */
977 SEM_FN_NAME (sparc64
,flush_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
987 sparc64_flush (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
989 SEM_NBRANCH_FINI (vpc
, 0);
996 SEM_FN_NAME (sparc64
,flushw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1006 sparc64_flushw (current_cpu
, pc
);
1008 SEM_NBRANCH_FINI (vpc
, 0);
1012 /* impdep1: impdep1 $impdep5,$impdep19 */
1015 SEM_FN_NAME (sparc64
,impdep1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1025 sparc64_impdep1 (current_cpu
, pc
, f_impdep5
, f_impdep19
);
1027 SEM_NBRANCH_FINI (vpc
, 0);
1031 /* impdep2: impdep2 $impdep5,$impdep19 */
1034 SEM_FN_NAME (sparc64
,impdep2
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1044 sparc64_impdep2 (current_cpu
, pc
, f_impdep5
, f_impdep19
);
1046 SEM_NBRANCH_FINI (vpc
, 0);
1050 /* membar: member $membarmask */
1053 SEM_FN_NAME (sparc64
,membar
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1063 sparc64_membar (current_cpu
, pc
, f_membarmask
);
1065 SEM_NBRANCH_FINI (vpc
, 0);
1069 /* mova-icc-icc: mova-icc %icc,$rs2,$rd */
1072 SEM_FN_NAME (sparc64
,mova_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1083 SI opval
= GET_H_GR (f_rs2
);
1084 SET_H_GR (f_rd
, opval
);
1085 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1088 SEM_NBRANCH_FINI (vpc
, 0);
1092 /* mova-imm-icc-icc: mova-imm-icc %icc,$simm11,$rd */
1095 SEM_FN_NAME (sparc64
,mova_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1106 SI opval
= f_simm11
;
1107 SET_H_GR (f_rd
, opval
);
1108 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1111 SEM_NBRANCH_FINI (vpc
, 0);
1115 /* mova-xcc-xcc: mova-xcc %xcc,$rs2,$rd */
1118 SEM_FN_NAME (sparc64
,mova_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1129 SI opval
= GET_H_GR (f_rs2
);
1130 SET_H_GR (f_rd
, opval
);
1131 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1134 SEM_NBRANCH_FINI (vpc
, 0);
1138 /* mova-imm-xcc-xcc: mova-imm-xcc %xcc,$simm11,$rd */
1141 SEM_FN_NAME (sparc64
,mova_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1152 SI opval
= f_simm11
;
1153 SET_H_GR (f_rd
, opval
);
1154 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1157 SEM_NBRANCH_FINI (vpc
, 0);
1161 /* movn-icc-icc: movn-icc %icc,$rs2,$rd */
1164 SEM_FN_NAME (sparc64
,movn_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1174 do { } while (0); /*nop*/
1176 SEM_NBRANCH_FINI (vpc
, 0);
1180 /* movn-imm-icc-icc: movn-imm-icc %icc,$simm11,$rd */
1183 SEM_FN_NAME (sparc64
,movn_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1193 do { } while (0); /*nop*/
1195 SEM_NBRANCH_FINI (vpc
, 0);
1199 /* movn-xcc-xcc: movn-xcc %xcc,$rs2,$rd */
1202 SEM_FN_NAME (sparc64
,movn_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1212 do { } while (0); /*nop*/
1214 SEM_NBRANCH_FINI (vpc
, 0);
1218 /* movn-imm-xcc-xcc: movn-imm-xcc %xcc,$simm11,$rd */
1221 SEM_FN_NAME (sparc64
,movn_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1231 do { } while (0); /*nop*/
1233 SEM_NBRANCH_FINI (vpc
, 0);
1237 /* movne-icc-icc: movne-icc %icc,$rs2,$rd */
1240 SEM_FN_NAME (sparc64
,movne_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1250 if (NOTBI (CPU (h_icc_z
))) {
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
);
1259 abuf
->written
= written
;
1260 SEM_NBRANCH_FINI (vpc
, 0);
1264 /* movne-imm-icc-icc: movne-imm-icc %icc,$simm11,$rd */
1267 SEM_FN_NAME (sparc64
,movne_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1277 if (NOTBI (CPU (h_icc_z
))) {
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
);
1286 abuf
->written
= written
;
1287 SEM_NBRANCH_FINI (vpc
, 0);
1291 /* movne-xcc-xcc: movne-xcc %xcc,$rs2,$rd */
1294 SEM_FN_NAME (sparc64
,movne_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1304 if (NOTBI (CPU (h_xcc_z
))) {
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
);
1313 abuf
->written
= written
;
1314 SEM_NBRANCH_FINI (vpc
, 0);
1318 /* movne-imm-xcc-xcc: movne-imm-xcc %xcc,$simm11,$rd */
1321 SEM_FN_NAME (sparc64
,movne_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1331 if (NOTBI (CPU (h_xcc_z
))) {
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
);
1340 abuf
->written
= written
;
1341 SEM_NBRANCH_FINI (vpc
, 0);
1345 /* move-icc-icc: move-icc %icc,$rs2,$rd */
1348 SEM_FN_NAME (sparc64
,move_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1358 if (CPU (h_icc_z
)) {
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
);
1367 abuf
->written
= written
;
1368 SEM_NBRANCH_FINI (vpc
, 0);
1372 /* move-imm-icc-icc: move-imm-icc %icc,$simm11,$rd */
1375 SEM_FN_NAME (sparc64
,move_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1385 if (CPU (h_icc_z
)) {
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
);
1394 abuf
->written
= written
;
1395 SEM_NBRANCH_FINI (vpc
, 0);
1399 /* move-xcc-xcc: move-xcc %xcc,$rs2,$rd */
1402 SEM_FN_NAME (sparc64
,move_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1412 if (CPU (h_xcc_z
)) {
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
);
1421 abuf
->written
= written
;
1422 SEM_NBRANCH_FINI (vpc
, 0);
1426 /* move-imm-xcc-xcc: move-imm-xcc %xcc,$simm11,$rd */
1429 SEM_FN_NAME (sparc64
,move_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1439 if (CPU (h_xcc_z
)) {
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
);
1448 abuf
->written
= written
;
1449 SEM_NBRANCH_FINI (vpc
, 0);
1453 /* movg-icc-icc: movg-icc %icc,$rs2,$rd */
1456 SEM_FN_NAME (sparc64
,movg_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1466 if (NOTBI (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
))))) {
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
);
1475 abuf
->written
= written
;
1476 SEM_NBRANCH_FINI (vpc
, 0);
1480 /* movg-imm-icc-icc: movg-imm-icc %icc,$simm11,$rd */
1483 SEM_FN_NAME (sparc64
,movg_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1493 if (NOTBI (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
))))) {
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
);
1502 abuf
->written
= written
;
1503 SEM_NBRANCH_FINI (vpc
, 0);
1507 /* movg-xcc-xcc: movg-xcc %xcc,$rs2,$rd */
1510 SEM_FN_NAME (sparc64
,movg_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1520 if (NOTBI (ORBI (CPU (h_xcc_z
), XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
))))) {
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
);
1529 abuf
->written
= written
;
1530 SEM_NBRANCH_FINI (vpc
, 0);
1534 /* movg-imm-xcc-xcc: movg-imm-xcc %xcc,$simm11,$rd */
1537 SEM_FN_NAME (sparc64
,movg_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1547 if (NOTBI (ORBI (CPU (h_xcc_z
), XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
))))) {
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
);
1556 abuf
->written
= written
;
1557 SEM_NBRANCH_FINI (vpc
, 0);
1561 /* movle-icc-icc: movle-icc %icc,$rs2,$rd */
1564 SEM_FN_NAME (sparc64
,movle_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1574 if (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
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
);
1583 abuf
->written
= written
;
1584 SEM_NBRANCH_FINI (vpc
, 0);
1588 /* movle-imm-icc-icc: movle-imm-icc %icc,$simm11,$rd */
1591 SEM_FN_NAME (sparc64
,movle_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1601 if (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
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
);
1610 abuf
->written
= written
;
1611 SEM_NBRANCH_FINI (vpc
, 0);
1615 /* movle-xcc-xcc: movle-xcc %xcc,$rs2,$rd */
1618 SEM_FN_NAME (sparc64
,movle_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1628 if (ORBI (CPU (h_xcc_z
), XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
)))) {
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
);
1637 abuf
->written
= written
;
1638 SEM_NBRANCH_FINI (vpc
, 0);
1642 /* movle-imm-xcc-xcc: movle-imm-xcc %xcc,$simm11,$rd */
1645 SEM_FN_NAME (sparc64
,movle_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1655 if (ORBI (CPU (h_xcc_z
), XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
)))) {
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
);
1664 abuf
->written
= written
;
1665 SEM_NBRANCH_FINI (vpc
, 0);
1669 /* movge-icc-icc: movge-icc %icc,$rs2,$rd */
1672 SEM_FN_NAME (sparc64
,movge_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1682 if (NOTBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
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
);
1691 abuf
->written
= written
;
1692 SEM_NBRANCH_FINI (vpc
, 0);
1696 /* movge-imm-icc-icc: movge-imm-icc %icc,$simm11,$rd */
1699 SEM_FN_NAME (sparc64
,movge_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1709 if (NOTBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
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
);
1718 abuf
->written
= written
;
1719 SEM_NBRANCH_FINI (vpc
, 0);
1723 /* movge-xcc-xcc: movge-xcc %xcc,$rs2,$rd */
1726 SEM_FN_NAME (sparc64
,movge_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1736 if (NOTBI (XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
)))) {
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
);
1745 abuf
->written
= written
;
1746 SEM_NBRANCH_FINI (vpc
, 0);
1750 /* movge-imm-xcc-xcc: movge-imm-xcc %xcc,$simm11,$rd */
1753 SEM_FN_NAME (sparc64
,movge_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1763 if (NOTBI (XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
)))) {
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
);
1772 abuf
->written
= written
;
1773 SEM_NBRANCH_FINI (vpc
, 0);
1777 /* movl-icc-icc: movl-icc %icc,$rs2,$rd */
1780 SEM_FN_NAME (sparc64
,movl_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1790 if (XORBI (CPU (h_icc_n
), CPU (h_icc_v
))) {
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
);
1799 abuf
->written
= written
;
1800 SEM_NBRANCH_FINI (vpc
, 0);
1804 /* movl-imm-icc-icc: movl-imm-icc %icc,$simm11,$rd */
1807 SEM_FN_NAME (sparc64
,movl_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1817 if (XORBI (CPU (h_icc_n
), CPU (h_icc_v
))) {
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
);
1826 abuf
->written
= written
;
1827 SEM_NBRANCH_FINI (vpc
, 0);
1831 /* movl-xcc-xcc: movl-xcc %xcc,$rs2,$rd */
1834 SEM_FN_NAME (sparc64
,movl_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1844 if (XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
))) {
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
);
1853 abuf
->written
= written
;
1854 SEM_NBRANCH_FINI (vpc
, 0);
1858 /* movl-imm-xcc-xcc: movl-imm-xcc %xcc,$simm11,$rd */
1861 SEM_FN_NAME (sparc64
,movl_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1871 if (XORBI (CPU (h_xcc_n
), CPU (h_xcc_v
))) {
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
);
1880 abuf
->written
= written
;
1881 SEM_NBRANCH_FINI (vpc
, 0);
1885 /* movgu-icc-icc: movgu-icc %icc,$rs2,$rd */
1888 SEM_FN_NAME (sparc64
,movgu_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1898 if (NOTBI (ORBI (CPU (h_icc_c
), CPU (h_icc_z
)))) {
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
);
1907 abuf
->written
= written
;
1908 SEM_NBRANCH_FINI (vpc
, 0);
1912 /* movgu-imm-icc-icc: movgu-imm-icc %icc,$simm11,$rd */
1915 SEM_FN_NAME (sparc64
,movgu_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1925 if (NOTBI (ORBI (CPU (h_icc_c
), CPU (h_icc_z
)))) {
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
);
1934 abuf
->written
= written
;
1935 SEM_NBRANCH_FINI (vpc
, 0);
1939 /* movgu-xcc-xcc: movgu-xcc %xcc,$rs2,$rd */
1942 SEM_FN_NAME (sparc64
,movgu_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1952 if (NOTBI (ORBI (CPU (h_xcc_c
), CPU (h_xcc_z
)))) {
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
);
1961 abuf
->written
= written
;
1962 SEM_NBRANCH_FINI (vpc
, 0);
1966 /* movgu-imm-xcc-xcc: movgu-imm-xcc %xcc,$simm11,$rd */
1969 SEM_FN_NAME (sparc64
,movgu_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
1979 if (NOTBI (ORBI (CPU (h_xcc_c
), CPU (h_xcc_z
)))) {
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
);
1988 abuf
->written
= written
;
1989 SEM_NBRANCH_FINI (vpc
, 0);
1993 /* movleu-icc-icc: movleu-icc %icc,$rs2,$rd */
1996 SEM_FN_NAME (sparc64
,movleu_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2006 if (ORBI (CPU (h_icc_c
), CPU (h_icc_z
))) {
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
);
2015 abuf
->written
= written
;
2016 SEM_NBRANCH_FINI (vpc
, 0);
2020 /* movleu-imm-icc-icc: movleu-imm-icc %icc,$simm11,$rd */
2023 SEM_FN_NAME (sparc64
,movleu_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2033 if (ORBI (CPU (h_icc_c
), CPU (h_icc_z
))) {
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
);
2042 abuf
->written
= written
;
2043 SEM_NBRANCH_FINI (vpc
, 0);
2047 /* movleu-xcc-xcc: movleu-xcc %xcc,$rs2,$rd */
2050 SEM_FN_NAME (sparc64
,movleu_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2060 if (ORBI (CPU (h_xcc_c
), CPU (h_xcc_z
))) {
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
);
2069 abuf
->written
= written
;
2070 SEM_NBRANCH_FINI (vpc
, 0);
2074 /* movleu-imm-xcc-xcc: movleu-imm-xcc %xcc,$simm11,$rd */
2077 SEM_FN_NAME (sparc64
,movleu_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2087 if (ORBI (CPU (h_xcc_c
), CPU (h_xcc_z
))) {
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
);
2096 abuf
->written
= written
;
2097 SEM_NBRANCH_FINI (vpc
, 0);
2101 /* movcc-icc-icc: movcc-icc %icc,$rs2,$rd */
2104 SEM_FN_NAME (sparc64
,movcc_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2114 if (NOTBI (CPU (h_icc_c
))) {
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
);
2123 abuf
->written
= written
;
2124 SEM_NBRANCH_FINI (vpc
, 0);
2128 /* movcc-imm-icc-icc: movcc-imm-icc %icc,$simm11,$rd */
2131 SEM_FN_NAME (sparc64
,movcc_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2141 if (NOTBI (CPU (h_icc_c
))) {
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
);
2150 abuf
->written
= written
;
2151 SEM_NBRANCH_FINI (vpc
, 0);
2155 /* movcc-xcc-xcc: movcc-xcc %xcc,$rs2,$rd */
2158 SEM_FN_NAME (sparc64
,movcc_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2168 if (NOTBI (CPU (h_xcc_c
))) {
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
);
2177 abuf
->written
= written
;
2178 SEM_NBRANCH_FINI (vpc
, 0);
2182 /* movcc-imm-xcc-xcc: movcc-imm-xcc %xcc,$simm11,$rd */
2185 SEM_FN_NAME (sparc64
,movcc_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2195 if (NOTBI (CPU (h_xcc_c
))) {
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
);
2204 abuf
->written
= written
;
2205 SEM_NBRANCH_FINI (vpc
, 0);
2209 /* movcs-icc-icc: movcs-icc %icc,$rs2,$rd */
2212 SEM_FN_NAME (sparc64
,movcs_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2222 if (CPU (h_icc_c
)) {
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
);
2231 abuf
->written
= written
;
2232 SEM_NBRANCH_FINI (vpc
, 0);
2236 /* movcs-imm-icc-icc: movcs-imm-icc %icc,$simm11,$rd */
2239 SEM_FN_NAME (sparc64
,movcs_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2249 if (CPU (h_icc_c
)) {
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
);
2258 abuf
->written
= written
;
2259 SEM_NBRANCH_FINI (vpc
, 0);
2263 /* movcs-xcc-xcc: movcs-xcc %xcc,$rs2,$rd */
2266 SEM_FN_NAME (sparc64
,movcs_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2276 if (CPU (h_xcc_c
)) {
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
);
2285 abuf
->written
= written
;
2286 SEM_NBRANCH_FINI (vpc
, 0);
2290 /* movcs-imm-xcc-xcc: movcs-imm-xcc %xcc,$simm11,$rd */
2293 SEM_FN_NAME (sparc64
,movcs_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2303 if (CPU (h_xcc_c
)) {
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
);
2312 abuf
->written
= written
;
2313 SEM_NBRANCH_FINI (vpc
, 0);
2317 /* movpos-icc-icc: movpos-icc %icc,$rs2,$rd */
2320 SEM_FN_NAME (sparc64
,movpos_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2330 if (NOTBI (CPU (h_icc_n
))) {
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
);
2339 abuf
->written
= written
;
2340 SEM_NBRANCH_FINI (vpc
, 0);
2344 /* movpos-imm-icc-icc: movpos-imm-icc %icc,$simm11,$rd */
2347 SEM_FN_NAME (sparc64
,movpos_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2357 if (NOTBI (CPU (h_icc_n
))) {
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
);
2366 abuf
->written
= written
;
2367 SEM_NBRANCH_FINI (vpc
, 0);
2371 /* movpos-xcc-xcc: movpos-xcc %xcc,$rs2,$rd */
2374 SEM_FN_NAME (sparc64
,movpos_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2384 if (NOTBI (CPU (h_xcc_n
))) {
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
);
2393 abuf
->written
= written
;
2394 SEM_NBRANCH_FINI (vpc
, 0);
2398 /* movpos-imm-xcc-xcc: movpos-imm-xcc %xcc,$simm11,$rd */
2401 SEM_FN_NAME (sparc64
,movpos_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2411 if (NOTBI (CPU (h_xcc_n
))) {
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
);
2420 abuf
->written
= written
;
2421 SEM_NBRANCH_FINI (vpc
, 0);
2425 /* movneg-icc-icc: movneg-icc %icc,$rs2,$rd */
2428 SEM_FN_NAME (sparc64
,movneg_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2438 if (CPU (h_icc_n
)) {
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
);
2447 abuf
->written
= written
;
2448 SEM_NBRANCH_FINI (vpc
, 0);
2452 /* movneg-imm-icc-icc: movneg-imm-icc %icc,$simm11,$rd */
2455 SEM_FN_NAME (sparc64
,movneg_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2465 if (CPU (h_icc_n
)) {
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
);
2474 abuf
->written
= written
;
2475 SEM_NBRANCH_FINI (vpc
, 0);
2479 /* movneg-xcc-xcc: movneg-xcc %xcc,$rs2,$rd */
2482 SEM_FN_NAME (sparc64
,movneg_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2492 if (CPU (h_xcc_n
)) {
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
);
2501 abuf
->written
= written
;
2502 SEM_NBRANCH_FINI (vpc
, 0);
2506 /* movneg-imm-xcc-xcc: movneg-imm-xcc %xcc,$simm11,$rd */
2509 SEM_FN_NAME (sparc64
,movneg_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2519 if (CPU (h_xcc_n
)) {
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
);
2528 abuf
->written
= written
;
2529 SEM_NBRANCH_FINI (vpc
, 0);
2533 /* movvc-icc-icc: movvc-icc %icc,$rs2,$rd */
2536 SEM_FN_NAME (sparc64
,movvc_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2546 if (NOTBI (CPU (h_icc_v
))) {
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
);
2555 abuf
->written
= written
;
2556 SEM_NBRANCH_FINI (vpc
, 0);
2560 /* movvc-imm-icc-icc: movvc-imm-icc %icc,$simm11,$rd */
2563 SEM_FN_NAME (sparc64
,movvc_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2573 if (NOTBI (CPU (h_icc_v
))) {
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
);
2582 abuf
->written
= written
;
2583 SEM_NBRANCH_FINI (vpc
, 0);
2587 /* movvc-xcc-xcc: movvc-xcc %xcc,$rs2,$rd */
2590 SEM_FN_NAME (sparc64
,movvc_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2600 if (NOTBI (CPU (h_xcc_v
))) {
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
);
2609 abuf
->written
= written
;
2610 SEM_NBRANCH_FINI (vpc
, 0);
2614 /* movvc-imm-xcc-xcc: movvc-imm-xcc %xcc,$simm11,$rd */
2617 SEM_FN_NAME (sparc64
,movvc_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2627 if (NOTBI (CPU (h_xcc_v
))) {
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
);
2636 abuf
->written
= written
;
2637 SEM_NBRANCH_FINI (vpc
, 0);
2641 /* movvs-icc-icc: movvs-icc %icc,$rs2,$rd */
2644 SEM_FN_NAME (sparc64
,movvs_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2654 if (CPU (h_icc_v
)) {
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
);
2663 abuf
->written
= written
;
2664 SEM_NBRANCH_FINI (vpc
, 0);
2668 /* movvs-imm-icc-icc: movvs-imm-icc %icc,$simm11,$rd */
2671 SEM_FN_NAME (sparc64
,movvs_imm_icc_icc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2681 if (CPU (h_icc_v
)) {
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
);
2690 abuf
->written
= written
;
2691 SEM_NBRANCH_FINI (vpc
, 0);
2695 /* movvs-xcc-xcc: movvs-xcc %xcc,$rs2,$rd */
2698 SEM_FN_NAME (sparc64
,movvs_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2708 if (CPU (h_xcc_v
)) {
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
);
2717 abuf
->written
= written
;
2718 SEM_NBRANCH_FINI (vpc
, 0);
2722 /* movvs-imm-xcc-xcc: movvs-imm-xcc %xcc,$simm11,$rd */
2725 SEM_FN_NAME (sparc64
,movvs_imm_xcc_xcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
2735 if (CPU (h_xcc_v
)) {
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
);
2744 abuf
->written
= written
;
2745 SEM_NBRANCH_FINI (vpc
, 0);
2749 /* ldsb-reg+reg: ldsb [$rs1+$rs2],$rd */
2752 SEM_FN_NAME (sparc64
,ldsb_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2768 SEM_NBRANCH_FINI (vpc
, 0);
2772 /* ldsb-reg+imm: ldsb [$rs1+$simm13],$rd */
2775 SEM_FN_NAME (sparc64
,ldsb_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2791 SEM_NBRANCH_FINI (vpc
, 0);
2795 /* ldsb-reg+reg/asi: ldsb [$rs1+$rs2]$asi,$rd */
2798 SEM_FN_NAME (sparc64
,ldsb_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2814 SEM_NBRANCH_FINI (vpc
, 0);
2818 /* ldub-reg+reg: ldub [$rs1+$rs2],$rd */
2821 SEM_FN_NAME (sparc64
,ldub_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2837 SEM_NBRANCH_FINI (vpc
, 0);
2841 /* ldub-reg+imm: ldub [$rs1+$simm13],$rd */
2844 SEM_FN_NAME (sparc64
,ldub_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2860 SEM_NBRANCH_FINI (vpc
, 0);
2864 /* ldub-reg+reg/asi: ldub [$rs1+$rs2]$asi,$rd */
2867 SEM_FN_NAME (sparc64
,ldub_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2883 SEM_NBRANCH_FINI (vpc
, 0);
2887 /* ldsh-reg+reg: ldsh [$rs1+$rs2],$rd */
2890 SEM_FN_NAME (sparc64
,ldsh_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2906 SEM_NBRANCH_FINI (vpc
, 0);
2910 /* ldsh-reg+imm: ldsh [$rs1+$simm13],$rd */
2913 SEM_FN_NAME (sparc64
,ldsh_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2929 SEM_NBRANCH_FINI (vpc
, 0);
2933 /* ldsh-reg+reg/asi: ldsh [$rs1+$rs2]$asi,$rd */
2936 SEM_FN_NAME (sparc64
,ldsh_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2952 SEM_NBRANCH_FINI (vpc
, 0);
2956 /* lduh-reg+reg: lduh [$rs1+$rs2],$rd */
2959 SEM_FN_NAME (sparc64
,lduh_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2975 SEM_NBRANCH_FINI (vpc
, 0);
2979 /* lduh-reg+imm: lduh [$rs1+$simm13],$rd */
2982 SEM_FN_NAME (sparc64
,lduh_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
2998 SEM_NBRANCH_FINI (vpc
, 0);
3002 /* lduh-reg+reg/asi: lduh [$rs1+$rs2]$asi,$rd */
3005 SEM_FN_NAME (sparc64
,lduh_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3021 SEM_NBRANCH_FINI (vpc
, 0);
3025 /* ldsw-reg+reg: ldsw [$rs1+$rs2],$rd */
3028 SEM_FN_NAME (sparc64
,ldsw_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3044 SEM_NBRANCH_FINI (vpc
, 0);
3048 /* ldsw-reg+imm: ldsw [$rs1+$simm13],$rd */
3051 SEM_FN_NAME (sparc64
,ldsw_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3067 SEM_NBRANCH_FINI (vpc
, 0);
3071 /* ldsw-reg+reg/asi: ldsw [$rs1+$rs2]$asi,$rd */
3074 SEM_FN_NAME (sparc64
,ldsw_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3090 SEM_NBRANCH_FINI (vpc
, 0);
3094 /* lduw-reg+reg: lduw [$rs1+$rs2],$rd */
3097 SEM_FN_NAME (sparc64
,lduw_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3113 SEM_NBRANCH_FINI (vpc
, 0);
3117 /* lduw-reg+imm: lduw [$rs1+$simm13],$rd */
3120 SEM_FN_NAME (sparc64
,lduw_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3136 SEM_NBRANCH_FINI (vpc
, 0);
3140 /* lduw-reg+reg/asi: lduw [$rs1+$rs2]$asi,$rd */
3143 SEM_FN_NAME (sparc64
,lduw_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3159 SEM_NBRANCH_FINI (vpc
, 0);
3163 /* ldx-reg+reg: ldx [$rs1+$rs2],$rd */
3166 SEM_FN_NAME (sparc64
,ldx_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3182 SEM_NBRANCH_FINI (vpc
, 0);
3186 /* ldx-reg+imm: ldx [$rs1+$simm13],$rd */
3189 SEM_FN_NAME (sparc64
,ldx_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3205 SEM_NBRANCH_FINI (vpc
, 0);
3209 /* ldx-reg+reg/asi: ldx [$rs1+$rs2]$asi,$rd */
3212 SEM_FN_NAME (sparc64
,ldx_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3228 SEM_NBRANCH_FINI (vpc
, 0);
3232 /* ldd-reg+reg: ldd [$rs1+$rs2],$rdd */
3235 SEM_FN_NAME (sparc64
,ldd_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
3258 SEM_NBRANCH_FINI (vpc
, 0);
3262 /* ldd-reg+imm: ldd [$rs1+$simm13],$rdd */
3265 SEM_FN_NAME (sparc64
,ldd_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
3288 SEM_NBRANCH_FINI (vpc
, 0);
3292 /* ldd-reg+reg/asi: ldd [$rs1+$rs2]$asi,$rdd */
3295 SEM_FN_NAME (sparc64
,ldd_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
3318 SEM_NBRANCH_FINI (vpc
, 0);
3322 /* stb-reg+reg: stb $rd,[$rs1+$rs2] */
3325 SEM_FN_NAME (sparc64
,stb_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3341 SEM_NBRANCH_FINI (vpc
, 0);
3345 /* stb-reg+imm: stb $rd,[$rs1+$simm13] */
3348 SEM_FN_NAME (sparc64
,stb_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3364 SEM_NBRANCH_FINI (vpc
, 0);
3368 /* stb-reg+reg/asi: stb $rd,[$rs1+$rs2]$asi */
3371 SEM_FN_NAME (sparc64
,stb_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3387 SEM_NBRANCH_FINI (vpc
, 0);
3391 /* sth-reg+reg: sth $rd,[$rs1+$rs2] */
3394 SEM_FN_NAME (sparc64
,sth_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3410 SEM_NBRANCH_FINI (vpc
, 0);
3414 /* sth-reg+imm: sth $rd,[$rs1+$simm13] */
3417 SEM_FN_NAME (sparc64
,sth_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3433 SEM_NBRANCH_FINI (vpc
, 0);
3437 /* sth-reg+reg/asi: sth $rd,[$rs1+$rs2]$asi */
3440 SEM_FN_NAME (sparc64
,sth_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3456 SEM_NBRANCH_FINI (vpc
, 0);
3460 /* st-reg+reg: st $rd,[$rs1+$rs2] */
3463 SEM_FN_NAME (sparc64
,st_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3479 SEM_NBRANCH_FINI (vpc
, 0);
3483 /* st-reg+imm: st $rd,[$rs1+$simm13] */
3486 SEM_FN_NAME (sparc64
,st_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3502 SEM_NBRANCH_FINI (vpc
, 0);
3506 /* st-reg+reg/asi: st $rd,[$rs1+$rs2]$asi */
3509 SEM_FN_NAME (sparc64
,st_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3525 SEM_NBRANCH_FINI (vpc
, 0);
3529 /* stx-reg+reg: stx $rd,[$rs1+$rs2] */
3532 SEM_FN_NAME (sparc64
,stx_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3548 SEM_NBRANCH_FINI (vpc
, 0);
3552 /* stx-reg+imm: stx $rd,[$rs1+$simm13] */
3555 SEM_FN_NAME (sparc64
,stx_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3571 SEM_NBRANCH_FINI (vpc
, 0);
3575 /* stx-reg+reg/asi: stx $rd,[$rs1+$rs2]$asi */
3578 SEM_FN_NAME (sparc64
,stx_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3594 SEM_NBRANCH_FINI (vpc
, 0);
3598 /* std-reg+reg: std $rdd,[$rs1+$rs2] */
3601 SEM_FN_NAME (sparc64
,std_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
3624 SEM_NBRANCH_FINI (vpc
, 0);
3628 /* std-reg+imm: std $rdd,[$rs1+$simm13] */
3631 SEM_FN_NAME (sparc64
,std_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
3654 SEM_NBRANCH_FINI (vpc
, 0);
3658 /* std-reg+reg/asi: std $rdd,[$rs1+$rs2]$asi */
3661 SEM_FN_NAME (sparc64
,std_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
3684 SEM_NBRANCH_FINI (vpc
, 0);
3688 /* fp-ld-reg+reg: ld [$rs1+$rs2],$frd */
3691 SEM_FN_NAME (sparc64
,fp_ld_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
3702 sparc64_hw_trap (current_cpu
, pc
, TRAP32_FP_DIS
);
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
);
3710 SEM_NBRANCH_FINI (vpc
, 0);
3714 /* fp-ld-reg+imm: ld [$rs1+$simm13],$frd */
3717 SEM_FN_NAME (sparc64
,fp_ld_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
3728 sparc64_hw_trap (current_cpu
, pc
, TRAP32_FP_DIS
);
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
);
3736 SEM_NBRANCH_FINI (vpc
, 0);
3740 /* fp-ld-reg+reg/asi: ld [$rs1+$rs2]$asi,$frd */
3743 SEM_FN_NAME (sparc64
,fp_ld_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
3754 sparc64_hw_trap (current_cpu
, pc
, TRAP32_FP_DIS
);
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
);
3762 SEM_NBRANCH_FINI (vpc
, 0);
3766 /* sethi: sethi $hi22,$rd */
3769 SEM_FN_NAME (sparc64
,sethi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
3780 SI opval
= SLLSI (f_hi22
, 10);
3781 SET_H_GR (f_rd
, opval
);
3782 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3785 SEM_NBRANCH_FINI (vpc
, 0);
3789 /* add: add $rs1,$rs2,$rd */
3792 SEM_FN_NAME (sparc64
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3808 SEM_NBRANCH_FINI (vpc
, 0);
3812 /* add-imm: add $rs1,$simm13,$rd */
3815 SEM_FN_NAME (sparc64
,add_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3831 SEM_NBRANCH_FINI (vpc
, 0);
3835 /* sub: sub $rs1,$rs2,$rd */
3838 SEM_FN_NAME (sparc64
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3854 SEM_NBRANCH_FINI (vpc
, 0);
3858 /* sub-imm: sub $rs1,$simm13,$rd */
3861 SEM_FN_NAME (sparc64
,sub_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
3877 SEM_NBRANCH_FINI (vpc
, 0);
3881 /* addcc: addcc $rs1,$rs2,$rd */
3884 SEM_FN_NAME (sparc64
,addcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
3897 tmp_x
= ADDCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), 0);
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
);
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
);
3909 BI opval
= LTSI (tmp_x
, 0);
3910 CPU (h_icc_n
) = opval
;
3911 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3914 BI opval
= EQSI (tmp_x
, 0);
3915 CPU (h_icc_z
) = opval
;
3916 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
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
);
3926 SEM_NBRANCH_FINI (vpc
, 0);
3930 /* addcc-imm: addcc $rs1,$simm13,$rd */
3933 SEM_FN_NAME (sparc64
,addcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
3946 tmp_x
= ADDCSI (GET_H_GR (f_rs1
), f_simm13
, 0);
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
);
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
);
3958 BI opval
= LTSI (tmp_x
, 0);
3959 CPU (h_icc_n
) = opval
;
3960 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3963 BI opval
= EQSI (tmp_x
, 0);
3964 CPU (h_icc_z
) = opval
;
3965 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
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
);
3975 SEM_NBRANCH_FINI (vpc
, 0);
3979 /* subcc: subcc $rs1,$rs2,$rd */
3982 SEM_FN_NAME (sparc64
,subcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
3995 tmp_x
= SUBCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), 0);
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
);
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
);
4007 BI opval
= LTSI (tmp_x
, 0);
4008 CPU (h_icc_n
) = opval
;
4009 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
4012 BI opval
= EQSI (tmp_x
, 0);
4013 CPU (h_icc_z
) = opval
;
4014 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
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
);
4024 SEM_NBRANCH_FINI (vpc
, 0);
4028 /* subcc-imm: subcc $rs1,$simm13,$rd */
4031 SEM_FN_NAME (sparc64
,subcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
4044 tmp_x
= SUBCSI (GET_H_GR (f_rs1
), f_simm13
, 0);
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
);
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
);
4056 BI opval
= LTSI (tmp_x
, 0);
4057 CPU (h_icc_n
) = opval
;
4058 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
4061 BI opval
= EQSI (tmp_x
, 0);
4062 CPU (h_icc_z
) = opval
;
4063 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
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
);
4073 SEM_NBRANCH_FINI (vpc
, 0);
4077 /* addc: addc $rs1,$rs2,$rd */
4080 SEM_FN_NAME (sparc64
,addc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4096 SEM_NBRANCH_FINI (vpc
, 0);
4100 /* addc-imm: addc $rs1,$simm13,$rd */
4103 SEM_FN_NAME (sparc64
,addc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4119 SEM_NBRANCH_FINI (vpc
, 0);
4123 /* subc: subc $rs1,$rs2,$rd */
4126 SEM_FN_NAME (sparc64
,subc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4142 SEM_NBRANCH_FINI (vpc
, 0);
4146 /* subc-imm: subc $rs1,$simm13,$rd */
4149 SEM_FN_NAME (sparc64
,subc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4165 SEM_NBRANCH_FINI (vpc
, 0);
4169 /* addccc: addccc $rs1,$rs2,$rd */
4172 SEM_FN_NAME (sparc64
,addccc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
4185 tmp_x
= ADDCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
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
);
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
);
4197 BI opval
= LTSI (tmp_x
, 0);
4198 CPU (h_icc_n
) = opval
;
4199 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
4202 BI opval
= EQSI (tmp_x
, 0);
4203 CPU (h_icc_z
) = opval
;
4204 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
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
);
4214 SEM_NBRANCH_FINI (vpc
, 0);
4218 /* addccc-imm: addccc $rs1,$simm13,$rd */
4221 SEM_FN_NAME (sparc64
,addccc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
4234 tmp_x
= ADDCSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
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
);
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
);
4246 BI opval
= LTSI (tmp_x
, 0);
4247 CPU (h_icc_n
) = opval
;
4248 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
4251 BI opval
= EQSI (tmp_x
, 0);
4252 CPU (h_icc_z
) = opval
;
4253 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
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
);
4263 SEM_NBRANCH_FINI (vpc
, 0);
4267 /* subccc: subccc $rs1,$rs2,$rd */
4270 SEM_FN_NAME (sparc64
,subccc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
4283 tmp_x
= SUBCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
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
);
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
);
4295 BI opval
= LTSI (tmp_x
, 0);
4296 CPU (h_icc_n
) = opval
;
4297 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
4300 BI opval
= EQSI (tmp_x
, 0);
4301 CPU (h_icc_z
) = opval
;
4302 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
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
);
4312 SEM_NBRANCH_FINI (vpc
, 0);
4316 /* subccc-imm: subccc $rs1,$simm13,$rd */
4319 SEM_FN_NAME (sparc64
,subccc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
4332 tmp_x
= SUBCSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
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
);
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
);
4344 BI opval
= LTSI (tmp_x
, 0);
4345 CPU (h_icc_n
) = opval
;
4346 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
4349 BI opval
= EQSI (tmp_x
, 0);
4350 CPU (h_icc_z
) = opval
;
4351 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
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
);
4361 SEM_NBRANCH_FINI (vpc
, 0);
4365 /* and: and $rs1,$rs2,$rd */
4368 SEM_FN_NAME (sparc64
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4384 SEM_NBRANCH_FINI (vpc
, 0);
4388 /* and-imm: and $rs1,$simm13,$rd */
4391 SEM_FN_NAME (sparc64
,and_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4407 SEM_NBRANCH_FINI (vpc
, 0);
4411 /* andcc: andcc $rs1,$rs2,$rd */
4414 SEM_FN_NAME (sparc64
,andcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4438 CPU (h_icc_c
) = opval
;
4439 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
4443 CPU (h_icc_v
) = opval
;
4444 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
4454 SEM_NBRANCH_FINI (vpc
, 0);
4458 /* andcc-imm: andcc $rs1,$simm13,$rd */
4461 SEM_FN_NAME (sparc64
,andcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4485 CPU (h_icc_c
) = opval
;
4486 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
4490 CPU (h_icc_v
) = opval
;
4491 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
4501 SEM_NBRANCH_FINI (vpc
, 0);
4505 /* or: or $rs1,$rs2,$rd */
4508 SEM_FN_NAME (sparc64
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4524 SEM_NBRANCH_FINI (vpc
, 0);
4528 /* or-imm: or $rs1,$simm13,$rd */
4531 SEM_FN_NAME (sparc64
,or_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4547 SEM_NBRANCH_FINI (vpc
, 0);
4551 /* orcc: orcc $rs1,$rs2,$rd */
4554 SEM_FN_NAME (sparc64
,orcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4578 CPU (h_icc_c
) = opval
;
4579 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
4583 CPU (h_icc_v
) = opval
;
4584 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
4594 SEM_NBRANCH_FINI (vpc
, 0);
4598 /* orcc-imm: orcc $rs1,$simm13,$rd */
4601 SEM_FN_NAME (sparc64
,orcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4625 CPU (h_icc_c
) = opval
;
4626 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
4630 CPU (h_icc_v
) = opval
;
4631 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
4641 SEM_NBRANCH_FINI (vpc
, 0);
4645 /* xor: xor $rs1,$rs2,$rd */
4648 SEM_FN_NAME (sparc64
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4664 SEM_NBRANCH_FINI (vpc
, 0);
4668 /* xor-imm: xor $rs1,$simm13,$rd */
4671 SEM_FN_NAME (sparc64
,xor_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4687 SEM_NBRANCH_FINI (vpc
, 0);
4691 /* xorcc: xorcc $rs1,$rs2,$rd */
4694 SEM_FN_NAME (sparc64
,xorcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4718 CPU (h_icc_c
) = opval
;
4719 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
4723 CPU (h_icc_v
) = opval
;
4724 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
4734 SEM_NBRANCH_FINI (vpc
, 0);
4738 /* xorcc-imm: xorcc $rs1,$simm13,$rd */
4741 SEM_FN_NAME (sparc64
,xorcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4765 CPU (h_icc_c
) = opval
;
4766 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
4770 CPU (h_icc_v
) = opval
;
4771 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
4781 SEM_NBRANCH_FINI (vpc
, 0);
4785 /* andn: andn $rs1,$rs2,$rd */
4788 SEM_FN_NAME (sparc64
,andn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4804 SEM_NBRANCH_FINI (vpc
, 0);
4808 /* andn-imm: andn $rs1,$simm13,$rd */
4811 SEM_FN_NAME (sparc64
,andn_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4827 SEM_NBRANCH_FINI (vpc
, 0);
4831 /* andncc: andncc $rs1,$rs2,$rd */
4834 SEM_FN_NAME (sparc64
,andncc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4858 CPU (h_icc_c
) = opval
;
4859 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
4863 CPU (h_icc_v
) = opval
;
4864 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
4874 SEM_NBRANCH_FINI (vpc
, 0);
4878 /* andncc-imm: andncc $rs1,$simm13,$rd */
4881 SEM_FN_NAME (sparc64
,andncc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4905 CPU (h_icc_c
) = opval
;
4906 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
4910 CPU (h_icc_v
) = opval
;
4911 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
4921 SEM_NBRANCH_FINI (vpc
, 0);
4925 /* orn: orn $rs1,$rs2,$rd */
4928 SEM_FN_NAME (sparc64
,orn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4944 SEM_NBRANCH_FINI (vpc
, 0);
4948 /* orn-imm: orn $rs1,$simm13,$rd */
4951 SEM_FN_NAME (sparc64
,orn_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
4967 SEM_NBRANCH_FINI (vpc
, 0);
4971 /* orncc: orncc $rs1,$rs2,$rd */
4974 SEM_FN_NAME (sparc64
,orncc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
4998 CPU (h_icc_c
) = opval
;
4999 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
5003 CPU (h_icc_v
) = opval
;
5004 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
5014 SEM_NBRANCH_FINI (vpc
, 0);
5018 /* orncc-imm: orncc $rs1,$simm13,$rd */
5021 SEM_FN_NAME (sparc64
,orncc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
5045 CPU (h_icc_c
) = opval
;
5046 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
5050 CPU (h_icc_v
) = opval
;
5051 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
5061 SEM_NBRANCH_FINI (vpc
, 0);
5065 /* xnor: xnor $rs1,$rs2,$rd */
5068 SEM_FN_NAME (sparc64
,xnor
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5084 SEM_NBRANCH_FINI (vpc
, 0);
5088 /* xnor-imm: xnor $rs1,$simm13,$rd */
5091 SEM_FN_NAME (sparc64
,xnor_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5107 SEM_NBRANCH_FINI (vpc
, 0);
5111 /* xnorcc: xnorcc $rs1,$rs2,$rd */
5114 SEM_FN_NAME (sparc64
,xnorcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
5138 CPU (h_icc_c
) = opval
;
5139 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
5143 CPU (h_icc_v
) = opval
;
5144 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
5154 SEM_NBRANCH_FINI (vpc
, 0);
5158 /* xnorcc-imm: xnorcc $rs1,$simm13,$rd */
5161 SEM_FN_NAME (sparc64
,xnorcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
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
);
5185 CPU (h_icc_c
) = opval
;
5186 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
5190 CPU (h_icc_v
) = opval
;
5191 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
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
);
5201 SEM_NBRANCH_FINI (vpc
, 0);
5205 /* sll: sll $rs1,$rs2,$rd */
5208 SEM_FN_NAME (sparc64
,sll
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5224 SEM_NBRANCH_FINI (vpc
, 0);
5228 /* sll-imm: sll $rs1,$simm13,$rd */
5231 SEM_FN_NAME (sparc64
,sll_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5247 SEM_NBRANCH_FINI (vpc
, 0);
5251 /* srl: srl $rs1,$rs2,$rd */
5254 SEM_FN_NAME (sparc64
,srl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5270 SEM_NBRANCH_FINI (vpc
, 0);
5274 /* srl-imm: srl $rs1,$simm13,$rd */
5277 SEM_FN_NAME (sparc64
,srl_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5293 SEM_NBRANCH_FINI (vpc
, 0);
5297 /* sra: sra $rs1,$rs2,$rd */
5300 SEM_FN_NAME (sparc64
,sra
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5316 SEM_NBRANCH_FINI (vpc
, 0);
5320 /* sra-imm: sra $rs1,$simm13,$rd */
5323 SEM_FN_NAME (sparc64
,sra_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5339 SEM_NBRANCH_FINI (vpc
, 0);
5343 /* smul: smul $rs1,$rs2,$rd */
5346 SEM_FN_NAME (sparc64
,smul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5358 tmp_res
= MULDI (EXTSIDI (GET_H_GR (f_rs1
)), EXTSIDI (GET_H_GR (f_rs2
)));
5360 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
5362 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5365 SI opval
= TRUNCDISI (tmp_res
);
5366 SET_H_GR (f_rd
, opval
);
5367 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5371 SEM_NBRANCH_FINI (vpc
, 0);
5375 /* smul-imm: smul $rs1,$simm13,$rd */
5378 SEM_FN_NAME (sparc64
,smul_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5390 tmp_res
= MULDI (EXTSIDI (GET_H_GR (f_rs1
)), EXTHIDI (f_simm13
));
5392 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
5394 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5397 SI opval
= TRUNCDISI (tmp_res
);
5398 SET_H_GR (f_rd
, opval
);
5399 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5403 SEM_NBRANCH_FINI (vpc
, 0);
5407 /* smul-cc: smulcc $rs1,$rs2,$rd */
5410 SEM_FN_NAME (sparc64
,smul_cc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5422 tmp_res
= MULDI (EXTSIDI (GET_H_GR (f_rs1
)), EXTSIDI (GET_H_GR (f_rs2
)));
5424 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
5426 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5429 SI opval
= TRUNCDISI (tmp_res
);
5430 SET_H_GR (f_rd
, opval
);
5431 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5435 BI opval
= EQSI (TRUNCDISI (tmp_res
), 0);
5436 CPU (h_icc_z
) = opval
;
5437 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
5440 BI opval
= LTSI (TRUNCDISI (tmp_res
), 0);
5441 CPU (h_icc_n
) = opval
;
5442 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
5446 CPU (h_icc_c
) = opval
;
5447 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
5451 CPU (h_icc_v
) = opval
;
5452 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
5457 SEM_NBRANCH_FINI (vpc
, 0);
5461 /* smul-cc-imm: smulcc $rs1,$simm13,$rd */
5464 SEM_FN_NAME (sparc64
,smul_cc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5476 tmp_res
= MULDI (EXTSIDI (GET_H_GR (f_rs1
)), EXTHIDI (f_simm13
));
5478 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
5480 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5483 SI opval
= TRUNCDISI (tmp_res
);
5484 SET_H_GR (f_rd
, opval
);
5485 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5489 BI opval
= EQSI (TRUNCDISI (tmp_res
), 0);
5490 CPU (h_icc_z
) = opval
;
5491 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
5494 BI opval
= LTSI (TRUNCDISI (tmp_res
), 0);
5495 CPU (h_icc_n
) = opval
;
5496 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
5500 CPU (h_icc_c
) = opval
;
5501 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
5505 CPU (h_icc_v
) = opval
;
5506 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
5511 SEM_NBRANCH_FINI (vpc
, 0);
5515 /* umul: umul $rs1,$rs2,$rd */
5518 SEM_FN_NAME (sparc64
,umul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5530 tmp_res
= MULDI (ZEXTSIDI (GET_H_GR (f_rs1
)), ZEXTSIDI (GET_H_GR (f_rs2
)));
5532 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
5534 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5537 SI opval
= TRUNCDISI (tmp_res
);
5538 SET_H_GR (f_rd
, opval
);
5539 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5543 SEM_NBRANCH_FINI (vpc
, 0);
5547 /* umul-imm: umul $rs1,$simm13,$rd */
5550 SEM_FN_NAME (sparc64
,umul_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5562 tmp_res
= MULDI (ZEXTSIDI (GET_H_GR (f_rs1
)), ZEXTHIDI (f_simm13
));
5564 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
5566 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5569 SI opval
= TRUNCDISI (tmp_res
);
5570 SET_H_GR (f_rd
, opval
);
5571 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5575 SEM_NBRANCH_FINI (vpc
, 0);
5579 /* umul-cc: umulcc $rs1,$rs2,$rd */
5582 SEM_FN_NAME (sparc64
,umul_cc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5594 tmp_res
= MULDI (ZEXTSIDI (GET_H_GR (f_rs1
)), ZEXTSIDI (GET_H_GR (f_rs2
)));
5596 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
5598 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5601 SI opval
= TRUNCDISI (tmp_res
);
5602 SET_H_GR (f_rd
, opval
);
5603 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5607 BI opval
= EQSI (TRUNCDISI (tmp_res
), 0);
5608 CPU (h_icc_z
) = opval
;
5609 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
5612 BI opval
= LTSI (TRUNCDISI (tmp_res
), 0);
5613 CPU (h_icc_n
) = opval
;
5614 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
5618 CPU (h_icc_c
) = opval
;
5619 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
5623 CPU (h_icc_v
) = opval
;
5624 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
5629 SEM_NBRANCH_FINI (vpc
, 0);
5633 /* umul-cc-imm: umulcc $rs1,$simm13,$rd */
5636 SEM_FN_NAME (sparc64
,umul_cc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5648 tmp_res
= MULDI (ZEXTSIDI (GET_H_GR (f_rs1
)), ZEXTHIDI (f_simm13
));
5650 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
5652 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5655 SI opval
= TRUNCDISI (tmp_res
);
5656 SET_H_GR (f_rd
, opval
);
5657 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5661 BI opval
= EQSI (TRUNCDISI (tmp_res
), 0);
5662 CPU (h_icc_z
) = opval
;
5663 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
5666 BI opval
= LTSI (TRUNCDISI (tmp_res
), 0);
5667 CPU (h_icc_n
) = opval
;
5668 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
5672 CPU (h_icc_c
) = opval
;
5673 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
5677 CPU (h_icc_v
) = opval
;
5678 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
5683 SEM_NBRANCH_FINI (vpc
, 0);
5687 /* mulscc: mulscc $rs1,$rs2,$rd */
5690 SEM_FN_NAME (sparc64
,mulscc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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);
5708 if (NESI (ANDSI (GET_H_Y (), 1), 0)) {
5709 tmp_add_tmp
= GET_H_GR (f_rs2
);
5713 tmp_rd_tmp
= ADDSI (tmp_tmp
, tmp_add_tmp
);
5716 tmp_x
= ADDCSI (tmp_tmp
, tmp_add_tmp
, 0);
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
);
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
);
5728 BI opval
= LTSI (tmp_x
, 0);
5729 CPU (h_icc_n
) = opval
;
5730 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
5733 BI opval
= EQSI (tmp_x
, 0);
5734 CPU (h_icc_z
) = opval
;
5735 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
5739 SI opval
= SRLSI (GET_H_Y (), 1);
5741 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5743 if (NESI (ANDSI (GET_H_GR (f_rs1
), 1), 0)) {
5745 SI opval
= ORSI (GET_H_Y (), 0x80000000);
5747 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
5751 SI opval
= tmp_rd_tmp
;
5752 SET_H_GR (f_rd
, opval
);
5753 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
5757 SEM_NBRANCH_FINI (vpc
, 0);
5761 /* save: save $rs1,$rs2,$rd */
5764 SEM_FN_NAME (sparc64
,save
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5780 SEM_NBRANCH_FINI (vpc
, 0);
5784 /* save-imm: save $rs1,$simm13,$rd */
5787 SEM_FN_NAME (sparc64
,save_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5803 SEM_NBRANCH_FINI (vpc
, 0);
5807 /* restore: restore $rs1,$rs2,$rd */
5810 SEM_FN_NAME (sparc64
,restore
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5826 SEM_NBRANCH_FINI (vpc
, 0);
5830 /* restore-imm: restore $rs1,$simm13,$rd */
5833 SEM_FN_NAME (sparc64
,restore_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
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
);
5849 SEM_NBRANCH_FINI (vpc
, 0);
5853 /* rett: rett $rs1,$rs2 */
5856 SEM_FN_NAME (sparc64
,rett
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5858 SEM_STATUS status
= 0;
5859 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5860 int UNUSED written
= 0;
5861 IADDR UNUSED pc
= GET_H_PC ();
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
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
);
5875 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
5879 /* rett-imm: rett $rs1,$simm13 */
5882 SEM_FN_NAME (sparc64
,rett_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5884 SEM_STATUS status
= 0;
5885 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5886 int UNUSED written
= 0;
5887 IADDR UNUSED pc
= GET_H_PC ();
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
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
);
5901 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
5905 /* unimp: unimp $imm22 */
5908 SEM_FN_NAME (sparc64
,unimp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
5918 sparc_do_unimp (current_cpu
, pc
, f_imm22
);
5920 SEM_NBRANCH_FINI (vpc
, 0);
5924 /* call: call $disp30 */
5927 SEM_FN_NAME (sparc64
,call
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5929 SEM_STATUS status
= 0;
5930 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5931 int UNUSED written
= 0;
5932 IADDR UNUSED pc
= GET_H_PC ();
5934 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5935 EXTRACT_IFMT_CALL_VARS
/* f-disp30 f-op */
5937 EXTRACT_IFMT_CALL_CODE
5938 i_disp30
= f_disp30
;
5943 SET_H_GR (((UINT
) 15), opval
);
5944 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
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
);
5955 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5959 /* jmpl: jmpl $rs1+$rs2,$rd */
5962 SEM_FN_NAME (sparc64
,jmpl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5964 SEM_STATUS status
= 0;
5965 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5966 int UNUSED written
= 0;
5967 IADDR UNUSED pc
= GET_H_PC ();
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
5976 SET_H_GR (f_rd
, opval
);
5977 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
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
);
5988 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5992 /* jmpl-imm: jmpl $rs1+$simm13,$rd */
5995 SEM_FN_NAME (sparc64
,jmpl_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5997 SEM_STATUS status
= 0;
5998 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5999 int UNUSED written
= 0;
6000 IADDR UNUSED pc
= GET_H_PC ();
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
6009 SET_H_GR (f_rd
, opval
);
6010 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
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
);
6021 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
6025 /* ba: ba$a $disp22 */
6028 SEM_FN_NAME (sparc64
,ba
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6030 SEM_STATUS status
= 0;
6031 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6032 int UNUSED written
= 0;
6033 IADDR UNUSED pc
= GET_H_PC ();
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 */
6038 EXTRACT_IFMT_BA_CODE
6039 i_disp22
= f_disp22
;
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
);
6048 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6056 /* ta: ta $rs1,$rs2 */
6059 SEM_FN_NAME (sparc64
,ta
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6061 SEM_STATUS status
= 0;
6062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6063 int UNUSED written
= 0;
6064 IADDR UNUSED pc
= GET_H_PC ();
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
6071 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6073 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6074 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
6077 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
6081 /* ta-imm: ta $rs1,$simm13 */
6084 SEM_FN_NAME (sparc64
,ta_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6086 SEM_STATUS status
= 0;
6087 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6088 int UNUSED written
= 0;
6089 IADDR UNUSED pc
= GET_H_PC ();
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
6096 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6098 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6099 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
6102 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
6106 /* bn: bn$a $disp22 */
6109 SEM_FN_NAME (sparc64
,bn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
6121 do { } while (0); /*nop*/
6122 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
6126 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
6130 /* tn: tn $rs1,$rs2 */
6133 SEM_FN_NAME (sparc64
,tn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
6143 do { } while (0); /*nop*/
6145 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
)));
6149 /* tn-imm: tn $rs1,$simm13 */
6152 SEM_FN_NAME (sparc64
,tn_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
6162 do { } while (0); /*nop*/
6164 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
)));
6168 /* bne: bne$a $disp22 */
6171 SEM_FN_NAME (sparc64
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6173 SEM_STATUS status
= 0;
6174 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6175 int UNUSED written
= 0;
6176 IADDR UNUSED pc
= GET_H_PC ();
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 */
6181 EXTRACT_IFMT_BA_CODE
6182 i_disp22
= f_disp22
;
6185 if (NOTBI (CPU (h_icc_z
))) {
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
);
6193 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6202 /* tne: tne $rs1,$rs2 */
6205 SEM_FN_NAME (sparc64
,tne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6207 SEM_STATUS status
= 0;
6208 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6209 int UNUSED written
= 0;
6210 IADDR UNUSED pc
= GET_H_PC ();
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
6216 if (NOTBI (CPU (h_icc_z
))) {
6218 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6220 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6221 written
|= (1 << 4);
6222 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6231 /* tne-imm: tne $rs1,$simm13 */
6234 SEM_FN_NAME (sparc64
,tne_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6236 SEM_STATUS status
= 0;
6237 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6238 int UNUSED written
= 0;
6239 IADDR UNUSED pc
= GET_H_PC ();
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
6245 if (NOTBI (CPU (h_icc_z
))) {
6247 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6249 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6250 written
|= (1 << 4);
6251 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6260 /* be: be$a $disp22 */
6263 SEM_FN_NAME (sparc64
,be
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6265 SEM_STATUS status
= 0;
6266 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6267 int UNUSED written
= 0;
6268 IADDR UNUSED pc
= GET_H_PC ();
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 */
6273 EXTRACT_IFMT_BA_CODE
6274 i_disp22
= f_disp22
;
6277 if (CPU (h_icc_z
)) {
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
);
6285 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6294 /* te: te $rs1,$rs2 */
6297 SEM_FN_NAME (sparc64
,te
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6299 SEM_STATUS status
= 0;
6300 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6301 int UNUSED written
= 0;
6302 IADDR UNUSED pc
= GET_H_PC ();
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
6308 if (CPU (h_icc_z
)) {
6310 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6312 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6313 written
|= (1 << 4);
6314 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6323 /* te-imm: te $rs1,$simm13 */
6326 SEM_FN_NAME (sparc64
,te_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6328 SEM_STATUS status
= 0;
6329 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6330 int UNUSED written
= 0;
6331 IADDR UNUSED pc
= GET_H_PC ();
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
6337 if (CPU (h_icc_z
)) {
6339 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6341 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6342 written
|= (1 << 4);
6343 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6352 /* bg: bg$a $disp22 */
6355 SEM_FN_NAME (sparc64
,bg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6357 SEM_STATUS status
= 0;
6358 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6359 int UNUSED written
= 0;
6360 IADDR UNUSED pc
= GET_H_PC ();
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 */
6365 EXTRACT_IFMT_BA_CODE
6366 i_disp22
= f_disp22
;
6369 if (NOTBI (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
))))) {
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
);
6377 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6386 /* tg: tg $rs1,$rs2 */
6389 SEM_FN_NAME (sparc64
,tg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6391 SEM_STATUS status
= 0;
6392 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6393 int UNUSED written
= 0;
6394 IADDR UNUSED pc
= GET_H_PC ();
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
6400 if (NOTBI (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
))))) {
6402 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6404 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6405 written
|= (1 << 6);
6406 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6415 /* tg-imm: tg $rs1,$simm13 */
6418 SEM_FN_NAME (sparc64
,tg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6420 SEM_STATUS status
= 0;
6421 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6422 int UNUSED written
= 0;
6423 IADDR UNUSED pc
= GET_H_PC ();
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
6429 if (NOTBI (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
))))) {
6431 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6433 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6434 written
|= (1 << 6);
6435 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6444 /* ble: ble$a $disp22 */
6447 SEM_FN_NAME (sparc64
,ble
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6449 SEM_STATUS status
= 0;
6450 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6451 int UNUSED written
= 0;
6452 IADDR UNUSED pc
= GET_H_PC ();
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 */
6457 EXTRACT_IFMT_BA_CODE
6458 i_disp22
= f_disp22
;
6461 if (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
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
);
6469 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6478 /* tle: tle $rs1,$rs2 */
6481 SEM_FN_NAME (sparc64
,tle
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6483 SEM_STATUS status
= 0;
6484 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6485 int UNUSED written
= 0;
6486 IADDR UNUSED pc
= GET_H_PC ();
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
6492 if (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
6494 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6496 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6497 written
|= (1 << 6);
6498 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6507 /* tle-imm: tle $rs1,$simm13 */
6510 SEM_FN_NAME (sparc64
,tle_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6512 SEM_STATUS status
= 0;
6513 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6514 int UNUSED written
= 0;
6515 IADDR UNUSED pc
= GET_H_PC ();
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
6521 if (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
6523 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6525 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6526 written
|= (1 << 6);
6527 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6536 /* bge: bge$a $disp22 */
6539 SEM_FN_NAME (sparc64
,bge
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6541 SEM_STATUS status
= 0;
6542 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6543 int UNUSED written
= 0;
6544 IADDR UNUSED pc
= GET_H_PC ();
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 */
6549 EXTRACT_IFMT_BA_CODE
6550 i_disp22
= f_disp22
;
6553 if (NOTBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
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
);
6561 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6570 /* tge: tge $rs1,$rs2 */
6573 SEM_FN_NAME (sparc64
,tge
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6575 SEM_STATUS status
= 0;
6576 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6577 int UNUSED written
= 0;
6578 IADDR UNUSED pc
= GET_H_PC ();
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
6584 if (NOTBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
6586 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6588 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6589 written
|= (1 << 5);
6590 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6599 /* tge-imm: tge $rs1,$simm13 */
6602 SEM_FN_NAME (sparc64
,tge_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6604 SEM_STATUS status
= 0;
6605 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6606 int UNUSED written
= 0;
6607 IADDR UNUSED pc
= GET_H_PC ();
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
6613 if (NOTBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
6615 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6617 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6618 written
|= (1 << 5);
6619 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6628 /* bl: bl$a $disp22 */
6631 SEM_FN_NAME (sparc64
,bl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6633 SEM_STATUS status
= 0;
6634 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6635 int UNUSED written
= 0;
6636 IADDR UNUSED pc
= GET_H_PC ();
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 */
6641 EXTRACT_IFMT_BA_CODE
6642 i_disp22
= f_disp22
;
6645 if (XORBI (CPU (h_icc_n
), CPU (h_icc_v
))) {
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
);
6653 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6662 /* tl: tl $rs1,$rs2 */
6665 SEM_FN_NAME (sparc64
,tl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6667 SEM_STATUS status
= 0;
6668 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6669 int UNUSED written
= 0;
6670 IADDR UNUSED pc
= GET_H_PC ();
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
6676 if (XORBI (CPU (h_icc_n
), CPU (h_icc_v
))) {
6678 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6680 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6681 written
|= (1 << 5);
6682 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6691 /* tl-imm: tl $rs1,$simm13 */
6694 SEM_FN_NAME (sparc64
,tl_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6696 SEM_STATUS status
= 0;
6697 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6698 int UNUSED written
= 0;
6699 IADDR UNUSED pc
= GET_H_PC ();
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
6705 if (XORBI (CPU (h_icc_n
), CPU (h_icc_v
))) {
6707 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6709 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6710 written
|= (1 << 5);
6711 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6720 /* bgu: bgu$a $disp22 */
6723 SEM_FN_NAME (sparc64
,bgu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6725 SEM_STATUS status
= 0;
6726 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6727 int UNUSED written
= 0;
6728 IADDR UNUSED pc
= GET_H_PC ();
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 */
6733 EXTRACT_IFMT_BA_CODE
6734 i_disp22
= f_disp22
;
6737 if (NOTBI (ORBI (CPU (h_icc_c
), CPU (h_icc_z
)))) {
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
);
6745 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6754 /* tgu: tgu $rs1,$rs2 */
6757 SEM_FN_NAME (sparc64
,tgu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6759 SEM_STATUS status
= 0;
6760 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6761 int UNUSED written
= 0;
6762 IADDR UNUSED pc
= GET_H_PC ();
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
6768 if (NOTBI (ORBI (CPU (h_icc_c
), CPU (h_icc_z
)))) {
6770 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6772 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6773 written
|= (1 << 5);
6774 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6783 /* tgu-imm: tgu $rs1,$simm13 */
6786 SEM_FN_NAME (sparc64
,tgu_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6788 SEM_STATUS status
= 0;
6789 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6790 int UNUSED written
= 0;
6791 IADDR UNUSED pc
= GET_H_PC ();
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
6797 if (NOTBI (ORBI (CPU (h_icc_c
), CPU (h_icc_z
)))) {
6799 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6801 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6802 written
|= (1 << 5);
6803 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6812 /* bleu: bleu$a $disp22 */
6815 SEM_FN_NAME (sparc64
,bleu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6817 SEM_STATUS status
= 0;
6818 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6819 int UNUSED written
= 0;
6820 IADDR UNUSED pc
= GET_H_PC ();
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 */
6825 EXTRACT_IFMT_BA_CODE
6826 i_disp22
= f_disp22
;
6829 if (ORBI (CPU (h_icc_c
), CPU (h_icc_z
))) {
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
);
6837 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6846 /* tleu: tleu $rs1,$rs2 */
6849 SEM_FN_NAME (sparc64
,tleu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6851 SEM_STATUS status
= 0;
6852 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6853 int UNUSED written
= 0;
6854 IADDR UNUSED pc
= GET_H_PC ();
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
6860 if (ORBI (CPU (h_icc_c
), CPU (h_icc_z
))) {
6862 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6864 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6865 written
|= (1 << 5);
6866 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6875 /* tleu-imm: tleu $rs1,$simm13 */
6878 SEM_FN_NAME (sparc64
,tleu_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6880 SEM_STATUS status
= 0;
6881 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6882 int UNUSED written
= 0;
6883 IADDR UNUSED pc
= GET_H_PC ();
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
6889 if (ORBI (CPU (h_icc_c
), CPU (h_icc_z
))) {
6891 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6893 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6894 written
|= (1 << 5);
6895 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6904 /* bcc: bcc$a $disp22 */
6907 SEM_FN_NAME (sparc64
,bcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6909 SEM_STATUS status
= 0;
6910 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6911 int UNUSED written
= 0;
6912 IADDR UNUSED pc
= GET_H_PC ();
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 */
6917 EXTRACT_IFMT_BA_CODE
6918 i_disp22
= f_disp22
;
6921 if (NOTBI (CPU (h_icc_c
))) {
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
);
6929 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
6938 /* tcc: tcc $rs1,$rs2 */
6941 SEM_FN_NAME (sparc64
,tcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6943 SEM_STATUS status
= 0;
6944 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6945 int UNUSED written
= 0;
6946 IADDR UNUSED pc
= GET_H_PC ();
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
6952 if (NOTBI (CPU (h_icc_c
))) {
6954 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
6956 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6957 written
|= (1 << 4);
6958 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6967 /* tcc-imm: tcc $rs1,$simm13 */
6970 SEM_FN_NAME (sparc64
,tcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
6972 SEM_STATUS status
= 0;
6973 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
6974 int UNUSED written
= 0;
6975 IADDR UNUSED pc
= GET_H_PC ();
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
6981 if (NOTBI (CPU (h_icc_c
))) {
6983 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
6985 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
6986 written
|= (1 << 4);
6987 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
6996 /* bcs: bcs$a $disp22 */
6999 SEM_FN_NAME (sparc64
,bcs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7001 SEM_STATUS status
= 0;
7002 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7003 int UNUSED written
= 0;
7004 IADDR UNUSED pc
= GET_H_PC ();
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 */
7009 EXTRACT_IFMT_BA_CODE
7010 i_disp22
= f_disp22
;
7013 if (CPU (h_icc_c
)) {
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
);
7021 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
7030 /* tcs: tcs $rs1,$rs2 */
7033 SEM_FN_NAME (sparc64
,tcs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7035 SEM_STATUS status
= 0;
7036 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7037 int UNUSED written
= 0;
7038 IADDR UNUSED pc
= GET_H_PC ();
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
7044 if (CPU (h_icc_c
)) {
7046 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
7048 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7049 written
|= (1 << 4);
7050 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7059 /* tcs-imm: tcs $rs1,$simm13 */
7062 SEM_FN_NAME (sparc64
,tcs_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7064 SEM_STATUS status
= 0;
7065 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7066 int UNUSED written
= 0;
7067 IADDR UNUSED pc
= GET_H_PC ();
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
7073 if (CPU (h_icc_c
)) {
7075 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
7077 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7078 written
|= (1 << 4);
7079 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7088 /* bpos: bpos$a $disp22 */
7091 SEM_FN_NAME (sparc64
,bpos
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7093 SEM_STATUS status
= 0;
7094 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7095 int UNUSED written
= 0;
7096 IADDR UNUSED pc
= GET_H_PC ();
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 */
7101 EXTRACT_IFMT_BA_CODE
7102 i_disp22
= f_disp22
;
7105 if (NOTBI (CPU (h_icc_n
))) {
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
);
7113 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
7122 /* tpos: tpos $rs1,$rs2 */
7125 SEM_FN_NAME (sparc64
,tpos
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7127 SEM_STATUS status
= 0;
7128 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7129 int UNUSED written
= 0;
7130 IADDR UNUSED pc
= GET_H_PC ();
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
7136 if (NOTBI (CPU (h_icc_n
))) {
7138 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
7140 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7141 written
|= (1 << 4);
7142 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7151 /* tpos-imm: tpos $rs1,$simm13 */
7154 SEM_FN_NAME (sparc64
,tpos_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7156 SEM_STATUS status
= 0;
7157 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7158 int UNUSED written
= 0;
7159 IADDR UNUSED pc
= GET_H_PC ();
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
7165 if (NOTBI (CPU (h_icc_n
))) {
7167 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
7169 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7170 written
|= (1 << 4);
7171 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7180 /* bneg: bneg$a $disp22 */
7183 SEM_FN_NAME (sparc64
,bneg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7185 SEM_STATUS status
= 0;
7186 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7187 int UNUSED written
= 0;
7188 IADDR UNUSED pc
= GET_H_PC ();
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 */
7193 EXTRACT_IFMT_BA_CODE
7194 i_disp22
= f_disp22
;
7197 if (CPU (h_icc_n
)) {
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
);
7205 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
7214 /* tneg: tneg $rs1,$rs2 */
7217 SEM_FN_NAME (sparc64
,tneg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7219 SEM_STATUS status
= 0;
7220 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7221 int UNUSED written
= 0;
7222 IADDR UNUSED pc
= GET_H_PC ();
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
7228 if (CPU (h_icc_n
)) {
7230 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
7232 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7233 written
|= (1 << 4);
7234 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7243 /* tneg-imm: tneg $rs1,$simm13 */
7246 SEM_FN_NAME (sparc64
,tneg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7248 SEM_STATUS status
= 0;
7249 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7250 int UNUSED written
= 0;
7251 IADDR UNUSED pc
= GET_H_PC ();
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
7257 if (CPU (h_icc_n
)) {
7259 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
7261 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7262 written
|= (1 << 4);
7263 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7272 /* bvc: bvc$a $disp22 */
7275 SEM_FN_NAME (sparc64
,bvc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7277 SEM_STATUS status
= 0;
7278 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7279 int UNUSED written
= 0;
7280 IADDR UNUSED pc
= GET_H_PC ();
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 */
7285 EXTRACT_IFMT_BA_CODE
7286 i_disp22
= f_disp22
;
7289 if (NOTBI (CPU (h_icc_v
))) {
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
);
7297 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
7306 /* tvc: tvc $rs1,$rs2 */
7309 SEM_FN_NAME (sparc64
,tvc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7311 SEM_STATUS status
= 0;
7312 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7313 int UNUSED written
= 0;
7314 IADDR UNUSED pc
= GET_H_PC ();
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
7320 if (NOTBI (CPU (h_icc_v
))) {
7322 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
7324 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7325 written
|= (1 << 4);
7326 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7335 /* tvc-imm: tvc $rs1,$simm13 */
7338 SEM_FN_NAME (sparc64
,tvc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7340 SEM_STATUS status
= 0;
7341 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7342 int UNUSED written
= 0;
7343 IADDR UNUSED pc
= GET_H_PC ();
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
7349 if (NOTBI (CPU (h_icc_v
))) {
7351 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
7353 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7354 written
|= (1 << 4);
7355 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7364 /* bvs: bvs$a $disp22 */
7367 SEM_FN_NAME (sparc64
,bvs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7369 SEM_STATUS status
= 0;
7370 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7371 int UNUSED written
= 0;
7372 IADDR UNUSED pc
= GET_H_PC ();
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 */
7377 EXTRACT_IFMT_BA_CODE
7378 i_disp22
= f_disp22
;
7381 if (CPU (h_icc_v
)) {
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
);
7389 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
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
)));
7398 /* tvs: tvs $rs1,$rs2 */
7401 SEM_FN_NAME (sparc64
,tvs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7403 SEM_STATUS status
= 0;
7404 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7405 int UNUSED written
= 0;
7406 IADDR UNUSED pc
= GET_H_PC ();
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
7412 if (CPU (h_icc_v
)) {
7414 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
7416 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7417 written
|= (1 << 4);
7418 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7427 /* tvs-imm: tvs $rs1,$simm13 */
7430 SEM_FN_NAME (sparc64
,tvs_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
7432 SEM_STATUS status
= 0;
7433 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
7434 int UNUSED written
= 0;
7435 IADDR UNUSED pc
= GET_H_PC ();
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
7441 if (CPU (h_icc_v
)) {
7443 USI opval
= sparc64_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
7445 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
7446 written
|= (1 << 4);
7447 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
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
)));
7456 /* ldstub-reg+reg: ldstub [$rs1+$rs2],$rd */
7459 SEM_FN_NAME (sparc64
,ldstub_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
7469 sparc64_do_ldstub (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), -1);
7471 SEM_NBRANCH_FINI (vpc
, 0);
7475 /* ldstub-reg+imm: ldstub [$rs1+$simm13],$rd */
7478 SEM_FN_NAME (sparc64
,ldstub_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
7488 sparc64_do_ldstub (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), f_simm13
, -1);
7490 SEM_NBRANCH_FINI (vpc
, 0);
7494 /* ldstub-reg+reg/asi: ldstub [$rs1+$rs2]$asi,$rd */
7497 SEM_FN_NAME (sparc64
,ldstub_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
7507 sparc64_do_ldstub (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), f_asi
);
7509 SEM_NBRANCH_FINI (vpc
, 0);
7513 /* swap-reg+reg: swap [$rs1+$rs2],$rd */
7516 SEM_FN_NAME (sparc64
,swap_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
7526 sparc64_do_swap (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), -1);
7528 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
)));
7532 /* swap-reg+imm: swap [$rs1+$simm13],$rd */
7535 SEM_FN_NAME (sparc64
,swap_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
7545 sparc64_do_swap (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), f_simm13
, -1);
7547 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
)));
7551 /* swap-reg+reg/asi: swap [$rs1+$rs2]$asi,$rd */
7554 SEM_FN_NAME (sparc64
,swap_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
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
7564 sparc64_do_swap (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), f_asi
);
7566 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
)));