1 /* Simulator instruction semantics for fr30bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998, 1999, 2000 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
)
213 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_fast_lab
= labels
[i
].label
;
215 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_full_lab
= labels
[i
].label
;
220 #endif /* DEFINE_LABELS */
224 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
225 off frills like tracing and profiling. */
226 /* FIXME: A better way would be to have TRACE_RESULT check for something
227 that can cause it to be optimized out. Another way would be to emit
228 special handlers into the instruction "stream". */
232 #define TRACE_RESULT(cpu, abuf, name, type, val)
236 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
237 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
239 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
246 /* Branch to next handler without going around main loop. */
247 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
248 SWITCH (sem
, SEM_ARGBUF (vpc
) -> semantic
.sem_case
)
250 #else /* ! WITH_SCACHE_PBB */
252 #define NEXT(vpc) BREAK (sem)
255 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_fast_lab
)
257 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_full_lab
)
260 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->num
)
263 #endif /* ! WITH_SCACHE_PBB */
267 CASE (sem
, INSN_X_INVALID
) : /* --invalid-- */
269 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
270 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
271 #define FLD(f) abuf->fields.fmt_empty.f
272 int UNUSED written
= 0;
273 IADDR UNUSED pc
= abuf
->addr
;
274 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
277 /* Update the recorded pc in the cpu state struct.
278 Only necessary for WITH_SCACHE case, but to avoid the
279 conditional compilation .... */
281 /* Virtual insns have zero size. Overwrite vpc with address of next insn
282 using the default-insn-bitsize spec. When executing insns in parallel
283 we may want to queue the fault and continue execution. */
284 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
285 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
292 CASE (sem
, INSN_X_AFTER
) : /* --after-- */
294 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
295 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
296 #define FLD(f) abuf->fields.fmt_empty.f
297 int UNUSED written
= 0;
298 IADDR UNUSED pc
= abuf
->addr
;
299 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
302 #if WITH_SCACHE_PBB_FR30BF
303 fr30bf_pbb_after (current_cpu
, sem_arg
);
311 CASE (sem
, INSN_X_BEFORE
) : /* --before-- */
313 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
314 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
315 #define FLD(f) abuf->fields.fmt_empty.f
316 int UNUSED written
= 0;
317 IADDR UNUSED pc
= abuf
->addr
;
318 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
321 #if WITH_SCACHE_PBB_FR30BF
322 fr30bf_pbb_before (current_cpu
, sem_arg
);
330 CASE (sem
, INSN_X_CTI_CHAIN
) : /* --cti-chain-- */
332 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
333 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
334 #define FLD(f) abuf->fields.fmt_empty.f
335 int UNUSED written
= 0;
336 IADDR UNUSED pc
= abuf
->addr
;
337 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
340 #if WITH_SCACHE_PBB_FR30BF
342 vpc
= fr30bf_pbb_cti_chain (current_cpu
, sem_arg
,
343 pbb_br_type
, pbb_br_npc
);
346 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
347 vpc
= fr30bf_pbb_cti_chain (current_cpu
, sem_arg
,
348 CPU_PBB_BR_TYPE (current_cpu
),
349 CPU_PBB_BR_NPC (current_cpu
));
358 CASE (sem
, INSN_X_CHAIN
) : /* --chain-- */
360 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
361 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
362 #define FLD(f) abuf->fields.fmt_empty.f
363 int UNUSED written
= 0;
364 IADDR UNUSED pc
= abuf
->addr
;
365 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
368 #if WITH_SCACHE_PBB_FR30BF
369 vpc
= fr30bf_pbb_chain (current_cpu
, sem_arg
);
380 CASE (sem
, INSN_X_BEGIN
) : /* --begin-- */
382 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
383 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
384 #define FLD(f) abuf->fields.fmt_empty.f
385 int UNUSED written
= 0;
386 IADDR UNUSED pc
= abuf
->addr
;
387 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
390 #if WITH_SCACHE_PBB_FR30BF
391 #if defined DEFINE_SWITCH || defined FAST_P
392 /* In the switch case FAST_P is a constant, allowing several optimizations
393 in any called inline functions. */
394 vpc
= fr30bf_pbb_begin (current_cpu
, FAST_P
);
396 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
397 vpc
= fr30bf_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
399 vpc
= fr30bf_pbb_begin (current_cpu
, 0);
409 CASE (sem
, INSN_ADD
) : /* add $Rj,$Ri */
411 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
412 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
413 #define FLD(f) abuf->fields.sfmt_add.f
414 int UNUSED written
= 0;
415 IADDR UNUSED pc
= abuf
->addr
;
416 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
420 BI opval
= ADDOFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
421 CPU (h_vbit
) = opval
;
422 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
425 BI opval
= ADDCFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
426 CPU (h_cbit
) = opval
;
427 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
430 SI opval
= ADDSI (* FLD (i_Ri
), * FLD (i_Rj
));
431 * FLD (i_Ri
) = opval
;
432 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
436 BI opval
= EQSI (* FLD (i_Ri
), 0);
437 CPU (h_zbit
) = opval
;
438 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
441 BI opval
= LTSI (* FLD (i_Ri
), 0);
442 CPU (h_nbit
) = opval
;
443 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
452 CASE (sem
, INSN_ADDI
) : /* add $u4,$Ri */
454 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
455 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
456 #define FLD(f) abuf->fields.sfmt_addi.f
457 int UNUSED written
= 0;
458 IADDR UNUSED pc
= abuf
->addr
;
459 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
463 BI opval
= ADDOFSI (* FLD (i_Ri
), FLD (f_u4
), 0);
464 CPU (h_vbit
) = opval
;
465 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
468 BI opval
= ADDCFSI (* FLD (i_Ri
), FLD (f_u4
), 0);
469 CPU (h_cbit
) = opval
;
470 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
473 SI opval
= ADDSI (* FLD (i_Ri
), FLD (f_u4
));
474 * FLD (i_Ri
) = opval
;
475 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
479 BI opval
= EQSI (* FLD (i_Ri
), 0);
480 CPU (h_zbit
) = opval
;
481 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
484 BI opval
= LTSI (* FLD (i_Ri
), 0);
485 CPU (h_nbit
) = opval
;
486 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
495 CASE (sem
, INSN_ADD2
) : /* add2 $m4,$Ri */
497 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
498 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
499 #define FLD(f) abuf->fields.sfmt_add2.f
500 int UNUSED written
= 0;
501 IADDR UNUSED pc
= abuf
->addr
;
502 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
506 BI opval
= ADDOFSI (* FLD (i_Ri
), FLD (f_m4
), 0);
507 CPU (h_vbit
) = opval
;
508 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
511 BI opval
= ADDCFSI (* FLD (i_Ri
), FLD (f_m4
), 0);
512 CPU (h_cbit
) = opval
;
513 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
516 SI opval
= ADDSI (* FLD (i_Ri
), FLD (f_m4
));
517 * FLD (i_Ri
) = opval
;
518 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
522 BI opval
= EQSI (* FLD (i_Ri
), 0);
523 CPU (h_zbit
) = opval
;
524 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
527 BI opval
= LTSI (* FLD (i_Ri
), 0);
528 CPU (h_nbit
) = opval
;
529 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
538 CASE (sem
, INSN_ADDC
) : /* addc $Rj,$Ri */
540 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
541 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
542 #define FLD(f) abuf->fields.sfmt_add.f
543 int UNUSED written
= 0;
544 IADDR UNUSED pc
= abuf
->addr
;
545 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
549 tmp_tmp
= ADDCSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
551 BI opval
= ADDOFSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
552 CPU (h_vbit
) = opval
;
553 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
556 BI opval
= ADDCFSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
557 CPU (h_cbit
) = opval
;
558 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
562 * FLD (i_Ri
) = opval
;
563 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
567 BI opval
= EQSI (* FLD (i_Ri
), 0);
568 CPU (h_zbit
) = opval
;
569 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
572 BI opval
= LTSI (* FLD (i_Ri
), 0);
573 CPU (h_nbit
) = opval
;
574 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
583 CASE (sem
, INSN_ADDN
) : /* addn $Rj,$Ri */
585 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
586 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
587 #define FLD(f) abuf->fields.sfmt_add.f
588 int UNUSED written
= 0;
589 IADDR UNUSED pc
= abuf
->addr
;
590 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
593 SI opval
= ADDSI (* FLD (i_Ri
), * FLD (i_Rj
));
594 * FLD (i_Ri
) = opval
;
595 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
602 CASE (sem
, INSN_ADDNI
) : /* addn $u4,$Ri */
604 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
605 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
606 #define FLD(f) abuf->fields.sfmt_addi.f
607 int UNUSED written
= 0;
608 IADDR UNUSED pc
= abuf
->addr
;
609 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
612 SI opval
= ADDSI (* FLD (i_Ri
), FLD (f_u4
));
613 * FLD (i_Ri
) = opval
;
614 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
621 CASE (sem
, INSN_ADDN2
) : /* addn2 $m4,$Ri */
623 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
624 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
625 #define FLD(f) abuf->fields.sfmt_add2.f
626 int UNUSED written
= 0;
627 IADDR UNUSED pc
= abuf
->addr
;
628 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
631 SI opval
= ADDSI (* FLD (i_Ri
), FLD (f_m4
));
632 * FLD (i_Ri
) = opval
;
633 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
640 CASE (sem
, INSN_SUB
) : /* sub $Rj,$Ri */
642 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
643 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
644 #define FLD(f) abuf->fields.sfmt_add.f
645 int UNUSED written
= 0;
646 IADDR UNUSED pc
= abuf
->addr
;
647 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
651 BI opval
= SUBOFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
652 CPU (h_vbit
) = opval
;
653 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
656 BI opval
= SUBCFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
657 CPU (h_cbit
) = opval
;
658 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
661 SI opval
= SUBSI (* FLD (i_Ri
), * FLD (i_Rj
));
662 * FLD (i_Ri
) = opval
;
663 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
667 BI opval
= EQSI (* FLD (i_Ri
), 0);
668 CPU (h_zbit
) = opval
;
669 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
672 BI opval
= LTSI (* FLD (i_Ri
), 0);
673 CPU (h_nbit
) = opval
;
674 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
683 CASE (sem
, INSN_SUBC
) : /* subc $Rj,$Ri */
685 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
686 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
687 #define FLD(f) abuf->fields.sfmt_add.f
688 int UNUSED written
= 0;
689 IADDR UNUSED pc
= abuf
->addr
;
690 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
694 tmp_tmp
= SUBCSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
696 BI opval
= SUBOFSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
697 CPU (h_vbit
) = opval
;
698 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
701 BI opval
= SUBCFSI (* FLD (i_Ri
), * FLD (i_Rj
), CPU (h_cbit
));
702 CPU (h_cbit
) = opval
;
703 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
707 * FLD (i_Ri
) = opval
;
708 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
712 BI opval
= EQSI (* FLD (i_Ri
), 0);
713 CPU (h_zbit
) = opval
;
714 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
717 BI opval
= LTSI (* FLD (i_Ri
), 0);
718 CPU (h_nbit
) = opval
;
719 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
728 CASE (sem
, INSN_SUBN
) : /* subn $Rj,$Ri */
730 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
731 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
732 #define FLD(f) abuf->fields.sfmt_add.f
733 int UNUSED written
= 0;
734 IADDR UNUSED pc
= abuf
->addr
;
735 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
738 SI opval
= SUBSI (* FLD (i_Ri
), * FLD (i_Rj
));
739 * FLD (i_Ri
) = opval
;
740 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
747 CASE (sem
, INSN_CMP
) : /* cmp $Rj,$Ri */
749 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
750 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
751 #define FLD(f) abuf->fields.sfmt_str13.f
752 int UNUSED written
= 0;
753 IADDR UNUSED pc
= abuf
->addr
;
754 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
759 BI opval
= SUBOFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
760 CPU (h_vbit
) = opval
;
761 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
764 BI opval
= SUBCFSI (* FLD (i_Ri
), * FLD (i_Rj
), 0);
765 CPU (h_cbit
) = opval
;
766 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
768 tmp_tmp1
= SUBSI (* FLD (i_Ri
), * FLD (i_Rj
));
771 BI opval
= EQSI (tmp_tmp1
, 0);
772 CPU (h_zbit
) = opval
;
773 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
776 BI opval
= LTSI (tmp_tmp1
, 0);
777 CPU (h_nbit
) = opval
;
778 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
787 CASE (sem
, INSN_CMPI
) : /* cmp $u4,$Ri */
789 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
790 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
791 #define FLD(f) abuf->fields.sfmt_addi.f
792 int UNUSED written
= 0;
793 IADDR UNUSED pc
= abuf
->addr
;
794 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
799 BI opval
= SUBOFSI (* FLD (i_Ri
), FLD (f_u4
), 0);
800 CPU (h_vbit
) = opval
;
801 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
804 BI opval
= SUBCFSI (* FLD (i_Ri
), FLD (f_u4
), 0);
805 CPU (h_cbit
) = opval
;
806 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
808 tmp_tmp1
= SUBSI (* FLD (i_Ri
), FLD (f_u4
));
811 BI opval
= EQSI (tmp_tmp1
, 0);
812 CPU (h_zbit
) = opval
;
813 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
816 BI opval
= LTSI (tmp_tmp1
, 0);
817 CPU (h_nbit
) = opval
;
818 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
827 CASE (sem
, INSN_CMP2
) : /* cmp2 $m4,$Ri */
829 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
830 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
831 #define FLD(f) abuf->fields.sfmt_add2.f
832 int UNUSED written
= 0;
833 IADDR UNUSED pc
= abuf
->addr
;
834 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
839 BI opval
= SUBOFSI (* FLD (i_Ri
), FLD (f_m4
), 0);
840 CPU (h_vbit
) = opval
;
841 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
844 BI opval
= SUBCFSI (* FLD (i_Ri
), FLD (f_m4
), 0);
845 CPU (h_cbit
) = opval
;
846 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
848 tmp_tmp1
= SUBSI (* FLD (i_Ri
), FLD (f_m4
));
851 BI opval
= EQSI (tmp_tmp1
, 0);
852 CPU (h_zbit
) = opval
;
853 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
856 BI opval
= LTSI (tmp_tmp1
, 0);
857 CPU (h_nbit
) = opval
;
858 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
867 CASE (sem
, INSN_AND
) : /* and $Rj,$Ri */
869 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
870 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
871 #define FLD(f) abuf->fields.sfmt_add.f
872 int UNUSED written
= 0;
873 IADDR UNUSED pc
= abuf
->addr
;
874 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
878 SI opval
= ANDSI (* FLD (i_Ri
), * FLD (i_Rj
));
879 * FLD (i_Ri
) = opval
;
880 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
884 BI opval
= EQSI (* FLD (i_Ri
), 0);
885 CPU (h_zbit
) = opval
;
886 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
889 BI opval
= LTSI (* FLD (i_Ri
), 0);
890 CPU (h_nbit
) = opval
;
891 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
900 CASE (sem
, INSN_OR
) : /* or $Rj,$Ri */
902 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
903 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
904 #define FLD(f) abuf->fields.sfmt_add.f
905 int UNUSED written
= 0;
906 IADDR UNUSED pc
= abuf
->addr
;
907 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
911 SI opval
= ORSI (* FLD (i_Ri
), * FLD (i_Rj
));
912 * FLD (i_Ri
) = opval
;
913 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
917 BI opval
= EQSI (* FLD (i_Ri
), 0);
918 CPU (h_zbit
) = opval
;
919 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
922 BI opval
= LTSI (* FLD (i_Ri
), 0);
923 CPU (h_nbit
) = opval
;
924 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
933 CASE (sem
, INSN_EOR
) : /* eor $Rj,$Ri */
935 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
936 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
937 #define FLD(f) abuf->fields.sfmt_add.f
938 int UNUSED written
= 0;
939 IADDR UNUSED pc
= abuf
->addr
;
940 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
944 SI opval
= XORSI (* FLD (i_Ri
), * FLD (i_Rj
));
945 * FLD (i_Ri
) = opval
;
946 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
950 BI opval
= EQSI (* FLD (i_Ri
), 0);
951 CPU (h_zbit
) = opval
;
952 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
955 BI opval
= LTSI (* FLD (i_Ri
), 0);
956 CPU (h_nbit
) = opval
;
957 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
966 CASE (sem
, INSN_ANDM
) : /* and $Rj,@$Ri */
968 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
969 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
970 #define FLD(f) abuf->fields.sfmt_str13.f
971 int UNUSED written
= 0;
972 IADDR UNUSED pc
= abuf
->addr
;
973 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
977 tmp_tmp
= ANDSI (GETMEMSI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
980 BI opval
= EQSI (tmp_tmp
, 0);
981 CPU (h_zbit
) = opval
;
982 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
985 BI opval
= LTSI (tmp_tmp
, 0);
986 CPU (h_nbit
) = opval
;
987 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
992 SETMEMSI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
993 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1001 CASE (sem
, INSN_ANDH
) : /* andh $Rj,@$Ri */
1003 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1004 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1005 #define FLD(f) abuf->fields.sfmt_str13.f
1006 int UNUSED written
= 0;
1007 IADDR UNUSED pc
= abuf
->addr
;
1008 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1012 tmp_tmp
= ANDHI (GETMEMHI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1015 BI opval
= EQHI (tmp_tmp
, 0);
1016 CPU (h_zbit
) = opval
;
1017 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1020 BI opval
= LTHI (tmp_tmp
, 0);
1021 CPU (h_nbit
) = opval
;
1022 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1027 SETMEMHI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1028 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1036 CASE (sem
, INSN_ANDB
) : /* andb $Rj,@$Ri */
1038 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1039 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1040 #define FLD(f) abuf->fields.sfmt_str13.f
1041 int UNUSED written
= 0;
1042 IADDR UNUSED pc
= abuf
->addr
;
1043 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1047 tmp_tmp
= ANDQI (GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1050 BI opval
= EQQI (tmp_tmp
, 0);
1051 CPU (h_zbit
) = opval
;
1052 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1055 BI opval
= LTQI (tmp_tmp
, 0);
1056 CPU (h_nbit
) = opval
;
1057 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1062 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1063 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1071 CASE (sem
, INSN_ORM
) : /* or $Rj,@$Ri */
1073 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1074 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1075 #define FLD(f) abuf->fields.sfmt_str13.f
1076 int UNUSED written
= 0;
1077 IADDR UNUSED pc
= abuf
->addr
;
1078 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1082 tmp_tmp
= ORSI (GETMEMSI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1085 BI opval
= EQSI (tmp_tmp
, 0);
1086 CPU (h_zbit
) = opval
;
1087 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1090 BI opval
= LTSI (tmp_tmp
, 0);
1091 CPU (h_nbit
) = opval
;
1092 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1097 SETMEMSI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1098 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1106 CASE (sem
, INSN_ORH
) : /* orh $Rj,@$Ri */
1108 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1109 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1110 #define FLD(f) abuf->fields.sfmt_str13.f
1111 int UNUSED written
= 0;
1112 IADDR UNUSED pc
= abuf
->addr
;
1113 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1117 tmp_tmp
= ORHI (GETMEMHI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1120 BI opval
= EQHI (tmp_tmp
, 0);
1121 CPU (h_zbit
) = opval
;
1122 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1125 BI opval
= LTHI (tmp_tmp
, 0);
1126 CPU (h_nbit
) = opval
;
1127 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1132 SETMEMHI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1133 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1141 CASE (sem
, INSN_ORB
) : /* orb $Rj,@$Ri */
1143 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1144 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1145 #define FLD(f) abuf->fields.sfmt_str13.f
1146 int UNUSED written
= 0;
1147 IADDR UNUSED pc
= abuf
->addr
;
1148 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1152 tmp_tmp
= ORQI (GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1155 BI opval
= EQQI (tmp_tmp
, 0);
1156 CPU (h_zbit
) = opval
;
1157 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1160 BI opval
= LTQI (tmp_tmp
, 0);
1161 CPU (h_nbit
) = opval
;
1162 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1167 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1168 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1176 CASE (sem
, INSN_EORM
) : /* eor $Rj,@$Ri */
1178 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1179 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1180 #define FLD(f) abuf->fields.sfmt_str13.f
1181 int UNUSED written
= 0;
1182 IADDR UNUSED pc
= abuf
->addr
;
1183 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1187 tmp_tmp
= XORSI (GETMEMSI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1190 BI opval
= EQSI (tmp_tmp
, 0);
1191 CPU (h_zbit
) = opval
;
1192 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1195 BI opval
= LTSI (tmp_tmp
, 0);
1196 CPU (h_nbit
) = opval
;
1197 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1202 SETMEMSI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1203 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1211 CASE (sem
, INSN_EORH
) : /* eorh $Rj,@$Ri */
1213 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1214 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1215 #define FLD(f) abuf->fields.sfmt_str13.f
1216 int UNUSED written
= 0;
1217 IADDR UNUSED pc
= abuf
->addr
;
1218 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1222 tmp_tmp
= XORHI (GETMEMHI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1225 BI opval
= EQHI (tmp_tmp
, 0);
1226 CPU (h_zbit
) = opval
;
1227 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1230 BI opval
= LTHI (tmp_tmp
, 0);
1231 CPU (h_nbit
) = opval
;
1232 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1237 SETMEMHI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1238 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1246 CASE (sem
, INSN_EORB
) : /* eorb $Rj,@$Ri */
1248 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1249 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1250 #define FLD(f) abuf->fields.sfmt_str13.f
1251 int UNUSED written
= 0;
1252 IADDR UNUSED pc
= abuf
->addr
;
1253 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1257 tmp_tmp
= XORQI (GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)), * FLD (i_Rj
));
1260 BI opval
= EQQI (tmp_tmp
, 0);
1261 CPU (h_zbit
) = opval
;
1262 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1265 BI opval
= LTQI (tmp_tmp
, 0);
1266 CPU (h_nbit
) = opval
;
1267 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1272 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1273 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1281 CASE (sem
, INSN_BANDL
) : /* bandl $u4,@$Ri */
1283 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1284 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1285 #define FLD(f) abuf->fields.sfmt_addi.f
1286 int UNUSED written
= 0;
1287 IADDR UNUSED pc
= abuf
->addr
;
1288 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1291 QI opval
= ANDQI (ORQI (FLD (f_u4
), 240), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1292 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1293 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1300 CASE (sem
, INSN_BORL
) : /* borl $u4,@$Ri */
1302 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1303 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1304 #define FLD(f) abuf->fields.sfmt_addi.f
1305 int UNUSED written
= 0;
1306 IADDR UNUSED pc
= abuf
->addr
;
1307 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1310 QI opval
= ORQI (FLD (f_u4
), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1311 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1312 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1319 CASE (sem
, INSN_BEORL
) : /* beorl $u4,@$Ri */
1321 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1322 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1323 #define FLD(f) abuf->fields.sfmt_addi.f
1324 int UNUSED written
= 0;
1325 IADDR UNUSED pc
= abuf
->addr
;
1326 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1329 QI opval
= XORQI (FLD (f_u4
), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1330 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1331 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1338 CASE (sem
, INSN_BANDH
) : /* bandh $u4,@$Ri */
1340 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1341 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1342 #define FLD(f) abuf->fields.sfmt_addi.f
1343 int UNUSED written
= 0;
1344 IADDR UNUSED pc
= abuf
->addr
;
1345 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1348 QI opval
= ANDQI (ORQI (SLLQI (FLD (f_u4
), 4), 15), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1349 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1350 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1357 CASE (sem
, INSN_BORH
) : /* borh $u4,@$Ri */
1359 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1360 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1361 #define FLD(f) abuf->fields.sfmt_addi.f
1362 int UNUSED written
= 0;
1363 IADDR UNUSED pc
= abuf
->addr
;
1364 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1367 QI opval
= ORQI (SLLQI (FLD (f_u4
), 4), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1368 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1369 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1376 CASE (sem
, INSN_BEORH
) : /* beorh $u4,@$Ri */
1378 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1379 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1380 #define FLD(f) abuf->fields.sfmt_addi.f
1381 int UNUSED written
= 0;
1382 IADDR UNUSED pc
= abuf
->addr
;
1383 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1386 QI opval
= XORQI (SLLQI (FLD (f_u4
), 4), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1387 SETMEMQI (current_cpu
, pc
, * FLD (i_Ri
), opval
);
1388 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1395 CASE (sem
, INSN_BTSTL
) : /* btstl $u4,@$Ri */
1397 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1398 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1399 #define FLD(f) abuf->fields.sfmt_addi.f
1400 int UNUSED written
= 0;
1401 IADDR UNUSED pc
= abuf
->addr
;
1402 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1406 tmp_tmp
= ANDQI (FLD (f_u4
), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1408 BI opval
= EQQI (tmp_tmp
, 0);
1409 CPU (h_zbit
) = opval
;
1410 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1414 CPU (h_nbit
) = opval
;
1415 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1423 CASE (sem
, INSN_BTSTH
) : /* btsth $u4,@$Ri */
1425 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1426 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1427 #define FLD(f) abuf->fields.sfmt_addi.f
1428 int UNUSED written
= 0;
1429 IADDR UNUSED pc
= abuf
->addr
;
1430 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1434 tmp_tmp
= ANDQI (SLLQI (FLD (f_u4
), 4), GETMEMQI (current_cpu
, pc
, * FLD (i_Ri
)));
1436 BI opval
= EQQI (tmp_tmp
, 0);
1437 CPU (h_zbit
) = opval
;
1438 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1441 BI opval
= LTQI (tmp_tmp
, 0);
1442 CPU (h_nbit
) = opval
;
1443 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1451 CASE (sem
, INSN_MUL
) : /* mul $Rj,$Ri */
1453 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1454 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1455 #define FLD(f) abuf->fields.sfmt_str13.f
1456 int UNUSED written
= 0;
1457 IADDR UNUSED pc
= abuf
->addr
;
1458 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1462 tmp_tmp
= MULDI (EXTSIDI (* FLD (i_Rj
)), EXTSIDI (* FLD (i_Ri
)));
1464 SI opval
= TRUNCDISI (tmp_tmp
);
1465 SET_H_DR (((UINT
) 5), opval
);
1466 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1469 SI opval
= TRUNCDISI (SRLDI (tmp_tmp
, 32));
1470 SET_H_DR (((UINT
) 4), opval
);
1471 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1474 BI opval
= LTSI (GET_H_DR (((UINT
) 5)), 0);
1475 CPU (h_nbit
) = opval
;
1476 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1479 BI opval
= EQDI (tmp_tmp
, MAKEDI (0, 0));
1480 CPU (h_zbit
) = opval
;
1481 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1484 BI opval
= ORIF (GTDI (tmp_tmp
, MAKEDI (0, 2147483647)), LTDI (tmp_tmp
, NEGDI (MAKEDI (0, 0x80000000))));
1485 CPU (h_vbit
) = opval
;
1486 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
1494 CASE (sem
, INSN_MULU
) : /* mulu $Rj,$Ri */
1496 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1497 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1498 #define FLD(f) abuf->fields.sfmt_str13.f
1499 int UNUSED written
= 0;
1500 IADDR UNUSED pc
= abuf
->addr
;
1501 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1505 tmp_tmp
= MULDI (ZEXTSIDI (* FLD (i_Rj
)), ZEXTSIDI (* FLD (i_Ri
)));
1507 SI opval
= TRUNCDISI (tmp_tmp
);
1508 SET_H_DR (((UINT
) 5), opval
);
1509 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1512 SI opval
= TRUNCDISI (SRLDI (tmp_tmp
, 32));
1513 SET_H_DR (((UINT
) 4), opval
);
1514 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1517 BI opval
= LTSI (GET_H_DR (((UINT
) 4)), 0);
1518 CPU (h_nbit
) = opval
;
1519 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1522 BI opval
= EQSI (GET_H_DR (((UINT
) 5)), 0);
1523 CPU (h_zbit
) = opval
;
1524 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1527 BI opval
= NESI (GET_H_DR (((UINT
) 4)), 0);
1528 CPU (h_vbit
) = opval
;
1529 TRACE_RESULT (current_cpu
, abuf
, "vbit", 'x', opval
);
1537 CASE (sem
, INSN_MULH
) : /* mulh $Rj,$Ri */
1539 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1540 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1541 #define FLD(f) abuf->fields.sfmt_str13.f
1542 int UNUSED written
= 0;
1543 IADDR UNUSED pc
= abuf
->addr
;
1544 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1548 SI opval
= MULHI (TRUNCSIHI (* FLD (i_Rj
)), TRUNCSIHI (* FLD (i_Ri
)));
1549 SET_H_DR (((UINT
) 5), opval
);
1550 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1553 BI opval
= LTSI (GET_H_DR (((UINT
) 5)), 0);
1554 CPU (h_nbit
) = opval
;
1555 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1558 BI opval
= GESI (GET_H_DR (((UINT
) 5)), 0);
1559 CPU (h_zbit
) = opval
;
1560 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1568 CASE (sem
, INSN_MULUH
) : /* muluh $Rj,$Ri */
1570 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1571 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1572 #define FLD(f) abuf->fields.sfmt_str13.f
1573 int UNUSED written
= 0;
1574 IADDR UNUSED pc
= abuf
->addr
;
1575 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1579 SI opval
= MULSI (ANDSI (* FLD (i_Rj
), 65535), ANDSI (* FLD (i_Ri
), 65535));
1580 SET_H_DR (((UINT
) 5), opval
);
1581 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1584 BI opval
= LTSI (GET_H_DR (((UINT
) 5)), 0);
1585 CPU (h_nbit
) = opval
;
1586 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1589 BI opval
= GESI (GET_H_DR (((UINT
) 5)), 0);
1590 CPU (h_zbit
) = opval
;
1591 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1599 CASE (sem
, INSN_DIV0S
) : /* div0s $Ri */
1601 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1602 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1603 #define FLD(f) abuf->fields.sfmt_mov2dr.f
1604 int UNUSED written
= 0;
1605 IADDR UNUSED pc
= abuf
->addr
;
1606 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1610 BI opval
= LTSI (GET_H_DR (((UINT
) 5)), 0);
1611 CPU (h_d0bit
) = opval
;
1612 TRACE_RESULT (current_cpu
, abuf
, "d0bit", 'x', opval
);
1615 BI opval
= XORBI (CPU (h_d0bit
), LTSI (* FLD (i_Ri
), 0));
1616 CPU (h_d1bit
) = opval
;
1617 TRACE_RESULT (current_cpu
, abuf
, "d1bit", 'x', opval
);
1619 if (NEBI (CPU (h_d0bit
), 0)) {
1621 SI opval
= 0xffffffff;
1622 SET_H_DR (((UINT
) 4), opval
);
1623 written
|= (1 << 5);
1624 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1629 SET_H_DR (((UINT
) 4), opval
);
1630 written
|= (1 << 5);
1631 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1636 abuf
->written
= written
;
1641 CASE (sem
, INSN_DIV0U
) : /* div0u $Ri */
1643 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1644 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1645 #define FLD(f) abuf->fields.fmt_empty.f
1646 int UNUSED written
= 0;
1647 IADDR UNUSED pc
= abuf
->addr
;
1648 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1653 CPU (h_d0bit
) = opval
;
1654 TRACE_RESULT (current_cpu
, abuf
, "d0bit", 'x', opval
);
1658 CPU (h_d1bit
) = opval
;
1659 TRACE_RESULT (current_cpu
, abuf
, "d1bit", 'x', opval
);
1663 SET_H_DR (((UINT
) 4), opval
);
1664 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1672 CASE (sem
, INSN_DIV1
) : /* div1 $Ri */
1674 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1675 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1676 #define FLD(f) abuf->fields.sfmt_mov2dr.f
1677 int UNUSED written
= 0;
1678 IADDR UNUSED pc
= abuf
->addr
;
1679 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1684 SI opval
= SLLSI (GET_H_DR (((UINT
) 4)), 1);
1685 SET_H_DR (((UINT
) 4), opval
);
1686 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1688 if (LTSI (GET_H_DR (((UINT
) 5)), 0)) {
1690 SI opval
= ADDSI (GET_H_DR (((UINT
) 4)), 1);
1691 SET_H_DR (((UINT
) 4), opval
);
1692 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1696 SI opval
= SLLSI (GET_H_DR (((UINT
) 5)), 1);
1697 SET_H_DR (((UINT
) 5), opval
);
1698 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1700 if (EQBI (CPU (h_d1bit
), 1)) {
1702 tmp_tmp
= ADDSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
));
1704 BI opval
= ADDCFSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
), 0);
1705 CPU (h_cbit
) = opval
;
1706 written
|= (1 << 6);
1707 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1712 tmp_tmp
= SUBSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
));
1714 BI opval
= SUBCFSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
), 0);
1715 CPU (h_cbit
) = opval
;
1716 written
|= (1 << 6);
1717 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1721 if (NOTBI (XORBI (XORBI (CPU (h_d0bit
), CPU (h_d1bit
)), CPU (h_cbit
)))) {
1725 SET_H_DR (((UINT
) 4), opval
);
1726 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1729 SI opval
= ORSI (GET_H_DR (((UINT
) 5)), 1);
1730 SET_H_DR (((UINT
) 5), opval
);
1731 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1736 BI opval
= EQSI (GET_H_DR (((UINT
) 4)), 0);
1737 CPU (h_zbit
) = opval
;
1738 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1742 abuf
->written
= written
;
1747 CASE (sem
, INSN_DIV2
) : /* div2 $Ri */
1749 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1750 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1751 #define FLD(f) abuf->fields.sfmt_mov2dr.f
1752 int UNUSED written
= 0;
1753 IADDR UNUSED pc
= abuf
->addr
;
1754 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1758 if (EQBI (CPU (h_d1bit
), 1)) {
1760 tmp_tmp
= ADDSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
));
1762 BI opval
= ADDCFSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
), 0);
1763 CPU (h_cbit
) = opval
;
1764 written
|= (1 << 3);
1765 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1770 tmp_tmp
= SUBSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
));
1772 BI opval
= SUBCFSI (GET_H_DR (((UINT
) 4)), * FLD (i_Ri
), 0);
1773 CPU (h_cbit
) = opval
;
1774 written
|= (1 << 3);
1775 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1779 if (EQSI (tmp_tmp
, 0)) {
1783 CPU (h_zbit
) = opval
;
1784 written
|= (1 << 5);
1785 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1789 SET_H_DR (((UINT
) 4), opval
);
1790 written
|= (1 << 4);
1791 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1797 CPU (h_zbit
) = opval
;
1798 written
|= (1 << 5);
1799 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1804 abuf
->written
= written
;
1809 CASE (sem
, INSN_DIV3
) : /* div3 */
1811 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1812 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1813 #define FLD(f) abuf->fields.fmt_empty.f
1814 int UNUSED written
= 0;
1815 IADDR UNUSED pc
= abuf
->addr
;
1816 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1818 if (EQBI (CPU (h_zbit
), 1)) {
1820 SI opval
= ADDSI (GET_H_DR (((UINT
) 5)), 1);
1821 SET_H_DR (((UINT
) 5), opval
);
1822 written
|= (1 << 2);
1823 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1827 abuf
->written
= written
;
1832 CASE (sem
, INSN_DIV4S
) : /* div4s */
1834 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1835 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1836 #define FLD(f) abuf->fields.fmt_empty.f
1837 int UNUSED written
= 0;
1838 IADDR UNUSED pc
= abuf
->addr
;
1839 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1841 if (EQBI (CPU (h_d1bit
), 1)) {
1843 SI opval
= NEGSI (GET_H_DR (((UINT
) 5)));
1844 SET_H_DR (((UINT
) 5), opval
);
1845 written
|= (1 << 2);
1846 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
1850 abuf
->written
= written
;
1855 CASE (sem
, INSN_LSL
) : /* lsl $Rj,$Ri */
1857 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1858 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1859 #define FLD(f) abuf->fields.sfmt_add.f
1860 int UNUSED written
= 0;
1861 IADDR UNUSED pc
= abuf
->addr
;
1862 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1866 tmp_shift
= ANDSI (* FLD (i_Rj
), 31);
1867 if (NESI (tmp_shift
, 0)) {
1870 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (32, tmp_shift
))), 0);
1871 CPU (h_cbit
) = opval
;
1872 written
|= (1 << 3);
1873 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1876 SI opval
= SLLSI (* FLD (i_Ri
), tmp_shift
);
1877 * FLD (i_Ri
) = opval
;
1878 written
|= (1 << 2);
1879 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1885 CPU (h_cbit
) = opval
;
1886 written
|= (1 << 3);
1887 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1891 BI opval
= LTSI (* FLD (i_Ri
), 0);
1892 CPU (h_nbit
) = opval
;
1893 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1896 BI opval
= EQSI (* FLD (i_Ri
), 0);
1897 CPU (h_zbit
) = opval
;
1898 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1902 abuf
->written
= written
;
1907 CASE (sem
, INSN_LSLI
) : /* lsl $u4,$Ri */
1909 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1910 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1911 #define FLD(f) abuf->fields.sfmt_addi.f
1912 int UNUSED written
= 0;
1913 IADDR UNUSED pc
= abuf
->addr
;
1914 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1918 tmp_shift
= FLD (f_u4
);
1919 if (NESI (tmp_shift
, 0)) {
1922 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (32, tmp_shift
))), 0);
1923 CPU (h_cbit
) = opval
;
1924 written
|= (1 << 3);
1925 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1928 SI opval
= SLLSI (* FLD (i_Ri
), tmp_shift
);
1929 * FLD (i_Ri
) = opval
;
1930 written
|= (1 << 2);
1931 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1937 CPU (h_cbit
) = opval
;
1938 written
|= (1 << 3);
1939 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1943 BI opval
= LTSI (* FLD (i_Ri
), 0);
1944 CPU (h_nbit
) = opval
;
1945 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
1948 BI opval
= EQSI (* FLD (i_Ri
), 0);
1949 CPU (h_zbit
) = opval
;
1950 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
1954 abuf
->written
= written
;
1959 CASE (sem
, INSN_LSL2
) : /* lsl2 $u4,$Ri */
1961 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1962 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1963 #define FLD(f) abuf->fields.sfmt_addi.f
1964 int UNUSED written
= 0;
1965 IADDR UNUSED pc
= abuf
->addr
;
1966 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1970 tmp_shift
= ADDSI (FLD (f_u4
), 16);
1971 if (NESI (tmp_shift
, 0)) {
1974 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (32, tmp_shift
))), 0);
1975 CPU (h_cbit
) = opval
;
1976 written
|= (1 << 3);
1977 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1980 SI opval
= SLLSI (* FLD (i_Ri
), tmp_shift
);
1981 * FLD (i_Ri
) = opval
;
1982 written
|= (1 << 2);
1983 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1989 CPU (h_cbit
) = opval
;
1990 written
|= (1 << 3);
1991 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
1995 BI opval
= LTSI (* FLD (i_Ri
), 0);
1996 CPU (h_nbit
) = opval
;
1997 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2000 BI opval
= EQSI (* FLD (i_Ri
), 0);
2001 CPU (h_zbit
) = opval
;
2002 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2006 abuf
->written
= written
;
2011 CASE (sem
, INSN_LSR
) : /* lsr $Rj,$Ri */
2013 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2014 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2015 #define FLD(f) abuf->fields.sfmt_add.f
2016 int UNUSED written
= 0;
2017 IADDR UNUSED pc
= abuf
->addr
;
2018 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2022 tmp_shift
= ANDSI (* FLD (i_Rj
), 31);
2023 if (NESI (tmp_shift
, 0)) {
2026 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2027 CPU (h_cbit
) = opval
;
2028 written
|= (1 << 3);
2029 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2032 SI opval
= SRLSI (* FLD (i_Ri
), tmp_shift
);
2033 * FLD (i_Ri
) = opval
;
2034 written
|= (1 << 2);
2035 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2041 CPU (h_cbit
) = opval
;
2042 written
|= (1 << 3);
2043 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2047 BI opval
= LTSI (* FLD (i_Ri
), 0);
2048 CPU (h_nbit
) = opval
;
2049 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2052 BI opval
= EQSI (* FLD (i_Ri
), 0);
2053 CPU (h_zbit
) = opval
;
2054 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2058 abuf
->written
= written
;
2063 CASE (sem
, INSN_LSRI
) : /* lsr $u4,$Ri */
2065 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2066 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2067 #define FLD(f) abuf->fields.sfmt_addi.f
2068 int UNUSED written
= 0;
2069 IADDR UNUSED pc
= abuf
->addr
;
2070 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2074 tmp_shift
= FLD (f_u4
);
2075 if (NESI (tmp_shift
, 0)) {
2078 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2079 CPU (h_cbit
) = opval
;
2080 written
|= (1 << 3);
2081 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2084 SI opval
= SRLSI (* FLD (i_Ri
), tmp_shift
);
2085 * FLD (i_Ri
) = opval
;
2086 written
|= (1 << 2);
2087 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2093 CPU (h_cbit
) = opval
;
2094 written
|= (1 << 3);
2095 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2099 BI opval
= LTSI (* FLD (i_Ri
), 0);
2100 CPU (h_nbit
) = opval
;
2101 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2104 BI opval
= EQSI (* FLD (i_Ri
), 0);
2105 CPU (h_zbit
) = opval
;
2106 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2110 abuf
->written
= written
;
2115 CASE (sem
, INSN_LSR2
) : /* lsr2 $u4,$Ri */
2117 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2118 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2119 #define FLD(f) abuf->fields.sfmt_addi.f
2120 int UNUSED written
= 0;
2121 IADDR UNUSED pc
= abuf
->addr
;
2122 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2126 tmp_shift
= ADDSI (FLD (f_u4
), 16);
2127 if (NESI (tmp_shift
, 0)) {
2130 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2131 CPU (h_cbit
) = opval
;
2132 written
|= (1 << 3);
2133 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2136 SI opval
= SRLSI (* FLD (i_Ri
), tmp_shift
);
2137 * FLD (i_Ri
) = opval
;
2138 written
|= (1 << 2);
2139 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2145 CPU (h_cbit
) = opval
;
2146 written
|= (1 << 3);
2147 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2151 BI opval
= LTSI (* FLD (i_Ri
), 0);
2152 CPU (h_nbit
) = opval
;
2153 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2156 BI opval
= EQSI (* FLD (i_Ri
), 0);
2157 CPU (h_zbit
) = opval
;
2158 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2162 abuf
->written
= written
;
2167 CASE (sem
, INSN_ASR
) : /* asr $Rj,$Ri */
2169 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2170 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2171 #define FLD(f) abuf->fields.sfmt_add.f
2172 int UNUSED written
= 0;
2173 IADDR UNUSED pc
= abuf
->addr
;
2174 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2178 tmp_shift
= ANDSI (* FLD (i_Rj
), 31);
2179 if (NESI (tmp_shift
, 0)) {
2182 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2183 CPU (h_cbit
) = opval
;
2184 written
|= (1 << 3);
2185 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2188 SI opval
= SRASI (* FLD (i_Ri
), tmp_shift
);
2189 * FLD (i_Ri
) = opval
;
2190 written
|= (1 << 2);
2191 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2197 CPU (h_cbit
) = opval
;
2198 written
|= (1 << 3);
2199 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2203 BI opval
= LTSI (* FLD (i_Ri
), 0);
2204 CPU (h_nbit
) = opval
;
2205 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2208 BI opval
= EQSI (* FLD (i_Ri
), 0);
2209 CPU (h_zbit
) = opval
;
2210 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2214 abuf
->written
= written
;
2219 CASE (sem
, INSN_ASRI
) : /* asr $u4,$Ri */
2221 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2222 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2223 #define FLD(f) abuf->fields.sfmt_addi.f
2224 int UNUSED written
= 0;
2225 IADDR UNUSED pc
= abuf
->addr
;
2226 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2230 tmp_shift
= FLD (f_u4
);
2231 if (NESI (tmp_shift
, 0)) {
2234 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2235 CPU (h_cbit
) = opval
;
2236 written
|= (1 << 3);
2237 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2240 SI opval
= SRASI (* FLD (i_Ri
), tmp_shift
);
2241 * FLD (i_Ri
) = opval
;
2242 written
|= (1 << 2);
2243 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2249 CPU (h_cbit
) = opval
;
2250 written
|= (1 << 3);
2251 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2255 BI opval
= LTSI (* FLD (i_Ri
), 0);
2256 CPU (h_nbit
) = opval
;
2257 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2260 BI opval
= EQSI (* FLD (i_Ri
), 0);
2261 CPU (h_zbit
) = opval
;
2262 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2266 abuf
->written
= written
;
2271 CASE (sem
, INSN_ASR2
) : /* asr2 $u4,$Ri */
2273 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2274 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2275 #define FLD(f) abuf->fields.sfmt_addi.f
2276 int UNUSED written
= 0;
2277 IADDR UNUSED pc
= abuf
->addr
;
2278 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2282 tmp_shift
= ADDSI (FLD (f_u4
), 16);
2283 if (NESI (tmp_shift
, 0)) {
2286 BI opval
= NESI (ANDSI (* FLD (i_Ri
), SLLSI (1, SUBSI (tmp_shift
, 1))), 0);
2287 CPU (h_cbit
) = opval
;
2288 written
|= (1 << 3);
2289 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2292 SI opval
= SRASI (* FLD (i_Ri
), tmp_shift
);
2293 * FLD (i_Ri
) = opval
;
2294 written
|= (1 << 2);
2295 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2301 CPU (h_cbit
) = opval
;
2302 written
|= (1 << 3);
2303 TRACE_RESULT (current_cpu
, abuf
, "cbit", 'x', opval
);
2307 BI opval
= LTSI (* FLD (i_Ri
), 0);
2308 CPU (h_nbit
) = opval
;
2309 TRACE_RESULT (current_cpu
, abuf
, "nbit", 'x', opval
);
2312 BI opval
= EQSI (* FLD (i_Ri
), 0);
2313 CPU (h_zbit
) = opval
;
2314 TRACE_RESULT (current_cpu
, abuf
, "zbit", 'x', opval
);
2318 abuf
->written
= written
;
2323 CASE (sem
, INSN_LDI8
) : /* ldi:8 $i8,$Ri */
2325 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2326 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2327 #define FLD(f) abuf->fields.sfmt_ldi8.f
2328 int UNUSED written
= 0;
2329 IADDR UNUSED pc
= abuf
->addr
;
2330 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2333 SI opval
= FLD (f_i8
);
2334 * FLD (i_Ri
) = opval
;
2335 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2342 CASE (sem
, INSN_LDI20
) : /* ldi:20 $i20,$Ri */
2344 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2345 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2346 #define FLD(f) abuf->fields.sfmt_ldi20.f
2347 int UNUSED written
= 0;
2348 IADDR UNUSED pc
= abuf
->addr
;
2349 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2352 SI opval
= FLD (f_i20
);
2353 * FLD (i_Ri
) = opval
;
2354 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2361 CASE (sem
, INSN_LDI32
) : /* ldi:32 $i32,$Ri */
2363 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2364 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2365 #define FLD(f) abuf->fields.sfmt_ldi32.f
2366 int UNUSED written
= 0;
2367 IADDR UNUSED pc
= abuf
->addr
;
2368 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 6);
2371 SI opval
= FLD (f_i32
);
2372 * FLD (i_Ri
) = opval
;
2373 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2380 CASE (sem
, INSN_LD
) : /* ld @$Rj,$Ri */
2382 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2383 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2384 #define FLD(f) abuf->fields.sfmt_ldr13.f
2385 int UNUSED written
= 0;
2386 IADDR UNUSED pc
= abuf
->addr
;
2387 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2390 SI opval
= GETMEMSI (current_cpu
, pc
, * FLD (i_Rj
));
2391 * FLD (i_Ri
) = opval
;
2392 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2399 CASE (sem
, INSN_LDUH
) : /* lduh @$Rj,$Ri */
2401 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2402 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2403 #define FLD(f) abuf->fields.sfmt_ldr13.f
2404 int UNUSED written
= 0;
2405 IADDR UNUSED pc
= abuf
->addr
;
2406 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2409 SI opval
= GETMEMUHI (current_cpu
, pc
, * FLD (i_Rj
));
2410 * FLD (i_Ri
) = opval
;
2411 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2418 CASE (sem
, INSN_LDUB
) : /* ldub @$Rj,$Ri */
2420 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2421 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2422 #define FLD(f) abuf->fields.sfmt_ldr13.f
2423 int UNUSED written
= 0;
2424 IADDR UNUSED pc
= abuf
->addr
;
2425 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2428 SI opval
= GETMEMUQI (current_cpu
, pc
, * FLD (i_Rj
));
2429 * FLD (i_Ri
) = opval
;
2430 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2437 CASE (sem
, INSN_LDR13
) : /* ld @($R13,$Rj),$Ri */
2439 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2440 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2441 #define FLD(f) abuf->fields.sfmt_ldr13.f
2442 int UNUSED written
= 0;
2443 IADDR UNUSED pc
= abuf
->addr
;
2444 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2447 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])));
2448 * FLD (i_Ri
) = opval
;
2449 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2456 CASE (sem
, INSN_LDR13UH
) : /* lduh @($R13,$Rj),$Ri */
2458 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2459 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2460 #define FLD(f) abuf->fields.sfmt_ldr13.f
2461 int UNUSED written
= 0;
2462 IADDR UNUSED pc
= abuf
->addr
;
2463 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2466 SI opval
= GETMEMUHI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])));
2467 * FLD (i_Ri
) = opval
;
2468 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2475 CASE (sem
, INSN_LDR13UB
) : /* ldub @($R13,$Rj),$Ri */
2477 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2478 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2479 #define FLD(f) abuf->fields.sfmt_ldr13.f
2480 int UNUSED written
= 0;
2481 IADDR UNUSED pc
= abuf
->addr
;
2482 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2485 SI opval
= GETMEMUQI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])));
2486 * FLD (i_Ri
) = opval
;
2487 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2494 CASE (sem
, INSN_LDR14
) : /* ld @($R14,$disp10),$Ri */
2496 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2497 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2498 #define FLD(f) abuf->fields.sfmt_ldr14.f
2499 int UNUSED written
= 0;
2500 IADDR UNUSED pc
= abuf
->addr
;
2501 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2504 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_disp10
), CPU (h_gr
[((UINT
) 14)])));
2505 * FLD (i_Ri
) = opval
;
2506 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2513 CASE (sem
, INSN_LDR14UH
) : /* lduh @($R14,$disp9),$Ri */
2515 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2516 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2517 #define FLD(f) abuf->fields.sfmt_ldr14uh.f
2518 int UNUSED written
= 0;
2519 IADDR UNUSED pc
= abuf
->addr
;
2520 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2523 SI opval
= GETMEMUHI (current_cpu
, pc
, ADDSI (FLD (f_disp9
), CPU (h_gr
[((UINT
) 14)])));
2524 * FLD (i_Ri
) = opval
;
2525 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2532 CASE (sem
, INSN_LDR14UB
) : /* ldub @($R14,$disp8),$Ri */
2534 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2535 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2536 #define FLD(f) abuf->fields.sfmt_ldr14ub.f
2537 int UNUSED written
= 0;
2538 IADDR UNUSED pc
= abuf
->addr
;
2539 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2542 SI opval
= GETMEMUQI (current_cpu
, pc
, ADDSI (FLD (f_disp8
), CPU (h_gr
[((UINT
) 14)])));
2543 * FLD (i_Ri
) = opval
;
2544 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2551 CASE (sem
, INSN_LDR15
) : /* ld @($R15,$udisp6),$Ri */
2553 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2554 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2555 #define FLD(f) abuf->fields.sfmt_ldr15.f
2556 int UNUSED written
= 0;
2557 IADDR UNUSED pc
= abuf
->addr
;
2558 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2561 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_udisp6
), CPU (h_gr
[((UINT
) 15)])));
2562 * FLD (i_Ri
) = opval
;
2563 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2570 CASE (sem
, INSN_LDR15GR
) : /* ld @$R15+,$Ri */
2572 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2573 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2574 #define FLD(f) abuf->fields.sfmt_ldr15gr.f
2575 int UNUSED written
= 0;
2576 IADDR UNUSED pc
= abuf
->addr
;
2577 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2581 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
2582 * FLD (i_Ri
) = opval
;
2583 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2585 if (NESI (FLD (f_Ri
), 15)) {
2587 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
2588 CPU (h_gr
[((UINT
) 15)]) = opval
;
2589 written
|= (1 << 4);
2590 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2595 abuf
->written
= written
;
2600 CASE (sem
, INSN_LDR15DR
) : /* ld @$R15+,$Rs2 */
2602 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2603 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2604 #define FLD(f) abuf->fields.sfmt_ldr15dr.f
2605 int UNUSED written
= 0;
2606 IADDR UNUSED pc
= abuf
->addr
;
2607 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2611 tmp_tmp
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
2613 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
2614 CPU (h_gr
[((UINT
) 15)]) = opval
;
2615 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2619 SET_H_DR (FLD (f_Rs2
), opval
);
2620 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
2628 CASE (sem
, INSN_LDR15PS
) : /* ld @$R15+,$ps */
2630 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2631 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2632 #define FLD(f) abuf->fields.sfmt_addsp.f
2633 int UNUSED written
= 0;
2634 IADDR UNUSED pc
= abuf
->addr
;
2635 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2639 USI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
2641 TRACE_RESULT (current_cpu
, abuf
, "ps", 'x', opval
);
2644 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
2645 CPU (h_gr
[((UINT
) 15)]) = opval
;
2646 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2654 CASE (sem
, INSN_ST
) : /* st $Ri,@$Rj */
2656 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2657 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2658 #define FLD(f) abuf->fields.sfmt_str13.f
2659 int UNUSED written
= 0;
2660 IADDR UNUSED pc
= abuf
->addr
;
2661 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2664 SI opval
= * FLD (i_Ri
);
2665 SETMEMSI (current_cpu
, pc
, * FLD (i_Rj
), opval
);
2666 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2673 CASE (sem
, INSN_STH
) : /* sth $Ri,@$Rj */
2675 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2676 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2677 #define FLD(f) abuf->fields.sfmt_str13.f
2678 int UNUSED written
= 0;
2679 IADDR UNUSED pc
= abuf
->addr
;
2680 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2683 HI opval
= * FLD (i_Ri
);
2684 SETMEMHI (current_cpu
, pc
, * FLD (i_Rj
), opval
);
2685 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2692 CASE (sem
, INSN_STB
) : /* stb $Ri,@$Rj */
2694 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2695 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2696 #define FLD(f) abuf->fields.sfmt_str13.f
2697 int UNUSED written
= 0;
2698 IADDR UNUSED pc
= abuf
->addr
;
2699 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2702 QI opval
= * FLD (i_Ri
);
2703 SETMEMQI (current_cpu
, pc
, * FLD (i_Rj
), opval
);
2704 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2711 CASE (sem
, INSN_STR13
) : /* st $Ri,@($R13,$Rj) */
2713 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2714 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2715 #define FLD(f) abuf->fields.sfmt_str13.f
2716 int UNUSED written
= 0;
2717 IADDR UNUSED pc
= abuf
->addr
;
2718 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2721 SI opval
= * FLD (i_Ri
);
2722 SETMEMSI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])), opval
);
2723 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2730 CASE (sem
, INSN_STR13H
) : /* sth $Ri,@($R13,$Rj) */
2732 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2733 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2734 #define FLD(f) abuf->fields.sfmt_str13.f
2735 int UNUSED written
= 0;
2736 IADDR UNUSED pc
= abuf
->addr
;
2737 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2740 HI opval
= * FLD (i_Ri
);
2741 SETMEMHI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])), opval
);
2742 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2749 CASE (sem
, INSN_STR13B
) : /* stb $Ri,@($R13,$Rj) */
2751 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2752 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2753 #define FLD(f) abuf->fields.sfmt_str13.f
2754 int UNUSED written
= 0;
2755 IADDR UNUSED pc
= abuf
->addr
;
2756 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2759 QI opval
= * FLD (i_Ri
);
2760 SETMEMQI (current_cpu
, pc
, ADDSI (* FLD (i_Rj
), CPU (h_gr
[((UINT
) 13)])), opval
);
2761 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2768 CASE (sem
, INSN_STR14
) : /* st $Ri,@($R14,$disp10) */
2770 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2771 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2772 #define FLD(f) abuf->fields.sfmt_str14.f
2773 int UNUSED written
= 0;
2774 IADDR UNUSED pc
= abuf
->addr
;
2775 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2778 SI opval
= * FLD (i_Ri
);
2779 SETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_disp10
), CPU (h_gr
[((UINT
) 14)])), opval
);
2780 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2787 CASE (sem
, INSN_STR14H
) : /* sth $Ri,@($R14,$disp9) */
2789 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2790 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2791 #define FLD(f) abuf->fields.sfmt_str14h.f
2792 int UNUSED written
= 0;
2793 IADDR UNUSED pc
= abuf
->addr
;
2794 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2797 HI opval
= * FLD (i_Ri
);
2798 SETMEMHI (current_cpu
, pc
, ADDSI (FLD (f_disp9
), CPU (h_gr
[((UINT
) 14)])), opval
);
2799 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2806 CASE (sem
, INSN_STR14B
) : /* stb $Ri,@($R14,$disp8) */
2808 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2809 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2810 #define FLD(f) abuf->fields.sfmt_str14b.f
2811 int UNUSED written
= 0;
2812 IADDR UNUSED pc
= abuf
->addr
;
2813 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2816 QI opval
= * FLD (i_Ri
);
2817 SETMEMQI (current_cpu
, pc
, ADDSI (FLD (f_disp8
), CPU (h_gr
[((UINT
) 14)])), opval
);
2818 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2825 CASE (sem
, INSN_STR15
) : /* st $Ri,@($R15,$udisp6) */
2827 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2828 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2829 #define FLD(f) abuf->fields.sfmt_str15.f
2830 int UNUSED written
= 0;
2831 IADDR UNUSED pc
= abuf
->addr
;
2832 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2835 SI opval
= * FLD (i_Ri
);
2836 SETMEMSI (current_cpu
, pc
, ADDSI (CPU (h_gr
[((UINT
) 15)]), FLD (f_udisp6
)), opval
);
2837 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2844 CASE (sem
, INSN_STR15GR
) : /* st $Ri,@-$R15 */
2846 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2847 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2848 #define FLD(f) abuf->fields.sfmt_str15gr.f
2849 int UNUSED written
= 0;
2850 IADDR UNUSED pc
= abuf
->addr
;
2851 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2855 tmp_tmp
= * FLD (i_Ri
);
2857 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
2858 CPU (h_gr
[((UINT
) 15)]) = opval
;
2859 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2863 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
2864 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2872 CASE (sem
, INSN_STR15DR
) : /* st $Rs2,@-$R15 */
2874 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2875 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2876 #define FLD(f) abuf->fields.sfmt_ldr15dr.f
2877 int UNUSED written
= 0;
2878 IADDR UNUSED pc
= abuf
->addr
;
2879 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2883 tmp_tmp
= GET_H_DR (FLD (f_Rs2
));
2885 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
2886 CPU (h_gr
[((UINT
) 15)]) = opval
;
2887 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2891 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
2892 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2900 CASE (sem
, INSN_STR15PS
) : /* st $ps,@-$R15 */
2902 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2903 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2904 #define FLD(f) abuf->fields.sfmt_addsp.f
2905 int UNUSED written
= 0;
2906 IADDR UNUSED pc
= abuf
->addr
;
2907 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2911 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
2912 CPU (h_gr
[((UINT
) 15)]) = opval
;
2913 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2916 SI opval
= GET_H_PS ();
2917 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
2918 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2926 CASE (sem
, INSN_MOV
) : /* mov $Rj,$Ri */
2928 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2929 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2930 #define FLD(f) abuf->fields.sfmt_ldr13.f
2931 int UNUSED written
= 0;
2932 IADDR UNUSED pc
= abuf
->addr
;
2933 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2936 SI opval
= * FLD (i_Rj
);
2937 * FLD (i_Ri
) = opval
;
2938 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2945 CASE (sem
, INSN_MOVDR
) : /* mov $Rs1,$Ri */
2947 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2948 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2949 #define FLD(f) abuf->fields.sfmt_movdr.f
2950 int UNUSED written
= 0;
2951 IADDR UNUSED pc
= abuf
->addr
;
2952 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2955 SI opval
= GET_H_DR (FLD (f_Rs1
));
2956 * FLD (i_Ri
) = opval
;
2957 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2964 CASE (sem
, INSN_MOVPS
) : /* mov $ps,$Ri */
2966 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2967 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2968 #define FLD(f) abuf->fields.sfmt_movdr.f
2969 int UNUSED written
= 0;
2970 IADDR UNUSED pc
= abuf
->addr
;
2971 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2974 SI opval
= GET_H_PS ();
2975 * FLD (i_Ri
) = opval
;
2976 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2983 CASE (sem
, INSN_MOV2DR
) : /* mov $Ri,$Rs1 */
2985 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2986 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2987 #define FLD(f) abuf->fields.sfmt_mov2dr.f
2988 int UNUSED written
= 0;
2989 IADDR UNUSED pc
= abuf
->addr
;
2990 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2993 SI opval
= * FLD (i_Ri
);
2994 SET_H_DR (FLD (f_Rs1
), opval
);
2995 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
3002 CASE (sem
, INSN_MOV2PS
) : /* mov $Ri,$ps */
3004 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3005 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3006 #define FLD(f) abuf->fields.sfmt_mov2dr.f
3007 int UNUSED written
= 0;
3008 IADDR UNUSED pc
= abuf
->addr
;
3009 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3012 USI opval
= * FLD (i_Ri
);
3014 TRACE_RESULT (current_cpu
, abuf
, "ps", 'x', opval
);
3021 CASE (sem
, INSN_JMP
) : /* jmp @$Ri */
3023 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3024 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3025 #define FLD(f) abuf->fields.sfmt_mov2dr.f
3026 int UNUSED written
= 0;
3027 IADDR UNUSED pc
= abuf
->addr
;
3029 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3032 USI opval
= * FLD (i_Ri
);
3033 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3034 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3037 SEM_BRANCH_FINI (vpc
);
3042 CASE (sem
, INSN_JMPD
) : /* jmp:d @$Ri */
3044 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3045 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3046 #define FLD(f) abuf->fields.sfmt_mov2dr.f
3047 int UNUSED written
= 0;
3048 IADDR UNUSED pc
= abuf
->addr
;
3050 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3054 USI opval
= * FLD (i_Ri
);
3055 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3056 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3060 SEM_BRANCH_FINI (vpc
);
3065 CASE (sem
, INSN_CALLR
) : /* call @$Ri */
3067 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3068 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3069 #define FLD(f) abuf->fields.sfmt_mov2dr.f
3070 int UNUSED written
= 0;
3071 IADDR UNUSED pc
= abuf
->addr
;
3073 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3077 SI opval
= ADDSI (pc
, 2);
3078 SET_H_DR (((UINT
) 1), opval
);
3079 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
3082 USI opval
= * FLD (i_Ri
);
3083 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3084 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3088 SEM_BRANCH_FINI (vpc
);
3093 CASE (sem
, INSN_CALLRD
) : /* call:d @$Ri */
3095 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3096 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3097 #define FLD(f) abuf->fields.sfmt_mov2dr.f
3098 int UNUSED written
= 0;
3099 IADDR UNUSED pc
= abuf
->addr
;
3101 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3106 SI opval
= ADDSI (pc
, 4);
3107 SET_H_DR (((UINT
) 1), opval
);
3108 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
3111 USI opval
= * FLD (i_Ri
);
3112 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3113 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3118 SEM_BRANCH_FINI (vpc
);
3123 CASE (sem
, INSN_CALL
) : /* call $label12 */
3125 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3126 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3127 #define FLD(f) abuf->fields.sfmt_call.f
3128 int UNUSED written
= 0;
3129 IADDR UNUSED pc
= abuf
->addr
;
3131 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3135 SI opval
= ADDSI (pc
, 2);
3136 SET_H_DR (((UINT
) 1), opval
);
3137 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
3140 USI opval
= FLD (i_label12
);
3141 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3142 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3146 SEM_BRANCH_FINI (vpc
);
3151 CASE (sem
, INSN_CALLD
) : /* call:d $label12 */
3153 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3154 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3155 #define FLD(f) abuf->fields.sfmt_call.f
3156 int UNUSED written
= 0;
3157 IADDR UNUSED pc
= abuf
->addr
;
3159 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3164 SI opval
= ADDSI (pc
, 4);
3165 SET_H_DR (((UINT
) 1), opval
);
3166 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
3169 USI opval
= FLD (i_label12
);
3170 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3171 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3176 SEM_BRANCH_FINI (vpc
);
3181 CASE (sem
, INSN_RET
) : /* ret */
3183 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3184 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3185 #define FLD(f) abuf->fields.fmt_empty.f
3186 int UNUSED written
= 0;
3187 IADDR UNUSED pc
= abuf
->addr
;
3189 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3192 USI opval
= GET_H_DR (((UINT
) 1));
3193 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3194 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3197 SEM_BRANCH_FINI (vpc
);
3202 CASE (sem
, INSN_RET_D
) : /* ret:d */
3204 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3205 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3206 #define FLD(f) abuf->fields.fmt_empty.f
3207 int UNUSED written
= 0;
3208 IADDR UNUSED pc
= abuf
->addr
;
3210 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3214 USI opval
= GET_H_DR (((UINT
) 1));
3215 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3216 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3220 SEM_BRANCH_FINI (vpc
);
3225 CASE (sem
, INSN_INT
) : /* int $u8 */
3227 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3228 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3229 #define FLD(f) abuf->fields.sfmt_int.f
3230 int UNUSED written
= 0;
3231 IADDR UNUSED pc
= abuf
->addr
;
3233 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3240 SI opval
= fr30_int (current_cpu
, pc
, FLD (f_u8
));
3241 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3242 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3246 SEM_BRANCH_FINI (vpc
);
3251 CASE (sem
, INSN_INTE
) : /* inte */
3253 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3254 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3255 #define FLD(f) abuf->fields.fmt_empty.f
3256 int UNUSED written
= 0;
3257 IADDR UNUSED pc
= abuf
->addr
;
3259 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3266 SI opval
= fr30_inte (current_cpu
, pc
);
3267 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3268 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3272 SEM_BRANCH_FINI (vpc
);
3277 CASE (sem
, INSN_RETI
) : /* reti */
3279 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3280 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3281 #define FLD(f) abuf->fields.fmt_empty.f
3282 int UNUSED written
= 0;
3283 IADDR UNUSED pc
= abuf
->addr
;
3285 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3287 if (EQBI (GET_H_SBIT (), 0)) {
3290 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_DR (((UINT
) 2)));
3291 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3292 written
|= (1 << 7);
3293 TRACE_RESULT (current_cpu
, abuf
, "pc", '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", 'x', opval
);
3302 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_DR (((UINT
) 2)));
3304 written
|= (1 << 8);
3305 TRACE_RESULT (current_cpu
, abuf
, "ps", 'x', opval
);
3308 SI opval
= ADDSI (GET_H_DR (((UINT
) 2)), 4);
3309 SET_H_DR (((UINT
) 2), opval
);
3310 written
|= (1 << 5);
3311 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
3317 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_DR (((UINT
) 3)));
3318 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3319 written
|= (1 << 7);
3320 TRACE_RESULT (current_cpu
, abuf
, "pc", '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", 'x', opval
);
3329 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_DR (((UINT
) 3)));
3331 written
|= (1 << 8);
3332 TRACE_RESULT (current_cpu
, abuf
, "ps", 'x', opval
);
3335 SI opval
= ADDSI (GET_H_DR (((UINT
) 3)), 4);
3336 SET_H_DR (((UINT
) 3), opval
);
3337 written
|= (1 << 6);
3338 TRACE_RESULT (current_cpu
, abuf
, "dr", 'x', opval
);
3343 abuf
->written
= written
;
3344 SEM_BRANCH_FINI (vpc
);
3349 CASE (sem
, INSN_BRAD
) : /* bra:d $label9 */
3351 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3352 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3353 #define FLD(f) abuf->fields.sfmt_brad.f
3354 int UNUSED written
= 0;
3355 IADDR UNUSED pc
= abuf
->addr
;
3357 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3361 USI opval
= FLD (i_label9
);
3362 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3363 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3367 SEM_BRANCH_FINI (vpc
);
3372 CASE (sem
, INSN_BRA
) : /* bra $label9 */
3374 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3375 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3376 #define FLD(f) abuf->fields.sfmt_brad.f
3377 int UNUSED written
= 0;
3378 IADDR UNUSED pc
= abuf
->addr
;
3380 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3383 USI opval
= FLD (i_label9
);
3384 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3385 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3388 SEM_BRANCH_FINI (vpc
);
3393 CASE (sem
, INSN_BNOD
) : /* bno:d $label9 */
3395 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3396 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3397 #define FLD(f) abuf->fields.fmt_empty.f
3398 int UNUSED written
= 0;
3399 IADDR UNUSED pc
= abuf
->addr
;
3400 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3410 CASE (sem
, INSN_BNO
) : /* bno $label9 */
3412 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3413 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3414 #define FLD(f) abuf->fields.fmt_empty.f
3415 int UNUSED written
= 0;
3416 IADDR UNUSED pc
= abuf
->addr
;
3417 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3425 CASE (sem
, INSN_BEQD
) : /* beq:d $label9 */
3427 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3428 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3429 #define FLD(f) abuf->fields.sfmt_brad.f
3430 int UNUSED written
= 0;
3431 IADDR UNUSED pc
= abuf
->addr
;
3433 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3438 USI opval
= FLD (i_label9
);
3439 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3440 written
|= (1 << 2);
3441 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3446 abuf
->written
= written
;
3447 SEM_BRANCH_FINI (vpc
);
3452 CASE (sem
, INSN_BEQ
) : /* beq $label9 */
3454 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3455 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3456 #define FLD(f) abuf->fields.sfmt_brad.f
3457 int UNUSED written
= 0;
3458 IADDR UNUSED pc
= abuf
->addr
;
3460 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3464 USI opval
= FLD (i_label9
);
3465 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3466 written
|= (1 << 2);
3467 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3471 abuf
->written
= written
;
3472 SEM_BRANCH_FINI (vpc
);
3477 CASE (sem
, INSN_BNED
) : /* bne:d $label9 */
3479 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3480 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3481 #define FLD(f) abuf->fields.sfmt_brad.f
3482 int UNUSED written
= 0;
3483 IADDR UNUSED pc
= abuf
->addr
;
3485 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3488 if (NOTBI (CPU (h_zbit
))) {
3490 USI opval
= FLD (i_label9
);
3491 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3492 written
|= (1 << 2);
3493 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3498 abuf
->written
= written
;
3499 SEM_BRANCH_FINI (vpc
);
3504 CASE (sem
, INSN_BNE
) : /* bne $label9 */
3506 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3507 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3508 #define FLD(f) abuf->fields.sfmt_brad.f
3509 int UNUSED written
= 0;
3510 IADDR UNUSED pc
= abuf
->addr
;
3512 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3514 if (NOTBI (CPU (h_zbit
))) {
3516 USI opval
= FLD (i_label9
);
3517 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3518 written
|= (1 << 2);
3519 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3523 abuf
->written
= written
;
3524 SEM_BRANCH_FINI (vpc
);
3529 CASE (sem
, INSN_BCD
) : /* bc:d $label9 */
3531 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3532 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3533 #define FLD(f) abuf->fields.sfmt_brad.f
3534 int UNUSED written
= 0;
3535 IADDR UNUSED pc
= abuf
->addr
;
3537 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3542 USI opval
= FLD (i_label9
);
3543 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3544 written
|= (1 << 2);
3545 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3550 abuf
->written
= written
;
3551 SEM_BRANCH_FINI (vpc
);
3556 CASE (sem
, INSN_BC
) : /* bc $label9 */
3558 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3559 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3560 #define FLD(f) abuf->fields.sfmt_brad.f
3561 int UNUSED written
= 0;
3562 IADDR UNUSED pc
= abuf
->addr
;
3564 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3568 USI opval
= FLD (i_label9
);
3569 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3570 written
|= (1 << 2);
3571 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3575 abuf
->written
= written
;
3576 SEM_BRANCH_FINI (vpc
);
3581 CASE (sem
, INSN_BNCD
) : /* bnc:d $label9 */
3583 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3584 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3585 #define FLD(f) abuf->fields.sfmt_brad.f
3586 int UNUSED written
= 0;
3587 IADDR UNUSED pc
= abuf
->addr
;
3589 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3592 if (NOTBI (CPU (h_cbit
))) {
3594 USI opval
= FLD (i_label9
);
3595 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3596 written
|= (1 << 2);
3597 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3602 abuf
->written
= written
;
3603 SEM_BRANCH_FINI (vpc
);
3608 CASE (sem
, INSN_BNC
) : /* bnc $label9 */
3610 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3611 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3612 #define FLD(f) abuf->fields.sfmt_brad.f
3613 int UNUSED written
= 0;
3614 IADDR UNUSED pc
= abuf
->addr
;
3616 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3618 if (NOTBI (CPU (h_cbit
))) {
3620 USI opval
= FLD (i_label9
);
3621 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3622 written
|= (1 << 2);
3623 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3627 abuf
->written
= written
;
3628 SEM_BRANCH_FINI (vpc
);
3633 CASE (sem
, INSN_BND
) : /* bn:d $label9 */
3635 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3636 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3637 #define FLD(f) abuf->fields.sfmt_brad.f
3638 int UNUSED written
= 0;
3639 IADDR UNUSED pc
= abuf
->addr
;
3641 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3646 USI opval
= FLD (i_label9
);
3647 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3648 written
|= (1 << 2);
3649 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3654 abuf
->written
= written
;
3655 SEM_BRANCH_FINI (vpc
);
3660 CASE (sem
, INSN_BN
) : /* bn $label9 */
3662 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3663 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3664 #define FLD(f) abuf->fields.sfmt_brad.f
3665 int UNUSED written
= 0;
3666 IADDR UNUSED pc
= abuf
->addr
;
3668 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3672 USI opval
= FLD (i_label9
);
3673 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3674 written
|= (1 << 2);
3675 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3679 abuf
->written
= written
;
3680 SEM_BRANCH_FINI (vpc
);
3685 CASE (sem
, INSN_BPD
) : /* bp:d $label9 */
3687 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3688 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3689 #define FLD(f) abuf->fields.sfmt_brad.f
3690 int UNUSED written
= 0;
3691 IADDR UNUSED pc
= abuf
->addr
;
3693 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3696 if (NOTBI (CPU (h_nbit
))) {
3698 USI opval
= FLD (i_label9
);
3699 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3700 written
|= (1 << 2);
3701 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3706 abuf
->written
= written
;
3707 SEM_BRANCH_FINI (vpc
);
3712 CASE (sem
, INSN_BP
) : /* bp $label9 */
3714 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3715 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3716 #define FLD(f) abuf->fields.sfmt_brad.f
3717 int UNUSED written
= 0;
3718 IADDR UNUSED pc
= abuf
->addr
;
3720 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3722 if (NOTBI (CPU (h_nbit
))) {
3724 USI opval
= FLD (i_label9
);
3725 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3726 written
|= (1 << 2);
3727 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3731 abuf
->written
= written
;
3732 SEM_BRANCH_FINI (vpc
);
3737 CASE (sem
, INSN_BVD
) : /* bv:d $label9 */
3739 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3740 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3741 #define FLD(f) abuf->fields.sfmt_brad.f
3742 int UNUSED written
= 0;
3743 IADDR UNUSED pc
= abuf
->addr
;
3745 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3750 USI opval
= FLD (i_label9
);
3751 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3752 written
|= (1 << 2);
3753 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3758 abuf
->written
= written
;
3759 SEM_BRANCH_FINI (vpc
);
3764 CASE (sem
, INSN_BV
) : /* bv $label9 */
3766 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3767 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3768 #define FLD(f) abuf->fields.sfmt_brad.f
3769 int UNUSED written
= 0;
3770 IADDR UNUSED pc
= abuf
->addr
;
3772 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3776 USI opval
= FLD (i_label9
);
3777 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3778 written
|= (1 << 2);
3779 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3783 abuf
->written
= written
;
3784 SEM_BRANCH_FINI (vpc
);
3789 CASE (sem
, INSN_BNVD
) : /* bnv:d $label9 */
3791 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3792 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3793 #define FLD(f) abuf->fields.sfmt_brad.f
3794 int UNUSED written
= 0;
3795 IADDR UNUSED pc
= abuf
->addr
;
3797 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3800 if (NOTBI (CPU (h_vbit
))) {
3802 USI opval
= FLD (i_label9
);
3803 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3804 written
|= (1 << 2);
3805 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3810 abuf
->written
= written
;
3811 SEM_BRANCH_FINI (vpc
);
3816 CASE (sem
, INSN_BNV
) : /* bnv $label9 */
3818 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3819 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3820 #define FLD(f) abuf->fields.sfmt_brad.f
3821 int UNUSED written
= 0;
3822 IADDR UNUSED pc
= abuf
->addr
;
3824 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3826 if (NOTBI (CPU (h_vbit
))) {
3828 USI opval
= FLD (i_label9
);
3829 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3830 written
|= (1 << 2);
3831 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3835 abuf
->written
= written
;
3836 SEM_BRANCH_FINI (vpc
);
3841 CASE (sem
, INSN_BLTD
) : /* blt:d $label9 */
3843 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3844 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3845 #define FLD(f) abuf->fields.sfmt_brad.f
3846 int UNUSED written
= 0;
3847 IADDR UNUSED pc
= abuf
->addr
;
3849 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3852 if (XORBI (CPU (h_vbit
), CPU (h_nbit
))) {
3854 USI opval
= FLD (i_label9
);
3855 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3856 written
|= (1 << 3);
3857 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3862 abuf
->written
= written
;
3863 SEM_BRANCH_FINI (vpc
);
3868 CASE (sem
, INSN_BLT
) : /* blt $label9 */
3870 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3871 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3872 #define FLD(f) abuf->fields.sfmt_brad.f
3873 int UNUSED written
= 0;
3874 IADDR UNUSED pc
= abuf
->addr
;
3876 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3878 if (XORBI (CPU (h_vbit
), CPU (h_nbit
))) {
3880 USI opval
= FLD (i_label9
);
3881 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3882 written
|= (1 << 3);
3883 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3887 abuf
->written
= written
;
3888 SEM_BRANCH_FINI (vpc
);
3893 CASE (sem
, INSN_BGED
) : /* bge:d $label9 */
3895 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3896 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3897 #define FLD(f) abuf->fields.sfmt_brad.f
3898 int UNUSED written
= 0;
3899 IADDR UNUSED pc
= abuf
->addr
;
3901 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3904 if (NOTBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)))) {
3906 USI opval
= FLD (i_label9
);
3907 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3908 written
|= (1 << 3);
3909 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3914 abuf
->written
= written
;
3915 SEM_BRANCH_FINI (vpc
);
3920 CASE (sem
, INSN_BGE
) : /* bge $label9 */
3922 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3923 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3924 #define FLD(f) abuf->fields.sfmt_brad.f
3925 int UNUSED written
= 0;
3926 IADDR UNUSED pc
= abuf
->addr
;
3928 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3930 if (NOTBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)))) {
3932 USI opval
= FLD (i_label9
);
3933 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3934 written
|= (1 << 3);
3935 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3939 abuf
->written
= written
;
3940 SEM_BRANCH_FINI (vpc
);
3945 CASE (sem
, INSN_BLED
) : /* ble:d $label9 */
3947 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3948 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3949 #define FLD(f) abuf->fields.sfmt_brad.f
3950 int UNUSED written
= 0;
3951 IADDR UNUSED pc
= abuf
->addr
;
3953 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3956 if (ORBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)), CPU (h_zbit
))) {
3958 USI opval
= FLD (i_label9
);
3959 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3960 written
|= (1 << 4);
3961 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3966 abuf
->written
= written
;
3967 SEM_BRANCH_FINI (vpc
);
3972 CASE (sem
, INSN_BLE
) : /* ble $label9 */
3974 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3975 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3976 #define FLD(f) abuf->fields.sfmt_brad.f
3977 int UNUSED written
= 0;
3978 IADDR UNUSED pc
= abuf
->addr
;
3980 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3982 if (ORBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)), CPU (h_zbit
))) {
3984 USI opval
= FLD (i_label9
);
3985 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3986 written
|= (1 << 4);
3987 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3991 abuf
->written
= written
;
3992 SEM_BRANCH_FINI (vpc
);
3997 CASE (sem
, INSN_BGTD
) : /* bgt:d $label9 */
3999 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4000 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4001 #define FLD(f) abuf->fields.sfmt_brad.f
4002 int UNUSED written
= 0;
4003 IADDR UNUSED pc
= abuf
->addr
;
4005 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4008 if (NOTBI (ORBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)), CPU (h_zbit
)))) {
4010 USI opval
= FLD (i_label9
);
4011 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
4012 written
|= (1 << 4);
4013 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4018 abuf
->written
= written
;
4019 SEM_BRANCH_FINI (vpc
);
4024 CASE (sem
, INSN_BGT
) : /* bgt $label9 */
4026 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4027 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4028 #define FLD(f) abuf->fields.sfmt_brad.f
4029 int UNUSED written
= 0;
4030 IADDR UNUSED pc
= abuf
->addr
;
4032 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4034 if (NOTBI (ORBI (XORBI (CPU (h_vbit
), CPU (h_nbit
)), CPU (h_zbit
)))) {
4036 USI opval
= FLD (i_label9
);
4037 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
4038 written
|= (1 << 4);
4039 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4043 abuf
->written
= written
;
4044 SEM_BRANCH_FINI (vpc
);
4049 CASE (sem
, INSN_BLSD
) : /* bls:d $label9 */
4051 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4052 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4053 #define FLD(f) abuf->fields.sfmt_brad.f
4054 int UNUSED written
= 0;
4055 IADDR UNUSED pc
= abuf
->addr
;
4057 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4060 if (ORBI (CPU (h_cbit
), CPU (h_zbit
))) {
4062 USI opval
= FLD (i_label9
);
4063 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
4064 written
|= (1 << 3);
4065 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4070 abuf
->written
= written
;
4071 SEM_BRANCH_FINI (vpc
);
4076 CASE (sem
, INSN_BLS
) : /* bls $label9 */
4078 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4079 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4080 #define FLD(f) abuf->fields.sfmt_brad.f
4081 int UNUSED written
= 0;
4082 IADDR UNUSED pc
= abuf
->addr
;
4084 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4086 if (ORBI (CPU (h_cbit
), CPU (h_zbit
))) {
4088 USI opval
= FLD (i_label9
);
4089 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
4090 written
|= (1 << 3);
4091 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4095 abuf
->written
= written
;
4096 SEM_BRANCH_FINI (vpc
);
4101 CASE (sem
, INSN_BHID
) : /* bhi:d $label9 */
4103 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4104 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4105 #define FLD(f) abuf->fields.sfmt_brad.f
4106 int UNUSED written
= 0;
4107 IADDR UNUSED pc
= abuf
->addr
;
4109 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4112 if (NOTBI (ORBI (CPU (h_cbit
), CPU (h_zbit
)))) {
4114 USI opval
= FLD (i_label9
);
4115 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
4116 written
|= (1 << 3);
4117 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4122 abuf
->written
= written
;
4123 SEM_BRANCH_FINI (vpc
);
4128 CASE (sem
, INSN_BHI
) : /* bhi $label9 */
4130 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4131 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4132 #define FLD(f) abuf->fields.sfmt_brad.f
4133 int UNUSED written
= 0;
4134 IADDR UNUSED pc
= abuf
->addr
;
4136 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4138 if (NOTBI (ORBI (CPU (h_cbit
), CPU (h_zbit
)))) {
4140 USI opval
= FLD (i_label9
);
4141 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
4142 written
|= (1 << 3);
4143 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
4147 abuf
->written
= written
;
4148 SEM_BRANCH_FINI (vpc
);
4153 CASE (sem
, INSN_DMOVR13
) : /* dmov $R13,@$dir10 */
4155 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4156 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4157 #define FLD(f) abuf->fields.sfmt_dmovr13pi.f
4158 int UNUSED written
= 0;
4159 IADDR UNUSED pc
= abuf
->addr
;
4160 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4163 SI opval
= CPU (h_gr
[((UINT
) 13)]);
4164 SETMEMSI (current_cpu
, pc
, FLD (f_dir10
), opval
);
4165 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4172 CASE (sem
, INSN_DMOVR13H
) : /* dmovh $R13,@$dir9 */
4174 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4175 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4176 #define FLD(f) abuf->fields.sfmt_dmovr13pih.f
4177 int UNUSED written
= 0;
4178 IADDR UNUSED pc
= abuf
->addr
;
4179 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4182 HI opval
= CPU (h_gr
[((UINT
) 13)]);
4183 SETMEMHI (current_cpu
, pc
, FLD (f_dir9
), opval
);
4184 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4191 CASE (sem
, INSN_DMOVR13B
) : /* dmovb $R13,@$dir8 */
4193 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4194 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4195 #define FLD(f) abuf->fields.sfmt_dmovr13pib.f
4196 int UNUSED written
= 0;
4197 IADDR UNUSED pc
= abuf
->addr
;
4198 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4201 QI opval
= CPU (h_gr
[((UINT
) 13)]);
4202 SETMEMQI (current_cpu
, pc
, FLD (f_dir8
), opval
);
4203 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4210 CASE (sem
, INSN_DMOVR13PI
) : /* dmov @$R13+,@$dir10 */
4212 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4213 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4214 #define FLD(f) abuf->fields.sfmt_dmovr13pi.f
4215 int UNUSED written
= 0;
4216 IADDR UNUSED pc
= abuf
->addr
;
4217 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4221 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]));
4222 SETMEMSI (current_cpu
, pc
, FLD (f_dir10
), opval
);
4223 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4226 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 4);
4227 CPU (h_gr
[((UINT
) 13)]) = opval
;
4228 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4236 CASE (sem
, INSN_DMOVR13PIH
) : /* dmovh @$R13+,@$dir9 */
4238 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4239 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4240 #define FLD(f) abuf->fields.sfmt_dmovr13pih.f
4241 int UNUSED written
= 0;
4242 IADDR UNUSED pc
= abuf
->addr
;
4243 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4247 HI opval
= GETMEMHI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]));
4248 SETMEMHI (current_cpu
, pc
, FLD (f_dir9
), opval
);
4249 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4252 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 2);
4253 CPU (h_gr
[((UINT
) 13)]) = opval
;
4254 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4262 CASE (sem
, INSN_DMOVR13PIB
) : /* dmovb @$R13+,@$dir8 */
4264 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4265 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4266 #define FLD(f) abuf->fields.sfmt_dmovr13pib.f
4267 int UNUSED written
= 0;
4268 IADDR UNUSED pc
= abuf
->addr
;
4269 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4273 QI opval
= GETMEMQI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]));
4274 SETMEMQI (current_cpu
, pc
, FLD (f_dir8
), opval
);
4275 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4278 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 1);
4279 CPU (h_gr
[((UINT
) 13)]) = opval
;
4280 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4288 CASE (sem
, INSN_DMOVR15PI
) : /* dmov @$R15+,@$dir10 */
4290 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4291 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4292 #define FLD(f) abuf->fields.sfmt_dmovr15pi.f
4293 int UNUSED written
= 0;
4294 IADDR UNUSED pc
= abuf
->addr
;
4295 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4299 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4300 SETMEMSI (current_cpu
, pc
, FLD (f_dir10
), opval
);
4301 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4304 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4305 CPU (h_gr
[((UINT
) 15)]) = opval
;
4306 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4314 CASE (sem
, INSN_DMOV2R13
) : /* dmov @$dir10,$R13 */
4316 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4317 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4318 #define FLD(f) abuf->fields.sfmt_dmovr13pi.f
4319 int UNUSED written
= 0;
4320 IADDR UNUSED pc
= abuf
->addr
;
4321 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4324 SI opval
= GETMEMSI (current_cpu
, pc
, FLD (f_dir10
));
4325 CPU (h_gr
[((UINT
) 13)]) = opval
;
4326 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4333 CASE (sem
, INSN_DMOV2R13H
) : /* dmovh @$dir9,$R13 */
4335 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4336 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4337 #define FLD(f) abuf->fields.sfmt_dmovr13pih.f
4338 int UNUSED written
= 0;
4339 IADDR UNUSED pc
= abuf
->addr
;
4340 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4343 SI opval
= GETMEMHI (current_cpu
, pc
, FLD (f_dir9
));
4344 CPU (h_gr
[((UINT
) 13)]) = opval
;
4345 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4352 CASE (sem
, INSN_DMOV2R13B
) : /* dmovb @$dir8,$R13 */
4354 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4355 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4356 #define FLD(f) abuf->fields.sfmt_dmovr13pib.f
4357 int UNUSED written
= 0;
4358 IADDR UNUSED pc
= abuf
->addr
;
4359 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4362 SI opval
= GETMEMQI (current_cpu
, pc
, FLD (f_dir8
));
4363 CPU (h_gr
[((UINT
) 13)]) = opval
;
4364 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4371 CASE (sem
, INSN_DMOV2R13PI
) : /* dmov @$dir10,@$R13+ */
4373 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4374 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4375 #define FLD(f) abuf->fields.sfmt_dmovr13pi.f
4376 int UNUSED written
= 0;
4377 IADDR UNUSED pc
= abuf
->addr
;
4378 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4382 SI opval
= GETMEMSI (current_cpu
, pc
, FLD (f_dir10
));
4383 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]), opval
);
4384 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4387 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 4);
4388 CPU (h_gr
[((UINT
) 13)]) = opval
;
4389 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4397 CASE (sem
, INSN_DMOV2R13PIH
) : /* dmovh @$dir9,@$R13+ */
4399 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4400 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4401 #define FLD(f) abuf->fields.sfmt_dmovr13pih.f
4402 int UNUSED written
= 0;
4403 IADDR UNUSED pc
= abuf
->addr
;
4404 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4408 HI opval
= GETMEMHI (current_cpu
, pc
, FLD (f_dir9
));
4409 SETMEMHI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]), opval
);
4410 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4413 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 2);
4414 CPU (h_gr
[((UINT
) 13)]) = opval
;
4415 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4423 CASE (sem
, INSN_DMOV2R13PIB
) : /* dmovb @$dir8,@$R13+ */
4425 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4426 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4427 #define FLD(f) abuf->fields.sfmt_dmovr13pib.f
4428 int UNUSED written
= 0;
4429 IADDR UNUSED pc
= abuf
->addr
;
4430 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4434 QI opval
= GETMEMQI (current_cpu
, pc
, FLD (f_dir8
));
4435 SETMEMQI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 13)]), opval
);
4436 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4439 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 13)]), 1);
4440 CPU (h_gr
[((UINT
) 13)]) = opval
;
4441 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4449 CASE (sem
, INSN_DMOV2R15PD
) : /* dmov @$dir10,@-$R15 */
4451 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4452 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4453 #define FLD(f) abuf->fields.sfmt_dmovr15pi.f
4454 int UNUSED written
= 0;
4455 IADDR UNUSED pc
= abuf
->addr
;
4456 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4460 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
4461 CPU (h_gr
[((UINT
) 15)]) = opval
;
4462 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4465 SI opval
= GETMEMSI (current_cpu
, pc
, FLD (f_dir10
));
4466 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
4467 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4475 CASE (sem
, INSN_LDRES
) : /* ldres @$Ri+,$u4 */
4477 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4478 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4479 #define FLD(f) abuf->fields.sfmt_add2.f
4480 int UNUSED written
= 0;
4481 IADDR UNUSED pc
= abuf
->addr
;
4482 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4485 SI opval
= ADDSI (* FLD (i_Ri
), 4);
4486 * FLD (i_Ri
) = opval
;
4487 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4494 CASE (sem
, INSN_STRES
) : /* stres $u4,@$Ri+ */
4496 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4497 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4498 #define FLD(f) abuf->fields.sfmt_add2.f
4499 int UNUSED written
= 0;
4500 IADDR UNUSED pc
= abuf
->addr
;
4501 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4504 SI opval
= ADDSI (* FLD (i_Ri
), 4);
4505 * FLD (i_Ri
) = opval
;
4506 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4513 CASE (sem
, INSN_COPOP
) : /* copop $u4c,$ccc,$CRj,$CRi */
4515 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4516 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4517 #define FLD(f) abuf->fields.fmt_empty.f
4518 int UNUSED written
= 0;
4519 IADDR UNUSED pc
= abuf
->addr
;
4520 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4528 CASE (sem
, INSN_COPLD
) : /* copld $u4c,$ccc,$Rjc,$CRi */
4530 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4531 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4532 #define FLD(f) abuf->fields.fmt_empty.f
4533 int UNUSED written
= 0;
4534 IADDR UNUSED pc
= abuf
->addr
;
4535 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4543 CASE (sem
, INSN_COPST
) : /* copst $u4c,$ccc,$CRj,$Ric */
4545 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4546 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4547 #define FLD(f) abuf->fields.fmt_empty.f
4548 int UNUSED written
= 0;
4549 IADDR UNUSED pc
= abuf
->addr
;
4550 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4558 CASE (sem
, INSN_COPSV
) : /* copsv $u4c,$ccc,$CRj,$Ric */
4560 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4561 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4562 #define FLD(f) abuf->fields.fmt_empty.f
4563 int UNUSED written
= 0;
4564 IADDR UNUSED pc
= abuf
->addr
;
4565 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4573 CASE (sem
, INSN_NOP
) : /* nop */
4575 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4576 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4577 #define FLD(f) abuf->fields.fmt_empty.f
4578 int UNUSED written
= 0;
4579 IADDR UNUSED pc
= abuf
->addr
;
4580 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4588 CASE (sem
, INSN_ANDCCR
) : /* andccr $u8 */
4590 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4591 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4592 #define FLD(f) abuf->fields.sfmt_int.f
4593 int UNUSED written
= 0;
4594 IADDR UNUSED pc
= abuf
->addr
;
4595 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4598 UQI opval
= ANDQI (GET_H_CCR (), FLD (f_u8
));
4600 TRACE_RESULT (current_cpu
, abuf
, "ccr", 'x', opval
);
4607 CASE (sem
, INSN_ORCCR
) : /* orccr $u8 */
4609 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4610 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4611 #define FLD(f) abuf->fields.sfmt_int.f
4612 int UNUSED written
= 0;
4613 IADDR UNUSED pc
= abuf
->addr
;
4614 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4617 UQI opval
= ORQI (GET_H_CCR (), FLD (f_u8
));
4619 TRACE_RESULT (current_cpu
, abuf
, "ccr", 'x', opval
);
4626 CASE (sem
, INSN_STILM
) : /* stilm $u8 */
4628 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4629 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4630 #define FLD(f) abuf->fields.sfmt_int.f
4631 int UNUSED written
= 0;
4632 IADDR UNUSED pc
= abuf
->addr
;
4633 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4636 UQI opval
= ANDSI (FLD (f_u8
), 31);
4638 TRACE_RESULT (current_cpu
, abuf
, "ilm", 'x', opval
);
4645 CASE (sem
, INSN_ADDSP
) : /* addsp $s10 */
4647 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4648 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4649 #define FLD(f) abuf->fields.sfmt_addsp.f
4650 int UNUSED written
= 0;
4651 IADDR UNUSED pc
= abuf
->addr
;
4652 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4655 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), FLD (f_s10
));
4656 CPU (h_gr
[((UINT
) 15)]) = opval
;
4657 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4664 CASE (sem
, INSN_EXTSB
) : /* extsb $Ri */
4666 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4667 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4668 #define FLD(f) abuf->fields.sfmt_add2.f
4669 int UNUSED written
= 0;
4670 IADDR UNUSED pc
= abuf
->addr
;
4671 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4674 SI opval
= EXTQISI (ANDQI (* FLD (i_Ri
), 255));
4675 * FLD (i_Ri
) = opval
;
4676 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4683 CASE (sem
, INSN_EXTUB
) : /* extub $Ri */
4685 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4686 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4687 #define FLD(f) abuf->fields.sfmt_add2.f
4688 int UNUSED written
= 0;
4689 IADDR UNUSED pc
= abuf
->addr
;
4690 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4693 SI opval
= ZEXTQISI (ANDQI (* FLD (i_Ri
), 255));
4694 * FLD (i_Ri
) = opval
;
4695 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4702 CASE (sem
, INSN_EXTSH
) : /* extsh $Ri */
4704 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4705 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4706 #define FLD(f) abuf->fields.sfmt_add2.f
4707 int UNUSED written
= 0;
4708 IADDR UNUSED pc
= abuf
->addr
;
4709 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4712 SI opval
= EXTHISI (ANDHI (* FLD (i_Ri
), 65535));
4713 * FLD (i_Ri
) = opval
;
4714 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4721 CASE (sem
, INSN_EXTUH
) : /* extuh $Ri */
4723 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4724 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4725 #define FLD(f) abuf->fields.sfmt_add2.f
4726 int UNUSED written
= 0;
4727 IADDR UNUSED pc
= abuf
->addr
;
4728 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4731 SI opval
= ZEXTHISI (ANDHI (* FLD (i_Ri
), 65535));
4732 * FLD (i_Ri
) = opval
;
4733 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4740 CASE (sem
, INSN_LDM0
) : /* ldm0 ($reglist_low_ld) */
4742 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4743 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4744 #define FLD(f) abuf->fields.sfmt_ldm0.f
4745 int UNUSED written
= 0;
4746 IADDR UNUSED pc
= abuf
->addr
;
4747 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4750 if (ANDSI (FLD (f_reglist_low_ld
), 1)) {
4753 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4754 CPU (h_gr
[((UINT
) 0)]) = opval
;
4755 written
|= (1 << 3);
4756 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4759 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4760 CPU (h_gr
[((UINT
) 15)]) = opval
;
4761 written
|= (1 << 5);
4762 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4766 if (ANDSI (FLD (f_reglist_low_ld
), 2)) {
4769 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4770 CPU (h_gr
[((UINT
) 1)]) = opval
;
4771 written
|= (1 << 4);
4772 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4775 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4776 CPU (h_gr
[((UINT
) 15)]) = opval
;
4777 written
|= (1 << 5);
4778 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4782 if (ANDSI (FLD (f_reglist_low_ld
), 4)) {
4785 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4786 CPU (h_gr
[((UINT
) 2)]) = opval
;
4787 written
|= (1 << 6);
4788 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4791 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4792 CPU (h_gr
[((UINT
) 15)]) = opval
;
4793 written
|= (1 << 5);
4794 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4798 if (ANDSI (FLD (f_reglist_low_ld
), 8)) {
4801 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4802 CPU (h_gr
[((UINT
) 3)]) = opval
;
4803 written
|= (1 << 7);
4804 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4807 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4808 CPU (h_gr
[((UINT
) 15)]) = opval
;
4809 written
|= (1 << 5);
4810 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4814 if (ANDSI (FLD (f_reglist_low_ld
), 16)) {
4817 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4818 CPU (h_gr
[((UINT
) 4)]) = opval
;
4819 written
|= (1 << 8);
4820 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4823 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4824 CPU (h_gr
[((UINT
) 15)]) = opval
;
4825 written
|= (1 << 5);
4826 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4830 if (ANDSI (FLD (f_reglist_low_ld
), 32)) {
4833 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4834 CPU (h_gr
[((UINT
) 5)]) = opval
;
4835 written
|= (1 << 9);
4836 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4839 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4840 CPU (h_gr
[((UINT
) 15)]) = opval
;
4841 written
|= (1 << 5);
4842 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4846 if (ANDSI (FLD (f_reglist_low_ld
), 64)) {
4849 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4850 CPU (h_gr
[((UINT
) 6)]) = opval
;
4851 written
|= (1 << 10);
4852 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4855 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4856 CPU (h_gr
[((UINT
) 15)]) = opval
;
4857 written
|= (1 << 5);
4858 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4862 if (ANDSI (FLD (f_reglist_low_ld
), 128)) {
4865 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4866 CPU (h_gr
[((UINT
) 7)]) = opval
;
4867 written
|= (1 << 11);
4868 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4871 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4872 CPU (h_gr
[((UINT
) 15)]) = opval
;
4873 written
|= (1 << 5);
4874 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4880 abuf
->written
= written
;
4885 CASE (sem
, INSN_LDM1
) : /* ldm1 ($reglist_hi_ld) */
4887 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4888 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4889 #define FLD(f) abuf->fields.sfmt_ldm1.f
4890 int UNUSED written
= 0;
4891 IADDR UNUSED pc
= abuf
->addr
;
4892 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4895 if (ANDSI (FLD (f_reglist_hi_ld
), 1)) {
4898 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4899 CPU (h_gr
[((UINT
) 8)]) = opval
;
4900 written
|= (1 << 9);
4901 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4904 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4905 CPU (h_gr
[((UINT
) 15)]) = opval
;
4906 written
|= (1 << 8);
4907 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4911 if (ANDSI (FLD (f_reglist_hi_ld
), 2)) {
4914 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4915 CPU (h_gr
[((UINT
) 9)]) = opval
;
4916 written
|= (1 << 10);
4917 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4920 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4921 CPU (h_gr
[((UINT
) 15)]) = opval
;
4922 written
|= (1 << 8);
4923 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4927 if (ANDSI (FLD (f_reglist_hi_ld
), 4)) {
4930 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4931 CPU (h_gr
[((UINT
) 10)]) = opval
;
4932 written
|= (1 << 3);
4933 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4936 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4937 CPU (h_gr
[((UINT
) 15)]) = opval
;
4938 written
|= (1 << 8);
4939 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4943 if (ANDSI (FLD (f_reglist_hi_ld
), 8)) {
4946 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4947 CPU (h_gr
[((UINT
) 11)]) = opval
;
4948 written
|= (1 << 4);
4949 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4952 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4953 CPU (h_gr
[((UINT
) 15)]) = opval
;
4954 written
|= (1 << 8);
4955 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4959 if (ANDSI (FLD (f_reglist_hi_ld
), 16)) {
4962 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4963 CPU (h_gr
[((UINT
) 12)]) = opval
;
4964 written
|= (1 << 5);
4965 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4968 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4969 CPU (h_gr
[((UINT
) 15)]) = opval
;
4970 written
|= (1 << 8);
4971 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4975 if (ANDSI (FLD (f_reglist_hi_ld
), 32)) {
4978 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4979 CPU (h_gr
[((UINT
) 13)]) = opval
;
4980 written
|= (1 << 6);
4981 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4984 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
4985 CPU (h_gr
[((UINT
) 15)]) = opval
;
4986 written
|= (1 << 8);
4987 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
4991 if (ANDSI (FLD (f_reglist_hi_ld
), 64)) {
4994 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
4995 CPU (h_gr
[((UINT
) 14)]) = opval
;
4996 written
|= (1 << 7);
4997 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5000 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 15)]), 4);
5001 CPU (h_gr
[((UINT
) 15)]) = opval
;
5002 written
|= (1 << 8);
5003 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5007 if (ANDSI (FLD (f_reglist_hi_ld
), 128)) {
5009 SI opval
= GETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]));
5010 CPU (h_gr
[((UINT
) 15)]) = opval
;
5011 written
|= (1 << 8);
5012 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5017 abuf
->written
= written
;
5022 CASE (sem
, INSN_STM0
) : /* stm0 ($reglist_low_st) */
5024 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5025 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5026 #define FLD(f) abuf->fields.sfmt_stm0.f
5027 int UNUSED written
= 0;
5028 IADDR UNUSED pc
= abuf
->addr
;
5029 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5032 if (ANDSI (FLD (f_reglist_low_st
), 1)) {
5035 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5036 CPU (h_gr
[((UINT
) 15)]) = opval
;
5037 written
|= (1 << 10);
5038 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5041 SI opval
= CPU (h_gr
[((UINT
) 7)]);
5042 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5043 written
|= (1 << 11);
5044 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5048 if (ANDSI (FLD (f_reglist_low_st
), 2)) {
5051 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5052 CPU (h_gr
[((UINT
) 15)]) = opval
;
5053 written
|= (1 << 10);
5054 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5057 SI opval
= CPU (h_gr
[((UINT
) 6)]);
5058 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5059 written
|= (1 << 11);
5060 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5064 if (ANDSI (FLD (f_reglist_low_st
), 4)) {
5067 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5068 CPU (h_gr
[((UINT
) 15)]) = opval
;
5069 written
|= (1 << 10);
5070 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5073 SI opval
= CPU (h_gr
[((UINT
) 5)]);
5074 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5075 written
|= (1 << 11);
5076 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5080 if (ANDSI (FLD (f_reglist_low_st
), 8)) {
5083 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5084 CPU (h_gr
[((UINT
) 15)]) = opval
;
5085 written
|= (1 << 10);
5086 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5089 SI opval
= CPU (h_gr
[((UINT
) 4)]);
5090 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5091 written
|= (1 << 11);
5092 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5096 if (ANDSI (FLD (f_reglist_low_st
), 16)) {
5099 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5100 CPU (h_gr
[((UINT
) 15)]) = opval
;
5101 written
|= (1 << 10);
5102 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5105 SI opval
= CPU (h_gr
[((UINT
) 3)]);
5106 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5107 written
|= (1 << 11);
5108 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5112 if (ANDSI (FLD (f_reglist_low_st
), 32)) {
5115 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5116 CPU (h_gr
[((UINT
) 15)]) = opval
;
5117 written
|= (1 << 10);
5118 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5121 SI opval
= CPU (h_gr
[((UINT
) 2)]);
5122 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5123 written
|= (1 << 11);
5124 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5128 if (ANDSI (FLD (f_reglist_low_st
), 64)) {
5131 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5132 CPU (h_gr
[((UINT
) 15)]) = opval
;
5133 written
|= (1 << 10);
5134 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5137 SI opval
= CPU (h_gr
[((UINT
) 1)]);
5138 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5139 written
|= (1 << 11);
5140 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5144 if (ANDSI (FLD (f_reglist_low_st
), 128)) {
5147 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5148 CPU (h_gr
[((UINT
) 15)]) = opval
;
5149 written
|= (1 << 10);
5150 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5153 SI opval
= CPU (h_gr
[((UINT
) 0)]);
5154 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5155 written
|= (1 << 11);
5156 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5162 abuf
->written
= written
;
5167 CASE (sem
, INSN_STM1
) : /* stm1 ($reglist_hi_st) */
5169 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5170 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5171 #define FLD(f) abuf->fields.sfmt_stm1.f
5172 int UNUSED written
= 0;
5173 IADDR UNUSED pc
= abuf
->addr
;
5174 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5177 if (ANDSI (FLD (f_reglist_hi_st
), 1)) {
5180 tmp_save_r15
= CPU (h_gr
[((UINT
) 15)]);
5182 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5183 CPU (h_gr
[((UINT
) 15)]) = opval
;
5184 written
|= (1 << 9);
5185 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5188 SI opval
= tmp_save_r15
;
5189 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5190 written
|= (1 << 10);
5191 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5195 if (ANDSI (FLD (f_reglist_hi_st
), 2)) {
5198 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5199 CPU (h_gr
[((UINT
) 15)]) = opval
;
5200 written
|= (1 << 9);
5201 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5204 SI opval
= CPU (h_gr
[((UINT
) 14)]);
5205 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5206 written
|= (1 << 10);
5207 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5211 if (ANDSI (FLD (f_reglist_hi_st
), 4)) {
5214 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5215 CPU (h_gr
[((UINT
) 15)]) = opval
;
5216 written
|= (1 << 9);
5217 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5220 SI opval
= CPU (h_gr
[((UINT
) 13)]);
5221 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5222 written
|= (1 << 10);
5223 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5227 if (ANDSI (FLD (f_reglist_hi_st
), 8)) {
5230 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5231 CPU (h_gr
[((UINT
) 15)]) = opval
;
5232 written
|= (1 << 9);
5233 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5236 SI opval
= CPU (h_gr
[((UINT
) 12)]);
5237 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5238 written
|= (1 << 10);
5239 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5243 if (ANDSI (FLD (f_reglist_hi_st
), 16)) {
5246 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5247 CPU (h_gr
[((UINT
) 15)]) = opval
;
5248 written
|= (1 << 9);
5249 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5252 SI opval
= CPU (h_gr
[((UINT
) 11)]);
5253 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5254 written
|= (1 << 10);
5255 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5259 if (ANDSI (FLD (f_reglist_hi_st
), 32)) {
5262 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5263 CPU (h_gr
[((UINT
) 15)]) = opval
;
5264 written
|= (1 << 9);
5265 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5268 SI opval
= CPU (h_gr
[((UINT
) 10)]);
5269 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5270 written
|= (1 << 10);
5271 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5275 if (ANDSI (FLD (f_reglist_hi_st
), 64)) {
5278 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5279 CPU (h_gr
[((UINT
) 15)]) = opval
;
5280 written
|= (1 << 9);
5281 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5284 SI opval
= CPU (h_gr
[((UINT
) 9)]);
5285 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5286 written
|= (1 << 10);
5287 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5291 if (ANDSI (FLD (f_reglist_hi_st
), 128)) {
5294 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5295 CPU (h_gr
[((UINT
) 15)]) = opval
;
5296 written
|= (1 << 9);
5297 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5300 SI opval
= CPU (h_gr
[((UINT
) 8)]);
5301 SETMEMSI (current_cpu
, pc
, CPU (h_gr
[((UINT
) 15)]), opval
);
5302 written
|= (1 << 10);
5303 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5309 abuf
->written
= written
;
5314 CASE (sem
, INSN_ENTER
) : /* enter $u10 */
5316 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5317 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5318 #define FLD(f) abuf->fields.sfmt_enter.f
5319 int UNUSED written
= 0;
5320 IADDR UNUSED pc
= abuf
->addr
;
5321 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5325 tmp_tmp
= SUBSI (CPU (h_gr
[((UINT
) 15)]), 4);
5327 SI opval
= CPU (h_gr
[((UINT
) 14)]);
5328 SETMEMSI (current_cpu
, pc
, tmp_tmp
, opval
);
5329 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5333 CPU (h_gr
[((UINT
) 14)]) = opval
;
5334 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5337 SI opval
= SUBSI (CPU (h_gr
[((UINT
) 15)]), FLD (f_u10
));
5338 CPU (h_gr
[((UINT
) 15)]) = opval
;
5339 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5347 CASE (sem
, INSN_LEAVE
) : /* leave */
5349 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5350 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5351 #define FLD(f) abuf->fields.sfmt_enter.f
5352 int UNUSED written
= 0;
5353 IADDR UNUSED pc
= abuf
->addr
;
5354 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5358 SI opval
= ADDSI (CPU (h_gr
[((UINT
) 14)]), 4);
5359 CPU (h_gr
[((UINT
) 15)]) = opval
;
5360 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5363 SI opval
= GETMEMSI (current_cpu
, pc
, SUBSI (CPU (h_gr
[((UINT
) 15)]), 4));
5364 CPU (h_gr
[((UINT
) 14)]) = opval
;
5365 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5373 CASE (sem
, INSN_XCHB
) : /* xchb @$Rj,$Ri */
5375 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5376 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5377 #define FLD(f) abuf->fields.sfmt_add.f
5378 int UNUSED written
= 0;
5379 IADDR UNUSED pc
= abuf
->addr
;
5380 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5384 tmp_tmp
= * FLD (i_Ri
);
5386 SI opval
= GETMEMUQI (current_cpu
, pc
, * FLD (i_Rj
));
5387 * FLD (i_Ri
) = opval
;
5388 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
5391 UQI opval
= tmp_tmp
;
5392 SETMEMUQI (current_cpu
, pc
, * FLD (i_Rj
), opval
);
5393 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5403 ENDSWITCH (sem
) /* End of semantic switch. */
5405 /* At this point `vpc' contains the next insn to execute. */
5408 #undef DEFINE_SWITCH
5409 #endif /* DEFINE_SWITCH */