1 /* Simulator instruction semantics for sparc32.
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 sparc32
13 #define WANT_CPU_SPARC32
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 (sparc32
,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 (sparc32
,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_SPARC32
64 sparc32_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 (sparc32
,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_SPARC32
87 sparc32_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 (sparc32
,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_SPARC32
111 vpc
= sparc32_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
= sparc32_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 (sparc32
,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_SPARC32
142 vpc
= sparc32_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 (sparc32
,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_SPARC32
169 /* In the switch case FAST_P is a constant, allowing several optimizations
170 in any called inline functions. */
171 vpc
= sparc32_pbb_begin (current_cpu
, FAST_P
);
173 vpc
= sparc32_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 /* rd-asr: rd $rdasr,$rd */
185 SEM_FN_NAME (sparc32
,rd_asr
) (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 ();
191 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
192 EXTRACT_IFMT_RD_ASR_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
193 EXTRACT_IFMT_RD_ASR_CODE
196 SI opval
= CPU (h_asr
[f_rs1
]);
197 SET_H_GR (f_rd
, opval
);
198 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
201 SEM_NBRANCH_FINI (vpc
, 0);
205 /* wr-asr: wr $rs1,$rs2,$wrasr */
208 SEM_FN_NAME (sparc32
,wr_asr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
210 SEM_STATUS status
= 0;
211 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
212 int UNUSED written
= 0;
213 IADDR UNUSED pc
= GET_H_PC ();
214 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
215 EXTRACT_IFMT_WR_ASR_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
216 EXTRACT_IFMT_WR_ASR_CODE
219 SI opval
= XORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
220 CPU (h_asr
[f_rd
]) = opval
;
221 TRACE_RESULT (current_cpu
, abuf
, "wrasr", 'x', opval
);
224 SEM_NBRANCH_FINI (vpc
, 0);
228 /* wr-asr-imm: wr $rs1,$simm13,$wrasr */
231 SEM_FN_NAME (sparc32
,wr_asr_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
233 SEM_STATUS status
= 0;
234 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
235 int UNUSED written
= 0;
236 IADDR UNUSED pc
= GET_H_PC ();
237 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
238 EXTRACT_IFMT_WR_ASR_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
239 EXTRACT_IFMT_WR_ASR_IMM_CODE
242 SI opval
= XORSI (GET_H_GR (f_rs1
), f_simm13
);
243 CPU (h_asr
[f_rd
]) = opval
;
244 TRACE_RESULT (current_cpu
, abuf
, "wrasr", 'x', opval
);
247 SEM_NBRANCH_FINI (vpc
, 0);
251 /* rd-psr: rd %psr,$rd */
254 SEM_FN_NAME (sparc32
,rd_psr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
256 SEM_STATUS status
= 0;
257 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
258 int UNUSED written
= 0;
259 IADDR UNUSED pc
= GET_H_PC ();
260 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
261 EXTRACT_IFMT_RD_PSR_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
262 EXTRACT_IFMT_RD_PSR_CODE
265 SI opval
= GET_H_PSR ();
266 SET_H_GR (f_rd
, opval
);
267 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
270 SEM_NBRANCH_FINI (vpc
, 0);
274 /* wr-psr: wr $rs1,$rs2,%psr */
277 SEM_FN_NAME (sparc32
,wr_psr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
279 SEM_STATUS status
= 0;
280 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
281 int UNUSED written
= 0;
282 IADDR UNUSED pc
= GET_H_PC ();
283 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
284 EXTRACT_IFMT_WR_PSR_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
285 EXTRACT_IFMT_WR_PSR_CODE
288 SI opval
= XORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
290 TRACE_RESULT (current_cpu
, abuf
, "psr-0", 'x', opval
);
293 SEM_NBRANCH_FINI (vpc
, 0);
297 /* wr-psr-imm: wr $rs1,$simm13,%psr */
300 SEM_FN_NAME (sparc32
,wr_psr_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
302 SEM_STATUS status
= 0;
303 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
304 int UNUSED written
= 0;
305 IADDR UNUSED pc
= GET_H_PC ();
306 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
307 EXTRACT_IFMT_WR_PSR_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
308 EXTRACT_IFMT_WR_PSR_IMM_CODE
311 SI opval
= XORSI (GET_H_GR (f_rs1
), f_simm13
);
313 TRACE_RESULT (current_cpu
, abuf
, "psr-0", 'x', opval
);
316 SEM_NBRANCH_FINI (vpc
, 0);
320 /* rd-wim: rd %wim,$rd */
323 SEM_FN_NAME (sparc32
,rd_wim
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
325 SEM_STATUS status
= 0;
326 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
327 int UNUSED written
= 0;
328 IADDR UNUSED pc
= GET_H_PC ();
329 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
330 EXTRACT_IFMT_RD_PSR_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
331 EXTRACT_IFMT_RD_PSR_CODE
334 SI opval
= GET_H_WIM ();
335 SET_H_GR (f_rd
, opval
);
336 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
339 SEM_NBRANCH_FINI (vpc
, 0);
343 /* wr-wim: wr $rs1,$rs2,%wim */
346 SEM_FN_NAME (sparc32
,wr_wim
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
348 SEM_STATUS status
= 0;
349 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
350 int UNUSED written
= 0;
351 IADDR UNUSED pc
= GET_H_PC ();
352 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
353 EXTRACT_IFMT_WR_PSR_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
354 EXTRACT_IFMT_WR_PSR_CODE
357 SI opval
= XORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
359 TRACE_RESULT (current_cpu
, abuf
, "wim-0", 'x', opval
);
362 SEM_NBRANCH_FINI (vpc
, 0);
366 /* wr-wim-imm: wr $rs1,$simm13,%wim */
369 SEM_FN_NAME (sparc32
,wr_wim_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
371 SEM_STATUS status
= 0;
372 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
373 int UNUSED written
= 0;
374 IADDR UNUSED pc
= GET_H_PC ();
375 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
376 EXTRACT_IFMT_WR_PSR_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
377 EXTRACT_IFMT_WR_PSR_IMM_CODE
380 SI opval
= XORSI (GET_H_GR (f_rs1
), f_simm13
);
382 TRACE_RESULT (current_cpu
, abuf
, "wim-0", 'x', opval
);
385 SEM_NBRANCH_FINI (vpc
, 0);
389 /* rd-tbr: rd %tbr,$rd */
392 SEM_FN_NAME (sparc32
,rd_tbr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
394 SEM_STATUS status
= 0;
395 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
396 int UNUSED written
= 0;
397 IADDR UNUSED pc
= GET_H_PC ();
398 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
399 EXTRACT_IFMT_RD_PSR_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
400 EXTRACT_IFMT_RD_PSR_CODE
403 SI opval
= GET_H_TBR ();
404 SET_H_GR (f_rd
, opval
);
405 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
408 SEM_NBRANCH_FINI (vpc
, 0);
412 /* wr-tbr: wr $rs1,$rs2,%tbr */
415 SEM_FN_NAME (sparc32
,wr_tbr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
417 SEM_STATUS status
= 0;
418 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
419 int UNUSED written
= 0;
420 IADDR UNUSED pc
= GET_H_PC ();
421 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
422 EXTRACT_IFMT_WR_PSR_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
423 EXTRACT_IFMT_WR_PSR_CODE
426 SI opval
= XORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
428 TRACE_RESULT (current_cpu
, abuf
, "tbr-0", 'x', opval
);
431 SEM_NBRANCH_FINI (vpc
, 0);
435 /* wr-tbr-imm: wr $rs1,$simm13,%tbr */
438 SEM_FN_NAME (sparc32
,wr_tbr_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
440 SEM_STATUS status
= 0;
441 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
442 int UNUSED written
= 0;
443 IADDR UNUSED pc
= GET_H_PC ();
444 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
445 EXTRACT_IFMT_WR_PSR_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
446 EXTRACT_IFMT_WR_PSR_IMM_CODE
449 SI opval
= XORSI (GET_H_GR (f_rs1
), f_simm13
);
451 TRACE_RESULT (current_cpu
, abuf
, "tbr-0", 'x', opval
);
454 SEM_NBRANCH_FINI (vpc
, 0);
458 /* ldstub-reg+reg: ldstub [$rs1+$rs2],$rd */
461 SEM_FN_NAME (sparc32
,ldstub_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
463 SEM_STATUS status
= 0;
464 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
465 int UNUSED written
= 0;
466 IADDR UNUSED pc
= GET_H_PC ();
467 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
468 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
469 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
471 sparc32_do_ldstub (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), -1);
473 SEM_NBRANCH_FINI (vpc
, 0);
477 /* ldstub-reg+imm: ldstub [$rs1+$simm13],$rd */
480 SEM_FN_NAME (sparc32
,ldstub_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
482 SEM_STATUS status
= 0;
483 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
484 int UNUSED written
= 0;
485 IADDR UNUSED pc
= GET_H_PC ();
486 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
487 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
488 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
490 sparc32_do_ldstub (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), f_simm13
, -1);
492 SEM_NBRANCH_FINI (vpc
, 0);
496 /* ldstub-reg+reg/asi: ldstub [$rs1+$rs2]$asi,$rd */
499 SEM_FN_NAME (sparc32
,ldstub_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
501 SEM_STATUS status
= 0;
502 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
503 int UNUSED written
= 0;
504 IADDR UNUSED pc
= GET_H_PC ();
505 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
506 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
507 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
509 sparc32_do_ldstub (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), f_asi
);
511 SEM_NBRANCH_FINI (vpc
, 0);
515 /* swap-reg+reg: swap [$rs1+$rs2],$rd */
518 SEM_FN_NAME (sparc32
,swap_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
520 SEM_STATUS status
= 0;
521 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
522 int UNUSED written
= 0;
523 IADDR UNUSED pc
= GET_H_PC ();
524 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
525 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
526 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
528 sparc32_do_swap (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), -1);
530 SEM_NBRANCH_FINI (vpc
, 0);
534 /* swap-reg+imm: swap [$rs1+$simm13],$rd */
537 SEM_FN_NAME (sparc32
,swap_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
539 SEM_STATUS status
= 0;
540 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
541 int UNUSED written
= 0;
542 IADDR UNUSED pc
= GET_H_PC ();
543 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
544 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
545 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
547 sparc32_do_swap (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), f_simm13
, -1);
549 SEM_NBRANCH_FINI (vpc
, 0);
553 /* swap-reg+reg/asi: swap [$rs1+$rs2]$asi,$rd */
556 SEM_FN_NAME (sparc32
,swap_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
558 SEM_STATUS status
= 0;
559 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
560 int UNUSED written
= 0;
561 IADDR UNUSED pc
= GET_H_PC ();
562 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
563 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
564 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
566 sparc32_do_swap (current_cpu
, pc
, f_rd
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), f_asi
);
568 SEM_NBRANCH_FINI (vpc
, 0);
572 /* ldsb-reg+reg: ldsb [$rs1+$rs2],$rd */
575 SEM_FN_NAME (sparc32
,ldsb_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
577 SEM_STATUS status
= 0;
578 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
579 int UNUSED written
= 0;
580 IADDR UNUSED pc
= GET_H_PC ();
581 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
582 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
583 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
586 QI opval
= GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
587 SET_H_GR (f_rd
, opval
);
588 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
591 SEM_NBRANCH_FINI (vpc
, 0);
595 /* ldsb-reg+imm: ldsb [$rs1+$simm13],$rd */
598 SEM_FN_NAME (sparc32
,ldsb_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
600 SEM_STATUS status
= 0;
601 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
602 int UNUSED written
= 0;
603 IADDR UNUSED pc
= GET_H_PC ();
604 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
605 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
606 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
609 QI opval
= GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
610 SET_H_GR (f_rd
, opval
);
611 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
614 SEM_NBRANCH_FINI (vpc
, 0);
618 /* ldsb-reg+reg/asi: ldsb [$rs1+$rs2]$asi,$rd */
621 SEM_FN_NAME (sparc32
,ldsb_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
623 SEM_STATUS status
= 0;
624 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
625 int UNUSED written
= 0;
626 IADDR UNUSED pc
= GET_H_PC ();
627 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
628 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
629 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
632 QI opval
= GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
633 SET_H_GR (f_rd
, opval
);
634 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
637 SEM_NBRANCH_FINI (vpc
, 0);
641 /* ldub-reg+reg: ldub [$rs1+$rs2],$rd */
644 SEM_FN_NAME (sparc32
,ldub_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
646 SEM_STATUS status
= 0;
647 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
648 int UNUSED written
= 0;
649 IADDR UNUSED pc
= GET_H_PC ();
650 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
651 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
652 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
655 QI opval
= GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
656 SET_H_GR (f_rd
, opval
);
657 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
660 SEM_NBRANCH_FINI (vpc
, 0);
664 /* ldub-reg+imm: ldub [$rs1+$simm13],$rd */
667 SEM_FN_NAME (sparc32
,ldub_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
669 SEM_STATUS status
= 0;
670 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
671 int UNUSED written
= 0;
672 IADDR UNUSED pc
= GET_H_PC ();
673 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
674 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
675 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
678 QI opval
= GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
679 SET_H_GR (f_rd
, opval
);
680 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
683 SEM_NBRANCH_FINI (vpc
, 0);
687 /* ldub-reg+reg/asi: ldub [$rs1+$rs2]$asi,$rd */
690 SEM_FN_NAME (sparc32
,ldub_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
692 SEM_STATUS status
= 0;
693 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
694 int UNUSED written
= 0;
695 IADDR UNUSED pc
= GET_H_PC ();
696 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
697 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
698 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
701 QI opval
= GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
702 SET_H_GR (f_rd
, opval
);
703 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
706 SEM_NBRANCH_FINI (vpc
, 0);
710 /* ldsh-reg+reg: ldsh [$rs1+$rs2],$rd */
713 SEM_FN_NAME (sparc32
,ldsh_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
715 SEM_STATUS status
= 0;
716 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
717 int UNUSED written
= 0;
718 IADDR UNUSED pc
= GET_H_PC ();
719 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
720 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
721 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
724 HI opval
= GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
725 SET_H_GR (f_rd
, opval
);
726 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
729 SEM_NBRANCH_FINI (vpc
, 0);
733 /* ldsh-reg+imm: ldsh [$rs1+$simm13],$rd */
736 SEM_FN_NAME (sparc32
,ldsh_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
738 SEM_STATUS status
= 0;
739 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
740 int UNUSED written
= 0;
741 IADDR UNUSED pc
= GET_H_PC ();
742 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
743 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
744 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
747 HI opval
= GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
748 SET_H_GR (f_rd
, opval
);
749 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
752 SEM_NBRANCH_FINI (vpc
, 0);
756 /* ldsh-reg+reg/asi: ldsh [$rs1+$rs2]$asi,$rd */
759 SEM_FN_NAME (sparc32
,ldsh_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
761 SEM_STATUS status
= 0;
762 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
763 int UNUSED written
= 0;
764 IADDR UNUSED pc
= GET_H_PC ();
765 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
766 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
767 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
770 HI opval
= GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
771 SET_H_GR (f_rd
, opval
);
772 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
775 SEM_NBRANCH_FINI (vpc
, 0);
779 /* lduh-reg+reg: lduh [$rs1+$rs2],$rd */
782 SEM_FN_NAME (sparc32
,lduh_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
784 SEM_STATUS status
= 0;
785 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
786 int UNUSED written
= 0;
787 IADDR UNUSED pc
= GET_H_PC ();
788 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
789 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
790 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
793 HI opval
= GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
794 SET_H_GR (f_rd
, opval
);
795 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
798 SEM_NBRANCH_FINI (vpc
, 0);
802 /* lduh-reg+imm: lduh [$rs1+$simm13],$rd */
805 SEM_FN_NAME (sparc32
,lduh_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
807 SEM_STATUS status
= 0;
808 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
809 int UNUSED written
= 0;
810 IADDR UNUSED pc
= GET_H_PC ();
811 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
812 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
813 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
816 HI opval
= GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
817 SET_H_GR (f_rd
, opval
);
818 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
821 SEM_NBRANCH_FINI (vpc
, 0);
825 /* lduh-reg+reg/asi: lduh [$rs1+$rs2]$asi,$rd */
828 SEM_FN_NAME (sparc32
,lduh_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
830 SEM_STATUS status
= 0;
831 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
832 int UNUSED written
= 0;
833 IADDR UNUSED pc
= GET_H_PC ();
834 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
835 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
836 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
839 HI opval
= GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
840 SET_H_GR (f_rd
, opval
);
841 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
844 SEM_NBRANCH_FINI (vpc
, 0);
848 /* ldsw-reg+reg: ldsw [$rs1+$rs2],$rd */
851 SEM_FN_NAME (sparc32
,ldsw_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
853 SEM_STATUS status
= 0;
854 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
855 int UNUSED written
= 0;
856 IADDR UNUSED pc
= GET_H_PC ();
857 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
858 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
859 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
862 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
863 SET_H_GR (f_rd
, opval
);
864 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
867 SEM_NBRANCH_FINI (vpc
, 0);
871 /* ldsw-reg+imm: ldsw [$rs1+$simm13],$rd */
874 SEM_FN_NAME (sparc32
,ldsw_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
876 SEM_STATUS status
= 0;
877 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
878 int UNUSED written
= 0;
879 IADDR UNUSED pc
= GET_H_PC ();
880 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
881 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
882 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
885 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
886 SET_H_GR (f_rd
, opval
);
887 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
890 SEM_NBRANCH_FINI (vpc
, 0);
894 /* ldsw-reg+reg/asi: ldsw [$rs1+$rs2]$asi,$rd */
897 SEM_FN_NAME (sparc32
,ldsw_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
899 SEM_STATUS status
= 0;
900 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
901 int UNUSED written
= 0;
902 IADDR UNUSED pc
= GET_H_PC ();
903 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
904 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
905 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
908 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
909 SET_H_GR (f_rd
, opval
);
910 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
913 SEM_NBRANCH_FINI (vpc
, 0);
917 /* lduw-reg+reg: lduw [$rs1+$rs2],$rd */
920 SEM_FN_NAME (sparc32
,lduw_reg_reg
) (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_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
928 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
931 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
932 SET_H_GR (f_rd
, opval
);
933 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
936 SEM_NBRANCH_FINI (vpc
, 0);
940 /* lduw-reg+imm: lduw [$rs1+$simm13],$rd */
943 SEM_FN_NAME (sparc32
,lduw_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
945 SEM_STATUS status
= 0;
946 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
947 int UNUSED written
= 0;
948 IADDR UNUSED pc
= GET_H_PC ();
949 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
950 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
951 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
954 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
955 SET_H_GR (f_rd
, opval
);
956 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
959 SEM_NBRANCH_FINI (vpc
, 0);
963 /* lduw-reg+reg/asi: lduw [$rs1+$rs2]$asi,$rd */
966 SEM_FN_NAME (sparc32
,lduw_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
968 SEM_STATUS status
= 0;
969 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
970 int UNUSED written
= 0;
971 IADDR UNUSED pc
= GET_H_PC ();
972 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
973 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
974 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
977 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
978 SET_H_GR (f_rd
, opval
);
979 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
982 SEM_NBRANCH_FINI (vpc
, 0);
986 /* ldd-reg+reg: ldd [$rs1+$rs2],$rdd */
989 SEM_FN_NAME (sparc32
,ldd_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
991 SEM_STATUS status
= 0;
992 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
993 int UNUSED written
= 0;
994 IADDR UNUSED pc
= GET_H_PC ();
995 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
996 EXTRACT_IFMT_LDD_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
997 EXTRACT_IFMT_LDD_REG_REG_CODE
1001 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
1002 SET_H_GR (f_rd
, opval
);
1003 TRACE_RESULT (current_cpu
, abuf
, "rdd", 'x', opval
);
1006 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), ADDSI (GET_H_GR (f_rs2
), 4)));
1007 SET_H_GR (((f_rd
) + (1)), opval
);
1008 TRACE_RESULT (current_cpu
, abuf
, "gr-add:-VM-regno-rdd-const:-WI-1", 'x', opval
);
1012 SEM_NBRANCH_FINI (vpc
, 0);
1016 /* ldd-reg+imm: ldd [$rs1+$simm13],$rdd */
1019 SEM_FN_NAME (sparc32
,ldd_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1021 SEM_STATUS status
= 0;
1022 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1023 int UNUSED written
= 0;
1024 IADDR UNUSED pc
= GET_H_PC ();
1025 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1026 EXTRACT_IFMT_LDD_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1027 EXTRACT_IFMT_LDD_REG_IMM_CODE
1031 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
1032 SET_H_GR (f_rd
, opval
);
1033 TRACE_RESULT (current_cpu
, abuf
, "rdd", 'x', opval
);
1036 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), ADDHI (f_simm13
, 4)));
1037 SET_H_GR (((f_rd
) + (1)), opval
);
1038 TRACE_RESULT (current_cpu
, abuf
, "gr-add:-VM-regno-rdd-const:-WI-1", 'x', opval
);
1042 SEM_NBRANCH_FINI (vpc
, 0);
1046 /* ldd-reg+reg/asi: ldd [$rs1+$rs2]$asi,$rdd */
1049 SEM_FN_NAME (sparc32
,ldd_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1051 SEM_STATUS status
= 0;
1052 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1053 int UNUSED written
= 0;
1054 IADDR UNUSED pc
= GET_H_PC ();
1055 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1056 EXTRACT_IFMT_LDD_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
1057 EXTRACT_IFMT_LDD_REG_REG_ASI_CODE
1061 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
1062 SET_H_GR (f_rd
, opval
);
1063 TRACE_RESULT (current_cpu
, abuf
, "rdd", 'x', opval
);
1066 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), ADDSI (GET_H_GR (f_rs2
), 4)));
1067 SET_H_GR (((f_rd
) + (1)), opval
);
1068 TRACE_RESULT (current_cpu
, abuf
, "gr-add:-VM-regno-rdd-const:-WI-1", 'x', opval
);
1072 SEM_NBRANCH_FINI (vpc
, 0);
1076 /* stb-reg+reg: stb $rd,[$rs1+$rs2] */
1079 SEM_FN_NAME (sparc32
,stb_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1081 SEM_STATUS status
= 0;
1082 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1083 int UNUSED written
= 0;
1084 IADDR UNUSED pc
= GET_H_PC ();
1085 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1086 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1087 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1090 QI opval
= GET_H_GR (f_rd
);
1091 SETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), opval
);
1092 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1095 SEM_NBRANCH_FINI (vpc
, 0);
1099 /* stb-reg+imm: stb $rd,[$rs1+$simm13] */
1102 SEM_FN_NAME (sparc32
,stb_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1104 SEM_STATUS status
= 0;
1105 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1106 int UNUSED written
= 0;
1107 IADDR UNUSED pc
= GET_H_PC ();
1108 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1109 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1110 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1113 QI opval
= GET_H_GR (f_rd
);
1114 SETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
), opval
);
1115 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1118 SEM_NBRANCH_FINI (vpc
, 0);
1122 /* stb-reg+reg/asi: stb $rd,[$rs1+$rs2]$asi */
1125 SEM_FN_NAME (sparc32
,stb_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1127 SEM_STATUS status
= 0;
1128 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1129 int UNUSED written
= 0;
1130 IADDR UNUSED pc
= GET_H_PC ();
1131 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1132 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
1133 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
1136 QI opval
= GET_H_GR (f_rd
);
1137 SETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), opval
);
1138 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1141 SEM_NBRANCH_FINI (vpc
, 0);
1145 /* sth-reg+reg: sth $rd,[$rs1+$rs2] */
1148 SEM_FN_NAME (sparc32
,sth_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1150 SEM_STATUS status
= 0;
1151 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1152 int UNUSED written
= 0;
1153 IADDR UNUSED pc
= GET_H_PC ();
1154 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1155 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1156 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1159 HI opval
= GET_H_GR (f_rd
);
1160 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), opval
);
1161 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1164 SEM_NBRANCH_FINI (vpc
, 0);
1168 /* sth-reg+imm: sth $rd,[$rs1+$simm13] */
1171 SEM_FN_NAME (sparc32
,sth_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1173 SEM_STATUS status
= 0;
1174 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1175 int UNUSED written
= 0;
1176 IADDR UNUSED pc
= GET_H_PC ();
1177 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1178 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1179 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1182 HI opval
= GET_H_GR (f_rd
);
1183 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
), opval
);
1184 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1187 SEM_NBRANCH_FINI (vpc
, 0);
1191 /* sth-reg+reg/asi: sth $rd,[$rs1+$rs2]$asi */
1194 SEM_FN_NAME (sparc32
,sth_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1196 SEM_STATUS status
= 0;
1197 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1198 int UNUSED written
= 0;
1199 IADDR UNUSED pc
= GET_H_PC ();
1200 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1201 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
1202 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
1205 HI opval
= GET_H_GR (f_rd
);
1206 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), opval
);
1207 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1210 SEM_NBRANCH_FINI (vpc
, 0);
1214 /* st-reg+reg: st $rd,[$rs1+$rs2] */
1217 SEM_FN_NAME (sparc32
,st_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1219 SEM_STATUS status
= 0;
1220 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1221 int UNUSED written
= 0;
1222 IADDR UNUSED pc
= GET_H_PC ();
1223 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1224 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1225 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1228 SI opval
= GET_H_GR (f_rd
);
1229 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), opval
);
1230 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1233 SEM_NBRANCH_FINI (vpc
, 0);
1237 /* st-reg+imm: st $rd,[$rs1+$simm13] */
1240 SEM_FN_NAME (sparc32
,st_reg_imm
) (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_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1248 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1251 SI opval
= GET_H_GR (f_rd
);
1252 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
), opval
);
1253 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1256 SEM_NBRANCH_FINI (vpc
, 0);
1260 /* st-reg+reg/asi: st $rd,[$rs1+$rs2]$asi */
1263 SEM_FN_NAME (sparc32
,st_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1265 SEM_STATUS status
= 0;
1266 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1267 int UNUSED written
= 0;
1268 IADDR UNUSED pc
= GET_H_PC ();
1269 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1270 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
1271 EXTRACT_IFMT_LDSTUB_REG_REG_ASI_CODE
1274 SI opval
= GET_H_GR (f_rd
);
1275 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), opval
);
1276 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1279 SEM_NBRANCH_FINI (vpc
, 0);
1283 /* std-reg+reg: std $rdd,[$rs1+$rs2] */
1286 SEM_FN_NAME (sparc32
,std_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1288 SEM_STATUS status
= 0;
1289 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1290 int UNUSED written
= 0;
1291 IADDR UNUSED pc
= GET_H_PC ();
1292 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1293 EXTRACT_IFMT_LDD_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1294 EXTRACT_IFMT_LDD_REG_REG_CODE
1298 SI opval
= GET_H_GR (f_rd
);
1299 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), opval
);
1300 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1303 SI opval
= GET_H_GR (((f_rd
) + (1)));
1304 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), ADDSI (GET_H_GR (f_rs2
), 4)), opval
);
1305 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1309 SEM_NBRANCH_FINI (vpc
, 0);
1313 /* std-reg+imm: std $rdd,[$rs1+$simm13] */
1316 SEM_FN_NAME (sparc32
,std_reg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1318 SEM_STATUS status
= 0;
1319 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1320 int UNUSED written
= 0;
1321 IADDR UNUSED pc
= GET_H_PC ();
1322 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1323 EXTRACT_IFMT_LDD_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1324 EXTRACT_IFMT_LDD_REG_IMM_CODE
1328 SI opval
= GET_H_GR (f_rd
);
1329 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
), opval
);
1330 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1333 SI opval
= GET_H_GR (((f_rd
) + (1)));
1334 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), ADDHI (f_simm13
, 4)), opval
);
1335 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1339 SEM_NBRANCH_FINI (vpc
, 0);
1343 /* std-reg+reg/asi: std $rdd,[$rs1+$rs2]$asi */
1346 SEM_FN_NAME (sparc32
,std_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1348 SEM_STATUS status
= 0;
1349 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1350 int UNUSED written
= 0;
1351 IADDR UNUSED pc
= GET_H_PC ();
1352 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1353 EXTRACT_IFMT_LDD_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
1354 EXTRACT_IFMT_LDD_REG_REG_ASI_CODE
1358 SI opval
= GET_H_GR (f_rd
);
1359 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), opval
);
1360 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1363 SI opval
= GET_H_GR (((f_rd
) + (1)));
1364 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), ADDSI (GET_H_GR (f_rs2
), 4)), opval
);
1365 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1369 SEM_NBRANCH_FINI (vpc
, 0);
1373 /* fp-ld-reg+reg: ld [$rs1+$rs2],$frd */
1376 SEM_FN_NAME (sparc32
,fp_ld_reg_reg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1378 SEM_STATUS status
= 0;
1379 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1380 int UNUSED written
= 0;
1381 IADDR UNUSED pc
= GET_H_PC ();
1382 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1383 EXTRACT_IFMT_FP_LD_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1384 EXTRACT_IFMT_FP_LD_REG_REG_CODE
1387 sparc32_hw_trap (current_cpu
, pc
, TRAP32_FP_DIS
);
1389 SF opval
= GETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
1390 CPU (h_fr
[f_rd
]) = opval
;
1391 TRACE_RESULT (current_cpu
, abuf
, "frd", 'f', opval
);
1395 SEM_NBRANCH_FINI (vpc
, 0);
1399 /* fp-ld-reg+imm: ld [$rs1+$simm13],$frd */
1402 SEM_FN_NAME (sparc32
,fp_ld_reg_imm
) (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_FP_LD_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1410 EXTRACT_IFMT_FP_LD_REG_IMM_CODE
1413 sparc32_hw_trap (current_cpu
, pc
, TRAP32_FP_DIS
);
1415 SF opval
= GETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), f_simm13
));
1416 CPU (h_fr
[f_rd
]) = opval
;
1417 TRACE_RESULT (current_cpu
, abuf
, "frd", 'f', opval
);
1421 SEM_NBRANCH_FINI (vpc
, 0);
1425 /* fp-ld-reg+reg/asi: ld [$rs1+$rs2]$asi,$frd */
1428 SEM_FN_NAME (sparc32
,fp_ld_reg_reg_asi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1430 SEM_STATUS status
= 0;
1431 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1432 int UNUSED written
= 0;
1433 IADDR UNUSED pc
= GET_H_PC ();
1434 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1435 EXTRACT_IFMT_FP_LD_REG_REG_ASI_VARS
/* f-rs2 f-asi f-i f-rs1 f-op3 f-rd f-op */
1436 EXTRACT_IFMT_FP_LD_REG_REG_ASI_CODE
1439 sparc32_hw_trap (current_cpu
, pc
, TRAP32_FP_DIS
);
1441 SF opval
= GETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)));
1442 CPU (h_fr
[f_rd
]) = opval
;
1443 TRACE_RESULT (current_cpu
, abuf
, "frd", 'f', opval
);
1447 SEM_NBRANCH_FINI (vpc
, 0);
1451 /* sethi: sethi $hi22,$rd */
1454 SEM_FN_NAME (sparc32
,sethi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1456 SEM_STATUS status
= 0;
1457 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1458 int UNUSED written
= 0;
1459 IADDR UNUSED pc
= GET_H_PC ();
1460 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1461 EXTRACT_IFMT_SETHI_VARS
/* f-hi22 f-op2 f-rd f-op */
1462 EXTRACT_IFMT_SETHI_CODE
1465 SI opval
= SLLSI (f_hi22
, 10);
1466 SET_H_GR (f_rd
, opval
);
1467 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1470 SEM_NBRANCH_FINI (vpc
, 0);
1474 /* add: add $rs1,$rs2,$rd */
1477 SEM_FN_NAME (sparc32
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1479 SEM_STATUS status
= 0;
1480 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1481 int UNUSED written
= 0;
1482 IADDR UNUSED pc
= GET_H_PC ();
1483 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1484 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1485 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1488 SI opval
= ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
1489 SET_H_GR (f_rd
, opval
);
1490 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1493 SEM_NBRANCH_FINI (vpc
, 0);
1497 /* add-imm: add $rs1,$simm13,$rd */
1500 SEM_FN_NAME (sparc32
,add_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1502 SEM_STATUS status
= 0;
1503 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1504 int UNUSED written
= 0;
1505 IADDR UNUSED pc
= GET_H_PC ();
1506 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1507 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1508 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1511 SI opval
= ADDSI (GET_H_GR (f_rs1
), f_simm13
);
1512 SET_H_GR (f_rd
, opval
);
1513 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1516 SEM_NBRANCH_FINI (vpc
, 0);
1520 /* sub: sub $rs1,$rs2,$rd */
1523 SEM_FN_NAME (sparc32
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1525 SEM_STATUS status
= 0;
1526 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1527 int UNUSED written
= 0;
1528 IADDR UNUSED pc
= GET_H_PC ();
1529 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1530 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1531 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1534 SI opval
= SUBSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
1535 SET_H_GR (f_rd
, opval
);
1536 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1539 SEM_NBRANCH_FINI (vpc
, 0);
1543 /* sub-imm: sub $rs1,$simm13,$rd */
1546 SEM_FN_NAME (sparc32
,sub_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1548 SEM_STATUS status
= 0;
1549 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1550 int UNUSED written
= 0;
1551 IADDR UNUSED pc
= GET_H_PC ();
1552 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1553 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1554 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1557 SI opval
= SUBSI (GET_H_GR (f_rs1
), f_simm13
);
1558 SET_H_GR (f_rd
, opval
);
1559 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1562 SEM_NBRANCH_FINI (vpc
, 0);
1566 /* addcc: addcc $rs1,$rs2,$rd */
1569 SEM_FN_NAME (sparc32
,addcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1571 SEM_STATUS status
= 0;
1572 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1573 int UNUSED written
= 0;
1574 IADDR UNUSED pc
= GET_H_PC ();
1575 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1576 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1577 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1582 tmp_x
= ADDCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), 0);
1584 BI opval
= ADDCFSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), 0);
1585 CPU (h_icc_c
) = opval
;
1586 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
1589 BI opval
= ADDOFSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), 0);
1590 CPU (h_icc_v
) = opval
;
1591 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
1594 BI opval
= LTSI (tmp_x
, 0);
1595 CPU (h_icc_n
) = opval
;
1596 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
1599 BI opval
= EQSI (tmp_x
, 0);
1600 CPU (h_icc_z
) = opval
;
1601 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
1605 SI opval
= ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
1606 SET_H_GR (f_rd
, opval
);
1607 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1611 SEM_NBRANCH_FINI (vpc
, 0);
1615 /* addcc-imm: addcc $rs1,$simm13,$rd */
1618 SEM_FN_NAME (sparc32
,addcc_imm
) (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_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1626 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1631 tmp_x
= ADDCSI (GET_H_GR (f_rs1
), f_simm13
, 0);
1633 BI opval
= ADDCFSI (GET_H_GR (f_rs1
), f_simm13
, 0);
1634 CPU (h_icc_c
) = opval
;
1635 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
1638 BI opval
= ADDOFSI (GET_H_GR (f_rs1
), f_simm13
, 0);
1639 CPU (h_icc_v
) = opval
;
1640 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
1643 BI opval
= LTSI (tmp_x
, 0);
1644 CPU (h_icc_n
) = opval
;
1645 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
1648 BI opval
= EQSI (tmp_x
, 0);
1649 CPU (h_icc_z
) = opval
;
1650 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
1654 SI opval
= ADDSI (GET_H_GR (f_rs1
), f_simm13
);
1655 SET_H_GR (f_rd
, opval
);
1656 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1660 SEM_NBRANCH_FINI (vpc
, 0);
1664 /* subcc: subcc $rs1,$rs2,$rd */
1667 SEM_FN_NAME (sparc32
,subcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1669 SEM_STATUS status
= 0;
1670 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1671 int UNUSED written
= 0;
1672 IADDR UNUSED pc
= GET_H_PC ();
1673 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1674 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1675 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1680 tmp_x
= SUBCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), 0);
1682 BI opval
= SUBCFSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), 0);
1683 CPU (h_icc_c
) = opval
;
1684 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
1687 BI opval
= SUBOFSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), 0);
1688 CPU (h_icc_v
) = opval
;
1689 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
1692 BI opval
= LTSI (tmp_x
, 0);
1693 CPU (h_icc_n
) = opval
;
1694 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
1697 BI opval
= EQSI (tmp_x
, 0);
1698 CPU (h_icc_z
) = opval
;
1699 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
1703 SI opval
= SUBSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
1704 SET_H_GR (f_rd
, opval
);
1705 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1709 SEM_NBRANCH_FINI (vpc
, 0);
1713 /* subcc-imm: subcc $rs1,$simm13,$rd */
1716 SEM_FN_NAME (sparc32
,subcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1718 SEM_STATUS status
= 0;
1719 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1720 int UNUSED written
= 0;
1721 IADDR UNUSED pc
= GET_H_PC ();
1722 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1723 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1724 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1729 tmp_x
= SUBCSI (GET_H_GR (f_rs1
), f_simm13
, 0);
1731 BI opval
= SUBCFSI (GET_H_GR (f_rs1
), f_simm13
, 0);
1732 CPU (h_icc_c
) = opval
;
1733 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
1736 BI opval
= SUBOFSI (GET_H_GR (f_rs1
), f_simm13
, 0);
1737 CPU (h_icc_v
) = opval
;
1738 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
1741 BI opval
= LTSI (tmp_x
, 0);
1742 CPU (h_icc_n
) = opval
;
1743 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
1746 BI opval
= EQSI (tmp_x
, 0);
1747 CPU (h_icc_z
) = opval
;
1748 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
1752 SI opval
= SUBSI (GET_H_GR (f_rs1
), f_simm13
);
1753 SET_H_GR (f_rd
, opval
);
1754 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1758 SEM_NBRANCH_FINI (vpc
, 0);
1762 /* addx: addx $rs1,$rs2,$rd */
1765 SEM_FN_NAME (sparc32
,addx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1767 SEM_STATUS status
= 0;
1768 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1769 int UNUSED written
= 0;
1770 IADDR UNUSED pc
= GET_H_PC ();
1771 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1772 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1773 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1776 SI opval
= ADDCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1777 SET_H_GR (f_rd
, opval
);
1778 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1781 SEM_NBRANCH_FINI (vpc
, 0);
1785 /* addx-imm: addx $rs1,$simm13,$rd */
1788 SEM_FN_NAME (sparc32
,addx_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1790 SEM_STATUS status
= 0;
1791 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1792 int UNUSED written
= 0;
1793 IADDR UNUSED pc
= GET_H_PC ();
1794 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1795 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1796 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1799 SI opval
= ADDCSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
1800 SET_H_GR (f_rd
, opval
);
1801 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1804 SEM_NBRANCH_FINI (vpc
, 0);
1808 /* subx: subx $rs1,$rs2,$rd */
1811 SEM_FN_NAME (sparc32
,subx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1813 SEM_STATUS status
= 0;
1814 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1815 int UNUSED written
= 0;
1816 IADDR UNUSED pc
= GET_H_PC ();
1817 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1818 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1819 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1822 SI opval
= SUBCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1823 SET_H_GR (f_rd
, opval
);
1824 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1827 SEM_NBRANCH_FINI (vpc
, 0);
1831 /* subx-imm: subx $rs1,$simm13,$rd */
1834 SEM_FN_NAME (sparc32
,subx_imm
) (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_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1842 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1845 SI opval
= SUBCSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
1846 SET_H_GR (f_rd
, opval
);
1847 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1850 SEM_NBRANCH_FINI (vpc
, 0);
1854 /* addxcc: addxcc $rs1,$rs2,$rd */
1857 SEM_FN_NAME (sparc32
,addxcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1859 SEM_STATUS status
= 0;
1860 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1861 int UNUSED written
= 0;
1862 IADDR UNUSED pc
= GET_H_PC ();
1863 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1864 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1865 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1870 tmp_x
= ADDCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1872 BI opval
= ADDCFSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1873 CPU (h_icc_c
) = opval
;
1874 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
1877 BI opval
= ADDOFSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1878 CPU (h_icc_v
) = opval
;
1879 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
1882 BI opval
= LTSI (tmp_x
, 0);
1883 CPU (h_icc_n
) = opval
;
1884 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
1887 BI opval
= EQSI (tmp_x
, 0);
1888 CPU (h_icc_z
) = opval
;
1889 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
1893 SI opval
= ADDCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1894 SET_H_GR (f_rd
, opval
);
1895 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1899 SEM_NBRANCH_FINI (vpc
, 0);
1903 /* addxcc-imm: addxcc $rs1,$simm13,$rd */
1906 SEM_FN_NAME (sparc32
,addxcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1908 SEM_STATUS status
= 0;
1909 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1910 int UNUSED written
= 0;
1911 IADDR UNUSED pc
= GET_H_PC ();
1912 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1913 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
1914 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
1919 tmp_x
= ADDCSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
1921 BI opval
= ADDCFSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
1922 CPU (h_icc_c
) = opval
;
1923 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
1926 BI opval
= ADDOFSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
1927 CPU (h_icc_v
) = opval
;
1928 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
1931 BI opval
= LTSI (tmp_x
, 0);
1932 CPU (h_icc_n
) = opval
;
1933 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
1936 BI opval
= EQSI (tmp_x
, 0);
1937 CPU (h_icc_z
) = opval
;
1938 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
1942 SI opval
= ADDCSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
1943 SET_H_GR (f_rd
, opval
);
1944 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1948 SEM_NBRANCH_FINI (vpc
, 0);
1952 /* subxcc: subxcc $rs1,$rs2,$rd */
1955 SEM_FN_NAME (sparc32
,subxcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
1957 SEM_STATUS status
= 0;
1958 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1959 int UNUSED written
= 0;
1960 IADDR UNUSED pc
= GET_H_PC ();
1961 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1962 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
1963 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
1968 tmp_x
= SUBCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1970 BI opval
= SUBCFSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1971 CPU (h_icc_c
) = opval
;
1972 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
1975 BI opval
= SUBOFSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1976 CPU (h_icc_v
) = opval
;
1977 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
1980 BI opval
= LTSI (tmp_x
, 0);
1981 CPU (h_icc_n
) = opval
;
1982 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
1985 BI opval
= EQSI (tmp_x
, 0);
1986 CPU (h_icc_z
) = opval
;
1987 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
1991 SI opval
= SUBCSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
), CPU (h_icc_c
));
1992 SET_H_GR (f_rd
, opval
);
1993 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
1997 SEM_NBRANCH_FINI (vpc
, 0);
2001 /* subxcc-imm: subxcc $rs1,$simm13,$rd */
2004 SEM_FN_NAME (sparc32
,subxcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2006 SEM_STATUS status
= 0;
2007 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2008 int UNUSED written
= 0;
2009 IADDR UNUSED pc
= GET_H_PC ();
2010 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2011 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2012 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2017 tmp_x
= SUBCSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
2019 BI opval
= SUBCFSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
2020 CPU (h_icc_c
) = opval
;
2021 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2024 BI opval
= SUBOFSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
2025 CPU (h_icc_v
) = opval
;
2026 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2029 BI opval
= LTSI (tmp_x
, 0);
2030 CPU (h_icc_n
) = opval
;
2031 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2034 BI opval
= EQSI (tmp_x
, 0);
2035 CPU (h_icc_z
) = opval
;
2036 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2040 SI opval
= SUBCSI (GET_H_GR (f_rs1
), f_simm13
, CPU (h_icc_c
));
2041 SET_H_GR (f_rd
, opval
);
2042 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2046 SEM_NBRANCH_FINI (vpc
, 0);
2050 /* and: and $rs1,$rs2,$rd */
2053 SEM_FN_NAME (sparc32
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2055 SEM_STATUS status
= 0;
2056 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2057 int UNUSED written
= 0;
2058 IADDR UNUSED pc
= GET_H_PC ();
2059 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2060 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2061 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2064 SI opval
= ANDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
2065 SET_H_GR (f_rd
, opval
);
2066 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2069 SEM_NBRANCH_FINI (vpc
, 0);
2073 /* and-imm: and $rs1,$simm13,$rd */
2076 SEM_FN_NAME (sparc32
,and_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2078 SEM_STATUS status
= 0;
2079 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2080 int UNUSED written
= 0;
2081 IADDR UNUSED pc
= GET_H_PC ();
2082 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2083 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2084 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2087 SI opval
= ANDSI (GET_H_GR (f_rs1
), f_simm13
);
2088 SET_H_GR (f_rd
, opval
);
2089 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2092 SEM_NBRANCH_FINI (vpc
, 0);
2096 /* andcc: andcc $rs1,$rs2,$rd */
2099 SEM_FN_NAME (sparc32
,andcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2101 SEM_STATUS status
= 0;
2102 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2103 int UNUSED written
= 0;
2104 IADDR UNUSED pc
= GET_H_PC ();
2105 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2106 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2107 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2112 BI opval
= EQSI (ANDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), 0);
2113 CPU (h_icc_z
) = opval
;
2114 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2117 BI opval
= LTSI (ANDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), 0);
2118 CPU (h_icc_n
) = opval
;
2119 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2123 CPU (h_icc_c
) = opval
;
2124 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2128 CPU (h_icc_v
) = opval
;
2129 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2133 SI opval
= ANDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
2134 SET_H_GR (f_rd
, opval
);
2135 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2139 SEM_NBRANCH_FINI (vpc
, 0);
2143 /* andcc-imm: andcc $rs1,$simm13,$rd */
2146 SEM_FN_NAME (sparc32
,andcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2148 SEM_STATUS status
= 0;
2149 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2150 int UNUSED written
= 0;
2151 IADDR UNUSED pc
= GET_H_PC ();
2152 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2153 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2154 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2159 BI opval
= EQSI (ANDSI (GET_H_GR (f_rs1
), f_simm13
), 0);
2160 CPU (h_icc_z
) = opval
;
2161 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2164 BI opval
= LTSI (ANDSI (GET_H_GR (f_rs1
), f_simm13
), 0);
2165 CPU (h_icc_n
) = opval
;
2166 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2170 CPU (h_icc_c
) = opval
;
2171 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2175 CPU (h_icc_v
) = opval
;
2176 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2180 SI opval
= ANDSI (GET_H_GR (f_rs1
), f_simm13
);
2181 SET_H_GR (f_rd
, opval
);
2182 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2186 SEM_NBRANCH_FINI (vpc
, 0);
2190 /* or: or $rs1,$rs2,$rd */
2193 SEM_FN_NAME (sparc32
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2195 SEM_STATUS status
= 0;
2196 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2197 int UNUSED written
= 0;
2198 IADDR UNUSED pc
= GET_H_PC ();
2199 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2200 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2201 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2204 SI opval
= ORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
2205 SET_H_GR (f_rd
, opval
);
2206 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2209 SEM_NBRANCH_FINI (vpc
, 0);
2213 /* or-imm: or $rs1,$simm13,$rd */
2216 SEM_FN_NAME (sparc32
,or_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2218 SEM_STATUS status
= 0;
2219 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2220 int UNUSED written
= 0;
2221 IADDR UNUSED pc
= GET_H_PC ();
2222 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2223 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2224 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2227 SI opval
= ORSI (GET_H_GR (f_rs1
), f_simm13
);
2228 SET_H_GR (f_rd
, opval
);
2229 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2232 SEM_NBRANCH_FINI (vpc
, 0);
2236 /* orcc: orcc $rs1,$rs2,$rd */
2239 SEM_FN_NAME (sparc32
,orcc
) (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_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2247 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2252 BI opval
= EQSI (ORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), 0);
2253 CPU (h_icc_z
) = opval
;
2254 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2257 BI opval
= LTSI (ORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), 0);
2258 CPU (h_icc_n
) = opval
;
2259 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2263 CPU (h_icc_c
) = opval
;
2264 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2268 CPU (h_icc_v
) = opval
;
2269 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2273 SI opval
= ORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
2274 SET_H_GR (f_rd
, opval
);
2275 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2279 SEM_NBRANCH_FINI (vpc
, 0);
2283 /* orcc-imm: orcc $rs1,$simm13,$rd */
2286 SEM_FN_NAME (sparc32
,orcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2288 SEM_STATUS status
= 0;
2289 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2290 int UNUSED written
= 0;
2291 IADDR UNUSED pc
= GET_H_PC ();
2292 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2293 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2294 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2299 BI opval
= EQSI (ORSI (GET_H_GR (f_rs1
), f_simm13
), 0);
2300 CPU (h_icc_z
) = opval
;
2301 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2304 BI opval
= LTSI (ORSI (GET_H_GR (f_rs1
), f_simm13
), 0);
2305 CPU (h_icc_n
) = opval
;
2306 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2310 CPU (h_icc_c
) = opval
;
2311 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2315 CPU (h_icc_v
) = opval
;
2316 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2320 SI opval
= ORSI (GET_H_GR (f_rs1
), f_simm13
);
2321 SET_H_GR (f_rd
, opval
);
2322 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2326 SEM_NBRANCH_FINI (vpc
, 0);
2330 /* xor: xor $rs1,$rs2,$rd */
2333 SEM_FN_NAME (sparc32
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2335 SEM_STATUS status
= 0;
2336 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2337 int UNUSED written
= 0;
2338 IADDR UNUSED pc
= GET_H_PC ();
2339 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2340 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2341 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2344 SI opval
= XORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
2345 SET_H_GR (f_rd
, opval
);
2346 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2349 SEM_NBRANCH_FINI (vpc
, 0);
2353 /* xor-imm: xor $rs1,$simm13,$rd */
2356 SEM_FN_NAME (sparc32
,xor_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2358 SEM_STATUS status
= 0;
2359 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2360 int UNUSED written
= 0;
2361 IADDR UNUSED pc
= GET_H_PC ();
2362 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2363 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2364 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2367 SI opval
= XORSI (GET_H_GR (f_rs1
), f_simm13
);
2368 SET_H_GR (f_rd
, opval
);
2369 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2372 SEM_NBRANCH_FINI (vpc
, 0);
2376 /* xorcc: xorcc $rs1,$rs2,$rd */
2379 SEM_FN_NAME (sparc32
,xorcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2381 SEM_STATUS status
= 0;
2382 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2383 int UNUSED written
= 0;
2384 IADDR UNUSED pc
= GET_H_PC ();
2385 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2386 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2387 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2392 BI opval
= EQSI (XORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), 0);
2393 CPU (h_icc_z
) = opval
;
2394 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2397 BI opval
= LTSI (XORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
)), 0);
2398 CPU (h_icc_n
) = opval
;
2399 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2403 CPU (h_icc_c
) = opval
;
2404 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2408 CPU (h_icc_v
) = opval
;
2409 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2413 SI opval
= XORSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
2414 SET_H_GR (f_rd
, opval
);
2415 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2419 SEM_NBRANCH_FINI (vpc
, 0);
2423 /* xorcc-imm: xorcc $rs1,$simm13,$rd */
2426 SEM_FN_NAME (sparc32
,xorcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2428 SEM_STATUS status
= 0;
2429 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2430 int UNUSED written
= 0;
2431 IADDR UNUSED pc
= GET_H_PC ();
2432 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2433 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2434 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2439 BI opval
= EQSI (XORSI (GET_H_GR (f_rs1
), f_simm13
), 0);
2440 CPU (h_icc_z
) = opval
;
2441 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2444 BI opval
= LTSI (XORSI (GET_H_GR (f_rs1
), f_simm13
), 0);
2445 CPU (h_icc_n
) = opval
;
2446 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2450 CPU (h_icc_c
) = opval
;
2451 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2455 CPU (h_icc_v
) = opval
;
2456 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2460 SI opval
= XORSI (GET_H_GR (f_rs1
), f_simm13
);
2461 SET_H_GR (f_rd
, opval
);
2462 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2466 SEM_NBRANCH_FINI (vpc
, 0);
2470 /* andn: andn $rs1,$rs2,$rd */
2473 SEM_FN_NAME (sparc32
,andn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2475 SEM_STATUS status
= 0;
2476 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2477 int UNUSED written
= 0;
2478 IADDR UNUSED pc
= GET_H_PC ();
2479 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2480 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2481 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2484 SI opval
= ANDSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
)));
2485 SET_H_GR (f_rd
, opval
);
2486 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2489 SEM_NBRANCH_FINI (vpc
, 0);
2493 /* andn-imm: andn $rs1,$simm13,$rd */
2496 SEM_FN_NAME (sparc32
,andn_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2498 SEM_STATUS status
= 0;
2499 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2500 int UNUSED written
= 0;
2501 IADDR UNUSED pc
= GET_H_PC ();
2502 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2503 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2504 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2507 SI opval
= ANDSI (GET_H_GR (f_rs1
), INVHI (f_simm13
));
2508 SET_H_GR (f_rd
, opval
);
2509 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2512 SEM_NBRANCH_FINI (vpc
, 0);
2516 /* andncc: andncc $rs1,$rs2,$rd */
2519 SEM_FN_NAME (sparc32
,andncc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2521 SEM_STATUS status
= 0;
2522 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2523 int UNUSED written
= 0;
2524 IADDR UNUSED pc
= GET_H_PC ();
2525 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2526 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2527 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2532 BI opval
= EQSI (ANDSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
))), 0);
2533 CPU (h_icc_z
) = opval
;
2534 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2537 BI opval
= LTSI (ANDSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
))), 0);
2538 CPU (h_icc_n
) = opval
;
2539 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2543 CPU (h_icc_c
) = opval
;
2544 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2548 CPU (h_icc_v
) = opval
;
2549 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2553 SI opval
= ANDSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
)));
2554 SET_H_GR (f_rd
, opval
);
2555 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2559 SEM_NBRANCH_FINI (vpc
, 0);
2563 /* andncc-imm: andncc $rs1,$simm13,$rd */
2566 SEM_FN_NAME (sparc32
,andncc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2568 SEM_STATUS status
= 0;
2569 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2570 int UNUSED written
= 0;
2571 IADDR UNUSED pc
= GET_H_PC ();
2572 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2573 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2574 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2579 BI opval
= EQSI (ANDSI (GET_H_GR (f_rs1
), INVHI (f_simm13
)), 0);
2580 CPU (h_icc_z
) = opval
;
2581 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2584 BI opval
= LTSI (ANDSI (GET_H_GR (f_rs1
), INVHI (f_simm13
)), 0);
2585 CPU (h_icc_n
) = opval
;
2586 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2590 CPU (h_icc_c
) = opval
;
2591 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2595 CPU (h_icc_v
) = opval
;
2596 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2600 SI opval
= ANDSI (GET_H_GR (f_rs1
), INVHI (f_simm13
));
2601 SET_H_GR (f_rd
, opval
);
2602 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2606 SEM_NBRANCH_FINI (vpc
, 0);
2610 /* orn: orn $rs1,$rs2,$rd */
2613 SEM_FN_NAME (sparc32
,orn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2615 SEM_STATUS status
= 0;
2616 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2617 int UNUSED written
= 0;
2618 IADDR UNUSED pc
= GET_H_PC ();
2619 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2620 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2621 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2624 SI opval
= ORSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
)));
2625 SET_H_GR (f_rd
, opval
);
2626 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2629 SEM_NBRANCH_FINI (vpc
, 0);
2633 /* orn-imm: orn $rs1,$simm13,$rd */
2636 SEM_FN_NAME (sparc32
,orn_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2638 SEM_STATUS status
= 0;
2639 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2640 int UNUSED written
= 0;
2641 IADDR UNUSED pc
= GET_H_PC ();
2642 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2643 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2644 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2647 SI opval
= ORSI (GET_H_GR (f_rs1
), INVHI (f_simm13
));
2648 SET_H_GR (f_rd
, opval
);
2649 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2652 SEM_NBRANCH_FINI (vpc
, 0);
2656 /* orncc: orncc $rs1,$rs2,$rd */
2659 SEM_FN_NAME (sparc32
,orncc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2661 SEM_STATUS status
= 0;
2662 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2663 int UNUSED written
= 0;
2664 IADDR UNUSED pc
= GET_H_PC ();
2665 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2666 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2667 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2672 BI opval
= EQSI (ORSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
))), 0);
2673 CPU (h_icc_z
) = opval
;
2674 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2677 BI opval
= LTSI (ORSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
))), 0);
2678 CPU (h_icc_n
) = opval
;
2679 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2683 CPU (h_icc_c
) = opval
;
2684 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2688 CPU (h_icc_v
) = opval
;
2689 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2693 SI opval
= ORSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
)));
2694 SET_H_GR (f_rd
, opval
);
2695 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2699 SEM_NBRANCH_FINI (vpc
, 0);
2703 /* orncc-imm: orncc $rs1,$simm13,$rd */
2706 SEM_FN_NAME (sparc32
,orncc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2708 SEM_STATUS status
= 0;
2709 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2710 int UNUSED written
= 0;
2711 IADDR UNUSED pc
= GET_H_PC ();
2712 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2713 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2714 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2719 BI opval
= EQSI (ORSI (GET_H_GR (f_rs1
), INVHI (f_simm13
)), 0);
2720 CPU (h_icc_z
) = opval
;
2721 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2724 BI opval
= LTSI (ORSI (GET_H_GR (f_rs1
), INVHI (f_simm13
)), 0);
2725 CPU (h_icc_n
) = opval
;
2726 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2730 CPU (h_icc_c
) = opval
;
2731 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2735 CPU (h_icc_v
) = opval
;
2736 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2740 SI opval
= ORSI (GET_H_GR (f_rs1
), INVHI (f_simm13
));
2741 SET_H_GR (f_rd
, opval
);
2742 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2746 SEM_NBRANCH_FINI (vpc
, 0);
2750 /* xnor: xnor $rs1,$rs2,$rd */
2753 SEM_FN_NAME (sparc32
,xnor
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2755 SEM_STATUS status
= 0;
2756 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2757 int UNUSED written
= 0;
2758 IADDR UNUSED pc
= GET_H_PC ();
2759 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2760 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2761 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2764 SI opval
= XORSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
)));
2765 SET_H_GR (f_rd
, opval
);
2766 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2769 SEM_NBRANCH_FINI (vpc
, 0);
2773 /* xnor-imm: xnor $rs1,$simm13,$rd */
2776 SEM_FN_NAME (sparc32
,xnor_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2778 SEM_STATUS status
= 0;
2779 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2780 int UNUSED written
= 0;
2781 IADDR UNUSED pc
= GET_H_PC ();
2782 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2783 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2784 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2787 SI opval
= XORSI (GET_H_GR (f_rs1
), INVHI (f_simm13
));
2788 SET_H_GR (f_rd
, opval
);
2789 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2792 SEM_NBRANCH_FINI (vpc
, 0);
2796 /* xnorcc: xnorcc $rs1,$rs2,$rd */
2799 SEM_FN_NAME (sparc32
,xnorcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2801 SEM_STATUS status
= 0;
2802 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2803 int UNUSED written
= 0;
2804 IADDR UNUSED pc
= GET_H_PC ();
2805 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2806 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2807 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2812 BI opval
= EQSI (XORSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
))), 0);
2813 CPU (h_icc_z
) = opval
;
2814 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2817 BI opval
= LTSI (XORSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
))), 0);
2818 CPU (h_icc_n
) = opval
;
2819 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2823 CPU (h_icc_c
) = opval
;
2824 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2828 CPU (h_icc_v
) = opval
;
2829 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2833 SI opval
= XORSI (GET_H_GR (f_rs1
), INVSI (GET_H_GR (f_rs2
)));
2834 SET_H_GR (f_rd
, opval
);
2835 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2839 SEM_NBRANCH_FINI (vpc
, 0);
2843 /* xnorcc-imm: xnorcc $rs1,$simm13,$rd */
2846 SEM_FN_NAME (sparc32
,xnorcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2848 SEM_STATUS status
= 0;
2849 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2850 int UNUSED written
= 0;
2851 IADDR UNUSED pc
= GET_H_PC ();
2852 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2853 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2854 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2859 BI opval
= EQSI (XORSI (GET_H_GR (f_rs1
), INVHI (f_simm13
)), 0);
2860 CPU (h_icc_z
) = opval
;
2861 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
2864 BI opval
= LTSI (XORSI (GET_H_GR (f_rs1
), INVHI (f_simm13
)), 0);
2865 CPU (h_icc_n
) = opval
;
2866 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
2870 CPU (h_icc_c
) = opval
;
2871 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
2875 CPU (h_icc_v
) = opval
;
2876 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
2880 SI opval
= XORSI (GET_H_GR (f_rs1
), INVHI (f_simm13
));
2881 SET_H_GR (f_rd
, opval
);
2882 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2886 SEM_NBRANCH_FINI (vpc
, 0);
2890 /* sll: sll $rs1,$rs2,$rd */
2893 SEM_FN_NAME (sparc32
,sll
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2895 SEM_STATUS status
= 0;
2896 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2897 int UNUSED written
= 0;
2898 IADDR UNUSED pc
= GET_H_PC ();
2899 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2900 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2901 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2904 SI opval
= SLLSI (GET_H_GR (f_rs1
), ANDSI (GET_H_GR (f_rs2
), 31));
2905 SET_H_GR (f_rd
, opval
);
2906 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2909 SEM_NBRANCH_FINI (vpc
, 0);
2913 /* sll-imm: sll $rs1,$simm13,$rd */
2916 SEM_FN_NAME (sparc32
,sll_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2918 SEM_STATUS status
= 0;
2919 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2920 int UNUSED written
= 0;
2921 IADDR UNUSED pc
= GET_H_PC ();
2922 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2923 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2924 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2927 SI opval
= SLLSI (GET_H_GR (f_rs1
), ANDHI (f_simm13
, 31));
2928 SET_H_GR (f_rd
, opval
);
2929 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2932 SEM_NBRANCH_FINI (vpc
, 0);
2936 /* srl: srl $rs1,$rs2,$rd */
2939 SEM_FN_NAME (sparc32
,srl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2941 SEM_STATUS status
= 0;
2942 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2943 int UNUSED written
= 0;
2944 IADDR UNUSED pc
= GET_H_PC ();
2945 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2946 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2947 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2950 SI opval
= SRLSI (GET_H_GR (f_rs1
), ANDSI (GET_H_GR (f_rs2
), 31));
2951 SET_H_GR (f_rd
, opval
);
2952 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2955 SEM_NBRANCH_FINI (vpc
, 0);
2959 /* srl-imm: srl $rs1,$simm13,$rd */
2962 SEM_FN_NAME (sparc32
,srl_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2964 SEM_STATUS status
= 0;
2965 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2966 int UNUSED written
= 0;
2967 IADDR UNUSED pc
= GET_H_PC ();
2968 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2969 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
2970 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
2973 SI opval
= SRLSI (GET_H_GR (f_rs1
), ANDHI (f_simm13
, 31));
2974 SET_H_GR (f_rd
, opval
);
2975 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
2978 SEM_NBRANCH_FINI (vpc
, 0);
2982 /* sra: sra $rs1,$rs2,$rd */
2985 SEM_FN_NAME (sparc32
,sra
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
2987 SEM_STATUS status
= 0;
2988 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2989 int UNUSED written
= 0;
2990 IADDR UNUSED pc
= GET_H_PC ();
2991 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2992 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
2993 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
2996 SI opval
= SRASI (GET_H_GR (f_rs1
), ANDSI (GET_H_GR (f_rs2
), 31));
2997 SET_H_GR (f_rd
, opval
);
2998 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3001 SEM_NBRANCH_FINI (vpc
, 0);
3005 /* sra-imm: sra $rs1,$simm13,$rd */
3008 SEM_FN_NAME (sparc32
,sra_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3010 SEM_STATUS status
= 0;
3011 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3012 int UNUSED written
= 0;
3013 IADDR UNUSED pc
= GET_H_PC ();
3014 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3015 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3016 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3019 SI opval
= SRASI (GET_H_GR (f_rs1
), ANDHI (f_simm13
, 31));
3020 SET_H_GR (f_rd
, opval
);
3021 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3024 SEM_NBRANCH_FINI (vpc
, 0);
3028 /* smul: smul $rs1,$rs2,$rd */
3031 SEM_FN_NAME (sparc32
,smul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3033 SEM_STATUS status
= 0;
3034 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3035 int UNUSED written
= 0;
3036 IADDR UNUSED pc
= GET_H_PC ();
3037 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3038 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3039 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3043 tmp_res
= MULDI (EXTSIDI (GET_H_GR (f_rs1
)), EXTSIDI (GET_H_GR (f_rs2
)));
3045 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
3047 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3050 SI opval
= TRUNCDISI (tmp_res
);
3051 SET_H_GR (f_rd
, opval
);
3052 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3056 SEM_NBRANCH_FINI (vpc
, 0);
3060 /* smul-imm: smul $rs1,$simm13,$rd */
3063 SEM_FN_NAME (sparc32
,smul_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3065 SEM_STATUS status
= 0;
3066 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3067 int UNUSED written
= 0;
3068 IADDR UNUSED pc
= GET_H_PC ();
3069 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3070 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3071 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3075 tmp_res
= MULDI (EXTSIDI (GET_H_GR (f_rs1
)), EXTHIDI (f_simm13
));
3077 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
3079 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3082 SI opval
= TRUNCDISI (tmp_res
);
3083 SET_H_GR (f_rd
, opval
);
3084 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3088 SEM_NBRANCH_FINI (vpc
, 0);
3092 /* smul-cc: smulcc $rs1,$rs2,$rd */
3095 SEM_FN_NAME (sparc32
,smul_cc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3097 SEM_STATUS status
= 0;
3098 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3099 int UNUSED written
= 0;
3100 IADDR UNUSED pc
= GET_H_PC ();
3101 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3102 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3103 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3107 tmp_res
= MULDI (EXTSIDI (GET_H_GR (f_rs1
)), EXTSIDI (GET_H_GR (f_rs2
)));
3109 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
3111 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3114 SI opval
= TRUNCDISI (tmp_res
);
3115 SET_H_GR (f_rd
, opval
);
3116 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3120 BI opval
= EQSI (TRUNCDISI (tmp_res
), 0);
3121 CPU (h_icc_z
) = opval
;
3122 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3125 BI opval
= LTSI (TRUNCDISI (tmp_res
), 0);
3126 CPU (h_icc_n
) = opval
;
3127 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3131 CPU (h_icc_c
) = opval
;
3132 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3136 CPU (h_icc_v
) = opval
;
3137 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3142 SEM_NBRANCH_FINI (vpc
, 0);
3146 /* smul-cc-imm: smulcc $rs1,$simm13,$rd */
3149 SEM_FN_NAME (sparc32
,smul_cc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3151 SEM_STATUS status
= 0;
3152 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3153 int UNUSED written
= 0;
3154 IADDR UNUSED pc
= GET_H_PC ();
3155 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3156 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3157 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3161 tmp_res
= MULDI (EXTSIDI (GET_H_GR (f_rs1
)), EXTHIDI (f_simm13
));
3163 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
3165 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3168 SI opval
= TRUNCDISI (tmp_res
);
3169 SET_H_GR (f_rd
, opval
);
3170 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3174 BI opval
= EQSI (TRUNCDISI (tmp_res
), 0);
3175 CPU (h_icc_z
) = opval
;
3176 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3179 BI opval
= LTSI (TRUNCDISI (tmp_res
), 0);
3180 CPU (h_icc_n
) = opval
;
3181 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3185 CPU (h_icc_c
) = opval
;
3186 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3190 CPU (h_icc_v
) = opval
;
3191 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3196 SEM_NBRANCH_FINI (vpc
, 0);
3200 /* umul: umul $rs1,$rs2,$rd */
3203 SEM_FN_NAME (sparc32
,umul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3205 SEM_STATUS status
= 0;
3206 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3207 int UNUSED written
= 0;
3208 IADDR UNUSED pc
= GET_H_PC ();
3209 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3210 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3211 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3215 tmp_res
= MULDI (ZEXTSIDI (GET_H_GR (f_rs1
)), ZEXTSIDI (GET_H_GR (f_rs2
)));
3217 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
3219 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3222 SI opval
= TRUNCDISI (tmp_res
);
3223 SET_H_GR (f_rd
, opval
);
3224 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3228 SEM_NBRANCH_FINI (vpc
, 0);
3232 /* umul-imm: umul $rs1,$simm13,$rd */
3235 SEM_FN_NAME (sparc32
,umul_imm
) (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_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3243 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3247 tmp_res
= MULDI (ZEXTSIDI (GET_H_GR (f_rs1
)), ZEXTHIDI (f_simm13
));
3249 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
3251 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3254 SI opval
= TRUNCDISI (tmp_res
);
3255 SET_H_GR (f_rd
, opval
);
3256 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3260 SEM_NBRANCH_FINI (vpc
, 0);
3264 /* umul-cc: umulcc $rs1,$rs2,$rd */
3267 SEM_FN_NAME (sparc32
,umul_cc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3269 SEM_STATUS status
= 0;
3270 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3271 int UNUSED written
= 0;
3272 IADDR UNUSED pc
= GET_H_PC ();
3273 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3274 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3275 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3279 tmp_res
= MULDI (ZEXTSIDI (GET_H_GR (f_rs1
)), ZEXTSIDI (GET_H_GR (f_rs2
)));
3281 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
3283 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3286 SI opval
= TRUNCDISI (tmp_res
);
3287 SET_H_GR (f_rd
, opval
);
3288 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3292 BI opval
= EQSI (TRUNCDISI (tmp_res
), 0);
3293 CPU (h_icc_z
) = opval
;
3294 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3297 BI opval
= LTSI (TRUNCDISI (tmp_res
), 0);
3298 CPU (h_icc_n
) = opval
;
3299 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3303 CPU (h_icc_c
) = opval
;
3304 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3308 CPU (h_icc_v
) = opval
;
3309 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3314 SEM_NBRANCH_FINI (vpc
, 0);
3318 /* umul-cc-imm: umulcc $rs1,$simm13,$rd */
3321 SEM_FN_NAME (sparc32
,umul_cc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3323 SEM_STATUS status
= 0;
3324 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3325 int UNUSED written
= 0;
3326 IADDR UNUSED pc
= GET_H_PC ();
3327 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3328 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3329 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3333 tmp_res
= MULDI (ZEXTSIDI (GET_H_GR (f_rs1
)), ZEXTHIDI (f_simm13
));
3335 SI opval
= TRUNCDISI (SRLDI (tmp_res
, 32));
3337 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3340 SI opval
= TRUNCDISI (tmp_res
);
3341 SET_H_GR (f_rd
, opval
);
3342 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3346 BI opval
= EQSI (TRUNCDISI (tmp_res
), 0);
3347 CPU (h_icc_z
) = opval
;
3348 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3351 BI opval
= LTSI (TRUNCDISI (tmp_res
), 0);
3352 CPU (h_icc_n
) = opval
;
3353 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3357 CPU (h_icc_c
) = opval
;
3358 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3362 CPU (h_icc_v
) = opval
;
3363 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3368 SEM_NBRANCH_FINI (vpc
, 0);
3372 /* sdiv: sdiv $rs1,$rs2,$rd */
3375 SEM_FN_NAME (sparc32
,sdiv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3377 SEM_STATUS status
= 0;
3378 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3379 int UNUSED written
= 0;
3380 IADDR UNUSED pc
= GET_H_PC ();
3381 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3382 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3383 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3387 tmp_dividend
= MAKEDI (GET_H_Y (), GET_H_GR (f_rs1
));
3389 SI opval
= TRUNCDISI (DIVDI (tmp_dividend
, EXTSIDI (GET_H_GR (f_rs2
))));
3390 SET_H_GR (f_rd
, opval
);
3391 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3395 SEM_NBRANCH_FINI (vpc
, 0);
3399 /* sdiv-imm: sdiv $rs1,$simm13,$rd */
3402 SEM_FN_NAME (sparc32
,sdiv_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3404 SEM_STATUS status
= 0;
3405 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3406 int UNUSED written
= 0;
3407 IADDR UNUSED pc
= GET_H_PC ();
3408 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3409 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3410 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3414 tmp_dividend
= MAKEDI (GET_H_Y (), GET_H_GR (f_rs1
));
3416 SI opval
= TRUNCDISI (DIVDI (tmp_dividend
, EXTHIDI (f_simm13
)));
3417 SET_H_GR (f_rd
, opval
);
3418 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3422 SEM_NBRANCH_FINI (vpc
, 0);
3426 /* sdiv-cc: sdivcc $rs1,$rs2,$rd */
3429 SEM_FN_NAME (sparc32
,sdiv_cc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3431 SEM_STATUS status
= 0;
3432 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3433 int UNUSED written
= 0;
3434 IADDR UNUSED pc
= GET_H_PC ();
3435 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3436 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3437 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3441 tmp_dividend
= MAKEDI (GET_H_Y (), GET_H_GR (f_rs1
));
3443 SI opval
= TRUNCDISI (DIVDI (tmp_dividend
, EXTSIDI (GET_H_GR (f_rs2
))));
3444 SET_H_GR (f_rd
, opval
);
3445 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3449 BI opval
= EQSI (GET_H_GR (f_rd
), 0);
3450 CPU (h_icc_z
) = opval
;
3451 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3454 BI opval
= LTSI (GET_H_GR (f_rd
), 0);
3455 CPU (h_icc_n
) = opval
;
3456 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3460 CPU (h_icc_c
) = opval
;
3461 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3465 CPU (h_icc_v
) = opval
;
3466 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3471 SEM_NBRANCH_FINI (vpc
, 0);
3475 /* sdiv-cc-imm: sdivcc $rs1,$simm13,$rd */
3478 SEM_FN_NAME (sparc32
,sdiv_cc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3480 SEM_STATUS status
= 0;
3481 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3482 int UNUSED written
= 0;
3483 IADDR UNUSED pc
= GET_H_PC ();
3484 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3485 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3486 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3490 tmp_dividend
= MAKEDI (GET_H_Y (), GET_H_GR (f_rs1
));
3492 SI opval
= TRUNCDISI (DIVDI (tmp_dividend
, EXTHIDI (f_simm13
)));
3493 SET_H_GR (f_rd
, opval
);
3494 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3498 BI opval
= EQSI (GET_H_GR (f_rd
), 0);
3499 CPU (h_icc_z
) = opval
;
3500 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3503 BI opval
= LTSI (GET_H_GR (f_rd
), 0);
3504 CPU (h_icc_n
) = opval
;
3505 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3509 CPU (h_icc_c
) = opval
;
3510 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3514 CPU (h_icc_v
) = opval
;
3515 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3520 SEM_NBRANCH_FINI (vpc
, 0);
3524 /* udiv: udiv $rs1,$rs2,$rd */
3527 SEM_FN_NAME (sparc32
,udiv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3529 SEM_STATUS status
= 0;
3530 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3531 int UNUSED written
= 0;
3532 IADDR UNUSED pc
= GET_H_PC ();
3533 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3534 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3535 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3539 tmp_dividend
= MAKEDI (GET_H_Y (), GET_H_GR (f_rs1
));
3541 SI opval
= TRUNCDISI (DIVDI (tmp_dividend
, ZEXTSIDI (GET_H_GR (f_rs2
))));
3542 SET_H_GR (f_rd
, opval
);
3543 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3547 SEM_NBRANCH_FINI (vpc
, 0);
3551 /* udiv-imm: udiv $rs1,$simm13,$rd */
3554 SEM_FN_NAME (sparc32
,udiv_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3556 SEM_STATUS status
= 0;
3557 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3558 int UNUSED written
= 0;
3559 IADDR UNUSED pc
= GET_H_PC ();
3560 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3561 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3562 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3566 tmp_dividend
= MAKEDI (GET_H_Y (), GET_H_GR (f_rs1
));
3568 SI opval
= TRUNCDISI (DIVDI (tmp_dividend
, ZEXTHIDI (f_simm13
)));
3569 SET_H_GR (f_rd
, opval
);
3570 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3574 SEM_NBRANCH_FINI (vpc
, 0);
3578 /* udiv-cc: udivcc $rs1,$rs2,$rd */
3581 SEM_FN_NAME (sparc32
,udiv_cc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3583 SEM_STATUS status
= 0;
3584 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3585 int UNUSED written
= 0;
3586 IADDR UNUSED pc
= GET_H_PC ();
3587 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3588 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3589 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3593 tmp_dividend
= MAKEDI (GET_H_Y (), GET_H_GR (f_rs1
));
3595 SI opval
= TRUNCDISI (DIVDI (tmp_dividend
, ZEXTSIDI (GET_H_GR (f_rs2
))));
3596 SET_H_GR (f_rd
, opval
);
3597 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3601 BI opval
= EQSI (GET_H_GR (f_rd
), 0);
3602 CPU (h_icc_z
) = opval
;
3603 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3606 BI opval
= LTSI (GET_H_GR (f_rd
), 0);
3607 CPU (h_icc_n
) = opval
;
3608 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3612 CPU (h_icc_c
) = opval
;
3613 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3617 CPU (h_icc_v
) = opval
;
3618 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3623 SEM_NBRANCH_FINI (vpc
, 0);
3627 /* udiv-cc-imm: udivcc $rs1,$simm13,$rd */
3630 SEM_FN_NAME (sparc32
,udiv_cc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3632 SEM_STATUS status
= 0;
3633 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3634 int UNUSED written
= 0;
3635 IADDR UNUSED pc
= GET_H_PC ();
3636 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3637 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3638 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3642 tmp_dividend
= MAKEDI (GET_H_Y (), GET_H_GR (f_rs1
));
3644 SI opval
= TRUNCDISI (DIVDI (tmp_dividend
, ZEXTHIDI (f_simm13
)));
3645 SET_H_GR (f_rd
, opval
);
3646 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3650 BI opval
= EQSI (GET_H_GR (f_rd
), 0);
3651 CPU (h_icc_z
) = opval
;
3652 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3655 BI opval
= LTSI (GET_H_GR (f_rd
), 0);
3656 CPU (h_icc_n
) = opval
;
3657 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3661 CPU (h_icc_c
) = opval
;
3662 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3666 CPU (h_icc_v
) = opval
;
3667 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3672 SEM_NBRANCH_FINI (vpc
, 0);
3676 /* mulscc: mulscc $rs1,$rs2,$rd */
3679 SEM_FN_NAME (sparc32
,mulscc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3681 SEM_STATUS status
= 0;
3682 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3683 int UNUSED written
= 0;
3684 IADDR UNUSED pc
= GET_H_PC ();
3685 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3686 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3687 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3693 tmp_tmp
= SRLSI (GET_H_GR (f_rs1
), 1);
3694 if (NEBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)), 0)) {
3695 tmp_tmp
= ORSI (tmp_tmp
, 0x80000000);
3697 if (NESI (ANDSI (GET_H_Y (), 1), 0)) {
3698 tmp_add_tmp
= GET_H_GR (f_rs2
);
3702 tmp_rd_tmp
= ADDSI (tmp_tmp
, tmp_add_tmp
);
3705 tmp_x
= ADDCSI (tmp_tmp
, tmp_add_tmp
, 0);
3707 BI opval
= ADDCFSI (tmp_tmp
, tmp_add_tmp
, 0);
3708 CPU (h_icc_c
) = opval
;
3709 TRACE_RESULT (current_cpu
, abuf
, "icc-c", 'x', opval
);
3712 BI opval
= ADDOFSI (tmp_tmp
, tmp_add_tmp
, 0);
3713 CPU (h_icc_v
) = opval
;
3714 TRACE_RESULT (current_cpu
, abuf
, "icc-v", 'x', opval
);
3717 BI opval
= LTSI (tmp_x
, 0);
3718 CPU (h_icc_n
) = opval
;
3719 TRACE_RESULT (current_cpu
, abuf
, "icc-n", 'x', opval
);
3722 BI opval
= EQSI (tmp_x
, 0);
3723 CPU (h_icc_z
) = opval
;
3724 TRACE_RESULT (current_cpu
, abuf
, "icc-z", 'x', opval
);
3728 SI opval
= SRLSI (GET_H_Y (), 1);
3730 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3732 if (NESI (ANDSI (GET_H_GR (f_rs1
), 1), 0)) {
3734 SI opval
= ORSI (GET_H_Y (), 0x80000000);
3736 TRACE_RESULT (current_cpu
, abuf
, "y-0", 'x', opval
);
3740 SI opval
= tmp_rd_tmp
;
3741 SET_H_GR (f_rd
, opval
);
3742 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3746 SEM_NBRANCH_FINI (vpc
, 0);
3750 /* save: save $rs1,$rs2,$rd */
3753 SEM_FN_NAME (sparc32
,save
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3755 SEM_STATUS status
= 0;
3756 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3757 int UNUSED written
= 0;
3758 IADDR UNUSED pc
= GET_H_PC ();
3759 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3760 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3761 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3764 SI opval
= sparc32_do_save (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
3765 SET_H_GR (f_rd
, opval
);
3766 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3769 SEM_NBRANCH_FINI (vpc
, 0);
3773 /* save-imm: save $rs1,$simm13,$rd */
3776 SEM_FN_NAME (sparc32
,save_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3778 SEM_STATUS status
= 0;
3779 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3780 int UNUSED written
= 0;
3781 IADDR UNUSED pc
= GET_H_PC ();
3782 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3783 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3784 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3787 SI opval
= sparc32_do_save (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
3788 SET_H_GR (f_rd
, opval
);
3789 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3792 SEM_NBRANCH_FINI (vpc
, 0);
3796 /* restore: restore $rs1,$rs2,$rd */
3799 SEM_FN_NAME (sparc32
,restore
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3801 SEM_STATUS status
= 0;
3802 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3803 int UNUSED written
= 0;
3804 IADDR UNUSED pc
= GET_H_PC ();
3805 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3806 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3807 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3810 SI opval
= sparc32_do_restore (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
3811 SET_H_GR (f_rd
, opval
);
3812 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3815 SEM_NBRANCH_FINI (vpc
, 0);
3819 /* restore-imm: restore $rs1,$simm13,$rd */
3822 SEM_FN_NAME (sparc32
,restore_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3824 SEM_STATUS status
= 0;
3825 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3826 int UNUSED written
= 0;
3827 IADDR UNUSED pc
= GET_H_PC ();
3828 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3829 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3830 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3833 SI opval
= sparc32_do_restore (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
3834 SET_H_GR (f_rd
, opval
);
3835 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3838 SEM_NBRANCH_FINI (vpc
, 0);
3842 /* rett: rett $rs1,$rs2 */
3845 SEM_FN_NAME (sparc32
,rett
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3847 SEM_STATUS status
= 0;
3848 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3849 int UNUSED written
= 0;
3850 IADDR UNUSED pc
= GET_H_PC ();
3852 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3853 EXTRACT_IFMT_WR_PSR_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3854 EXTRACT_IFMT_WR_PSR_CODE
3858 USI opval
= sparc32_do_rett (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
3859 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3860 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3864 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
3868 /* rett-imm: rett $rs1,$simm13 */
3871 SEM_FN_NAME (sparc32
,rett_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3873 SEM_STATUS status
= 0;
3874 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3875 int UNUSED written
= 0;
3876 IADDR UNUSED pc
= GET_H_PC ();
3878 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3879 EXTRACT_IFMT_WR_PSR_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3880 EXTRACT_IFMT_WR_PSR_IMM_CODE
3884 USI opval
= sparc32_do_rett (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
3885 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3886 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3890 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
3894 /* unimp: unimp $imm22 */
3897 SEM_FN_NAME (sparc32
,unimp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3899 SEM_STATUS status
= 0;
3900 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3901 int UNUSED written
= 0;
3902 IADDR UNUSED pc
= GET_H_PC ();
3903 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3904 EXTRACT_IFMT_UNIMP_VARS
/* f-imm22 f-op2 f-rd-res f-op */
3905 EXTRACT_IFMT_UNIMP_CODE
3907 sparc_do_unimp (current_cpu
, pc
, f_imm22
);
3909 SEM_NBRANCH_FINI (vpc
, 0);
3913 /* call: call $disp30 */
3916 SEM_FN_NAME (sparc32
,call
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3918 SEM_STATUS status
= 0;
3919 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3920 int UNUSED written
= 0;
3921 IADDR UNUSED pc
= GET_H_PC ();
3923 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3924 EXTRACT_IFMT_CALL_VARS
/* f-disp30 f-op */
3926 EXTRACT_IFMT_CALL_CODE
3927 i_disp30
= f_disp30
;
3932 SET_H_GR (((UINT
) 15), opval
);
3933 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
3937 USI opval
= i_disp30
;
3938 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3939 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3944 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
3948 /* jmpl: jmpl $rs1+$rs2,$rd */
3951 SEM_FN_NAME (sparc32
,jmpl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3953 SEM_STATUS status
= 0;
3954 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3955 int UNUSED written
= 0;
3956 IADDR UNUSED pc
= GET_H_PC ();
3958 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3959 EXTRACT_IFMT_LDSTUB_REG_REG_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-rd f-op */
3960 EXTRACT_IFMT_LDSTUB_REG_REG_CODE
3965 SET_H_GR (f_rd
, opval
);
3966 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
3970 USI opval
= ADDSI (GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
3971 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3972 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3977 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
3981 /* jmpl-imm: jmpl $rs1+$simm13,$rd */
3984 SEM_FN_NAME (sparc32
,jmpl_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
3986 SEM_STATUS status
= 0;
3987 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3988 int UNUSED written
= 0;
3989 IADDR UNUSED pc
= GET_H_PC ();
3991 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3992 EXTRACT_IFMT_LDSTUB_REG_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-rd f-op */
3993 EXTRACT_IFMT_LDSTUB_REG_IMM_CODE
3998 SET_H_GR (f_rd
, opval
);
3999 TRACE_RESULT (current_cpu
, abuf
, "rd", 'x', opval
);
4003 USI opval
= ADDSI (GET_H_GR (f_rs1
), f_simm13
);
4004 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4005 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4010 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4014 /* ba: ba$a $disp22 */
4017 SEM_FN_NAME (sparc32
,ba
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4019 SEM_STATUS status
= 0;
4020 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4021 int UNUSED written
= 0;
4022 IADDR UNUSED pc
= GET_H_PC ();
4024 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4025 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4027 EXTRACT_IFMT_BA_CODE
4028 i_disp22
= f_disp22
;
4033 USI opval
= i_disp22
;
4034 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4035 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4037 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4041 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4045 /* ta: ta $rs1,$rs2 */
4048 SEM_FN_NAME (sparc32
,ta
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4050 SEM_STATUS status
= 0;
4051 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4052 int UNUSED written
= 0;
4053 IADDR UNUSED pc
= GET_H_PC ();
4055 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4056 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4057 EXTRACT_IFMT_TA_CODE
4060 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4062 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4063 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4066 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4070 /* ta-imm: ta $rs1,$simm13 */
4073 SEM_FN_NAME (sparc32
,ta_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4075 SEM_STATUS status
= 0;
4076 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4077 int UNUSED written
= 0;
4078 IADDR UNUSED pc
= GET_H_PC ();
4080 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4081 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4082 EXTRACT_IFMT_TA_IMM_CODE
4085 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4087 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4088 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4091 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_UNCOND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4095 /* bn: bn$a $disp22 */
4098 SEM_FN_NAME (sparc32
,bn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4100 SEM_STATUS status
= 0;
4101 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4102 int UNUSED written
= 0;
4103 IADDR UNUSED pc
= GET_H_PC ();
4104 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4105 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4106 EXTRACT_IFMT_BA_CODE
4110 do { } while (0); /*nop*/
4111 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4115 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4119 /* tn: tn $rs1,$rs2 */
4122 SEM_FN_NAME (sparc32
,tn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4124 SEM_STATUS status
= 0;
4125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4126 int UNUSED written
= 0;
4127 IADDR UNUSED pc
= GET_H_PC ();
4128 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4129 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4130 EXTRACT_IFMT_TA_CODE
4132 do { } while (0); /*nop*/
4134 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
)));
4138 /* tn-imm: tn $rs1,$simm13 */
4141 SEM_FN_NAME (sparc32
,tn_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4143 SEM_STATUS status
= 0;
4144 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4145 int UNUSED written
= 0;
4146 IADDR UNUSED pc
= GET_H_PC ();
4147 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4148 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4149 EXTRACT_IFMT_TA_IMM_CODE
4151 do { } while (0); /*nop*/
4153 SEM_NBRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
)));
4157 /* bne: bne$a $disp22 */
4160 SEM_FN_NAME (sparc32
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4162 SEM_STATUS status
= 0;
4163 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4164 int UNUSED written
= 0;
4165 IADDR UNUSED pc
= GET_H_PC ();
4167 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4168 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4170 EXTRACT_IFMT_BA_CODE
4171 i_disp22
= f_disp22
;
4174 if (NOTBI (CPU (h_icc_z
))) {
4176 USI opval
= i_disp22
;
4177 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4178 written
|= (1 << 3);
4179 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4182 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4186 abuf
->written
= written
;
4187 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4191 /* tne: tne $rs1,$rs2 */
4194 SEM_FN_NAME (sparc32
,tne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4196 SEM_STATUS status
= 0;
4197 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4198 int UNUSED written
= 0;
4199 IADDR UNUSED pc
= GET_H_PC ();
4201 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4202 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4203 EXTRACT_IFMT_TA_CODE
4205 if (NOTBI (CPU (h_icc_z
))) {
4207 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4209 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4210 written
|= (1 << 4);
4211 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4215 abuf
->written
= written
;
4216 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4220 /* tne-imm: tne $rs1,$simm13 */
4223 SEM_FN_NAME (sparc32
,tne_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4225 SEM_STATUS status
= 0;
4226 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4227 int UNUSED written
= 0;
4228 IADDR UNUSED pc
= GET_H_PC ();
4230 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4231 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4232 EXTRACT_IFMT_TA_IMM_CODE
4234 if (NOTBI (CPU (h_icc_z
))) {
4236 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4238 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4239 written
|= (1 << 4);
4240 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4244 abuf
->written
= written
;
4245 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4249 /* be: be$a $disp22 */
4252 SEM_FN_NAME (sparc32
,be
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4254 SEM_STATUS status
= 0;
4255 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4256 int UNUSED written
= 0;
4257 IADDR UNUSED pc
= GET_H_PC ();
4259 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4260 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4262 EXTRACT_IFMT_BA_CODE
4263 i_disp22
= f_disp22
;
4266 if (CPU (h_icc_z
)) {
4268 USI opval
= i_disp22
;
4269 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4270 written
|= (1 << 3);
4271 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4274 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4278 abuf
->written
= written
;
4279 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4283 /* te: te $rs1,$rs2 */
4286 SEM_FN_NAME (sparc32
,te
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4288 SEM_STATUS status
= 0;
4289 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4290 int UNUSED written
= 0;
4291 IADDR UNUSED pc
= GET_H_PC ();
4293 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4294 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4295 EXTRACT_IFMT_TA_CODE
4297 if (CPU (h_icc_z
)) {
4299 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4301 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4302 written
|= (1 << 4);
4303 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4307 abuf
->written
= written
;
4308 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4312 /* te-imm: te $rs1,$simm13 */
4315 SEM_FN_NAME (sparc32
,te_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4317 SEM_STATUS status
= 0;
4318 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4319 int UNUSED written
= 0;
4320 IADDR UNUSED pc
= GET_H_PC ();
4322 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4323 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4324 EXTRACT_IFMT_TA_IMM_CODE
4326 if (CPU (h_icc_z
)) {
4328 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4330 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4331 written
|= (1 << 4);
4332 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4336 abuf
->written
= written
;
4337 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4341 /* bg: bg$a $disp22 */
4344 SEM_FN_NAME (sparc32
,bg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4346 SEM_STATUS status
= 0;
4347 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4348 int UNUSED written
= 0;
4349 IADDR UNUSED pc
= GET_H_PC ();
4351 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4352 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4354 EXTRACT_IFMT_BA_CODE
4355 i_disp22
= f_disp22
;
4358 if (NOTBI (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
))))) {
4360 USI opval
= i_disp22
;
4361 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4362 written
|= (1 << 5);
4363 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4366 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4370 abuf
->written
= written
;
4371 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4375 /* tg: tg $rs1,$rs2 */
4378 SEM_FN_NAME (sparc32
,tg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4380 SEM_STATUS status
= 0;
4381 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4382 int UNUSED written
= 0;
4383 IADDR UNUSED pc
= GET_H_PC ();
4385 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4386 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4387 EXTRACT_IFMT_TA_CODE
4389 if (NOTBI (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
))))) {
4391 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4393 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4394 written
|= (1 << 6);
4395 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4399 abuf
->written
= written
;
4400 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4404 /* tg-imm: tg $rs1,$simm13 */
4407 SEM_FN_NAME (sparc32
,tg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4409 SEM_STATUS status
= 0;
4410 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4411 int UNUSED written
= 0;
4412 IADDR UNUSED pc
= GET_H_PC ();
4414 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4415 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4416 EXTRACT_IFMT_TA_IMM_CODE
4418 if (NOTBI (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
))))) {
4420 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4422 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4423 written
|= (1 << 6);
4424 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4428 abuf
->written
= written
;
4429 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4433 /* ble: ble$a $disp22 */
4436 SEM_FN_NAME (sparc32
,ble
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4438 SEM_STATUS status
= 0;
4439 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4440 int UNUSED written
= 0;
4441 IADDR UNUSED pc
= GET_H_PC ();
4443 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4444 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4446 EXTRACT_IFMT_BA_CODE
4447 i_disp22
= f_disp22
;
4450 if (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
4452 USI opval
= i_disp22
;
4453 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4454 written
|= (1 << 5);
4455 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4458 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4462 abuf
->written
= written
;
4463 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4467 /* tle: tle $rs1,$rs2 */
4470 SEM_FN_NAME (sparc32
,tle
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4472 SEM_STATUS status
= 0;
4473 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4474 int UNUSED written
= 0;
4475 IADDR UNUSED pc
= GET_H_PC ();
4477 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4478 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4479 EXTRACT_IFMT_TA_CODE
4481 if (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
4483 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4485 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4486 written
|= (1 << 6);
4487 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4491 abuf
->written
= written
;
4492 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4496 /* tle-imm: tle $rs1,$simm13 */
4499 SEM_FN_NAME (sparc32
,tle_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4501 SEM_STATUS status
= 0;
4502 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4503 int UNUSED written
= 0;
4504 IADDR UNUSED pc
= GET_H_PC ();
4506 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4507 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4508 EXTRACT_IFMT_TA_IMM_CODE
4510 if (ORBI (CPU (h_icc_z
), XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
4512 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4514 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4515 written
|= (1 << 6);
4516 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4520 abuf
->written
= written
;
4521 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4525 /* bge: bge$a $disp22 */
4528 SEM_FN_NAME (sparc32
,bge
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4530 SEM_STATUS status
= 0;
4531 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4532 int UNUSED written
= 0;
4533 IADDR UNUSED pc
= GET_H_PC ();
4535 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4536 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4538 EXTRACT_IFMT_BA_CODE
4539 i_disp22
= f_disp22
;
4542 if (NOTBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
4544 USI opval
= i_disp22
;
4545 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4546 written
|= (1 << 4);
4547 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4550 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4554 abuf
->written
= written
;
4555 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4559 /* tge: tge $rs1,$rs2 */
4562 SEM_FN_NAME (sparc32
,tge
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4564 SEM_STATUS status
= 0;
4565 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4566 int UNUSED written
= 0;
4567 IADDR UNUSED pc
= GET_H_PC ();
4569 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4570 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4571 EXTRACT_IFMT_TA_CODE
4573 if (NOTBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
4575 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4577 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4578 written
|= (1 << 5);
4579 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4583 abuf
->written
= written
;
4584 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4588 /* tge-imm: tge $rs1,$simm13 */
4591 SEM_FN_NAME (sparc32
,tge_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4593 SEM_STATUS status
= 0;
4594 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4595 int UNUSED written
= 0;
4596 IADDR UNUSED pc
= GET_H_PC ();
4598 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4599 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4600 EXTRACT_IFMT_TA_IMM_CODE
4602 if (NOTBI (XORBI (CPU (h_icc_n
), CPU (h_icc_v
)))) {
4604 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4606 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4607 written
|= (1 << 5);
4608 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4612 abuf
->written
= written
;
4613 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4617 /* bl: bl$a $disp22 */
4620 SEM_FN_NAME (sparc32
,bl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4622 SEM_STATUS status
= 0;
4623 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4624 int UNUSED written
= 0;
4625 IADDR UNUSED pc
= GET_H_PC ();
4627 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4628 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4630 EXTRACT_IFMT_BA_CODE
4631 i_disp22
= f_disp22
;
4634 if (XORBI (CPU (h_icc_n
), CPU (h_icc_v
))) {
4636 USI opval
= i_disp22
;
4637 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4638 written
|= (1 << 4);
4639 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4642 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4646 abuf
->written
= written
;
4647 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4651 /* tl: tl $rs1,$rs2 */
4654 SEM_FN_NAME (sparc32
,tl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4656 SEM_STATUS status
= 0;
4657 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4658 int UNUSED written
= 0;
4659 IADDR UNUSED pc
= GET_H_PC ();
4661 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4662 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4663 EXTRACT_IFMT_TA_CODE
4665 if (XORBI (CPU (h_icc_n
), CPU (h_icc_v
))) {
4667 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4669 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4670 written
|= (1 << 5);
4671 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4675 abuf
->written
= written
;
4676 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4680 /* tl-imm: tl $rs1,$simm13 */
4683 SEM_FN_NAME (sparc32
,tl_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4685 SEM_STATUS status
= 0;
4686 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4687 int UNUSED written
= 0;
4688 IADDR UNUSED pc
= GET_H_PC ();
4690 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4691 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4692 EXTRACT_IFMT_TA_IMM_CODE
4694 if (XORBI (CPU (h_icc_n
), CPU (h_icc_v
))) {
4696 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4698 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4699 written
|= (1 << 5);
4700 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4704 abuf
->written
= written
;
4705 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4709 /* bgu: bgu$a $disp22 */
4712 SEM_FN_NAME (sparc32
,bgu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4714 SEM_STATUS status
= 0;
4715 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4716 int UNUSED written
= 0;
4717 IADDR UNUSED pc
= GET_H_PC ();
4719 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4720 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4722 EXTRACT_IFMT_BA_CODE
4723 i_disp22
= f_disp22
;
4726 if (NOTBI (ORBI (CPU (h_icc_c
), CPU (h_icc_z
)))) {
4728 USI opval
= i_disp22
;
4729 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4730 written
|= (1 << 4);
4731 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4734 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4738 abuf
->written
= written
;
4739 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4743 /* tgu: tgu $rs1,$rs2 */
4746 SEM_FN_NAME (sparc32
,tgu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4748 SEM_STATUS status
= 0;
4749 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4750 int UNUSED written
= 0;
4751 IADDR UNUSED pc
= GET_H_PC ();
4753 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4754 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4755 EXTRACT_IFMT_TA_CODE
4757 if (NOTBI (ORBI (CPU (h_icc_c
), CPU (h_icc_z
)))) {
4759 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4761 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4762 written
|= (1 << 5);
4763 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4767 abuf
->written
= written
;
4768 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4772 /* tgu-imm: tgu $rs1,$simm13 */
4775 SEM_FN_NAME (sparc32
,tgu_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4777 SEM_STATUS status
= 0;
4778 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4779 int UNUSED written
= 0;
4780 IADDR UNUSED pc
= GET_H_PC ();
4782 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4783 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4784 EXTRACT_IFMT_TA_IMM_CODE
4786 if (NOTBI (ORBI (CPU (h_icc_c
), CPU (h_icc_z
)))) {
4788 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4790 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4791 written
|= (1 << 5);
4792 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4796 abuf
->written
= written
;
4797 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4801 /* bleu: bleu$a $disp22 */
4804 SEM_FN_NAME (sparc32
,bleu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4806 SEM_STATUS status
= 0;
4807 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4808 int UNUSED written
= 0;
4809 IADDR UNUSED pc
= GET_H_PC ();
4811 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4812 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4814 EXTRACT_IFMT_BA_CODE
4815 i_disp22
= f_disp22
;
4818 if (ORBI (CPU (h_icc_c
), CPU (h_icc_z
))) {
4820 USI opval
= i_disp22
;
4821 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4822 written
|= (1 << 4);
4823 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4826 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4830 abuf
->written
= written
;
4831 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4835 /* tleu: tleu $rs1,$rs2 */
4838 SEM_FN_NAME (sparc32
,tleu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4840 SEM_STATUS status
= 0;
4841 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4842 int UNUSED written
= 0;
4843 IADDR UNUSED pc
= GET_H_PC ();
4845 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4846 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4847 EXTRACT_IFMT_TA_CODE
4849 if (ORBI (CPU (h_icc_c
), CPU (h_icc_z
))) {
4851 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4853 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4854 written
|= (1 << 5);
4855 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4859 abuf
->written
= written
;
4860 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4864 /* tleu-imm: tleu $rs1,$simm13 */
4867 SEM_FN_NAME (sparc32
,tleu_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4869 SEM_STATUS status
= 0;
4870 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4871 int UNUSED written
= 0;
4872 IADDR UNUSED pc
= GET_H_PC ();
4874 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4875 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4876 EXTRACT_IFMT_TA_IMM_CODE
4878 if (ORBI (CPU (h_icc_c
), CPU (h_icc_z
))) {
4880 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4882 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4883 written
|= (1 << 5);
4884 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4888 abuf
->written
= written
;
4889 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4893 /* bcc: bcc$a $disp22 */
4896 SEM_FN_NAME (sparc32
,bcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4898 SEM_STATUS status
= 0;
4899 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4900 int UNUSED written
= 0;
4901 IADDR UNUSED pc
= GET_H_PC ();
4903 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4904 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4906 EXTRACT_IFMT_BA_CODE
4907 i_disp22
= f_disp22
;
4910 if (NOTBI (CPU (h_icc_c
))) {
4912 USI opval
= i_disp22
;
4913 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4914 written
|= (1 << 3);
4915 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4918 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
4922 abuf
->written
= written
;
4923 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
4927 /* tcc: tcc $rs1,$rs2 */
4930 SEM_FN_NAME (sparc32
,tcc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4932 SEM_STATUS status
= 0;
4933 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4934 int UNUSED written
= 0;
4935 IADDR UNUSED pc
= GET_H_PC ();
4937 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4938 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4939 EXTRACT_IFMT_TA_CODE
4941 if (NOTBI (CPU (h_icc_c
))) {
4943 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
4945 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4946 written
|= (1 << 4);
4947 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4951 abuf
->written
= written
;
4952 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4956 /* tcc-imm: tcc $rs1,$simm13 */
4959 SEM_FN_NAME (sparc32
,tcc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4961 SEM_STATUS status
= 0;
4962 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4963 int UNUSED written
= 0;
4964 IADDR UNUSED pc
= GET_H_PC ();
4966 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4967 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
4968 EXTRACT_IFMT_TA_IMM_CODE
4970 if (NOTBI (CPU (h_icc_c
))) {
4972 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
4974 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4975 written
|= (1 << 4);
4976 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4980 abuf
->written
= written
;
4981 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
4985 /* bcs: bcs$a $disp22 */
4988 SEM_FN_NAME (sparc32
,bcs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
4990 SEM_STATUS status
= 0;
4991 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4992 int UNUSED written
= 0;
4993 IADDR UNUSED pc
= GET_H_PC ();
4995 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4996 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
4998 EXTRACT_IFMT_BA_CODE
4999 i_disp22
= f_disp22
;
5002 if (CPU (h_icc_c
)) {
5004 USI opval
= i_disp22
;
5005 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5006 written
|= (1 << 3);
5007 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5010 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
5014 abuf
->written
= written
;
5015 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
5019 /* tcs: tcs $rs1,$rs2 */
5022 SEM_FN_NAME (sparc32
,tcs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5024 SEM_STATUS status
= 0;
5025 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5026 int UNUSED written
= 0;
5027 IADDR UNUSED pc
= GET_H_PC ();
5029 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5030 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5031 EXTRACT_IFMT_TA_CODE
5033 if (CPU (h_icc_c
)) {
5035 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
5037 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5038 written
|= (1 << 4);
5039 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5043 abuf
->written
= written
;
5044 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5048 /* tcs-imm: tcs $rs1,$simm13 */
5051 SEM_FN_NAME (sparc32
,tcs_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5053 SEM_STATUS status
= 0;
5054 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5055 int UNUSED written
= 0;
5056 IADDR UNUSED pc
= GET_H_PC ();
5058 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5059 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5060 EXTRACT_IFMT_TA_IMM_CODE
5062 if (CPU (h_icc_c
)) {
5064 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
5066 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5067 written
|= (1 << 4);
5068 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5072 abuf
->written
= written
;
5073 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5077 /* bpos: bpos$a $disp22 */
5080 SEM_FN_NAME (sparc32
,bpos
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5082 SEM_STATUS status
= 0;
5083 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5084 int UNUSED written
= 0;
5085 IADDR UNUSED pc
= GET_H_PC ();
5087 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5088 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
5090 EXTRACT_IFMT_BA_CODE
5091 i_disp22
= f_disp22
;
5094 if (NOTBI (CPU (h_icc_n
))) {
5096 USI opval
= i_disp22
;
5097 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5098 written
|= (1 << 3);
5099 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5102 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
5106 abuf
->written
= written
;
5107 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
5111 /* tpos: tpos $rs1,$rs2 */
5114 SEM_FN_NAME (sparc32
,tpos
) (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 ();
5121 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5122 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5123 EXTRACT_IFMT_TA_CODE
5125 if (NOTBI (CPU (h_icc_n
))) {
5127 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
5129 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5130 written
|= (1 << 4);
5131 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5135 abuf
->written
= written
;
5136 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5140 /* tpos-imm: tpos $rs1,$simm13 */
5143 SEM_FN_NAME (sparc32
,tpos_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5145 SEM_STATUS status
= 0;
5146 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5147 int UNUSED written
= 0;
5148 IADDR UNUSED pc
= GET_H_PC ();
5150 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5151 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5152 EXTRACT_IFMT_TA_IMM_CODE
5154 if (NOTBI (CPU (h_icc_n
))) {
5156 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
5158 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5159 written
|= (1 << 4);
5160 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5164 abuf
->written
= written
;
5165 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5169 /* bneg: bneg$a $disp22 */
5172 SEM_FN_NAME (sparc32
,bneg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5174 SEM_STATUS status
= 0;
5175 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5176 int UNUSED written
= 0;
5177 IADDR UNUSED pc
= GET_H_PC ();
5179 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5180 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
5182 EXTRACT_IFMT_BA_CODE
5183 i_disp22
= f_disp22
;
5186 if (CPU (h_icc_n
)) {
5188 USI opval
= i_disp22
;
5189 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5190 written
|= (1 << 3);
5191 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5194 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
5198 abuf
->written
= written
;
5199 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
5203 /* tneg: tneg $rs1,$rs2 */
5206 SEM_FN_NAME (sparc32
,tneg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5208 SEM_STATUS status
= 0;
5209 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5210 int UNUSED written
= 0;
5211 IADDR UNUSED pc
= GET_H_PC ();
5213 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5214 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5215 EXTRACT_IFMT_TA_CODE
5217 if (CPU (h_icc_n
)) {
5219 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
5221 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5222 written
|= (1 << 4);
5223 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5227 abuf
->written
= written
;
5228 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5232 /* tneg-imm: tneg $rs1,$simm13 */
5235 SEM_FN_NAME (sparc32
,tneg_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5237 SEM_STATUS status
= 0;
5238 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5239 int UNUSED written
= 0;
5240 IADDR UNUSED pc
= GET_H_PC ();
5242 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5243 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5244 EXTRACT_IFMT_TA_IMM_CODE
5246 if (CPU (h_icc_n
)) {
5248 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
5250 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5251 written
|= (1 << 4);
5252 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5256 abuf
->written
= written
;
5257 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5261 /* bvc: bvc$a $disp22 */
5264 SEM_FN_NAME (sparc32
,bvc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5266 SEM_STATUS status
= 0;
5267 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5268 int UNUSED written
= 0;
5269 IADDR UNUSED pc
= GET_H_PC ();
5271 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5272 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
5274 EXTRACT_IFMT_BA_CODE
5275 i_disp22
= f_disp22
;
5278 if (NOTBI (CPU (h_icc_v
))) {
5280 USI opval
= i_disp22
;
5281 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5282 written
|= (1 << 3);
5283 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5286 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
5290 abuf
->written
= written
;
5291 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
5295 /* tvc: tvc $rs1,$rs2 */
5298 SEM_FN_NAME (sparc32
,tvc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5300 SEM_STATUS status
= 0;
5301 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5302 int UNUSED written
= 0;
5303 IADDR UNUSED pc
= GET_H_PC ();
5305 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5306 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5307 EXTRACT_IFMT_TA_CODE
5309 if (NOTBI (CPU (h_icc_v
))) {
5311 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
5313 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5314 written
|= (1 << 4);
5315 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5319 abuf
->written
= written
;
5320 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5324 /* tvc-imm: tvc $rs1,$simm13 */
5327 SEM_FN_NAME (sparc32
,tvc_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5329 SEM_STATUS status
= 0;
5330 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5331 int UNUSED written
= 0;
5332 IADDR UNUSED pc
= GET_H_PC ();
5334 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5335 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5336 EXTRACT_IFMT_TA_IMM_CODE
5338 if (NOTBI (CPU (h_icc_v
))) {
5340 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
5342 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5343 written
|= (1 << 4);
5344 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5348 abuf
->written
= written
;
5349 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5353 /* bvs: bvs$a $disp22 */
5356 SEM_FN_NAME (sparc32
,bvs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5358 SEM_STATUS status
= 0;
5359 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5360 int UNUSED written
= 0;
5361 IADDR UNUSED pc
= GET_H_PC ();
5363 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5364 EXTRACT_IFMT_BA_VARS
/* f-disp22 f-op2 f-fmt2-cond f-a f-op */
5366 EXTRACT_IFMT_BA_CODE
5367 i_disp22
= f_disp22
;
5370 if (CPU (h_icc_v
)) {
5372 USI opval
= i_disp22
;
5373 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5374 written
|= (1 << 3);
5375 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5378 SEM_ANNUL_INSN (current_cpu
, pc
, f_a
);
5382 abuf
->written
= written
;
5383 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_V9_DEPRECATED
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_ANNUL
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_DELAY_SLOT
-CGEN_ATTR_BOOL_OFFSET
)));
5387 /* tvs: tvs $rs1,$rs2 */
5390 SEM_FN_NAME (sparc32
,tvs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5392 SEM_STATUS status
= 0;
5393 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5394 int UNUSED written
= 0;
5395 IADDR UNUSED pc
= GET_H_PC ();
5397 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5398 EXTRACT_IFMT_TA_VARS
/* f-rs2 f-res-asi f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5399 EXTRACT_IFMT_TA_CODE
5401 if (CPU (h_icc_v
)) {
5403 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), GET_H_GR (f_rs2
));
5405 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5406 written
|= (1 << 4);
5407 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5411 abuf
->written
= written
;
5412 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));
5416 /* tvs-imm: tvs $rs1,$simm13 */
5419 SEM_FN_NAME (sparc32
,tvs_imm
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, CGEN_INSN_INT insn
)
5421 SEM_STATUS status
= 0;
5422 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5423 int UNUSED written
= 0;
5424 IADDR UNUSED pc
= GET_H_PC ();
5426 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5427 EXTRACT_IFMT_TA_IMM_VARS
/* f-simm13 f-i f-rs1 f-op3 f-fmt2-cond f-a f-op */
5428 EXTRACT_IFMT_TA_IMM_CODE
5430 if (CPU (h_icc_v
)) {
5432 USI opval
= sparc32_sw_trap (current_cpu
, pc
, GET_H_GR (f_rs1
), f_simm13
);
5434 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
5435 written
|= (1 << 4);
5436 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
5440 abuf
->written
= written
;
5441 SEM_BRANCH_FINI (vpc
, 0|(1<<(CGEN_INSN_TRAP
-CGEN_ATTR_BOOL_OFFSET
))|(1<<(CGEN_INSN_COND_CTI
-CGEN_ATTR_BOOL_OFFSET
)));