1 /* Simulator instruction semantics for fr30bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
7 This file is part of the GNU Simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
35 { FR30BF_INSN_X_INVALID
, && case_sem_INSN_X_INVALID
},
36 { FR30BF_INSN_X_AFTER
, && case_sem_INSN_X_AFTER
},
37 { FR30BF_INSN_X_BEFORE
, && case_sem_INSN_X_BEFORE
},
38 { FR30BF_INSN_X_CTI_CHAIN
, && case_sem_INSN_X_CTI_CHAIN
},
39 { FR30BF_INSN_X_CHAIN
, && case_sem_INSN_X_CHAIN
},
40 { FR30BF_INSN_X_BEGIN
, && case_sem_INSN_X_BEGIN
},
41 { FR30BF_INSN_ADD
, && case_sem_INSN_ADD
},
42 { FR30BF_INSN_ADDI
, && case_sem_INSN_ADDI
},
43 { FR30BF_INSN_ADD2
, && case_sem_INSN_ADD2
},
44 { FR30BF_INSN_ADDC
, && case_sem_INSN_ADDC
},
45 { FR30BF_INSN_ADDN
, && case_sem_INSN_ADDN
},
46 { FR30BF_INSN_ADDNI
, && case_sem_INSN_ADDNI
},
47 { FR30BF_INSN_ADDN2
, && case_sem_INSN_ADDN2
},
48 { FR30BF_INSN_SUB
, && case_sem_INSN_SUB
},
49 { FR30BF_INSN_SUBC
, && case_sem_INSN_SUBC
},
50 { FR30BF_INSN_SUBN
, && case_sem_INSN_SUBN
},
51 { FR30BF_INSN_CMP
, && case_sem_INSN_CMP
},
52 { FR30BF_INSN_CMPI
, && case_sem_INSN_CMPI
},
53 { FR30BF_INSN_CMP2
, && case_sem_INSN_CMP2
},
54 { FR30BF_INSN_AND
, && case_sem_INSN_AND
},
55 { FR30BF_INSN_OR
, && case_sem_INSN_OR
},
56 { FR30BF_INSN_EOR
, && case_sem_INSN_EOR
},
57 { FR30BF_INSN_ANDM
, && case_sem_INSN_ANDM
},
58 { FR30BF_INSN_ANDH
, && case_sem_INSN_ANDH
},
59 { FR30BF_INSN_ANDB
, && case_sem_INSN_ANDB
},
60 { FR30BF_INSN_ORM
, && case_sem_INSN_ORM
},
61 { FR30BF_INSN_ORH
, && case_sem_INSN_ORH
},
62 { FR30BF_INSN_ORB
, && case_sem_INSN_ORB
},
63 { FR30BF_INSN_EORM
, && case_sem_INSN_EORM
},
64 { FR30BF_INSN_EORH
, && case_sem_INSN_EORH
},
65 { FR30BF_INSN_EORB
, && case_sem_INSN_EORB
},
66 { FR30BF_INSN_BANDL
, && case_sem_INSN_BANDL
},
67 { FR30BF_INSN_BORL
, && case_sem_INSN_BORL
},
68 { FR30BF_INSN_BEORL
, && case_sem_INSN_BEORL
},
69 { FR30BF_INSN_BANDH
, && case_sem_INSN_BANDH
},
70 { FR30BF_INSN_BORH
, && case_sem_INSN_BORH
},
71 { FR30BF_INSN_BEORH
, && case_sem_INSN_BEORH
},
72 { FR30BF_INSN_BTSTL
, && case_sem_INSN_BTSTL
},
73 { FR30BF_INSN_BTSTH
, && case_sem_INSN_BTSTH
},
74 { FR30BF_INSN_MUL
, && case_sem_INSN_MUL
},
75 { FR30BF_INSN_MULU
, && case_sem_INSN_MULU
},
76 { FR30BF_INSN_MULH
, && case_sem_INSN_MULH
},
77 { FR30BF_INSN_MULUH
, && case_sem_INSN_MULUH
},
78 { FR30BF_INSN_DIV0S
, && case_sem_INSN_DIV0S
},
79 { FR30BF_INSN_DIV0U
, && case_sem_INSN_DIV0U
},
80 { FR30BF_INSN_DIV1
, && case_sem_INSN_DIV1
},
81 { FR30BF_INSN_DIV2
, && case_sem_INSN_DIV2
},
82 { FR30BF_INSN_DIV3
, && case_sem_INSN_DIV3
},
83 { FR30BF_INSN_DIV4S
, && case_sem_INSN_DIV4S
},
84 { FR30BF_INSN_LSL
, && case_sem_INSN_LSL
},
85 { FR30BF_INSN_LSLI
, && case_sem_INSN_LSLI
},
86 { FR30BF_INSN_LSL2
, && case_sem_INSN_LSL2
},
87 { FR30BF_INSN_LSR
, && case_sem_INSN_LSR
},
88 { FR30BF_INSN_LSRI
, && case_sem_INSN_LSRI
},
89 { FR30BF_INSN_LSR2
, && case_sem_INSN_LSR2
},
90 { FR30BF_INSN_ASR
, && case_sem_INSN_ASR
},
91 { FR30BF_INSN_ASRI
, && case_sem_INSN_ASRI
},
92 { FR30BF_INSN_ASR2
, && case_sem_INSN_ASR2
},
93 { FR30BF_INSN_LDI8
, && case_sem_INSN_LDI8
},
94 { FR30BF_INSN_LDI20
, && case_sem_INSN_LDI20
},
95 { FR30BF_INSN_LDI32
, && case_sem_INSN_LDI32
},
96 { FR30BF_INSN_LD
, && case_sem_INSN_LD
},
97 { FR30BF_INSN_LDUH
, && case_sem_INSN_LDUH
},
98 { FR30BF_INSN_LDUB
, && case_sem_INSN_LDUB
},
99 { FR30BF_INSN_LDR13
, && case_sem_INSN_LDR13
},
100 { FR30BF_INSN_LDR13UH
, && case_sem_INSN_LDR13UH
},
101 { FR30BF_INSN_LDR13UB
, && case_sem_INSN_LDR13UB
},
102 { FR30BF_INSN_LDR14
, && case_sem_INSN_LDR14
},
103 { FR30BF_INSN_LDR14UH
, && case_sem_INSN_LDR14UH
},
104 { FR30BF_INSN_LDR14UB
, && case_sem_INSN_LDR14UB
},
105 { FR30BF_INSN_LDR15
, && case_sem_INSN_LDR15
},
106 { FR30BF_INSN_LDR15GR
, && case_sem_INSN_LDR15GR
},
107 { FR30BF_INSN_LDR15DR
, && case_sem_INSN_LDR15DR
},
108 { FR30BF_INSN_LDR15PS
, && case_sem_INSN_LDR15PS
},
109 { FR30BF_INSN_ST
, && case_sem_INSN_ST
},
110 { FR30BF_INSN_STH
, && case_sem_INSN_STH
},
111 { FR30BF_INSN_STB
, && case_sem_INSN_STB
},
112 { FR30BF_INSN_STR13
, && case_sem_INSN_STR13
},
113 { FR30BF_INSN_STR13H
, && case_sem_INSN_STR13H
},
114 { FR30BF_INSN_STR13B
, && case_sem_INSN_STR13B
},
115 { FR30BF_INSN_STR14
, && case_sem_INSN_STR14
},
116 { FR30BF_INSN_STR14H
, && case_sem_INSN_STR14H
},
117 { FR30BF_INSN_STR14B
, && case_sem_INSN_STR14B
},
118 { FR30BF_INSN_STR15
, && case_sem_INSN_STR15
},
119 { FR30BF_INSN_STR15GR
, && case_sem_INSN_STR15GR
},
120 { FR30BF_INSN_STR15DR
, && case_sem_INSN_STR15DR
},
121 { FR30BF_INSN_STR15PS
, && case_sem_INSN_STR15PS
},
122 { FR30BF_INSN_MOV
, && case_sem_INSN_MOV
},
123 { FR30BF_INSN_MOVDR
, && case_sem_INSN_MOVDR
},
124 { FR30BF_INSN_MOVPS
, && case_sem_INSN_MOVPS
},
125 { FR30BF_INSN_MOV2DR
, && case_sem_INSN_MOV2DR
},
126 { FR30BF_INSN_MOV2PS
, && case_sem_INSN_MOV2PS
},
127 { FR30BF_INSN_JMP
, && case_sem_INSN_JMP
},
128 { FR30BF_INSN_JMPD
, && case_sem_INSN_JMPD
},
129 { FR30BF_INSN_CALLR
, && case_sem_INSN_CALLR
},
130 { FR30BF_INSN_CALLRD
, && case_sem_INSN_CALLRD
},
131 { FR30BF_INSN_CALL
, && case_sem_INSN_CALL
},
132 { FR30BF_INSN_CALLD
, && case_sem_INSN_CALLD
},
133 { FR30BF_INSN_RET
, && case_sem_INSN_RET
},
134 { FR30BF_INSN_RET_D
, && case_sem_INSN_RET_D
},
135 { FR30BF_INSN_INT
, && case_sem_INSN_INT
},
136 { FR30BF_INSN_INTE
, && case_sem_INSN_INTE
},
137 { FR30BF_INSN_RETI
, && case_sem_INSN_RETI
},
138 { FR30BF_INSN_BRAD
, && case_sem_INSN_BRAD
},
139 { FR30BF_INSN_BRA
, && case_sem_INSN_BRA
},
140 { FR30BF_INSN_BNOD
, && case_sem_INSN_BNOD
},
141 { FR30BF_INSN_BNO
, && case_sem_INSN_BNO
},
142 { FR30BF_INSN_BEQD
, && case_sem_INSN_BEQD
},
143 { FR30BF_INSN_BEQ
, && case_sem_INSN_BEQ
},
144 { FR30BF_INSN_BNED
, && case_sem_INSN_BNED
},
145 { FR30BF_INSN_BNE
, && case_sem_INSN_BNE
},
146 { FR30BF_INSN_BCD
, && case_sem_INSN_BCD
},
147 { FR30BF_INSN_BC
, && case_sem_INSN_BC
},
148 { FR30BF_INSN_BNCD
, && case_sem_INSN_BNCD
},
149 { FR30BF_INSN_BNC
, && case_sem_INSN_BNC
},
150 { FR30BF_INSN_BND
, && case_sem_INSN_BND
},
151 { FR30BF_INSN_BN
, && case_sem_INSN_BN
},
152 { FR30BF_INSN_BPD
, && case_sem_INSN_BPD
},
153 { FR30BF_INSN_BP
, && case_sem_INSN_BP
},
154 { FR30BF_INSN_BVD
, && case_sem_INSN_BVD
},
155 { FR30BF_INSN_BV
, && case_sem_INSN_BV
},
156 { FR30BF_INSN_BNVD
, && case_sem_INSN_BNVD
},
157 { FR30BF_INSN_BNV
, && case_sem_INSN_BNV
},
158 { FR30BF_INSN_BLTD
, && case_sem_INSN_BLTD
},
159 { FR30BF_INSN_BLT
, && case_sem_INSN_BLT
},
160 { FR30BF_INSN_BGED
, && case_sem_INSN_BGED
},
161 { FR30BF_INSN_BGE
, && case_sem_INSN_BGE
},
162 { FR30BF_INSN_BLED
, && case_sem_INSN_BLED
},
163 { FR30BF_INSN_BLE
, && case_sem_INSN_BLE
},
164 { FR30BF_INSN_BGTD
, && case_sem_INSN_BGTD
},
165 { FR30BF_INSN_BGT
, && case_sem_INSN_BGT
},
166 { FR30BF_INSN_BLSD
, && case_sem_INSN_BLSD
},
167 { FR30BF_INSN_BLS
, && case_sem_INSN_BLS
},
168 { FR30BF_INSN_BHID
, && case_sem_INSN_BHID
},
169 { FR30BF_INSN_BHI
, && case_sem_INSN_BHI
},
170 { FR30BF_INSN_DMOVR13
, && case_sem_INSN_DMOVR13
},
171 { FR30BF_INSN_DMOVR13H
, && case_sem_INSN_DMOVR13H
},
172 { FR30BF_INSN_DMOVR13B
, && case_sem_INSN_DMOVR13B
},
173 { FR30BF_INSN_DMOVR13PI
, && case_sem_INSN_DMOVR13PI
},
174 { FR30BF_INSN_DMOVR13PIH
, && case_sem_INSN_DMOVR13PIH
},
175 { FR30BF_INSN_DMOVR13PIB
, && case_sem_INSN_DMOVR13PIB
},
176 { FR30BF_INSN_DMOVR15PI
, && case_sem_INSN_DMOVR15PI
},
177 { FR30BF_INSN_DMOV2R13
, && case_sem_INSN_DMOV2R13
},
178 { FR30BF_INSN_DMOV2R13H
, && case_sem_INSN_DMOV2R13H
},
179 { FR30BF_INSN_DMOV2R13B
, && case_sem_INSN_DMOV2R13B
},
180 { FR30BF_INSN_DMOV2R13PI
, && case_sem_INSN_DMOV2R13PI
},
181 { FR30BF_INSN_DMOV2R13PIH
, && case_sem_INSN_DMOV2R13PIH
},
182 { FR30BF_INSN_DMOV2R13PIB
, && case_sem_INSN_DMOV2R13PIB
},
183 { FR30BF_INSN_DMOV2R15PD
, && case_sem_INSN_DMOV2R15PD
},
184 { FR30BF_INSN_LDRES
, && case_sem_INSN_LDRES
},
185 { FR30BF_INSN_STRES
, && case_sem_INSN_STRES
},
186 { FR30BF_INSN_COPOP
, && case_sem_INSN_COPOP
},
187 { FR30BF_INSN_COPLD
, && case_sem_INSN_COPLD
},
188 { FR30BF_INSN_COPST
, && case_sem_INSN_COPST
},
189 { FR30BF_INSN_COPSV
, && case_sem_INSN_COPSV
},
190 { FR30BF_INSN_NOP
, && case_sem_INSN_NOP
},
191 { FR30BF_INSN_ANDCCR
, && case_sem_INSN_ANDCCR
},
192 { FR30BF_INSN_ORCCR
, && case_sem_INSN_ORCCR
},
193 { FR30BF_INSN_STILM
, && case_sem_INSN_STILM
},
194 { FR30BF_INSN_ADDSP
, && case_sem_INSN_ADDSP
},
195 { FR30BF_INSN_EXTSB
, && case_sem_INSN_EXTSB
},
196 { FR30BF_INSN_EXTUB
, && case_sem_INSN_EXTUB
},
197 { FR30BF_INSN_EXTSH
, && case_sem_INSN_EXTSH
},
198 { FR30BF_INSN_EXTUH
, && case_sem_INSN_EXTUH
},
199 { FR30BF_INSN_LDM0
, && case_sem_INSN_LDM0
},
200 { FR30BF_INSN_LDM1
, && case_sem_INSN_LDM1
},
201 { FR30BF_INSN_STM0
, && case_sem_INSN_STM0
},
202 { FR30BF_INSN_STM1
, && case_sem_INSN_STM1
},
203 { FR30BF_INSN_ENTER
, && case_sem_INSN_ENTER
},
204 { FR30BF_INSN_LEAVE
, && case_sem_INSN_LEAVE
},
205 { FR30BF_INSN_XCHB
, && case_sem_INSN_XCHB
},
210 for (i
= 0; labels
[i
].label
!= 0; ++i
)
212 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_fast_lab
= labels
[i
].label
;
214 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_full_lab
= labels
[i
].label
;
218 #endif /* DEFINE_LABELS */
222 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
223 off frills like tracing and profiling. */
224 /* FIXME: A better way would be to have TRACE_RESULT check for something
225 that can cause it to be optimized out. Another way would be to emit
226 special handlers into the instruction "stream". */
230 #define TRACE_RESULT(cpu, abuf, name, type, val)
234 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
240 /* Branch to next handler without going around main loop. */
241 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
242 SWITCH (sem
, SEM_ARGBUF (vpc
) -> semantic
.sem_case
)
244 #else /* ! WITH_SCACHE_PBB */
246 #define NEXT(vpc) BREAK (sem)
249 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_fast_lab
)
251 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_full_lab
)
254 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->num
)
257 #endif /* ! WITH_SCACHE_PBB */
261 CASE (sem
, INSN_X_INVALID
) : /* --invalid-- */
263 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
264 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
265 #define FLD(f) abuf->fields.fmt_empty.f
266 int UNUSED written
= 0;
267 IADDR UNUSED pc
= abuf
->addr
;
268 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
272 /* Update the recorded pc in the cpu state struct. */
275 sim_engine_invalid_insn (current_cpu
, pc
);
276 sim_io_error (CPU_STATE (current_cpu
), "invalid insn not handled\n");
284 CASE (sem
, INSN_X_AFTER
) : /* --after-- */
286 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
287 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
288 #define FLD(f) abuf->fields.fmt_empty.f
289 int UNUSED written
= 0;
290 IADDR UNUSED pc
= abuf
->addr
;
291 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
294 #if WITH_SCACHE_PBB_FR30BF
295 fr30bf_pbb_after (current_cpu
, sem_arg
);
303 CASE (sem
, INSN_X_BEFORE
) : /* --before-- */
305 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
306 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
307 #define FLD(f) abuf->fields.fmt_empty.f
308 int UNUSED written
= 0;
309 IADDR UNUSED pc
= abuf
->addr
;
310 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
313 #if WITH_SCACHE_PBB_FR30BF
314 fr30bf_pbb_before (current_cpu
, sem_arg
);
322 CASE (sem
, INSN_X_CTI_CHAIN
) : /* --cti-chain-- */
324 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
325 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
326 #define FLD(f) abuf->fields.fmt_empty.f
327 int UNUSED written
= 0;
328 IADDR UNUSED pc
= abuf
->addr
;
329 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
332 #if WITH_SCACHE_PBB_FR30BF
334 vpc
= fr30bf_pbb_cti_chain (current_cpu
, sem_arg
,
335 pbb_br_npc_ptr
, pbb_br_npc
);
338 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
339 vpc
= fr30bf_pbb_cti_chain (current_cpu
, sem_arg
,
340 CPU_PBB_BR_NPC_PTR (current_cpu
),
341 CPU_PBB_BR_NPC (current_cpu
));
350 CASE (sem
, INSN_X_CHAIN
) : /* --chain-- */
352 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
353 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
354 #define FLD(f) abuf->fields.fmt_empty.f
355 int UNUSED written
= 0;
356 IADDR UNUSED pc
= abuf
->addr
;
357 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
360 #if WITH_SCACHE_PBB_FR30BF
361 vpc
= fr30bf_pbb_chain (current_cpu
, sem_arg
);
372 CASE (sem
, INSN_X_BEGIN
) : /* --begin-- */
374 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
375 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
376 #define FLD(f) abuf->fields.fmt_empty.f
377 int UNUSED written
= 0;
378 IADDR UNUSED pc
= abuf
->addr
;
379 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
382 #if WITH_SCACHE_PBB_FR30BF
384 /* In the switch case FAST_P is a constant, allowing several optimizations
385 in any called inline functions. */
386 vpc
= fr30bf_pbb_begin (current_cpu
, FAST_P
);
388 vpc
= fr30bf_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
397 CASE (sem
, INSN_ADD
) : /* add $Rj,$Ri */
399 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
400 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
401 #define FLD(f) abuf->fields.fmt_add.f
402 int UNUSED written
= 0;
403 IADDR UNUSED pc
= abuf
->addr
;
404 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
408 BI opval
= ADDOFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
409 CPU (h_vbit
) = opval
;
410 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
413 BI opval
= ADDCFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
414 CPU (h_cbit
) = opval
;
415 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
418 SI opval
= ADDSI (* FLD (i_Ri
), * FLD (i_Rj
));
419 * FLD (i_Ri
) = opval
;
420 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
424 BI opval
= EQSI (* FLD (i_Ri
), 0);
425 CPU (h_zbit
) = opval
;
426 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
429 BI opval
= LTSI (* FLD (i_Ri
), 0);
430 CPU (h_nbit
) = opval
;
431 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
440 CASE (sem
, INSN_ADDI
) : /* add $u4,$Ri */
442 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
443 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
444 #define FLD(f) abuf->fields.fmt_addi.f
445 int UNUSED written
= 0;
446 IADDR UNUSED pc
= abuf
->addr
;
447 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
451 BI opval
= ADDOFSI (* FLD (i_Ri
), FLD (f_u4
), 0);
452 CPU (h_vbit
) = opval
;
453 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
456 BI opval
= ADDCFSI (* FLD (i_Ri
), FLD (f_u4
), 0);
457 CPU (h_cbit
) = opval
;
458 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
461 SI opval
= ADDSI (* FLD (i_Ri
), FLD (f_u4
));
462 * FLD (i_Ri
) = opval
;
463 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
467 BI opval
= EQSI (* FLD (i_Ri
), 0);
468 CPU (h_zbit
) = opval
;
469 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
472 BI opval
= LTSI (* FLD (i_Ri
), 0);
473 CPU (h_nbit
) = opval
;
474 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
483 CASE (sem
, INSN_ADD2
) : /* add2 $m4,$Ri */
485 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
486 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
487 #define FLD(f) abuf->fields.fmt_add2.f
488 int UNUSED written
= 0;
489 IADDR UNUSED pc
= abuf
->addr
;
490 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
494 BI opval
= ADDOFSI (* FLD (i_Ri
), FLD (f_m4
), 0);
495 CPU (h_vbit
) = opval
;
496 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
499 BI opval
= ADDCFSI (* FLD (i_Ri
), FLD (f_m4
), 0);
500 CPU (h_cbit
) = opval
;
501 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
504 SI opval
= ADDSI (* FLD (i_Ri
), FLD (f_m4
));
505 * FLD (i_Ri
) = opval
;
506 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
510 BI opval
= EQSI (* FLD (i_Ri
), 0);
511 CPU (h_zbit
) = opval
;
512 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
515 BI opval
= LTSI (* FLD (i_Ri
), 0);
516 CPU (h_nbit
) = opval
;
517 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
526 CASE (sem
, INSN_ADDC
) : /* addc $Rj,$Ri */
528 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
529 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
530 #define FLD(f) abuf->fields.fmt_addc.f
531 int UNUSED written
= 0;
532 IADDR UNUSED pc
= abuf
->addr
;
533 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
537 tmp_tmp
= ADDCSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
539 BI opval
= ADDOFSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
540 CPU (h_vbit
) = opval
;
541 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
544 BI opval
= ADDCFSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
545 CPU (h_cbit
) = opval
;
546 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
550 * FLD (i_Ri
) = opval
;
551 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
555 BI opval
= EQSI (* FLD (i_Ri
), 0);
556 CPU (h_zbit
) = opval
;
557 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
560 BI opval
= LTSI (* FLD (i_Ri
), 0);
561 CPU (h_nbit
) = opval
;
562 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
571 CASE (sem
, INSN_ADDN
) : /* addn $Rj,$Ri */
573 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
574 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
575 #define FLD(f) abuf->fields.fmt_addn.f
576 int UNUSED written
= 0;
577 IADDR UNUSED pc
= abuf
->addr
;
578 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
581 SI opval
= ADDSI (* FLD (i_Ri
), * FLD (i_Rj
));
582 * FLD (i_Ri
) = opval
;
583 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
590 CASE (sem
, INSN_ADDNI
) : /* addn $u4,$Ri */
592 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
593 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
594 #define FLD(f) abuf->fields.fmt_addni.f
595 int UNUSED written
= 0;
596 IADDR UNUSED pc
= abuf
->addr
;
597 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
600 SI opval
= ADDSI (* FLD (i_Ri
), FLD (f_u4
));
601 * FLD (i_Ri
) = opval
;
602 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
609 CASE (sem
, INSN_ADDN2
) : /* addn2 $m4,$Ri */
611 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
612 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
613 #define FLD(f) abuf->fields.fmt_addn2.f
614 int UNUSED written
= 0;
615 IADDR UNUSED pc
= abuf
->addr
;
616 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
619 SI opval
= ADDSI (* FLD (i_Ri
), FLD (f_m4
));
620 * FLD (i_Ri
) = opval
;
621 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
628 CASE (sem
, INSN_SUB
) : /* sub $Rj,$Ri */
630 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
631 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
632 #define FLD(f) abuf->fields.fmt_add.f
633 int UNUSED written
= 0;
634 IADDR UNUSED pc
= abuf
->addr
;
635 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
639 BI opval
= SUBOFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
640 CPU (h_vbit
) = opval
;
641 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
644 BI opval
= SUBCFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
645 CPU (h_cbit
) = opval
;
646 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
649 SI opval
= SUBSI (* FLD (i_Ri
), * FLD (i_Rj
));
650 * FLD (i_Ri
) = opval
;
651 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
655 BI opval
= EQSI (* FLD (i_Ri
), 0);
656 CPU (h_zbit
) = opval
;
657 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
660 BI opval
= LTSI (* FLD (i_Ri
), 0);
661 CPU (h_nbit
) = opval
;
662 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
671 CASE (sem
, INSN_SUBC
) : /* subc $Rj,$Ri */
673 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
674 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
675 #define FLD(f) abuf->fields.fmt_addc.f
676 int UNUSED written
= 0;
677 IADDR UNUSED pc
= abuf
->addr
;
678 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
682 tmp_tmp
= SUBCSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
684 BI opval
= SUBOFSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
685 CPU (h_vbit
) = opval
;
686 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
689 BI opval
= SUBCFSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
690 CPU (h_cbit
) = opval
;
691 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
695 * FLD (i_Ri
) = opval
;
696 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
700 BI opval
= EQSI (* FLD (i_Ri
), 0);
701 CPU (h_zbit
) = opval
;
702 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
705 BI opval
= LTSI (* FLD (i_Ri
), 0);
706 CPU (h_nbit
) = opval
;
707 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
716 CASE (sem
, INSN_SUBN
) : /* subn $Rj,$Ri */
718 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
719 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
720 #define FLD(f) abuf->fields.fmt_addn.f
721 int UNUSED written
= 0;
722 IADDR UNUSED pc
= abuf
->addr
;
723 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
726 SI opval
= SUBSI (* FLD (i_Ri
), * FLD (i_Rj
));
727 * FLD (i_Ri
) = opval
;
728 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
735 CASE (sem
, INSN_CMP
) : /* cmp $Rj,$Ri */
737 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
738 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
739 #define FLD(f) abuf->fields.fmt_cmp.f
740 int UNUSED written
= 0;
741 IADDR UNUSED pc
= abuf
->addr
;
742 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
747 BI opval
= SUBOFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
748 CPU (h_vbit
) = opval
;
749 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
752 BI opval
= SUBCFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
753 CPU (h_cbit
) = opval
;
754 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
756 tmp_tmp1
= SUBSI (* FLD (i_Ri
), * FLD (i_Rj
));
759 BI opval
= EQSI (tmp_tmp1
, 0);
760 CPU (h_zbit
) = opval
;
761 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
764 BI opval
= LTSI (tmp_tmp1
, 0);
765 CPU (h_nbit
) = opval
;
766 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
775 CASE (sem
, INSN_CMPI
) : /* cmp $u4,$Ri */
777 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
778 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
779 #define FLD(f) abuf->fields.fmt_cmpi.f
780 int UNUSED written
= 0;
781 IADDR UNUSED pc
= abuf
->addr
;
782 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
787 BI opval
= SUBOFSI (* FLD (i_Ri
), FLD (f_u4
), 0);
788 CPU (h_vbit
) = opval
;
789 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
792 BI opval
= SUBCFSI (* FLD (i_Ri
), FLD (f_u4
), 0);
793 CPU (h_cbit
) = opval
;
794 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
796 tmp_tmp1
= SUBSI (* FLD (i_Ri
), FLD (f_u4
));
799 BI opval
= EQSI (tmp_tmp1
, 0);
800 CPU (h_zbit
) = opval
;
801 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
804 BI opval
= LTSI (tmp_tmp1
, 0);
805 CPU (h_nbit
) = opval
;
806 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
815 CASE (sem
, INSN_CMP2
) : /* cmp2 $m4,$Ri */
817 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
818 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
819 #define FLD(f) abuf->fields.fmt_cmp2.f
820 int UNUSED written
= 0;
821 IADDR UNUSED pc
= abuf
->addr
;
822 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
827 BI opval
= SUBOFSI (* FLD (i_Ri
), FLD (f_m4
), 0);
828 CPU (h_vbit
) = opval
;
829 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
832 BI opval
= SUBCFSI (* FLD (i_Ri
), FLD (f_m4
), 0);
833 CPU (h_cbit
) = opval
;
834 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
836 tmp_tmp1
= SUBSI (* FLD (i_Ri
), FLD (f_m4
));
839 BI opval
= EQSI (tmp_tmp1
, 0);
840 CPU (h_zbit
) = opval
;
841 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
844 BI opval
= LTSI (tmp_tmp1
, 0);
845 CPU (h_nbit
) = opval
;
846 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
855 CASE (sem
, INSN_AND
) : /* and $Rj,$Ri */
857 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
858 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
859 #define FLD(f) abuf->fields.fmt_and.f
860 int UNUSED written
= 0;
861 IADDR UNUSED pc
= abuf
->addr
;
862 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
866 SI opval
= ANDSI (* FLD (i_Ri
), * FLD (i_Rj
));
867 * FLD (i_Ri
) = opval
;
868 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
872 BI opval
= EQSI (* FLD (i_Ri
), 0);
873 CPU (h_zbit
) = opval
;
874 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
877 BI opval
= LTSI (* FLD (i_Ri
), 0);
878 CPU (h_nbit
) = opval
;
879 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
888 CASE (sem
, INSN_OR
) : /* or $Rj,$Ri */
890 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
891 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
892 #define FLD(f) abuf->fields.fmt_and.f
893 int UNUSED written
= 0;
894 IADDR UNUSED pc
= abuf
->addr
;
895 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
899 SI opval
= ORSI (* FLD (i_Ri
), * FLD (i_Rj
));
900 * FLD (i_Ri
) = opval
;
901 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
905 BI opval
= EQSI (* FLD (i_Ri
), 0);
906 CPU (h_zbit
) = opval
;
907 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
910 BI opval
= LTSI (* FLD (i_Ri
), 0);
911 CPU (h_nbit
) = opval
;
912 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
921 CASE (sem
, INSN_EOR
) : /* eor $Rj,$Ri */
923 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
924 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
925 #define FLD(f) abuf->fields.fmt_and.f
926 int UNUSED written
= 0;
927 IADDR UNUSED pc
= abuf
->addr
;
928 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
932 SI opval
= XORSI (* FLD (i_Ri
), * FLD (i_Rj
));
933 * FLD (i_Ri
) = opval
;
934 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
938 BI opval
= EQSI (* FLD (i_Ri
), 0);
939 CPU (h_zbit
) = opval
;
940 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
943 BI opval
= LTSI (* FLD (i_Ri
), 0);
944 CPU (h_nbit
) = opval
;
945 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
954 CASE (sem
, INSN_ANDM
) : /* and $Rj,@$Ri */
956 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
957 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
958 #define FLD(f) abuf->fields.fmt_andm.f
959 int UNUSED written
= 0;
960 IADDR UNUSED pc
= abuf
->addr
;
961 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
965 tmp_tmp
= ANDSI (GETMEMSI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
968 BI opval
= EQSI (tmp_tmp
, 0);
969 CPU (h_zbit
) = opval
;
970 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
973 BI opval
= LTSI (tmp_tmp
, 0);
974 CPU (h_nbit
) = opval
;
975 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
980 SETMEMSI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
981 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
989 CASE (sem
, INSN_ANDH
) : /* andh $Rj,@$Ri */
991 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
992 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
993 #define FLD(f) abuf->fields.fmt_andh.f
994 int UNUSED written
= 0;
995 IADDR UNUSED pc
= abuf
->addr
;
996 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1000 tmp_tmp
= ANDHI (GETMEMHI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1003 BI opval
= EQHI (tmp_tmp
, 0);
1004 CPU (h_zbit
) = opval
;
1005 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1008 BI opval
= LTHI (tmp_tmp
, 0);
1009 CPU (h_nbit
) = opval
;
1010 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1015 SETMEMHI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1016 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1024 CASE (sem
, INSN_ANDB
) : /* andb $Rj,@$Ri */
1026 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1027 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1028 #define FLD(f) abuf->fields.fmt_andb.f
1029 int UNUSED written
= 0;
1030 IADDR UNUSED pc
= abuf
->addr
;
1031 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1035 tmp_tmp
= ANDQI (GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1038 BI opval
= EQQI (tmp_tmp
, 0);
1039 CPU (h_zbit
) = opval
;
1040 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1043 BI opval
= LTQI (tmp_tmp
, 0);
1044 CPU (h_nbit
) = opval
;
1045 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1050 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1051 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1059 CASE (sem
, INSN_ORM
) : /* or $Rj,@$Ri */
1061 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1063 #define FLD(f) abuf->fields.fmt_andm.f
1064 int UNUSED written
= 0;
1065 IADDR UNUSED pc
= abuf
->addr
;
1066 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1070 tmp_tmp
= ORSI (GETMEMSI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1073 BI opval
= EQSI (tmp_tmp
, 0);
1074 CPU (h_zbit
) = opval
;
1075 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1078 BI opval
= LTSI (tmp_tmp
, 0);
1079 CPU (h_nbit
) = opval
;
1080 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1085 SETMEMSI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1086 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1094 CASE (sem
, INSN_ORH
) : /* orh $Rj,@$Ri */
1096 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1097 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1098 #define FLD(f) abuf->fields.fmt_andh.f
1099 int UNUSED written
= 0;
1100 IADDR UNUSED pc
= abuf
->addr
;
1101 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1105 tmp_tmp
= ORHI (GETMEMHI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1108 BI opval
= EQHI (tmp_tmp
, 0);
1109 CPU (h_zbit
) = opval
;
1110 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1113 BI opval
= LTHI (tmp_tmp
, 0);
1114 CPU (h_nbit
) = opval
;
1115 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1120 SETMEMHI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1121 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1129 CASE (sem
, INSN_ORB
) : /* orb $Rj,@$Ri */
1131 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1132 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1133 #define FLD(f) abuf->fields.fmt_andb.f
1134 int UNUSED written
= 0;
1135 IADDR UNUSED pc
= abuf
->addr
;
1136 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1140 tmp_tmp
= ORQI (GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1143 BI opval
= EQQI (tmp_tmp
, 0);
1144 CPU (h_zbit
) = opval
;
1145 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1148 BI opval
= LTQI (tmp_tmp
, 0);
1149 CPU (h_nbit
) = opval
;
1150 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1155 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1156 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1164 CASE (sem
, INSN_EORM
) : /* eor $Rj,@$Ri */
1166 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1167 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1168 #define FLD(f) abuf->fields.fmt_andm.f
1169 int UNUSED written
= 0;
1170 IADDR UNUSED pc
= abuf
->addr
;
1171 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1175 tmp_tmp
= XORSI (GETMEMSI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1178 BI opval
= EQSI (tmp_tmp
, 0);
1179 CPU (h_zbit
) = opval
;
1180 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1183 BI opval
= LTSI (tmp_tmp
, 0);
1184 CPU (h_nbit
) = opval
;
1185 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1190 SETMEMSI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1191 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1199 CASE (sem
, INSN_EORH
) : /* eorh $Rj,@$Ri */
1201 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1202 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1203 #define FLD(f) abuf->fields.fmt_andh.f
1204 int UNUSED written
= 0;
1205 IADDR UNUSED pc
= abuf
->addr
;
1206 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1210 tmp_tmp
= XORHI (GETMEMHI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1213 BI opval
= EQHI (tmp_tmp
, 0);
1214 CPU (h_zbit
) = opval
;
1215 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1218 BI opval
= LTHI (tmp_tmp
, 0);
1219 CPU (h_nbit
) = opval
;
1220 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1225 SETMEMHI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1226 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1234 CASE (sem
, INSN_EORB
) : /* eorb $Rj,@$Ri */
1236 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1237 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1238 #define FLD(f) abuf->fields.fmt_andb.f
1239 int UNUSED written
= 0;
1240 IADDR UNUSED pc
= abuf
->addr
;
1241 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1245 tmp_tmp
= XORQI (GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1248 BI opval
= EQQI (tmp_tmp
, 0);
1249 CPU (h_zbit
) = opval
;
1250 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1253 BI opval
= LTQI (tmp_tmp
, 0);
1254 CPU (h_nbit
) = opval
;
1255 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1260 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1261 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1269 CASE (sem
, INSN_BANDL
) : /* bandl $u4,@$Ri */
1271 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1272 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1273 #define FLD(f) abuf->fields.fmt_bandl.f
1274 int UNUSED written
= 0;
1275 IADDR UNUSED pc
= abuf
->addr
;
1276 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1279 QI opval
= ANDQI (ORQI (FLD (f_u4
), 240), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1280 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1281 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1288 CASE (sem
, INSN_BORL
) : /* borl $u4,@$Ri */
1290 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1291 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1292 #define FLD(f) abuf->fields.fmt_bandl.f
1293 int UNUSED written
= 0;
1294 IADDR UNUSED pc
= abuf
->addr
;
1295 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1298 QI opval
= ORQI (FLD (f_u4
), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1299 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1300 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1307 CASE (sem
, INSN_BEORL
) : /* beorl $u4,@$Ri */
1309 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1310 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1311 #define FLD(f) abuf->fields.fmt_bandl.f
1312 int UNUSED written
= 0;
1313 IADDR UNUSED pc
= abuf
->addr
;
1314 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1317 QI opval
= XORQI (FLD (f_u4
), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1318 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1319 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1326 CASE (sem
, INSN_BANDH
) : /* bandh $u4,@$Ri */
1328 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1329 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1330 #define FLD(f) abuf->fields.fmt_bandl.f
1331 int UNUSED written
= 0;
1332 IADDR UNUSED pc
= abuf
->addr
;
1333 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1336 QI opval
= ANDQI (ORQI (SLLQI (FLD (f_u4
), 4), 15), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1337 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1338 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1345 CASE (sem
, INSN_BORH
) : /* borh $u4,@$Ri */
1347 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1348 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1349 #define FLD(f) abuf->fields.fmt_bandl.f
1350 int UNUSED written
= 0;
1351 IADDR UNUSED pc
= abuf
->addr
;
1352 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1355 QI opval
= ORQI (SLLQI (FLD (f_u4
), 4), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1356 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1357 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1364 CASE (sem
, INSN_BEORH
) : /* beorh $u4,@$Ri */
1366 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1367 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1368 #define FLD(f) abuf->fields.fmt_bandl.f
1369 int UNUSED written
= 0;
1370 IADDR UNUSED pc
= abuf
->addr
;
1371 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1374 QI opval
= XORQI (SLLQI (FLD (f_u4
), 4), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1375 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1376 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1383 CASE (sem
, INSN_BTSTL
) : /* btstl $u4,@$Ri */
1385 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1386 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1387 #define FLD(f) abuf->fields.fmt_btstl.f
1388 int UNUSED written
= 0;
1389 IADDR UNUSED pc
= abuf
->addr
;
1390 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1394 tmp_tmp
= ANDQI (FLD (f_u4
), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1396 BI opval
= EQQI (tmp_tmp
, 0);
1397 CPU (h_zbit
) = opval
;
1398 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1402 CPU (h_nbit
) = opval
;
1403 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1411 CASE (sem
, INSN_BTSTH
) : /* btsth $u4,@$Ri */
1413 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1414 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1415 #define FLD(f) abuf->fields.fmt_btstl.f
1416 int UNUSED written
= 0;
1417 IADDR UNUSED pc
= abuf
->addr
;
1418 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1422 tmp_tmp
= ANDQI (SLLQI (FLD (f_u4
), 4), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1424 BI opval
= EQQI (tmp_tmp
, 0);
1425 CPU (h_zbit
) = opval
;
1426 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1429 BI opval
= LTQI (tmp_tmp
, 0);
1430 CPU (h_nbit
) = opval
;
1431 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1439 CASE (sem
, INSN_MUL
) : /* mul $Rj,$Ri */
1441 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1442 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1443 #define FLD(f) abuf->fields.fmt_mul.f
1444 int UNUSED written
= 0;
1445 IADDR UNUSED pc
= abuf
->addr
;
1446 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1450 tmp_tmp
= MULDI (EXTSIDI (* FLD (i_Rj
)), EXTSIDI (* FLD (i_Ri
)));
1452 SI opval
= TRUNCDISI (tmp_tmp
);
1453 SET_H_DR (((UINT
) 5), opval
);
1454 TRACE_RESULT (current_cpu
, abuf
, "dr-5", 'x', opval
);
1457 SI opval
= TRUNCDISI (SRLDI (tmp_tmp
, 32));
1458 SET_H_DR (((UINT
) 4), opval
);
1459 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1462 BI opval
= LTSI (GET_H_DR (((UINT
) 5)), 0);
1463 CPU (h_nbit
) = opval
;
1464 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1467 BI opval
= EQDI (tmp_tmp
, MAKEDI (0, 0));
1468 CPU (h_zbit
) = opval
;
1469 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1472 BI opval
= ORIF (GTDI (tmp_tmp
, MAKEDI (0, 2147483647)), LTDI (tmp_tmp
, NEGDI (MAKEDI (0, 0x80000000))));
1473 CPU (h_vbit
) = opval
;
1474 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
1482 CASE (sem
, INSN_MULU
) : /* mulu $Rj,$Ri */
1484 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1485 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1486 #define FLD(f) abuf->fields.fmt_mulu.f
1487 int UNUSED written
= 0;
1488 IADDR UNUSED pc
= abuf
->addr
;
1489 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1493 tmp_tmp
= MULDI (ZEXTSIDI (* FLD (i_Rj
)), ZEXTSIDI (* FLD (i_Ri
)));
1495 SI opval
= TRUNCDISI (tmp_tmp
);
1496 SET_H_DR (((UINT
) 5), opval
);
1497 TRACE_RESULT (current_cpu
, abuf
, "dr-5", 'x', opval
);
1500 SI opval
= TRUNCDISI (SRLDI (tmp_tmp
, 32));
1501 SET_H_DR (((UINT
) 4), opval
);
1502 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1505 BI opval
= LTSI (GET_H_DR (((UINT
) 4)), 0);
1506 CPU (h_nbit
) = opval
;
1507 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1510 BI opval
= EQSI (GET_H_DR (((UINT
) 5)), 0);
1511 CPU (h_zbit
) = opval
;
1512 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1515 BI opval
= NESI (GET_H_DR (((UINT
) 4)), 0);
1516 CPU (h_vbit
) = opval
;
1517 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
1525 CASE (sem
, INSN_MULH
) : /* mulh $Rj,$Ri */
1527 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1528 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1529 #define FLD(f) abuf->fields.fmt_mulh.f
1530 int UNUSED written
= 0;
1531 IADDR UNUSED pc
= abuf
->addr
;
1532 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1536 SI opval
= MULHI (TRUNCSIHI (* FLD (i_Rj
)), TRUNCSIHI (* FLD (i_Ri
)));
1537 SET_H_DR (((UINT
) 5), opval
);
1538 TRACE_RESULT (current_cpu
, abuf
, "dr-5", 'x', opval
);
1541 BI opval
= LTSI (GET_H_DR (((UINT
) 5)), 0);
1542 CPU (h_nbit
) = opval
;
1543 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1546 BI opval
= GESI (GET_H_DR (((UINT
) 5)), 0);
1547 CPU (h_zbit
) = opval
;
1548 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1556 CASE (sem
, INSN_MULUH
) : /* muluh $Rj,$Ri */
1558 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1559 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1560 #define FLD(f) abuf->fields.fmt_mulh.f
1561 int UNUSED written
= 0;
1562 IADDR UNUSED pc
= abuf
->addr
;
1563 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1567 SI opval
= MULSI (ANDSI (* FLD (i_Rj
), 65535), ANDSI (* FLD (i_Ri
), 65535));
1568 SET_H_DR (((UINT
) 5), opval
);
1569 TRACE_RESULT (current_cpu
, abuf
, "dr-5", 'x', opval
);
1572 BI opval
= LTSI (GET_H_DR (((UINT
) 5)), 0);
1573 CPU (h_nbit
) = opval
;
1574 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1577 BI opval
= GESI (GET_H_DR (((UINT
) 5)), 0);
1578 CPU (h_zbit
) = opval
;
1579 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1587 CASE (sem
, INSN_DIV0S
) : /* div0s $Ri */
1589 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1590 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1591 #define FLD(f) abuf->fields.fmt_div0s.f
1592 int UNUSED written
= 0;
1593 IADDR UNUSED pc
= abuf
->addr
;
1594 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1598 BI opval
= LTSI (GET_H_DR (((UINT
) 5)), 0);
1599 CPU (h_d0bit
) = opval
;
1600 TRACE_RESULT (current_cpu
, abuf
, "d0bit", 'x', opval
);
1603 BI opval
= XORBI (CPU (h_d0bit
), LTSI (* FLD (i_Ri
), 0));
1604 CPU (h_d1bit
) = opval
;
1605 TRACE_RESULT (current_cpu
, abuf
, "d1bit", 'x', opval
);
1607 if (NEBI (CPU (h_d0bit
), 0)) {
1609 SI opval
= 0xffffffff;
1610 SET_H_DR (((UINT
) 4), opval
);
1611 written
|= (1 << 5);
1612 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1617 SET_H_DR (((UINT
) 4), opval
);
1618 written
|= (1 << 5);
1619 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1624 abuf
->written
= written
;
1629 CASE (sem
, INSN_DIV0U
) : /* div0u $Ri */
1631 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1632 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1633 #define FLD(f) abuf->fields.fmt_div0u.f
1634 int UNUSED written
= 0;
1635 IADDR UNUSED pc
= abuf
->addr
;
1636 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1641 CPU (h_d0bit
) = opval
;
1642 TRACE_RESULT (current_cpu
, abuf
, "d0bit", 'x', opval
);
1646 CPU (h_d1bit
) = opval
;
1647 TRACE_RESULT (current_cpu
, abuf
, "d1bit", 'x', opval
);
1651 SET_H_DR (((UINT
) 4), opval
);
1652 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1660 CASE (sem
, INSN_DIV1
) : /* div1 $Ri */
1662 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1663 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1664 #define FLD(f) abuf->fields.fmt_div1.f
1665 int UNUSED written
= 0;
1666 IADDR UNUSED pc
= abuf
->addr
;
1667 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1672 SI opval
= SLLSI (GET_H_DR (((UINT
) 4)), 1);
1673 SET_H_DR (((UINT
) 4), opval
);
1674 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1676 if (LTSI (GET_H_DR (((UINT
) 5)), 0)) {
1678 SI opval
= ADDSI (GET_H_DR (((UINT
) 4)), 1);
1679 SET_H_DR (((UINT
) 4), opval
);
1680 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1684 SI opval
= SLLSI (GET_H_DR (((UINT
) 5)), 1);
1685 SET_H_DR (((UINT
) 5), opval
);
1686 TRACE_RESULT (current_cpu
, abuf
, "dr-5", 'x', opval
);
1688 if (EQBI (CPU (h_d1bit
), 1)) {
1690 tmp_tmp
= ADDSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
));
1692 BI opval
= ADDCFSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
), 0);
1693 CPU (h_cbit
) = opval
;
1694 written
|= (1 << 6);
1695 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1700 tmp_tmp
= SUBSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
));
1702 BI opval
= SUBCFSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
), 0);
1703 CPU (h_cbit
) = opval
;
1704 written
|= (1 << 6);
1705 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1709 if (NOTBI (XORBI (XORBI (CPU (h_d0bit
), CPU (h_d1bit
)), CPU (h_cbit
)))) {
1713 SET_H_DR (((UINT
) 4), opval
);
1714 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1717 SI opval
= ORSI (GET_H_DR (((UINT
) 5)), 1);
1718 SET_H_DR (((UINT
) 5), opval
);
1719 TRACE_RESULT (current_cpu
, abuf
, "dr-5", 'x', opval
);
1724 BI opval
= EQSI (GET_H_DR (((UINT
) 4)), 0);
1725 CPU (h_zbit
) = opval
;
1726 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1730 abuf
->written
= written
;
1735 CASE (sem
, INSN_DIV2
) : /* div2 $Ri */
1737 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1738 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1739 #define FLD(f) abuf->fields.fmt_div2.f
1740 int UNUSED written
= 0;
1741 IADDR UNUSED pc
= abuf
->addr
;
1742 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1746 if (EQBI (CPU (h_d1bit
), 1)) {
1748 tmp_tmp
= ADDSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
));
1750 BI opval
= ADDCFSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
), 0);
1751 CPU (h_cbit
) = opval
;
1752 written
|= (1 << 3);
1753 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1758 tmp_tmp
= SUBSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
));
1760 BI opval
= SUBCFSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
), 0);
1761 CPU (h_cbit
) = opval
;
1762 written
|= (1 << 3);
1763 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1767 if (EQSI (tmp_tmp
, 0)) {
1771 CPU (h_zbit
) = opval
;
1772 written
|= (1 << 5);
1773 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1777 SET_H_DR (((UINT
) 4), opval
);
1778 written
|= (1 << 4);
1779 TRACE_RESULT (current_cpu
, abuf
, "dr-4", 'x', opval
);
1785 CPU (h_zbit
) = opval
;
1786 written
|= (1 << 5);
1787 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1792 abuf
->written
= written
;
1797 CASE (sem
, INSN_DIV3
) : /* div3 */
1799 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1800 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1801 #define FLD(f) abuf->fields.fmt_div3.f
1802 int UNUSED written
= 0;
1803 IADDR UNUSED pc
= abuf
->addr
;
1804 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1806 if (EQBI (CPU (h_zbit
), 1)) {
1808 SI opval
= ADDSI (GET_H_DR (((UINT
) 5)), 1);
1809 SET_H_DR (((UINT
) 5), opval
);
1810 written
|= (1 << 2);
1811 TRACE_RESULT (current_cpu
, abuf
, "dr-5", 'x', opval
);
1815 abuf
->written
= written
;
1820 CASE (sem
, INSN_DIV4S
) : /* div4s */
1822 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1823 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1824 #define FLD(f) abuf->fields.fmt_div4s.f
1825 int UNUSED written
= 0;
1826 IADDR UNUSED pc
= abuf
->addr
;
1827 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1829 if (EQBI (CPU (h_d1bit
), 1)) {
1831 SI opval
= NEGSI (GET_H_DR (((UINT
) 5)));
1832 SET_H_DR (((UINT
) 5), opval
);
1833 written
|= (1 << 2);
1834 TRACE_RESULT (current_cpu
, abuf
, "dr-5", 'x', opval
);
1838 abuf
->written
= written
;
1843 CASE (sem
, INSN_LSL
) : /* lsl $Rj,$Ri */
1845 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1846 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1847 #define FLD(f) abuf->fields.fmt_lsl.f
1848 int UNUSED written
= 0;
1849 IADDR UNUSED pc
= abuf
->addr
;
1850 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1854 tmp_shift
= ANDSI (* FLD (i_Rj
), 31);
1855 if (NESI (tmp_shift
, 0)) {
1858 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (32, tmp_shift
))), 0);
1859 CPU (h_cbit
) = opval
;
1860 written
|= (1 << 3);
1861 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1864 SI opval
= SLLSI (* FLD (i_Ri
), tmp_shift
);
1865 * FLD (i_Ri
) = opval
;
1866 written
|= (1 << 2);
1867 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
1873 CPU (h_cbit
) = opval
;
1874 written
|= (1 << 3);
1875 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1879 BI opval
= LTSI (* FLD (i_Ri
), 0);
1880 CPU (h_nbit
) = opval
;
1881 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1884 BI opval
= EQSI (* FLD (i_Ri
), 0);
1885 CPU (h_zbit
) = opval
;
1886 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1890 abuf
->written
= written
;
1895 CASE (sem
, INSN_LSLI
) : /* lsl $u4,$Ri */
1897 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1898 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1899 #define FLD(f) abuf->fields.fmt_lsli.f
1900 int UNUSED written
= 0;
1901 IADDR UNUSED pc
= abuf
->addr
;
1902 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1906 tmp_shift
= FLD (f_u4
);
1907 if (NESI (tmp_shift
, 0)) {
1910 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (32, tmp_shift
))), 0);
1911 CPU (h_cbit
) = opval
;
1912 written
|= (1 << 3);
1913 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1916 SI opval
= SLLSI (* FLD (i_Ri
), tmp_shift
);
1917 * FLD (i_Ri
) = opval
;
1918 written
|= (1 << 2);
1919 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
1925 CPU (h_cbit
) = opval
;
1926 written
|= (1 << 3);
1927 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1931 BI opval
= LTSI (* FLD (i_Ri
), 0);
1932 CPU (h_nbit
) = opval
;
1933 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1936 BI opval
= EQSI (* FLD (i_Ri
), 0);
1937 CPU (h_zbit
) = opval
;
1938 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1942 abuf
->written
= written
;
1947 CASE (sem
, INSN_LSL2
) : /* lsl2 $u4,$Ri */
1949 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1950 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1951 #define FLD(f) abuf->fields.fmt_lsli.f
1952 int UNUSED written
= 0;
1953 IADDR UNUSED pc
= abuf
->addr
;
1954 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1958 tmp_shift
= ADDSI (FLD (f_u4
), 16);
1959 if (NESI (tmp_shift
, 0)) {
1962 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (32, tmp_shift
))), 0);
1963 CPU (h_cbit
) = opval
;
1964 written
|= (1 << 3);
1965 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1968 SI opval
= SLLSI (* FLD (i_Ri
), tmp_shift
);
1969 * FLD (i_Ri
) = opval
;
1970 written
|= (1 << 2);
1971 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
1977 CPU (h_cbit
) = opval
;
1978 written
|= (1 << 3);
1979 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1983 BI opval
= LTSI (* FLD (i_Ri
), 0);
1984 CPU (h_nbit
) = opval
;
1985 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1988 BI opval
= EQSI (* FLD (i_Ri
), 0);
1989 CPU (h_zbit
) = opval
;
1990 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1994 abuf
->written
= written
;
1999 CASE (sem
, INSN_LSR
) : /* lsr $Rj,$Ri */
2001 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2002 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2003 #define FLD(f) abuf->fields.fmt_lsl.f
2004 int UNUSED written
= 0;
2005 IADDR UNUSED pc
= abuf
->addr
;
2006 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2010 tmp_shift
= ANDSI (* FLD (i_Rj
), 31);
2011 if (NESI (tmp_shift
, 0)) {
2014 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2015 CPU (h_cbit
) = opval
;
2016 written
|= (1 << 3);
2017 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2020 SI opval
= SRLSI (* FLD (i_Ri
), tmp_shift
);
2021 * FLD (i_Ri
) = opval
;
2022 written
|= (1 << 2);
2023 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2029 CPU (h_cbit
) = opval
;
2030 written
|= (1 << 3);
2031 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2035 BI opval
= LTSI (* FLD (i_Ri
), 0);
2036 CPU (h_nbit
) = opval
;
2037 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2040 BI opval
= EQSI (* FLD (i_Ri
), 0);
2041 CPU (h_zbit
) = opval
;
2042 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2046 abuf
->written
= written
;
2051 CASE (sem
, INSN_LSRI
) : /* lsr $u4,$Ri */
2053 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2054 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2055 #define FLD(f) abuf->fields.fmt_lsli.f
2056 int UNUSED written
= 0;
2057 IADDR UNUSED pc
= abuf
->addr
;
2058 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2062 tmp_shift
= FLD (f_u4
);
2063 if (NESI (tmp_shift
, 0)) {
2066 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2067 CPU (h_cbit
) = opval
;
2068 written
|= (1 << 3);
2069 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2072 SI opval
= SRLSI (* FLD (i_Ri
), tmp_shift
);
2073 * FLD (i_Ri
) = opval
;
2074 written
|= (1 << 2);
2075 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2081 CPU (h_cbit
) = opval
;
2082 written
|= (1 << 3);
2083 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2087 BI opval
= LTSI (* FLD (i_Ri
), 0);
2088 CPU (h_nbit
) = opval
;
2089 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2092 BI opval
= EQSI (* FLD (i_Ri
), 0);
2093 CPU (h_zbit
) = opval
;
2094 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2098 abuf
->written
= written
;
2103 CASE (sem
, INSN_LSR2
) : /* lsr2 $u4,$Ri */
2105 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2106 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2107 #define FLD(f) abuf->fields.fmt_lsli.f
2108 int UNUSED written
= 0;
2109 IADDR UNUSED pc
= abuf
->addr
;
2110 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2114 tmp_shift
= ADDSI (FLD (f_u4
), 16);
2115 if (NESI (tmp_shift
, 0)) {
2118 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2119 CPU (h_cbit
) = opval
;
2120 written
|= (1 << 3);
2121 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2124 SI opval
= SRLSI (* FLD (i_Ri
), tmp_shift
);
2125 * FLD (i_Ri
) = opval
;
2126 written
|= (1 << 2);
2127 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2133 CPU (h_cbit
) = opval
;
2134 written
|= (1 << 3);
2135 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2139 BI opval
= LTSI (* FLD (i_Ri
), 0);
2140 CPU (h_nbit
) = opval
;
2141 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2144 BI opval
= EQSI (* FLD (i_Ri
), 0);
2145 CPU (h_zbit
) = opval
;
2146 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2150 abuf
->written
= written
;
2155 CASE (sem
, INSN_ASR
) : /* asr $Rj,$Ri */
2157 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2158 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2159 #define FLD(f) abuf->fields.fmt_lsl.f
2160 int UNUSED written
= 0;
2161 IADDR UNUSED pc
= abuf
->addr
;
2162 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2166 tmp_shift
= ANDSI (* FLD (i_Rj
), 31);
2167 if (NESI (tmp_shift
, 0)) {
2170 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2171 CPU (h_cbit
) = opval
;
2172 written
|= (1 << 3);
2173 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2176 SI opval
= SRASI (* FLD (i_Ri
), tmp_shift
);
2177 * FLD (i_Ri
) = opval
;
2178 written
|= (1 << 2);
2179 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2185 CPU (h_cbit
) = opval
;
2186 written
|= (1 << 3);
2187 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2191 BI opval
= LTSI (* FLD (i_Ri
), 0);
2192 CPU (h_nbit
) = opval
;
2193 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2196 BI opval
= EQSI (* FLD (i_Ri
), 0);
2197 CPU (h_zbit
) = opval
;
2198 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2202 abuf
->written
= written
;
2207 CASE (sem
, INSN_ASRI
) : /* asr $u4,$Ri */
2209 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2210 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2211 #define FLD(f) abuf->fields.fmt_lsli.f
2212 int UNUSED written
= 0;
2213 IADDR UNUSED pc
= abuf
->addr
;
2214 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2218 tmp_shift
= FLD (f_u4
);
2219 if (NESI (tmp_shift
, 0)) {
2222 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2223 CPU (h_cbit
) = opval
;
2224 written
|= (1 << 3);
2225 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2228 SI opval
= SRASI (* FLD (i_Ri
), tmp_shift
);
2229 * FLD (i_Ri
) = opval
;
2230 written
|= (1 << 2);
2231 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2237 CPU (h_cbit
) = opval
;
2238 written
|= (1 << 3);
2239 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2243 BI opval
= LTSI (* FLD (i_Ri
), 0);
2244 CPU (h_nbit
) = opval
;
2245 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2248 BI opval
= EQSI (* FLD (i_Ri
), 0);
2249 CPU (h_zbit
) = opval
;
2250 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2254 abuf
->written
= written
;
2259 CASE (sem
, INSN_ASR2
) : /* asr2 $u4,$Ri */
2261 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2262 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2263 #define FLD(f) abuf->fields.fmt_lsli.f
2264 int UNUSED written
= 0;
2265 IADDR UNUSED pc
= abuf
->addr
;
2266 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2270 tmp_shift
= ADDSI (FLD (f_u4
), 16);
2271 if (NESI (tmp_shift
, 0)) {
2274 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2275 CPU (h_cbit
) = opval
;
2276 written
|= (1 << 3);
2277 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2280 SI opval
= SRASI (* FLD (i_Ri
), tmp_shift
);
2281 * FLD (i_Ri
) = opval
;
2282 written
|= (1 << 2);
2283 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2289 CPU (h_cbit
) = opval
;
2290 written
|= (1 << 3);
2291 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2295 BI opval
= LTSI (* FLD (i_Ri
), 0);
2296 CPU (h_nbit
) = opval
;
2297 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2300 BI opval
= EQSI (* FLD (i_Ri
), 0);
2301 CPU (h_zbit
) = opval
;
2302 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2306 abuf
->written
= written
;
2311 CASE (sem
, INSN_LDI8
) : /* ldi:8 $i8,$Ri */
2313 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2314 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2315 #define FLD(f) abuf->fields.fmt_ldi8.f
2316 int UNUSED written
= 0;
2317 IADDR UNUSED pc
= abuf
->addr
;
2318 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2321 SI opval
= FLD (f_i8
);
2322 * FLD (i_Ri
) = opval
;
2323 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2330 CASE (sem
, INSN_LDI20
) : /* ldi:20 $i20,$Ri */
2332 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2333 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2334 #define FLD(f) abuf->fields.fmt_ldi20.f
2335 int UNUSED written
= 0;
2336 IADDR UNUSED pc
= abuf
->addr
;
2337 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2340 SI opval
= FLD (f_i20
);
2341 * FLD (i_Ri
) = opval
;
2342 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2349 CASE (sem
, INSN_LDI32
) : /* ldi:32 $i32,$Ri */
2351 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2352 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2353 #define FLD(f) abuf->fields.fmt_ldi32.f
2354 int UNUSED written
= 0;
2355 IADDR UNUSED pc
= abuf
->addr
;
2356 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 6);
2359 SI opval
= FLD (f_i32
);
2360 * FLD (i_Ri
) = opval
;
2361 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2368 CASE (sem
, INSN_LD
) : /* ld @$Rj,$Ri */
2370 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2371 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2372 #define FLD(f) abuf->fields.fmt_ld.f
2373 int UNUSED written
= 0;
2374 IADDR UNUSED pc
= abuf
->addr
;
2375 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2378 SI opval
= GETMEMSI (current_cpu
, pc
, * FLD (i_Rj
));
2379 * FLD (i_Ri
) = opval
;
2380 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2387 CASE (sem
, INSN_LDUH
) : /* lduh @$Rj,$Ri */
2389 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2390 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2391 #define FLD(f) abuf->fields.fmt_lduh.f
2392 int UNUSED written
= 0;
2393 IADDR UNUSED pc
= abuf
->addr
;
2394 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2397 SI opval
= GETMEMUHI (current_cpu
, pc
, * FLD (i_Rj
));
2398 * FLD (i_Ri
) = opval
;
2399 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2406 CASE (sem
, INSN_LDUB
) : /* ldub @$Rj,$Ri */
2408 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2409 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2410 #define FLD(f) abuf->fields.fmt_ldub.f
2411 int UNUSED written
= 0;
2412 IADDR UNUSED pc
= abuf
->addr
;
2413 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2416 SI opval
= GETMEMUQI (current_cpu
, pc
, * FLD (i_Rj
));
2417 * FLD (i_Ri
) = opval
;
2418 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2425 CASE (sem
, INSN_LDR13
) : /* ld @($R13,$Rj),$Ri */
2427 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2428 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2429 #define FLD(f) abuf->fields.fmt_ldr13.f
2430 int UNUSED written
= 0;
2431 IADDR UNUSED pc
= abuf
->addr
;
2432 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2435 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])));
2436 * FLD (i_Ri
) = opval
;
2437 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2444 CASE (sem
, INSN_LDR13UH
) : /* lduh @($R13,$Rj),$Ri */
2446 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2447 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2448 #define FLD(f) abuf->fields.fmt_ldr13uh.f
2449 int UNUSED written
= 0;
2450 IADDR UNUSED pc
= abuf
->addr
;
2451 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2454 SI opval
= GETMEMUHI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])));
2455 * FLD (i_Ri
) = opval
;
2456 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2463 CASE (sem
, INSN_LDR13UB
) : /* ldub @($R13,$Rj),$Ri */
2465 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2466 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2467 #define FLD(f) abuf->fields.fmt_ldr13ub.f
2468 int UNUSED written
= 0;
2469 IADDR UNUSED pc
= abuf
->addr
;
2470 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2473 SI opval
= GETMEMUQI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])));
2474 * FLD (i_Ri
) = opval
;
2475 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2482 CASE (sem
, INSN_LDR14
) : /* ld @($R14,$disp10),$Ri */
2484 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2485 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2486 #define FLD(f) abuf->fields.fmt_ldr14.f
2487 int UNUSED written
= 0;
2488 IADDR UNUSED pc
= abuf
->addr
;
2489 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2492 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_disp10
), CPU (h_gr
[((UINT
) 14)])));
2493 * FLD (i_Ri
) = opval
;
2494 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2501 CASE (sem
, INSN_LDR14UH
) : /* lduh @($R14,$disp9),$Ri */
2503 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2504 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2505 #define FLD(f) abuf->fields.fmt_ldr14uh.f
2506 int UNUSED written
= 0;
2507 IADDR UNUSED pc
= abuf
->addr
;
2508 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2511 SI opval
= GETMEMUHI (current_cpu
, pc
, ADDSI (FLD (f_disp9
), CPU (h_gr
[((UINT
) 14)])));
2512 * FLD (i_Ri
) = opval
;
2513 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2520 CASE (sem
, INSN_LDR14UB
) : /* ldub @($R14,$disp8),$Ri */
2522 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2523 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2524 #define FLD(f) abuf->fields.fmt_ldr14ub.f
2525 int UNUSED written
= 0;
2526 IADDR UNUSED pc
= abuf
->addr
;
2527 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2530 SI opval
= GETMEMUQI (current_cpu
, pc
, ADDSI (FLD (f_disp8
), CPU (h_gr
[((UINT
) 14)])));
2531 * FLD (i_Ri
) = opval
;
2532 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2539 CASE (sem
, INSN_LDR15
) : /* ld @($R15,$udisp6),$Ri */
2541 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2542 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2543 #define FLD(f) abuf->fields.fmt_ldr15.f
2544 int UNUSED written
= 0;
2545 IADDR UNUSED pc
= abuf
->addr
;
2546 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2549 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_udisp6
), CPU (h_gr
[((UINT
) 15)])));
2550 * FLD (i_Ri
) = opval
;
2551 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2558 CASE (sem
, INSN_LDR15GR
) : /* ld @$R15+,$Ri */
2560 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2561 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2562 #define FLD(f) abuf->fields.fmt_ldr15gr.f
2563 int UNUSED written
= 0;
2564 IADDR UNUSED pc
= abuf
->addr
;
2565 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2569 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
2570 * FLD (i_Ri
) = opval
;
2571 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2573 if (NESI (FLD (f_Ri
), 15)) {
2575 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
2576 CPU (h_gr
[((UINT
) 15)]) = opval
;
2577 written
|= (1 << 4);
2578 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
2583 abuf
->written
= written
;
2588 CASE (sem
, INSN_LDR15DR
) : /* ld @$R15+,$Rs2 */
2590 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2591 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2592 #define FLD(f) abuf->fields.fmt_ldr15dr.f
2593 int UNUSED written
= 0;
2594 IADDR UNUSED pc
= abuf
->addr
;
2595 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2599 tmp_tmp
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
2601 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
2602 CPU (h_gr
[((UINT
) 15)]) = opval
;
2603 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
2607 SET_H_DR (FLD (f_Rs2
), opval
);
2608 TRACE_RESULT (current_cpu
, abuf
, "Rs2", 'x', opval
);
2616 CASE (sem
, INSN_LDR15PS
) : /* ld @$R15+,$ps */
2618 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2619 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2620 #define FLD(f) abuf->fields.fmt_ldr15ps.f
2621 int UNUSED written
= 0;
2622 IADDR UNUSED pc
= abuf
->addr
;
2623 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2627 USI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
2629 TRACE_RESULT (current_cpu
, abuf
, "ps", 'x', opval
);
2632 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
2633 CPU (h_gr
[((UINT
) 15)]) = opval
;
2634 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
2642 CASE (sem
, INSN_ST
) : /* st $Ri,@$Rj */
2644 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2645 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2646 #define FLD(f) abuf->fields.fmt_st.f
2647 int UNUSED written
= 0;
2648 IADDR UNUSED pc
= abuf
->addr
;
2649 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2652 SI opval
= * FLD (i_Ri
);
2653 SETMEMSI (current_cpu
, pc
, * FLD (i_Rj
), opval
);
2654 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2661 CASE (sem
, INSN_STH
) : /* sth $Ri,@$Rj */
2663 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2664 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2665 #define FLD(f) abuf->fields.fmt_sth.f
2666 int UNUSED written
= 0;
2667 IADDR UNUSED pc
= abuf
->addr
;
2668 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2671 HI opval
= * FLD (i_Ri
);
2672 SETMEMHI (current_cpu
, pc
, * FLD (i_Rj
), opval
);
2673 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2680 CASE (sem
, INSN_STB
) : /* stb $Ri,@$Rj */
2682 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2683 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2684 #define FLD(f) abuf->fields.fmt_stb.f
2685 int UNUSED written
= 0;
2686 IADDR UNUSED pc
= abuf
->addr
;
2687 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2690 QI opval
= * FLD (i_Ri
);
2691 SETMEMQI (current_cpu
, pc
, * FLD (i_Rj
), opval
);
2692 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2699 CASE (sem
, INSN_STR13
) : /* st $Ri,@($R13,$Rj) */
2701 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2702 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2703 #define FLD(f) abuf->fields.fmt_str13.f
2704 int UNUSED written
= 0;
2705 IADDR UNUSED pc
= abuf
->addr
;
2706 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2709 SI opval
= * FLD (i_Ri
);
2710 SETMEMSI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])), opval
);
2711 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2718 CASE (sem
, INSN_STR13H
) : /* sth $Ri,@($R13,$Rj) */
2720 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2721 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2722 #define FLD(f) abuf->fields.fmt_str13h.f
2723 int UNUSED written
= 0;
2724 IADDR UNUSED pc
= abuf
->addr
;
2725 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2728 HI opval
= * FLD (i_Ri
);
2729 SETMEMHI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])), opval
);
2730 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2737 CASE (sem
, INSN_STR13B
) : /* stb $Ri,@($R13,$Rj) */
2739 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2740 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2741 #define FLD(f) abuf->fields.fmt_str13b.f
2742 int UNUSED written
= 0;
2743 IADDR UNUSED pc
= abuf
->addr
;
2744 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2747 QI opval
= * FLD (i_Ri
);
2748 SETMEMQI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])), opval
);
2749 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2756 CASE (sem
, INSN_STR14
) : /* st $Ri,@($R14,$disp10) */
2758 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2759 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2760 #define FLD(f) abuf->fields.fmt_str14.f
2761 int UNUSED written
= 0;
2762 IADDR UNUSED pc
= abuf
->addr
;
2763 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2766 SI opval
= * FLD (i_Ri
);
2767 SETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_disp10
), CPU (h_gr
[((UINT
) 14)])), opval
);
2768 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2775 CASE (sem
, INSN_STR14H
) : /* sth $Ri,@($R14,$disp9) */
2777 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2778 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2779 #define FLD(f) abuf->fields.fmt_str14h.f
2780 int UNUSED written
= 0;
2781 IADDR UNUSED pc
= abuf
->addr
;
2782 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2785 HI opval
= * FLD (i_Ri
);
2786 SETMEMHI (current_cpu
, pc
, ADDSI (FLD (f_disp9
), CPU (h_gr
[((UINT
) 14)])), opval
);
2787 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2794 CASE (sem
, INSN_STR14B
) : /* stb $Ri,@($R14,$disp8) */
2796 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2797 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2798 #define FLD(f) abuf->fields.fmt_str14b.f
2799 int UNUSED written
= 0;
2800 IADDR UNUSED pc
= abuf
->addr
;
2801 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2804 QI opval
= * FLD (i_Ri
);
2805 SETMEMQI (current_cpu
, pc
, ADDSI (FLD (f_disp8
), CPU (h_gr
[((UINT
) 14)])), opval
);
2806 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2813 CASE (sem
, INSN_STR15
) : /* st $Ri,@($R15,$udisp6) */
2815 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2816 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2817 #define FLD(f) abuf->fields.fmt_str15.f
2818 int UNUSED written
= 0;
2819 IADDR UNUSED pc
= abuf
->addr
;
2820 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2823 SI opval
= * FLD (i_Ri
);
2824 SETMEMSI (current_cpu
, pc
, ADDSI (CPU (h_gr
[((UINT
) 15)]), FLD (f_udisp6
)), opval
);
2825 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2832 CASE (sem
, INSN_STR15GR
) : /* st $Ri,@-$R15 */
2834 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2835 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2836 #define FLD(f) abuf->fields.fmt_str15gr.f
2837 int UNUSED written
= 0;
2838 IADDR UNUSED pc
= abuf
->addr
;
2839 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2843 tmp_tmp
= * FLD (i_Ri
);
2845 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
2846 CPU (h_gr
[((UINT
) 15)]) = opval
;
2847 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
2851 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
2852 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2860 CASE (sem
, INSN_STR15DR
) : /* st $Rs2,@-$R15 */
2862 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2863 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2864 #define FLD(f) abuf->fields.fmt_str15dr.f
2865 int UNUSED written
= 0;
2866 IADDR UNUSED pc
= abuf
->addr
;
2867 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2871 tmp_tmp
= GET_H_DR (FLD (f_Rs2
));
2873 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
2874 CPU (h_gr
[((UINT
) 15)]) = opval
;
2875 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
2879 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
2880 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2888 CASE (sem
, INSN_STR15PS
) : /* st $ps,@-$R15 */
2890 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2891 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2892 #define FLD(f) abuf->fields.fmt_str15ps.f
2893 int UNUSED written
= 0;
2894 IADDR UNUSED pc
= abuf
->addr
;
2895 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2899 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
2900 CPU (h_gr
[((UINT
) 15)]) = opval
;
2901 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
2904 SI opval
= GET_H_PS ();
2905 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
2906 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2914 CASE (sem
, INSN_MOV
) : /* mov $Rj,$Ri */
2916 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2917 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2918 #define FLD(f) abuf->fields.fmt_mov.f
2919 int UNUSED written
= 0;
2920 IADDR UNUSED pc
= abuf
->addr
;
2921 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2924 SI opval
= * FLD (i_Rj
);
2925 * FLD (i_Ri
) = opval
;
2926 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2933 CASE (sem
, INSN_MOVDR
) : /* mov $Rs1,$Ri */
2935 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2936 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2937 #define FLD(f) abuf->fields.fmt_movdr.f
2938 int UNUSED written
= 0;
2939 IADDR UNUSED pc
= abuf
->addr
;
2940 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2943 SI opval
= GET_H_DR (FLD (f_Rs1
));
2944 * FLD (i_Ri
) = opval
;
2945 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2952 CASE (sem
, INSN_MOVPS
) : /* mov $ps,$Ri */
2954 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2955 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2956 #define FLD(f) abuf->fields.fmt_movps.f
2957 int UNUSED written
= 0;
2958 IADDR UNUSED pc
= abuf
->addr
;
2959 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2962 SI opval
= GET_H_PS ();
2963 * FLD (i_Ri
) = opval
;
2964 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
2971 CASE (sem
, INSN_MOV2DR
) : /* mov $Ri,$Rs1 */
2973 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2974 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2975 #define FLD(f) abuf->fields.fmt_mov2dr.f
2976 int UNUSED written
= 0;
2977 IADDR UNUSED pc
= abuf
->addr
;
2978 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2981 SI opval
= * FLD (i_Ri
);
2982 SET_H_DR (FLD (f_Rs1
), opval
);
2983 TRACE_RESULT (current_cpu
, abuf
, "Rs1", 'x', opval
);
2990 CASE (sem
, INSN_MOV2PS
) : /* mov $Ri,$ps */
2992 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2993 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2994 #define FLD(f) abuf->fields.fmt_mov2ps.f
2995 int UNUSED written
= 0;
2996 IADDR UNUSED pc
= abuf
->addr
;
2997 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3000 USI opval
= * FLD (i_Ri
);
3002 TRACE_RESULT (current_cpu
, abuf
, "ps", 'x', opval
);
3009 CASE (sem
, INSN_JMP
) : /* jmp @$Ri */
3011 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3012 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3013 #define FLD(f) abuf->fields.cti.fields.fmt_jmp.f
3014 int UNUSED written
= 0;
3015 IADDR UNUSED pc
= abuf
->addr
;
3017 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3020 USI opval
= * FLD (i_Ri
);
3021 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3022 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3025 SEM_BRANCH_FINI (vpc
);
3030 CASE (sem
, INSN_JMPD
) : /* jmp:d @$Ri */
3032 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3033 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3034 #define FLD(f) abuf->fields.cti.fields.fmt_jmp.f
3035 int UNUSED written
= 0;
3036 IADDR UNUSED pc
= abuf
->addr
;
3038 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3042 USI opval
= * FLD (i_Ri
);
3043 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3044 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3048 SEM_BRANCH_FINI (vpc
);
3053 CASE (sem
, INSN_CALLR
) : /* call @$Ri */
3055 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3056 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3057 #define FLD(f) abuf->fields.cti.fields.fmt_callr.f
3058 int UNUSED written
= 0;
3059 IADDR UNUSED pc
= abuf
->addr
;
3061 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3065 SI opval
= ADDSI (pc
, 2);
3066 SET_H_DR (((UINT
) 1), opval
);
3067 TRACE_RESULT (current_cpu
, abuf
, "dr-1", 'x', opval
);
3070 USI opval
= * FLD (i_Ri
);
3071 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3072 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3076 SEM_BRANCH_FINI (vpc
);
3081 CASE (sem
, INSN_CALLRD
) : /* call:d @$Ri */
3083 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3084 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3085 #define FLD(f) abuf->fields.cti.fields.fmt_callr.f
3086 int UNUSED written
= 0;
3087 IADDR UNUSED pc
= abuf
->addr
;
3089 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3094 SI opval
= ADDSI (pc
, 4);
3095 SET_H_DR (((UINT
) 1), opval
);
3096 TRACE_RESULT (current_cpu
, abuf
, "dr-1", 'x', opval
);
3099 USI opval
= * FLD (i_Ri
);
3100 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3101 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3106 SEM_BRANCH_FINI (vpc
);
3111 CASE (sem
, INSN_CALL
) : /* call $label12 */
3113 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3114 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3115 #define FLD(f) abuf->fields.cti.fields.fmt_call.f
3116 int UNUSED written
= 0;
3117 IADDR UNUSED pc
= abuf
->addr
;
3119 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3123 SI opval
= ADDSI (pc
, 2);
3124 SET_H_DR (((UINT
) 1), opval
);
3125 TRACE_RESULT (current_cpu
, abuf
, "dr-1", 'x', opval
);
3128 USI opval
= FLD (i_label12
);
3129 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3130 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3134 SEM_BRANCH_FINI (vpc
);
3139 CASE (sem
, INSN_CALLD
) : /* call:d $label12 */
3141 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3142 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3143 #define FLD(f) abuf->fields.cti.fields.fmt_call.f
3144 int UNUSED written
= 0;
3145 IADDR UNUSED pc
= abuf
->addr
;
3147 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3152 SI opval
= ADDSI (pc
, 4);
3153 SET_H_DR (((UINT
) 1), opval
);
3154 TRACE_RESULT (current_cpu
, abuf
, "dr-1", 'x', opval
);
3157 USI opval
= FLD (i_label12
);
3158 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3159 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3164 SEM_BRANCH_FINI (vpc
);
3169 CASE (sem
, INSN_RET
) : /* ret */
3171 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3172 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3173 #define FLD(f) abuf->fields.cti.fields.fmt_ret.f
3174 int UNUSED written
= 0;
3175 IADDR UNUSED pc
= abuf
->addr
;
3177 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3180 USI opval
= GET_H_DR (((UINT
) 1));
3181 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3182 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3185 SEM_BRANCH_FINI (vpc
);
3190 CASE (sem
, INSN_RET_D
) : /* ret:d */
3192 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3193 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3194 #define FLD(f) abuf->fields.cti.fields.fmt_ret.f
3195 int UNUSED written
= 0;
3196 IADDR UNUSED pc
= abuf
->addr
;
3198 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3202 USI opval
= GET_H_DR (((UINT
) 1));
3203 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3204 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3208 SEM_BRANCH_FINI (vpc
);
3213 CASE (sem
, INSN_INT
) : /* int $u8 */
3215 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3216 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3217 #define FLD(f) abuf->fields.cti.fields.fmt_int.f
3218 int UNUSED written
= 0;
3219 IADDR UNUSED pc
= abuf
->addr
;
3221 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3228 SI opval
= fr30_int (current_cpu
, pc
, FLD (f_u8
));
3229 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3230 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3234 SEM_BRANCH_FINI (vpc
);
3239 CASE (sem
, INSN_INTE
) : /* inte */
3241 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3242 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3243 #define FLD(f) abuf->fields.cti.fields.fmt_inte.f
3244 int UNUSED written
= 0;
3245 IADDR UNUSED pc
= abuf
->addr
;
3247 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3254 SI opval
= fr30_inte (current_cpu
, pc
);
3255 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3256 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3260 SEM_BRANCH_FINI (vpc
);
3265 CASE (sem
, INSN_RETI
) : /* reti */
3267 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3268 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3269 #define FLD(f) abuf->fields.cti.fields.fmt_reti.f
3270 int UNUSED written
= 0;
3271 IADDR UNUSED pc
= abuf
->addr
;
3273 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3275 if (EQBI (GET_H_SBIT (), 0)) {
3278 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_DR (((UINT
) 2)));
3279 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3280 written
|= (1 << 7);
3281 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3284 SI opval
= ADDSI (GET_H_DR (((UINT
) 2)), 4);
3285 SET_H_DR (((UINT
) 2), opval
);
3286 written
|= (1 << 5);
3287 TRACE_RESULT (current_cpu
, abuf
, "dr-2", 'x', opval
);
3290 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_DR (((UINT
) 2)));
3292 written
|= (1 << 8);
3293 TRACE_RESULT (current_cpu
, abuf
, "ps", 'x', opval
);
3296 SI opval
= ADDSI (GET_H_DR (((UINT
) 2)), 4);
3297 SET_H_DR (((UINT
) 2), opval
);
3298 written
|= (1 << 5);
3299 TRACE_RESULT (current_cpu
, abuf
, "dr-2", 'x', opval
);
3305 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_DR (((UINT
) 3)));
3306 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3307 written
|= (1 << 7);
3308 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3311 SI opval
= ADDSI (GET_H_DR (((UINT
) 3)), 4);
3312 SET_H_DR (((UINT
) 3), opval
);
3313 written
|= (1 << 6);
3314 TRACE_RESULT (current_cpu
, abuf
, "dr-3", 'x', opval
);
3317 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_DR (((UINT
) 3)));
3319 written
|= (1 << 8);
3320 TRACE_RESULT (current_cpu
, abuf
, "ps", 'x', opval
);
3323 SI opval
= ADDSI (GET_H_DR (((UINT
) 3)), 4);
3324 SET_H_DR (((UINT
) 3), opval
);
3325 written
|= (1 << 6);
3326 TRACE_RESULT (current_cpu
, abuf
, "dr-3", 'x', opval
);
3331 abuf
->written
= written
;
3332 SEM_BRANCH_FINI (vpc
);
3337 CASE (sem
, INSN_BRAD
) : /* bra:d $label9 */
3339 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3340 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3341 #define FLD(f) abuf->fields.cti.fields.fmt_brad.f
3342 int UNUSED written
= 0;
3343 IADDR UNUSED pc
= abuf
->addr
;
3345 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3349 USI opval
= FLD (i_label9
);
3350 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3351 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3355 SEM_BRANCH_FINI (vpc
);
3360 CASE (sem
, INSN_BRA
) : /* bra $label9 */
3362 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3363 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3364 #define FLD(f) abuf->fields.cti.fields.fmt_brad.f
3365 int UNUSED written
= 0;
3366 IADDR UNUSED pc
= abuf
->addr
;
3368 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3371 USI opval
= FLD (i_label9
);
3372 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3373 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3376 SEM_BRANCH_FINI (vpc
);
3381 CASE (sem
, INSN_BNOD
) : /* bno:d $label9 */
3383 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3384 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3385 #define FLD(f) abuf->fields.fmt_bnod.f
3386 int UNUSED written
= 0;
3387 IADDR UNUSED pc
= abuf
->addr
;
3388 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3391 do { } while (0); /*nop*/
3398 CASE (sem
, INSN_BNO
) : /* bno $label9 */
3400 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3401 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3402 #define FLD(f) abuf->fields.fmt_bnod.f
3403 int UNUSED written
= 0;
3404 IADDR UNUSED pc
= abuf
->addr
;
3405 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3407 do { } while (0); /*nop*/
3413 CASE (sem
, INSN_BEQD
) : /* beq:d $label9 */
3415 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3416 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3417 #define FLD(f) abuf->fields.cti.fields.fmt_beqd.f
3418 int UNUSED written
= 0;
3419 IADDR UNUSED pc
= abuf
->addr
;
3421 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3426 USI opval
= FLD (i_label9
);
3427 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3428 written
|= (1 << 2);
3429 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3434 abuf
->written
= written
;
3435 SEM_BRANCH_FINI (vpc
);
3440 CASE (sem
, INSN_BEQ
) : /* beq $label9 */
3442 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3443 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3444 #define FLD(f) abuf->fields.cti.fields.fmt_beqd.f
3445 int UNUSED written
= 0;
3446 IADDR UNUSED pc
= abuf
->addr
;
3448 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3452 USI opval
= FLD (i_label9
);
3453 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3454 written
|= (1 << 2);
3455 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3459 abuf
->written
= written
;
3460 SEM_BRANCH_FINI (vpc
);
3465 CASE (sem
, INSN_BNED
) : /* bne:d $label9 */
3467 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3468 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3469 #define FLD(f) abuf->fields.cti.fields.fmt_beqd.f
3470 int UNUSED written
= 0;
3471 IADDR UNUSED pc
= abuf
->addr
;
3473 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3476 if (NOTBI (CPU (h_zbit
))) {
3478 USI opval
= FLD (i_label9
);
3479 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3480 written
|= (1 << 2);
3481 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3486 abuf
->written
= written
;
3487 SEM_BRANCH_FINI (vpc
);
3492 CASE (sem
, INSN_BNE
) : /* bne $label9 */
3494 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3495 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3496 #define FLD(f) abuf->fields.cti.fields.fmt_beqd.f
3497 int UNUSED written
= 0;
3498 IADDR UNUSED pc
= abuf
->addr
;
3500 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3502 if (NOTBI (CPU (h_zbit
))) {
3504 USI opval
= FLD (i_label9
);
3505 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3506 written
|= (1 << 2);
3507 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3511 abuf
->written
= written
;
3512 SEM_BRANCH_FINI (vpc
);
3517 CASE (sem
, INSN_BCD
) : /* bc:d $label9 */
3519 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3520 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3521 #define FLD(f) abuf->fields.cti.fields.fmt_bcd.f
3522 int UNUSED written
= 0;
3523 IADDR UNUSED pc
= abuf
->addr
;
3525 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3530 USI opval
= FLD (i_label9
);
3531 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3532 written
|= (1 << 2);
3533 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3538 abuf
->written
= written
;
3539 SEM_BRANCH_FINI (vpc
);
3544 CASE (sem
, INSN_BC
) : /* bc $label9 */
3546 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3547 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3548 #define FLD(f) abuf->fields.cti.fields.fmt_bcd.f
3549 int UNUSED written
= 0;
3550 IADDR UNUSED pc
= abuf
->addr
;
3552 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3556 USI opval
= FLD (i_label9
);
3557 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3558 written
|= (1 << 2);
3559 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3563 abuf
->written
= written
;
3564 SEM_BRANCH_FINI (vpc
);
3569 CASE (sem
, INSN_BNCD
) : /* bnc:d $label9 */
3571 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3572 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3573 #define FLD(f) abuf->fields.cti.fields.fmt_bcd.f
3574 int UNUSED written
= 0;
3575 IADDR UNUSED pc
= abuf
->addr
;
3577 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3580 if (NOTBI (CPU (h_cbit
))) {
3582 USI opval
= FLD (i_label9
);
3583 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3584 written
|= (1 << 2);
3585 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3590 abuf
->written
= written
;
3591 SEM_BRANCH_FINI (vpc
);
3596 CASE (sem
, INSN_BNC
) : /* bnc $label9 */
3598 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3599 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3600 #define FLD(f) abuf->fields.cti.fields.fmt_bcd.f
3601 int UNUSED written
= 0;
3602 IADDR UNUSED pc
= abuf
->addr
;
3604 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3606 if (NOTBI (CPU (h_cbit
))) {
3608 USI opval
= FLD (i_label9
);
3609 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3610 written
|= (1 << 2);
3611 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3615 abuf
->written
= written
;
3616 SEM_BRANCH_FINI (vpc
);
3621 CASE (sem
, INSN_BND
) : /* bn:d $label9 */
3623 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3624 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3625 #define FLD(f) abuf->fields.cti.fields.fmt_bnd.f
3626 int UNUSED written
= 0;
3627 IADDR UNUSED pc
= abuf
->addr
;
3629 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3634 USI opval
= FLD (i_label9
);
3635 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3636 written
|= (1 << 2);
3637 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3642 abuf
->written
= written
;
3643 SEM_BRANCH_FINI (vpc
);
3648 CASE (sem
, INSN_BN
) : /* bn $label9 */
3650 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3651 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3652 #define FLD(f) abuf->fields.cti.fields.fmt_bnd.f
3653 int UNUSED written
= 0;
3654 IADDR UNUSED pc
= abuf
->addr
;
3656 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3660 USI opval
= FLD (i_label9
);
3661 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3662 written
|= (1 << 2);
3663 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3667 abuf
->written
= written
;
3668 SEM_BRANCH_FINI (vpc
);
3673 CASE (sem
, INSN_BPD
) : /* bp:d $label9 */
3675 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3676 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3677 #define FLD(f) abuf->fields.cti.fields.fmt_bnd.f
3678 int UNUSED written
= 0;
3679 IADDR UNUSED pc
= abuf
->addr
;
3681 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3684 if (NOTBI (CPU (h_nbit
))) {
3686 USI opval
= FLD (i_label9
);
3687 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3688 written
|= (1 << 2);
3689 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3694 abuf
->written
= written
;
3695 SEM_BRANCH_FINI (vpc
);
3700 CASE (sem
, INSN_BP
) : /* bp $label9 */
3702 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3703 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3704 #define FLD(f) abuf->fields.cti.fields.fmt_bnd.f
3705 int UNUSED written
= 0;
3706 IADDR UNUSED pc
= abuf
->addr
;
3708 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3710 if (NOTBI (CPU (h_nbit
))) {
3712 USI opval
= FLD (i_label9
);
3713 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3714 written
|= (1 << 2);
3715 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3719 abuf
->written
= written
;
3720 SEM_BRANCH_FINI (vpc
);
3725 CASE (sem
, INSN_BVD
) : /* bv:d $label9 */
3727 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3728 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3729 #define FLD(f) abuf->fields.cti.fields.fmt_bvd.f
3730 int UNUSED written
= 0;
3731 IADDR UNUSED pc
= abuf
->addr
;
3733 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3738 USI opval
= FLD (i_label9
);
3739 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3740 written
|= (1 << 2);
3741 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3746 abuf
->written
= written
;
3747 SEM_BRANCH_FINI (vpc
);
3752 CASE (sem
, INSN_BV
) : /* bv $label9 */
3754 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3755 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3756 #define FLD(f) abuf->fields.cti.fields.fmt_bvd.f
3757 int UNUSED written
= 0;
3758 IADDR UNUSED pc
= abuf
->addr
;
3760 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3764 USI opval
= FLD (i_label9
);
3765 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3766 written
|= (1 << 2);
3767 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3771 abuf
->written
= written
;
3772 SEM_BRANCH_FINI (vpc
);
3777 CASE (sem
, INSN_BNVD
) : /* bnv:d $label9 */
3779 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3780 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3781 #define FLD(f) abuf->fields.cti.fields.fmt_bvd.f
3782 int UNUSED written
= 0;
3783 IADDR UNUSED pc
= abuf
->addr
;
3785 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3788 if (NOTBI (CPU (h_vbit
))) {
3790 USI opval
= FLD (i_label9
);
3791 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3792 written
|= (1 << 2);
3793 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3798 abuf
->written
= written
;
3799 SEM_BRANCH_FINI (vpc
);
3804 CASE (sem
, INSN_BNV
) : /* bnv $label9 */
3806 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3807 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3808 #define FLD(f) abuf->fields.cti.fields.fmt_bvd.f
3809 int UNUSED written
= 0;
3810 IADDR UNUSED pc
= abuf
->addr
;
3812 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3814 if (NOTBI (CPU (h_vbit
))) {
3816 USI opval
= FLD (i_label9
);
3817 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3818 written
|= (1 << 2);
3819 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3823 abuf
->written
= written
;
3824 SEM_BRANCH_FINI (vpc
);
3829 CASE (sem
, INSN_BLTD
) : /* blt:d $label9 */
3831 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3832 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3833 #define FLD(f) abuf->fields.cti.fields.fmt_bltd.f
3834 int UNUSED written
= 0;
3835 IADDR UNUSED pc
= abuf
->addr
;
3837 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3840 if (XORBI (CPU (h_vbit
), CPU (h_nbit
))) {
3842 USI opval
= FLD (i_label9
);
3843 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3844 written
|= (1 << 3);
3845 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3850 abuf
->written
= written
;
3851 SEM_BRANCH_FINI (vpc
);
3856 CASE (sem
, INSN_BLT
) : /* blt $label9 */
3858 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3859 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3860 #define FLD(f) abuf->fields.cti.fields.fmt_bltd.f
3861 int UNUSED written
= 0;
3862 IADDR UNUSED pc
= abuf
->addr
;
3864 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3866 if (XORBI (CPU (h_vbit
), CPU (h_nbit
))) {
3868 USI opval
= FLD (i_label9
);
3869 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3870 written
|= (1 << 3);
3871 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3875 abuf
->written
= written
;
3876 SEM_BRANCH_FINI (vpc
);
3881 CASE (sem
, INSN_BGED
) : /* bge:d $label9 */
3883 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3884 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3885 #define FLD(f) abuf->fields.cti.fields.fmt_bltd.f
3886 int UNUSED written
= 0;
3887 IADDR UNUSED pc
= abuf
->addr
;
3889 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3892 if (NOTBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)))) {
3894 USI opval
= FLD (i_label9
);
3895 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3896 written
|= (1 << 3);
3897 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3902 abuf
->written
= written
;
3903 SEM_BRANCH_FINI (vpc
);
3908 CASE (sem
, INSN_BGE
) : /* bge $label9 */
3910 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3911 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3912 #define FLD(f) abuf->fields.cti.fields.fmt_bltd.f
3913 int UNUSED written
= 0;
3914 IADDR UNUSED pc
= abuf
->addr
;
3916 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3918 if (NOTBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)))) {
3920 USI opval
= FLD (i_label9
);
3921 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3922 written
|= (1 << 3);
3923 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3927 abuf
->written
= written
;
3928 SEM_BRANCH_FINI (vpc
);
3933 CASE (sem
, INSN_BLED
) : /* ble:d $label9 */
3935 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3936 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3937 #define FLD(f) abuf->fields.cti.fields.fmt_bled.f
3938 int UNUSED written
= 0;
3939 IADDR UNUSED pc
= abuf
->addr
;
3941 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3944 if (ORBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)), CPU (h_zbit
))) {
3946 USI opval
= FLD (i_label9
);
3947 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3948 written
|= (1 << 4);
3949 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3954 abuf
->written
= written
;
3955 SEM_BRANCH_FINI (vpc
);
3960 CASE (sem
, INSN_BLE
) : /* ble $label9 */
3962 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3963 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3964 #define FLD(f) abuf->fields.cti.fields.fmt_bled.f
3965 int UNUSED written
= 0;
3966 IADDR UNUSED pc
= abuf
->addr
;
3968 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3970 if (ORBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)), CPU (h_zbit
))) {
3972 USI opval
= FLD (i_label9
);
3973 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
3974 written
|= (1 << 4);
3975 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3979 abuf
->written
= written
;
3980 SEM_BRANCH_FINI (vpc
);
3985 CASE (sem
, INSN_BGTD
) : /* bgt:d $label9 */
3987 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3988 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3989 #define FLD(f) abuf->fields.cti.fields.fmt_bled.f
3990 int UNUSED written
= 0;
3991 IADDR UNUSED pc
= abuf
->addr
;
3993 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3996 if (NOTBI (ORBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)), CPU (h_zbit
)))) {
3998 USI opval
= FLD (i_label9
);
3999 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
4000 written
|= (1 << 4);
4001 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4006 abuf
->written
= written
;
4007 SEM_BRANCH_FINI (vpc
);
4012 CASE (sem
, INSN_BGT
) : /* bgt $label9 */
4014 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4015 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4016 #define FLD(f) abuf->fields.cti.fields.fmt_bled.f
4017 int UNUSED written
= 0;
4018 IADDR UNUSED pc
= abuf
->addr
;
4020 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4022 if (NOTBI (ORBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)), CPU (h_zbit
)))) {
4024 USI opval
= FLD (i_label9
);
4025 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
4026 written
|= (1 << 4);
4027 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4031 abuf
->written
= written
;
4032 SEM_BRANCH_FINI (vpc
);
4037 CASE (sem
, INSN_BLSD
) : /* bls:d $label9 */
4039 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4040 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4041 #define FLD(f) abuf->fields.cti.fields.fmt_blsd.f
4042 int UNUSED written
= 0;
4043 IADDR UNUSED pc
= abuf
->addr
;
4045 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4048 if (ORBI (CPU (h_cbit
), CPU (h_zbit
))) {
4050 USI opval
= FLD (i_label9
);
4051 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
4052 written
|= (1 << 3);
4053 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4058 abuf
->written
= written
;
4059 SEM_BRANCH_FINI (vpc
);
4064 CASE (sem
, INSN_BLS
) : /* bls $label9 */
4066 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4067 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4068 #define FLD(f) abuf->fields.cti.fields.fmt_blsd.f
4069 int UNUSED written
= 0;
4070 IADDR UNUSED pc
= abuf
->addr
;
4072 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4074 if (ORBI (CPU (h_cbit
), CPU (h_zbit
))) {
4076 USI opval
= FLD (i_label9
);
4077 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
4078 written
|= (1 << 3);
4079 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4083 abuf
->written
= written
;
4084 SEM_BRANCH_FINI (vpc
);
4089 CASE (sem
, INSN_BHID
) : /* bhi:d $label9 */
4091 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4092 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4093 #define FLD(f) abuf->fields.cti.fields.fmt_blsd.f
4094 int UNUSED written
= 0;
4095 IADDR UNUSED pc
= abuf
->addr
;
4097 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4100 if (NOTBI (ORBI (CPU (h_cbit
), CPU (h_zbit
)))) {
4102 USI opval
= FLD (i_label9
);
4103 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
4104 written
|= (1 << 3);
4105 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4110 abuf
->written
= written
;
4111 SEM_BRANCH_FINI (vpc
);
4116 CASE (sem
, INSN_BHI
) : /* bhi $label9 */
4118 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4119 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4120 #define FLD(f) abuf->fields.cti.fields.fmt_blsd.f
4121 int UNUSED written
= 0;
4122 IADDR UNUSED pc
= abuf
->addr
;
4124 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4126 if (NOTBI (ORBI (CPU (h_cbit
), CPU (h_zbit
)))) {
4128 USI opval
= FLD (i_label9
);
4129 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
, SEM_BRANCH_ADDR_CACHE (sem_arg
));
4130 written
|= (1 << 3);
4131 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4135 abuf
->written
= written
;
4136 SEM_BRANCH_FINI (vpc
);
4141 CASE (sem
, INSN_DMOVR13
) : /* dmov $R13,@$dir10 */
4143 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4144 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4145 #define FLD(f) abuf->fields.fmt_dmovr13.f
4146 int UNUSED written
= 0;
4147 IADDR UNUSED pc
= abuf
->addr
;
4148 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4151 SI opval
= CPU (h_gr
[((UINT
) 13)]);
4152 SETMEMSI (current_cpu
, pc
, FLD (f_dir10
), opval
);
4153 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4160 CASE (sem
, INSN_DMOVR13H
) : /* dmovh $R13,@$dir9 */
4162 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4163 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4164 #define FLD(f) abuf->fields.fmt_dmovr13h.f
4165 int UNUSED written
= 0;
4166 IADDR UNUSED pc
= abuf
->addr
;
4167 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4170 HI opval
= CPU (h_gr
[((UINT
) 13)]);
4171 SETMEMHI (current_cpu
, pc
, FLD (f_dir9
), opval
);
4172 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4179 CASE (sem
, INSN_DMOVR13B
) : /* dmovb $R13,@$dir8 */
4181 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4182 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4183 #define FLD(f) abuf->fields.fmt_dmovr13b.f
4184 int UNUSED written
= 0;
4185 IADDR UNUSED pc
= abuf
->addr
;
4186 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4189 QI opval
= CPU (h_gr
[((UINT
) 13)]);
4190 SETMEMQI (current_cpu
, pc
, FLD (f_dir8
), opval
);
4191 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4198 CASE (sem
, INSN_DMOVR13PI
) : /* dmov @$R13+,@$dir10 */
4200 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4201 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4202 #define FLD(f) abuf->fields.fmt_dmovr13pi.f
4203 int UNUSED written
= 0;
4204 IADDR UNUSED pc
= abuf
->addr
;
4205 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4209 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]));
4210 SETMEMSI (current_cpu
, pc
, FLD (f_dir10
), opval
);
4211 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4214 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 4);
4215 CPU (h_gr
[((UINT
) 13)]) = opval
;
4216 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4224 CASE (sem
, INSN_DMOVR13PIH
) : /* dmovh @$R13+,@$dir9 */
4226 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4227 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4228 #define FLD(f) abuf->fields.fmt_dmovr13pih.f
4229 int UNUSED written
= 0;
4230 IADDR UNUSED pc
= abuf
->addr
;
4231 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4235 HI opval
= GETMEMHI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]));
4236 SETMEMHI (current_cpu
, pc
, FLD (f_dir9
), opval
);
4237 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4240 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 2);
4241 CPU (h_gr
[((UINT
) 13)]) = opval
;
4242 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4250 CASE (sem
, INSN_DMOVR13PIB
) : /* dmovb @$R13+,@$dir8 */
4252 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4253 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4254 #define FLD(f) abuf->fields.fmt_dmovr13pib.f
4255 int UNUSED written
= 0;
4256 IADDR UNUSED pc
= abuf
->addr
;
4257 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4261 QI opval
= GETMEMQI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]));
4262 SETMEMQI (current_cpu
, pc
, FLD (f_dir8
), opval
);
4263 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4266 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 1);
4267 CPU (h_gr
[((UINT
) 13)]) = opval
;
4268 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4276 CASE (sem
, INSN_DMOVR15PI
) : /* dmov @$R15+,@$dir10 */
4278 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4279 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4280 #define FLD(f) abuf->fields.fmt_dmovr15pi.f
4281 int UNUSED written
= 0;
4282 IADDR UNUSED pc
= abuf
->addr
;
4283 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4287 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4288 SETMEMSI (current_cpu
, pc
, FLD (f_dir10
), opval
);
4289 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4292 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4293 CPU (h_gr
[((UINT
) 15)]) = opval
;
4294 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4302 CASE (sem
, INSN_DMOV2R13
) : /* dmov @$dir10,$R13 */
4304 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4305 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4306 #define FLD(f) abuf->fields.fmt_dmov2r13.f
4307 int UNUSED written
= 0;
4308 IADDR UNUSED pc
= abuf
->addr
;
4309 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4312 SI opval
= GETMEMSI (current_cpu
, pc
, FLD (f_dir10
));
4313 CPU (h_gr
[((UINT
) 13)]) = opval
;
4314 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4321 CASE (sem
, INSN_DMOV2R13H
) : /* dmovh @$dir9,$R13 */
4323 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4324 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4325 #define FLD(f) abuf->fields.fmt_dmov2r13h.f
4326 int UNUSED written
= 0;
4327 IADDR UNUSED pc
= abuf
->addr
;
4328 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4331 SI opval
= GETMEMHI (current_cpu
, pc
, FLD (f_dir9
));
4332 CPU (h_gr
[((UINT
) 13)]) = opval
;
4333 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4340 CASE (sem
, INSN_DMOV2R13B
) : /* dmovb @$dir8,$R13 */
4342 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4343 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4344 #define FLD(f) abuf->fields.fmt_dmov2r13b.f
4345 int UNUSED written
= 0;
4346 IADDR UNUSED pc
= abuf
->addr
;
4347 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4350 SI opval
= GETMEMQI (current_cpu
, pc
, FLD (f_dir8
));
4351 CPU (h_gr
[((UINT
) 13)]) = opval
;
4352 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4359 CASE (sem
, INSN_DMOV2R13PI
) : /* dmov @$dir10,@$R13+ */
4361 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4362 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4363 #define FLD(f) abuf->fields.fmt_dmov2r13pi.f
4364 int UNUSED written
= 0;
4365 IADDR UNUSED pc
= abuf
->addr
;
4366 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4370 SI opval
= GETMEMSI (current_cpu
, pc
, FLD (f_dir10
));
4371 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]), opval
);
4372 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4375 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 4);
4376 CPU (h_gr
[((UINT
) 13)]) = opval
;
4377 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4385 CASE (sem
, INSN_DMOV2R13PIH
) : /* dmovh @$dir9,@$R13+ */
4387 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4388 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4389 #define FLD(f) abuf->fields.fmt_dmov2r13pih.f
4390 int UNUSED written
= 0;
4391 IADDR UNUSED pc
= abuf
->addr
;
4392 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4396 HI opval
= GETMEMHI (current_cpu
, pc
, FLD (f_dir9
));
4397 SETMEMHI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]), opval
);
4398 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4401 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 2);
4402 CPU (h_gr
[((UINT
) 13)]) = opval
;
4403 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4411 CASE (sem
, INSN_DMOV2R13PIB
) : /* dmovb @$dir8,@$R13+ */
4413 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4414 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4415 #define FLD(f) abuf->fields.fmt_dmov2r13pib.f
4416 int UNUSED written
= 0;
4417 IADDR UNUSED pc
= abuf
->addr
;
4418 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4422 QI opval
= GETMEMQI (current_cpu
, pc
, FLD (f_dir8
));
4423 SETMEMQI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]), opval
);
4424 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4427 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 1);
4428 CPU (h_gr
[((UINT
) 13)]) = opval
;
4429 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4437 CASE (sem
, INSN_DMOV2R15PD
) : /* dmov @$dir10,@-$R15 */
4439 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4440 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4441 #define FLD(f) abuf->fields.fmt_dmov2r15pd.f
4442 int UNUSED written
= 0;
4443 IADDR UNUSED pc
= abuf
->addr
;
4444 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4448 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
4449 CPU (h_gr
[((UINT
) 15)]) = opval
;
4450 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4453 SI opval
= GETMEMSI (current_cpu
, pc
, FLD (f_dir10
));
4454 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
4455 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4463 CASE (sem
, INSN_LDRES
) : /* ldres @$Ri+,$u4 */
4465 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4466 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4467 #define FLD(f) abuf->fields.fmt_ldres.f
4468 int UNUSED written
= 0;
4469 IADDR UNUSED pc
= abuf
->addr
;
4470 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4473 SI opval
= ADDSI (* FLD (i_Ri
), 4);
4474 * FLD (i_Ri
) = opval
;
4475 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
4482 CASE (sem
, INSN_STRES
) : /* stres $u4,@$Ri+ */
4484 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4485 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4486 #define FLD(f) abuf->fields.fmt_ldres.f
4487 int UNUSED written
= 0;
4488 IADDR UNUSED pc
= abuf
->addr
;
4489 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4492 SI opval
= ADDSI (* FLD (i_Ri
), 4);
4493 * FLD (i_Ri
) = opval
;
4494 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
4501 CASE (sem
, INSN_COPOP
) : /* copop $u4c,$ccc,$CRj,$CRi */
4503 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4504 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4505 #define FLD(f) abuf->fields.fmt_copop.f
4506 int UNUSED written
= 0;
4507 IADDR UNUSED pc
= abuf
->addr
;
4508 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4510 do { } while (0); /*nop*/
4516 CASE (sem
, INSN_COPLD
) : /* copld $u4c,$ccc,$Rjc,$CRi */
4518 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4519 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4520 #define FLD(f) abuf->fields.fmt_copld.f
4521 int UNUSED written
= 0;
4522 IADDR UNUSED pc
= abuf
->addr
;
4523 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4525 do { } while (0); /*nop*/
4531 CASE (sem
, INSN_COPST
) : /* copst $u4c,$ccc,$CRj,$Ric */
4533 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4534 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4535 #define FLD(f) abuf->fields.fmt_copst.f
4536 int UNUSED written
= 0;
4537 IADDR UNUSED pc
= abuf
->addr
;
4538 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4540 do { } while (0); /*nop*/
4546 CASE (sem
, INSN_COPSV
) : /* copsv $u4c,$ccc,$CRj,$Ric */
4548 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4549 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4550 #define FLD(f) abuf->fields.fmt_copst.f
4551 int UNUSED written
= 0;
4552 IADDR UNUSED pc
= abuf
->addr
;
4553 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4555 do { } while (0); /*nop*/
4561 CASE (sem
, INSN_NOP
) : /* nop */
4563 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4564 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4565 #define FLD(f) abuf->fields.fmt_nop.f
4566 int UNUSED written
= 0;
4567 IADDR UNUSED pc
= abuf
->addr
;
4568 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4570 do { } while (0); /*nop*/
4576 CASE (sem
, INSN_ANDCCR
) : /* andccr $u8 */
4578 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4579 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4580 #define FLD(f) abuf->fields.fmt_andccr.f
4581 int UNUSED written
= 0;
4582 IADDR UNUSED pc
= abuf
->addr
;
4583 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4586 UQI opval
= ANDQI (GET_H_CCR (), FLD (f_u8
));
4588 TRACE_RESULT (current_cpu
, abuf
, "ccr", 'x', opval
);
4595 CASE (sem
, INSN_ORCCR
) : /* orccr $u8 */
4597 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4598 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4599 #define FLD(f) abuf->fields.fmt_andccr.f
4600 int UNUSED written
= 0;
4601 IADDR UNUSED pc
= abuf
->addr
;
4602 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4605 UQI opval
= ORQI (GET_H_CCR (), FLD (f_u8
));
4607 TRACE_RESULT (current_cpu
, abuf
, "ccr", 'x', opval
);
4614 CASE (sem
, INSN_STILM
) : /* stilm $u8 */
4616 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4617 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4618 #define FLD(f) abuf->fields.fmt_stilm.f
4619 int UNUSED written
= 0;
4620 IADDR UNUSED pc
= abuf
->addr
;
4621 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4624 UQI opval
= ANDSI (FLD (f_u8
), 31);
4626 TRACE_RESULT (current_cpu
, abuf
, "ilm", 'x', opval
);
4633 CASE (sem
, INSN_ADDSP
) : /* addsp $s10 */
4635 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4636 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4637 #define FLD(f) abuf->fields.fmt_addsp.f
4638 int UNUSED written
= 0;
4639 IADDR UNUSED pc
= abuf
->addr
;
4640 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4643 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), FLD (f_s10
));
4644 CPU (h_gr
[((UINT
) 15)]) = opval
;
4645 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4652 CASE (sem
, INSN_EXTSB
) : /* extsb $Ri */
4654 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4655 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4656 #define FLD(f) abuf->fields.fmt_extsb.f
4657 int UNUSED written
= 0;
4658 IADDR UNUSED pc
= abuf
->addr
;
4659 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4662 SI opval
= EXTQISI (ANDQI (* FLD (i_Ri
), 255));
4663 * FLD (i_Ri
) = opval
;
4664 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
4671 CASE (sem
, INSN_EXTUB
) : /* extub $Ri */
4673 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4674 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4675 #define FLD(f) abuf->fields.fmt_extub.f
4676 int UNUSED written
= 0;
4677 IADDR UNUSED pc
= abuf
->addr
;
4678 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4681 SI opval
= ZEXTQISI (ANDQI (* FLD (i_Ri
), 255));
4682 * FLD (i_Ri
) = opval
;
4683 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
4690 CASE (sem
, INSN_EXTSH
) : /* extsh $Ri */
4692 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4693 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4694 #define FLD(f) abuf->fields.fmt_extsh.f
4695 int UNUSED written
= 0;
4696 IADDR UNUSED pc
= abuf
->addr
;
4697 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4700 SI opval
= EXTHISI (ANDHI (* FLD (i_Ri
), 65535));
4701 * FLD (i_Ri
) = opval
;
4702 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
4709 CASE (sem
, INSN_EXTUH
) : /* extuh $Ri */
4711 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4712 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4713 #define FLD(f) abuf->fields.fmt_extuh.f
4714 int UNUSED written
= 0;
4715 IADDR UNUSED pc
= abuf
->addr
;
4716 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4719 SI opval
= ZEXTHISI (ANDHI (* FLD (i_Ri
), 65535));
4720 * FLD (i_Ri
) = opval
;
4721 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
4728 CASE (sem
, INSN_LDM0
) : /* ldm0 ($reglist_low_ld) */
4730 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4731 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4732 #define FLD(f) abuf->fields.fmt_ldm0.f
4733 int UNUSED written
= 0;
4734 IADDR UNUSED pc
= abuf
->addr
;
4735 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4738 if (ANDSI (FLD (f_reglist_low_ld
), 1)) {
4741 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4742 CPU (h_gr
[((UINT
) 0)]) = opval
;
4743 written
|= (1 << 3);
4744 TRACE_RESULT (current_cpu
, abuf
, "gr-0", 'x', opval
);
4747 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4748 CPU (h_gr
[((UINT
) 15)]) = opval
;
4749 written
|= (1 << 5);
4750 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4754 if (ANDSI (FLD (f_reglist_low_ld
), 2)) {
4757 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4758 CPU (h_gr
[((UINT
) 1)]) = opval
;
4759 written
|= (1 << 4);
4760 TRACE_RESULT (current_cpu
, abuf
, "gr-1", 'x', opval
);
4763 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4764 CPU (h_gr
[((UINT
) 15)]) = opval
;
4765 written
|= (1 << 5);
4766 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4770 if (ANDSI (FLD (f_reglist_low_ld
), 4)) {
4773 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4774 CPU (h_gr
[((UINT
) 2)]) = opval
;
4775 written
|= (1 << 6);
4776 TRACE_RESULT (current_cpu
, abuf
, "gr-2", 'x', opval
);
4779 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4780 CPU (h_gr
[((UINT
) 15)]) = opval
;
4781 written
|= (1 << 5);
4782 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4786 if (ANDSI (FLD (f_reglist_low_ld
), 8)) {
4789 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4790 CPU (h_gr
[((UINT
) 3)]) = opval
;
4791 written
|= (1 << 7);
4792 TRACE_RESULT (current_cpu
, abuf
, "gr-3", 'x', opval
);
4795 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4796 CPU (h_gr
[((UINT
) 15)]) = opval
;
4797 written
|= (1 << 5);
4798 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4802 if (ANDSI (FLD (f_reglist_low_ld
), 16)) {
4805 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4806 CPU (h_gr
[((UINT
) 4)]) = opval
;
4807 written
|= (1 << 8);
4808 TRACE_RESULT (current_cpu
, abuf
, "gr-4", 'x', opval
);
4811 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4812 CPU (h_gr
[((UINT
) 15)]) = opval
;
4813 written
|= (1 << 5);
4814 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4818 if (ANDSI (FLD (f_reglist_low_ld
), 32)) {
4821 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4822 CPU (h_gr
[((UINT
) 5)]) = opval
;
4823 written
|= (1 << 9);
4824 TRACE_RESULT (current_cpu
, abuf
, "gr-5", 'x', opval
);
4827 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4828 CPU (h_gr
[((UINT
) 15)]) = opval
;
4829 written
|= (1 << 5);
4830 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4834 if (ANDSI (FLD (f_reglist_low_ld
), 64)) {
4837 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4838 CPU (h_gr
[((UINT
) 6)]) = opval
;
4839 written
|= (1 << 10);
4840 TRACE_RESULT (current_cpu
, abuf
, "gr-6", 'x', opval
);
4843 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4844 CPU (h_gr
[((UINT
) 15)]) = opval
;
4845 written
|= (1 << 5);
4846 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4850 if (ANDSI (FLD (f_reglist_low_ld
), 128)) {
4853 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4854 CPU (h_gr
[((UINT
) 7)]) = opval
;
4855 written
|= (1 << 11);
4856 TRACE_RESULT (current_cpu
, abuf
, "gr-7", 'x', opval
);
4859 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4860 CPU (h_gr
[((UINT
) 15)]) = opval
;
4861 written
|= (1 << 5);
4862 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4868 abuf
->written
= written
;
4873 CASE (sem
, INSN_LDM1
) : /* ldm1 ($reglist_hi_ld) */
4875 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4876 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4877 #define FLD(f) abuf->fields.fmt_ldm1.f
4878 int UNUSED written
= 0;
4879 IADDR UNUSED pc
= abuf
->addr
;
4880 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4883 if (ANDSI (FLD (f_reglist_hi_ld
), 1)) {
4886 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4887 CPU (h_gr
[((UINT
) 8)]) = opval
;
4888 written
|= (1 << 9);
4889 TRACE_RESULT (current_cpu
, abuf
, "gr-8", 'x', opval
);
4892 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4893 CPU (h_gr
[((UINT
) 15)]) = opval
;
4894 written
|= (1 << 8);
4895 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4899 if (ANDSI (FLD (f_reglist_hi_ld
), 2)) {
4902 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4903 CPU (h_gr
[((UINT
) 9)]) = opval
;
4904 written
|= (1 << 10);
4905 TRACE_RESULT (current_cpu
, abuf
, "gr-9", 'x', opval
);
4908 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4909 CPU (h_gr
[((UINT
) 15)]) = opval
;
4910 written
|= (1 << 8);
4911 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4915 if (ANDSI (FLD (f_reglist_hi_ld
), 4)) {
4918 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4919 CPU (h_gr
[((UINT
) 10)]) = opval
;
4920 written
|= (1 << 3);
4921 TRACE_RESULT (current_cpu
, abuf
, "gr-10", 'x', opval
);
4924 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4925 CPU (h_gr
[((UINT
) 15)]) = opval
;
4926 written
|= (1 << 8);
4927 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4931 if (ANDSI (FLD (f_reglist_hi_ld
), 8)) {
4934 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4935 CPU (h_gr
[((UINT
) 11)]) = opval
;
4936 written
|= (1 << 4);
4937 TRACE_RESULT (current_cpu
, abuf
, "gr-11", 'x', opval
);
4940 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4941 CPU (h_gr
[((UINT
) 15)]) = opval
;
4942 written
|= (1 << 8);
4943 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4947 if (ANDSI (FLD (f_reglist_hi_ld
), 16)) {
4950 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4951 CPU (h_gr
[((UINT
) 12)]) = opval
;
4952 written
|= (1 << 5);
4953 TRACE_RESULT (current_cpu
, abuf
, "gr-12", 'x', opval
);
4956 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4957 CPU (h_gr
[((UINT
) 15)]) = opval
;
4958 written
|= (1 << 8);
4959 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4963 if (ANDSI (FLD (f_reglist_hi_ld
), 32)) {
4966 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4967 CPU (h_gr
[((UINT
) 13)]) = opval
;
4968 written
|= (1 << 6);
4969 TRACE_RESULT (current_cpu
, abuf
, "gr-13", 'x', opval
);
4972 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4973 CPU (h_gr
[((UINT
) 15)]) = opval
;
4974 written
|= (1 << 8);
4975 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4979 if (ANDSI (FLD (f_reglist_hi_ld
), 64)) {
4982 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4983 CPU (h_gr
[((UINT
) 14)]) = opval
;
4984 written
|= (1 << 7);
4985 TRACE_RESULT (current_cpu
, abuf
, "gr-14", 'x', opval
);
4988 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4989 CPU (h_gr
[((UINT
) 15)]) = opval
;
4990 written
|= (1 << 8);
4991 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
4995 if (ANDSI (FLD (f_reglist_hi_ld
), 128)) {
4997 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4998 CPU (h_gr
[((UINT
) 15)]) = opval
;
4999 written
|= (1 << 8);
5000 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5005 abuf
->written
= written
;
5010 CASE (sem
, INSN_STM0
) : /* stm0 ($reglist_low_st) */
5012 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5013 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5014 #define FLD(f) abuf->fields.fmt_stm0.f
5015 int UNUSED written
= 0;
5016 IADDR UNUSED pc
= abuf
->addr
;
5017 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5020 if (ANDSI (FLD (f_reglist_low_st
), 1)) {
5023 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5024 CPU (h_gr
[((UINT
) 15)]) = opval
;
5025 written
|= (1 << 10);
5026 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5029 SI opval
= CPU (h_gr
[((UINT
) 7)]);
5030 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5031 written
|= (1 << 11);
5032 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5036 if (ANDSI (FLD (f_reglist_low_st
), 2)) {
5039 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5040 CPU (h_gr
[((UINT
) 15)]) = opval
;
5041 written
|= (1 << 10);
5042 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5045 SI opval
= CPU (h_gr
[((UINT
) 6)]);
5046 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5047 written
|= (1 << 11);
5048 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5052 if (ANDSI (FLD (f_reglist_low_st
), 4)) {
5055 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5056 CPU (h_gr
[((UINT
) 15)]) = opval
;
5057 written
|= (1 << 10);
5058 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5061 SI opval
= CPU (h_gr
[((UINT
) 5)]);
5062 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5063 written
|= (1 << 11);
5064 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5068 if (ANDSI (FLD (f_reglist_low_st
), 8)) {
5071 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5072 CPU (h_gr
[((UINT
) 15)]) = opval
;
5073 written
|= (1 << 10);
5074 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5077 SI opval
= CPU (h_gr
[((UINT
) 4)]);
5078 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5079 written
|= (1 << 11);
5080 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5084 if (ANDSI (FLD (f_reglist_low_st
), 16)) {
5087 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5088 CPU (h_gr
[((UINT
) 15)]) = opval
;
5089 written
|= (1 << 10);
5090 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5093 SI opval
= CPU (h_gr
[((UINT
) 3)]);
5094 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5095 written
|= (1 << 11);
5096 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5100 if (ANDSI (FLD (f_reglist_low_st
), 32)) {
5103 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5104 CPU (h_gr
[((UINT
) 15)]) = opval
;
5105 written
|= (1 << 10);
5106 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5109 SI opval
= CPU (h_gr
[((UINT
) 2)]);
5110 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5111 written
|= (1 << 11);
5112 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5116 if (ANDSI (FLD (f_reglist_low_st
), 64)) {
5119 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5120 CPU (h_gr
[((UINT
) 15)]) = opval
;
5121 written
|= (1 << 10);
5122 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5125 SI opval
= CPU (h_gr
[((UINT
) 1)]);
5126 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5127 written
|= (1 << 11);
5128 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5132 if (ANDSI (FLD (f_reglist_low_st
), 128)) {
5135 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5136 CPU (h_gr
[((UINT
) 15)]) = opval
;
5137 written
|= (1 << 10);
5138 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5141 SI opval
= CPU (h_gr
[((UINT
) 0)]);
5142 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5143 written
|= (1 << 11);
5144 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5150 abuf
->written
= written
;
5155 CASE (sem
, INSN_STM1
) : /* stm1 ($reglist_hi_st) */
5157 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5158 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5159 #define FLD(f) abuf->fields.fmt_stm1.f
5160 int UNUSED written
= 0;
5161 IADDR UNUSED pc
= abuf
->addr
;
5162 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5165 if (ANDSI (FLD (f_reglist_hi_st
), 1)) {
5168 tmp_save_r15
= CPU (h_gr
[((UINT
) 15)]);
5170 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5171 CPU (h_gr
[((UINT
) 15)]) = opval
;
5172 written
|= (1 << 9);
5173 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5176 SI opval
= tmp_save_r15
;
5177 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5178 written
|= (1 << 10);
5179 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5183 if (ANDSI (FLD (f_reglist_hi_st
), 2)) {
5186 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5187 CPU (h_gr
[((UINT
) 15)]) = opval
;
5188 written
|= (1 << 9);
5189 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5192 SI opval
= CPU (h_gr
[((UINT
) 14)]);
5193 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5194 written
|= (1 << 10);
5195 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5199 if (ANDSI (FLD (f_reglist_hi_st
), 4)) {
5202 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5203 CPU (h_gr
[((UINT
) 15)]) = opval
;
5204 written
|= (1 << 9);
5205 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5208 SI opval
= CPU (h_gr
[((UINT
) 13)]);
5209 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5210 written
|= (1 << 10);
5211 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5215 if (ANDSI (FLD (f_reglist_hi_st
), 8)) {
5218 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5219 CPU (h_gr
[((UINT
) 15)]) = opval
;
5220 written
|= (1 << 9);
5221 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5224 SI opval
= CPU (h_gr
[((UINT
) 12)]);
5225 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5226 written
|= (1 << 10);
5227 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5231 if (ANDSI (FLD (f_reglist_hi_st
), 16)) {
5234 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5235 CPU (h_gr
[((UINT
) 15)]) = opval
;
5236 written
|= (1 << 9);
5237 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5240 SI opval
= CPU (h_gr
[((UINT
) 11)]);
5241 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5242 written
|= (1 << 10);
5243 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5247 if (ANDSI (FLD (f_reglist_hi_st
), 32)) {
5250 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5251 CPU (h_gr
[((UINT
) 15)]) = opval
;
5252 written
|= (1 << 9);
5253 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5256 SI opval
= CPU (h_gr
[((UINT
) 10)]);
5257 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5258 written
|= (1 << 10);
5259 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5263 if (ANDSI (FLD (f_reglist_hi_st
), 64)) {
5266 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5267 CPU (h_gr
[((UINT
) 15)]) = opval
;
5268 written
|= (1 << 9);
5269 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5272 SI opval
= CPU (h_gr
[((UINT
) 9)]);
5273 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5274 written
|= (1 << 10);
5275 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5279 if (ANDSI (FLD (f_reglist_hi_st
), 128)) {
5282 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5283 CPU (h_gr
[((UINT
) 15)]) = opval
;
5284 written
|= (1 << 9);
5285 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5288 SI opval
= CPU (h_gr
[((UINT
) 8)]);
5289 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5290 written
|= (1 << 10);
5291 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5297 abuf
->written
= written
;
5302 CASE (sem
, INSN_ENTER
) : /* enter $u10 */
5304 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5305 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5306 #define FLD(f) abuf->fields.fmt_enter.f
5307 int UNUSED written
= 0;
5308 IADDR UNUSED pc
= abuf
->addr
;
5309 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5313 tmp_tmp
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5315 SI opval
= CPU (h_gr
[((UINT
) 14)]);
5316 SETMEMSI (current_cpu
, pc
, tmp_tmp
, opval
);
5317 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5321 CPU (h_gr
[((UINT
) 14)]) = opval
;
5322 TRACE_RESULT (current_cpu
, abuf
, "gr-14", 'x', opval
);
5325 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), FLD (f_u10
));
5326 CPU (h_gr
[((UINT
) 15)]) = opval
;
5327 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5335 CASE (sem
, INSN_LEAVE
) : /* leave */
5337 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5338 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5339 #define FLD(f) abuf->fields.fmt_leave.f
5340 int UNUSED written
= 0;
5341 IADDR UNUSED pc
= abuf
->addr
;
5342 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5346 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 14)]), 4);
5347 CPU (h_gr
[((UINT
) 15)]) = opval
;
5348 TRACE_RESULT (current_cpu
, abuf
, "gr-15", 'x', opval
);
5351 SI opval
= GETMEMSI (current_cpu
, pc
, SUBSI (CPU (h_gr
[((UINT
) 15)]), 4));
5352 CPU (h_gr
[((UINT
) 14)]) = opval
;
5353 TRACE_RESULT (current_cpu
, abuf
, "gr-14", 'x', opval
);
5361 CASE (sem
, INSN_XCHB
) : /* xchb @$Rj,$Ri */
5363 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5364 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5365 #define FLD(f) abuf->fields.fmt_xchb.f
5366 int UNUSED written
= 0;
5367 IADDR UNUSED pc
= abuf
->addr
;
5368 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5372 tmp_tmp
= * FLD (i_Ri
);
5374 SI opval
= GETMEMUQI (current_cpu
, pc
, * FLD (i_Rj
));
5375 * FLD (i_Ri
) = opval
;
5376 TRACE_RESULT (current_cpu
, abuf
, "Ri", 'x', opval
);
5379 UQI opval
= tmp_tmp
;
5380 SETMEMUQI (current_cpu
, pc
, * FLD (i_Rj
), opval
);
5381 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5391 ENDSWITCH (sem
) /* End of semantic switch. */
5393 /* At this point `vpc' contains the next insn to execute. */
5396 #undef DEFINE_SWITCH
5397 #endif /* DEFINE_SWITCH */