OSDN Git Service

10eed90db8461527b1df9961bfdd0ce33f518e22
[pf3gnuchains/pf3gnuchains4x.git] / sid / component / cgen-cpu / xstormy16 / xstormy16-sem.cxx
1 /* Simulator instruction semantics for xstormy16.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 2000-2010 Red Hat, Inc.
6
7 This file is part of the Red Hat simulators.
8
9
10 */
11
12
13 #if HAVE_CONFIG_H
14 #include "config.h"
15 #endif
16 #include "xstormy16.h"
17
18 using namespace xstormy16; // FIXME: namespace organization still wip
19 #define GET_ATTR(name) GET_ATTR_##name ()
20
21
22 // ********** x-invalid: --invalid--
23
24 sem_status
25 xstormy16_sem_x_invalid (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
26 {
27 #define FLD(f) abuf->fields.fmt_empty.f
28   sem_status status = SEM_STATUS_NORMAL;
29   xstormy16_scache* abuf = sem;
30   PCADDR pc = abuf->addr;
31   PCADDR npc = pc + 0;
32
33   {
34     current_cpu->invalid_insn (pc);
35     assert (0);
36     /* NOTREACHED */
37   }
38
39   current_cpu->done_insn (npc, status);
40   return status;
41 #undef FLD
42 }
43
44 // ********** movlmemimm: mov$ws2 $lmem8,#$imm16
45
46 sem_status
47 xstormy16_sem_movlmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
48 {
49 #define FLD(f) abuf->fields.sfmt_movlmemimm.f
50   sem_status status = SEM_STATUS_NORMAL;
51   xstormy16_scache* abuf = sem;
52   PCADDR pc = abuf->addr;
53   PCADDR npc = pc + 4;
54
55 if (FLD (f_op2m)) {
56 {
57   HI tmp_nvalue;
58   tmp_nvalue = FLD (f_imm16);
59   {
60     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6))));
61     if (UNLIKELY(current_cpu->trace_result_p))
62       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
63     current_cpu->h_gr_set (((UINT) 14), opval);
64   }
65   {
66     HI opval = tmp_nvalue;
67     if (UNLIKELY(current_cpu->trace_result_p))
68       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (FLD (f_lmem8), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
69     current_cpu->SETMEMHI (pc, ANDSI (FLD (f_lmem8), 65534), opval);
70   }
71 }
72 } else {
73 {
74   HI tmp_nvalue;
75   tmp_nvalue = ANDSI (FLD (f_imm16), 255);
76   {
77     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6))));
78     if (UNLIKELY(current_cpu->trace_result_p))
79       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
80     current_cpu->h_gr_set (((UINT) 14), opval);
81   }
82   {
83     QI opval = tmp_nvalue;
84     if (UNLIKELY(current_cpu->trace_result_p))
85       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) FLD (f_lmem8) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
86     current_cpu->SETMEMQI (pc, FLD (f_lmem8), opval);
87   }
88 }
89 }
90
91   current_cpu->done_insn (npc, status);
92   return status;
93 #undef FLD
94 }
95
96 // ********** movhmemimm: mov$ws2 $hmem8,#$imm16
97
98 sem_status
99 xstormy16_sem_movhmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
100 {
101 #define FLD(f) abuf->fields.sfmt_movhmemimm.f
102   sem_status status = SEM_STATUS_NORMAL;
103   xstormy16_scache* abuf = sem;
104   PCADDR pc = abuf->addr;
105   PCADDR npc = pc + 4;
106
107 if (FLD (f_op2m)) {
108 {
109   HI tmp_nvalue;
110   tmp_nvalue = FLD (f_imm16);
111   {
112     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6))));
113     if (UNLIKELY(current_cpu->trace_result_p))
114       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
115     current_cpu->h_gr_set (((UINT) 14), opval);
116   }
117   {
118     HI opval = tmp_nvalue;
119     if (UNLIKELY(current_cpu->trace_result_p))
120       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (FLD (f_hmem8), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
121     current_cpu->SETMEMHI (pc, ANDSI (FLD (f_hmem8), 65534), opval);
122   }
123 }
124 } else {
125 {
126   HI tmp_nvalue;
127   tmp_nvalue = ANDSI (FLD (f_imm16), 255);
128   {
129     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6))));
130     if (UNLIKELY(current_cpu->trace_result_p))
131       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
132     current_cpu->h_gr_set (((UINT) 14), opval);
133   }
134   {
135     QI opval = tmp_nvalue;
136     if (UNLIKELY(current_cpu->trace_result_p))
137       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) FLD (f_hmem8) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
138     current_cpu->SETMEMQI (pc, FLD (f_hmem8), opval);
139   }
140 }
141 }
142
143   current_cpu->done_insn (npc, status);
144   return status;
145 #undef FLD
146 }
147
148 // ********** movlgrmem: mov$ws2 $Rm,$lmem8
149
150 sem_status
151 xstormy16_sem_movlgrmem (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
152 {
153 #define FLD(f) abuf->fields.sfmt_movlgrmem.f
154   sem_status status = SEM_STATUS_NORMAL;
155   xstormy16_scache* abuf = sem;
156   PCADDR pc = abuf->addr;
157   PCADDR npc = pc + 2;
158
159 if (FLD (f_op2m)) {
160 {
161   HI tmp_nvalue;
162   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (FLD (f_lmem8), 65534));
163   {
164     HI opval = tmp_nvalue;
165     if (UNLIKELY(current_cpu->trace_result_p))
166       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rm) << ']' << ":=0x" << hex << opval << dec << "  ";
167     current_cpu->h_gr_set (FLD (f_Rm), opval);
168   }
169   {
170     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
171     if (UNLIKELY(current_cpu->trace_result_p))
172       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
173     current_cpu->h_gr_set (((UINT) 14), opval);
174   }
175 }
176 } else {
177 {
178   HI tmp_nvalue;
179   tmp_nvalue = current_cpu->GETMEMQI (pc, FLD (f_lmem8));
180   {
181     HI opval = tmp_nvalue;
182     if (UNLIKELY(current_cpu->trace_result_p))
183       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rm) << ']' << ":=0x" << hex << opval << dec << "  ";
184     current_cpu->h_gr_set (FLD (f_Rm), opval);
185   }
186   {
187     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
188     if (UNLIKELY(current_cpu->trace_result_p))
189       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
190     current_cpu->h_gr_set (((UINT) 14), opval);
191   }
192 }
193 }
194
195   current_cpu->done_insn (npc, status);
196   return status;
197 #undef FLD
198 }
199
200 // ********** movhgrmem: mov$ws2 $Rm,$hmem8
201
202 sem_status
203 xstormy16_sem_movhgrmem (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
204 {
205 #define FLD(f) abuf->fields.sfmt_movhgrmem.f
206   sem_status status = SEM_STATUS_NORMAL;
207   xstormy16_scache* abuf = sem;
208   PCADDR pc = abuf->addr;
209   PCADDR npc = pc + 2;
210
211 if (FLD (f_op2m)) {
212 {
213   HI tmp_nvalue;
214   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (FLD (f_hmem8), 65534));
215   {
216     HI opval = tmp_nvalue;
217     if (UNLIKELY(current_cpu->trace_result_p))
218       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rm) << ']' << ":=0x" << hex << opval << dec << "  ";
219     current_cpu->h_gr_set (FLD (f_Rm), opval);
220   }
221   {
222     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
223     if (UNLIKELY(current_cpu->trace_result_p))
224       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
225     current_cpu->h_gr_set (((UINT) 14), opval);
226   }
227 }
228 } else {
229 {
230   HI tmp_nvalue;
231   tmp_nvalue = current_cpu->GETMEMQI (pc, FLD (f_hmem8));
232   {
233     HI opval = tmp_nvalue;
234     if (UNLIKELY(current_cpu->trace_result_p))
235       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rm) << ']' << ":=0x" << hex << opval << dec << "  ";
236     current_cpu->h_gr_set (FLD (f_Rm), opval);
237   }
238   {
239     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
240     if (UNLIKELY(current_cpu->trace_result_p))
241       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
242     current_cpu->h_gr_set (((UINT) 14), opval);
243   }
244 }
245 }
246
247   current_cpu->done_insn (npc, status);
248   return status;
249 #undef FLD
250 }
251
252 // ********** movlmemgr: mov$ws2 $lmem8,$Rm
253
254 sem_status
255 xstormy16_sem_movlmemgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
256 {
257 #define FLD(f) abuf->fields.sfmt_movlgrmem.f
258   sem_status status = SEM_STATUS_NORMAL;
259   xstormy16_scache* abuf = sem;
260   PCADDR pc = abuf->addr;
261   PCADDR npc = pc + 2;
262
263 if (FLD (f_op2m)) {
264 {
265   HI tmp_nvalue;
266   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rm));
267   {
268     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6))));
269     if (UNLIKELY(current_cpu->trace_result_p))
270       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
271     current_cpu->h_gr_set (((UINT) 14), opval);
272   }
273   {
274     HI opval = tmp_nvalue;
275     if (UNLIKELY(current_cpu->trace_result_p))
276       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (FLD (f_lmem8), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
277     current_cpu->SETMEMHI (pc, ANDSI (FLD (f_lmem8), 65534), opval);
278   }
279 }
280 } else {
281 {
282   HI tmp_nvalue;
283   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rm));
284   {
285     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6))));
286     if (UNLIKELY(current_cpu->trace_result_p))
287       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
288     current_cpu->h_gr_set (((UINT) 14), opval);
289   }
290   {
291     QI opval = tmp_nvalue;
292     if (UNLIKELY(current_cpu->trace_result_p))
293       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) FLD (f_lmem8) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
294     current_cpu->SETMEMQI (pc, FLD (f_lmem8), opval);
295   }
296 }
297 }
298
299   current_cpu->done_insn (npc, status);
300   return status;
301 #undef FLD
302 }
303
304 // ********** movhmemgr: mov$ws2 $hmem8,$Rm
305
306 sem_status
307 xstormy16_sem_movhmemgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
308 {
309 #define FLD(f) abuf->fields.sfmt_movhgrmem.f
310   sem_status status = SEM_STATUS_NORMAL;
311   xstormy16_scache* abuf = sem;
312   PCADDR pc = abuf->addr;
313   PCADDR npc = pc + 2;
314
315 if (FLD (f_op2m)) {
316 {
317   HI tmp_nvalue;
318   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rm));
319   {
320     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6))));
321     if (UNLIKELY(current_cpu->trace_result_p))
322       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
323     current_cpu->h_gr_set (((UINT) 14), opval);
324   }
325   {
326     HI opval = tmp_nvalue;
327     if (UNLIKELY(current_cpu->trace_result_p))
328       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (FLD (f_hmem8), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
329     current_cpu->SETMEMHI (pc, ANDSI (FLD (f_hmem8), 65534), opval);
330   }
331 }
332 } else {
333 {
334   HI tmp_nvalue;
335   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rm));
336   {
337     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6))));
338     if (UNLIKELY(current_cpu->trace_result_p))
339       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
340     current_cpu->h_gr_set (((UINT) 14), opval);
341   }
342   {
343     QI opval = tmp_nvalue;
344     if (UNLIKELY(current_cpu->trace_result_p))
345       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) FLD (f_hmem8) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
346     current_cpu->SETMEMQI (pc, FLD (f_hmem8), opval);
347   }
348 }
349 }
350
351   current_cpu->done_insn (npc, status);
352   return status;
353 #undef FLD
354 }
355
356 // ********** movgrgri: mov$ws2 $Rdm,($Rs)
357
358 sem_status
359 xstormy16_sem_movgrgri (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
360 {
361 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
362   sem_status status = SEM_STATUS_NORMAL;
363   xstormy16_scache* abuf = sem;
364   PCADDR pc = abuf->addr;
365   PCADDR npc = pc + 2;
366
367 if (FLD (f_op2m)) {
368 {
369   HI tmp_nvalue;
370   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534));
371   {
372     HI opval = tmp_nvalue;
373     if (UNLIKELY(current_cpu->trace_result_p))
374       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
375     current_cpu->h_gr_set (FLD (f_Rdm), opval);
376   }
377   {
378     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
379     if (UNLIKELY(current_cpu->trace_result_p))
380       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
381     current_cpu->h_gr_set (((UINT) 14), opval);
382   }
383 }
384 } else {
385 {
386   HI tmp_nvalue;
387   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, current_cpu->h_gr_get (FLD (f_Rs))));
388   {
389     HI opval = tmp_nvalue;
390     if (UNLIKELY(current_cpu->trace_result_p))
391       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
392     current_cpu->h_gr_set (FLD (f_Rdm), opval);
393   }
394   {
395     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
396     if (UNLIKELY(current_cpu->trace_result_p))
397       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
398     current_cpu->h_gr_set (((UINT) 14), opval);
399   }
400 }
401 }
402
403   current_cpu->done_insn (npc, status);
404   return status;
405 #undef FLD
406 }
407
408 // ********** movgrgripostinc: mov$ws2 $Rdm,($Rs++)
409
410 sem_status
411 xstormy16_sem_movgrgripostinc (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
412 {
413 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
414   sem_status status = SEM_STATUS_NORMAL;
415   xstormy16_scache* abuf = sem;
416   PCADDR pc = abuf->addr;
417   PCADDR npc = pc + 2;
418
419 {
420 if (FLD (f_op2m)) {
421 {
422   HI tmp_nvalue;
423   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534));
424   {
425     HI opval = tmp_nvalue;
426     if (UNLIKELY(current_cpu->trace_result_p))
427       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
428     current_cpu->h_gr_set (FLD (f_Rdm), opval);
429   }
430   {
431     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
432     if (UNLIKELY(current_cpu->trace_result_p))
433       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
434     current_cpu->h_gr_set (((UINT) 14), opval);
435   }
436 }
437 } else {
438 {
439   HI tmp_nvalue;
440   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, current_cpu->h_gr_get (FLD (f_Rs))));
441   {
442     HI opval = tmp_nvalue;
443     if (UNLIKELY(current_cpu->trace_result_p))
444       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
445     current_cpu->h_gr_set (FLD (f_Rdm), opval);
446   }
447   {
448     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
449     if (UNLIKELY(current_cpu->trace_result_p))
450       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
451     current_cpu->h_gr_set (((UINT) 14), opval);
452   }
453 }
454 }
455   {
456     SI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (1, FLD (f_op2m)));
457     if (UNLIKELY(current_cpu->trace_result_p))
458       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
459     current_cpu->h_gr_set (FLD (f_Rs), opval);
460   }
461 }
462
463   current_cpu->done_insn (npc, status);
464   return status;
465 #undef FLD
466 }
467
468 // ********** movgrgripredec: mov$ws2 $Rdm,(--$Rs)
469
470 sem_status
471 xstormy16_sem_movgrgripredec (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
472 {
473 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
474   sem_status status = SEM_STATUS_NORMAL;
475   xstormy16_scache* abuf = sem;
476   PCADDR pc = abuf->addr;
477   PCADDR npc = pc + 2;
478
479 {
480   {
481     SI opval = SUBSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (1, FLD (f_op2m)));
482     if (UNLIKELY(current_cpu->trace_result_p))
483       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
484     current_cpu->h_gr_set (FLD (f_Rs), opval);
485   }
486 if (FLD (f_op2m)) {
487 {
488   HI tmp_nvalue;
489   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534));
490   {
491     HI opval = tmp_nvalue;
492     if (UNLIKELY(current_cpu->trace_result_p))
493       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
494     current_cpu->h_gr_set (FLD (f_Rdm), opval);
495   }
496   {
497     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
498     if (UNLIKELY(current_cpu->trace_result_p))
499       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
500     current_cpu->h_gr_set (((UINT) 14), opval);
501   }
502 }
503 } else {
504 {
505   HI tmp_nvalue;
506   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, current_cpu->h_gr_get (FLD (f_Rs))));
507   {
508     HI opval = tmp_nvalue;
509     if (UNLIKELY(current_cpu->trace_result_p))
510       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
511     current_cpu->h_gr_set (FLD (f_Rdm), opval);
512   }
513   {
514     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
515     if (UNLIKELY(current_cpu->trace_result_p))
516       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
517     current_cpu->h_gr_set (((UINT) 14), opval);
518   }
519 }
520 }
521 }
522
523   current_cpu->done_insn (npc, status);
524   return status;
525 #undef FLD
526 }
527
528 // ********** movgrigr: mov$ws2 ($Rs),$Rdm
529
530 sem_status
531 xstormy16_sem_movgrigr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
532 {
533 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
534   sem_status status = SEM_STATUS_NORMAL;
535   xstormy16_scache* abuf = sem;
536   PCADDR pc = abuf->addr;
537   PCADDR npc = pc + 2;
538
539 {
540 if (FLD (f_op2m)) {
541   {
542     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
543     if (UNLIKELY(current_cpu->trace_result_p))
544       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
545     current_cpu->SETMEMHI (pc, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534), opval);
546   }
547 } else {
548   {
549     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
550     if (UNLIKELY(current_cpu->trace_result_p))
551       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (FLD (f_Rs)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
552     current_cpu->SETMEMQI (pc, current_cpu->h_gr_get (FLD (f_Rs)), opval);
553   }
554 }
555 {
556   HI tmp_nvalue;
557   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
558   {
559     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
560     if (UNLIKELY(current_cpu->trace_result_p))
561       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
562     current_cpu->h_gr_set (((UINT) 14), opval);
563   }
564 }
565 }
566
567   current_cpu->done_insn (npc, status);
568   return status;
569 #undef FLD
570 }
571
572 // ********** movgripostincgr: mov$ws2 ($Rs++),$Rdm
573
574 sem_status
575 xstormy16_sem_movgripostincgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
576 {
577 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
578   sem_status status = SEM_STATUS_NORMAL;
579   xstormy16_scache* abuf = sem;
580   PCADDR pc = abuf->addr;
581   PCADDR npc = pc + 2;
582
583 {
584 if (FLD (f_op2m)) {
585   {
586     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
587     if (UNLIKELY(current_cpu->trace_result_p))
588       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
589     current_cpu->SETMEMHI (pc, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534), opval);
590   }
591 } else {
592   {
593     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
594     if (UNLIKELY(current_cpu->trace_result_p))
595       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (FLD (f_Rs)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
596     current_cpu->SETMEMQI (pc, current_cpu->h_gr_get (FLD (f_Rs)), opval);
597   }
598 }
599 {
600   HI tmp_nvalue;
601   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
602   {
603     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
604     if (UNLIKELY(current_cpu->trace_result_p))
605       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
606     current_cpu->h_gr_set (((UINT) 14), opval);
607   }
608 }
609   {
610     SI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
611     if (UNLIKELY(current_cpu->trace_result_p))
612       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
613     current_cpu->h_gr_set (FLD (f_Rs), opval);
614   }
615 }
616
617   current_cpu->done_insn (npc, status);
618   return status;
619 #undef FLD
620 }
621
622 // ********** movgripredecgr: mov$ws2 (--$Rs),$Rdm
623
624 sem_status
625 xstormy16_sem_movgripredecgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
626 {
627 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
628   sem_status status = SEM_STATUS_NORMAL;
629   xstormy16_scache* abuf = sem;
630   PCADDR pc = abuf->addr;
631   PCADDR npc = pc + 2;
632
633 {
634   {
635     SI opval = SUBSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
636     if (UNLIKELY(current_cpu->trace_result_p))
637       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
638     current_cpu->h_gr_set (FLD (f_Rs), opval);
639   }
640 {
641   HI tmp_nvalue;
642   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
643   {
644     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
645     if (UNLIKELY(current_cpu->trace_result_p))
646       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
647     current_cpu->h_gr_set (((UINT) 14), opval);
648   }
649 }
650 if (FLD (f_op2m)) {
651   {
652     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
653     if (UNLIKELY(current_cpu->trace_result_p))
654       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
655     current_cpu->SETMEMHI (pc, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 65534), opval);
656   }
657 } else {
658   {
659     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
660     if (UNLIKELY(current_cpu->trace_result_p))
661       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (FLD (f_Rs)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
662     current_cpu->SETMEMQI (pc, current_cpu->h_gr_get (FLD (f_Rs)), opval);
663   }
664 }
665 }
666
667   current_cpu->done_insn (npc, status);
668   return status;
669 #undef FLD
670 }
671
672 // ********** movgrgrii: mov$ws2 $Rdm,($Rs,$imm12)
673
674 sem_status
675 xstormy16_sem_movgrgrii (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
676 {
677 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
678   sem_status status = SEM_STATUS_NORMAL;
679   xstormy16_scache* abuf = sem;
680   PCADDR pc = abuf->addr;
681   PCADDR npc = pc + 4;
682
683 if (FLD (f_op2m)) {
684 {
685   HI tmp_nvalue;
686   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534));
687   {
688     HI opval = tmp_nvalue;
689     if (UNLIKELY(current_cpu->trace_result_p))
690       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
691     current_cpu->h_gr_set (FLD (f_Rdm), opval);
692   }
693   {
694     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
695     if (UNLIKELY(current_cpu->trace_result_p))
696       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
697     current_cpu->h_gr_set (((UINT) 14), opval);
698   }
699 }
700 } else {
701 {
702   HI tmp_nvalue;
703   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12))));
704   {
705     HI opval = tmp_nvalue;
706     if (UNLIKELY(current_cpu->trace_result_p))
707       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
708     current_cpu->h_gr_set (FLD (f_Rdm), opval);
709   }
710   {
711     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
712     if (UNLIKELY(current_cpu->trace_result_p))
713       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
714     current_cpu->h_gr_set (((UINT) 14), opval);
715   }
716 }
717 }
718
719   current_cpu->done_insn (npc, status);
720   return status;
721 #undef FLD
722 }
723
724 // ********** movgrgriipostinc: mov$ws2 $Rdm,($Rs++,$imm12)
725
726 sem_status
727 xstormy16_sem_movgrgriipostinc (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
728 {
729 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
730   sem_status status = SEM_STATUS_NORMAL;
731   xstormy16_scache* abuf = sem;
732   PCADDR pc = abuf->addr;
733   PCADDR npc = pc + 4;
734
735 {
736 if (FLD (f_op2m)) {
737 {
738   HI tmp_nvalue;
739   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534));
740   {
741     HI opval = tmp_nvalue;
742     if (UNLIKELY(current_cpu->trace_result_p))
743       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
744     current_cpu->h_gr_set (FLD (f_Rdm), opval);
745   }
746   {
747     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
748     if (UNLIKELY(current_cpu->trace_result_p))
749       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
750     current_cpu->h_gr_set (((UINT) 14), opval);
751   }
752 }
753 } else {
754 {
755   HI tmp_nvalue;
756   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12))));
757   {
758     HI opval = tmp_nvalue;
759     if (UNLIKELY(current_cpu->trace_result_p))
760       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
761     current_cpu->h_gr_set (FLD (f_Rdm), opval);
762   }
763   {
764     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
765     if (UNLIKELY(current_cpu->trace_result_p))
766       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
767     current_cpu->h_gr_set (((UINT) 14), opval);
768   }
769 }
770 }
771   {
772     SI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
773     if (UNLIKELY(current_cpu->trace_result_p))
774       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
775     current_cpu->h_gr_set (FLD (f_Rs), opval);
776   }
777 }
778
779   current_cpu->done_insn (npc, status);
780   return status;
781 #undef FLD
782 }
783
784 // ********** movgrgriipredec: mov$ws2 $Rdm,(--$Rs,$imm12)
785
786 sem_status
787 xstormy16_sem_movgrgriipredec (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
788 {
789 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
790   sem_status status = SEM_STATUS_NORMAL;
791   xstormy16_scache* abuf = sem;
792   PCADDR pc = abuf->addr;
793   PCADDR npc = pc + 4;
794
795 {
796   {
797     SI opval = SUBSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
798     if (UNLIKELY(current_cpu->trace_result_p))
799       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
800     current_cpu->h_gr_set (FLD (f_Rs), opval);
801   }
802 if (FLD (f_op2m)) {
803 {
804   HI tmp_nvalue;
805   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534));
806   {
807     HI opval = tmp_nvalue;
808     if (UNLIKELY(current_cpu->trace_result_p))
809       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
810     current_cpu->h_gr_set (FLD (f_Rdm), opval);
811   }
812   {
813     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
814     if (UNLIKELY(current_cpu->trace_result_p))
815       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
816     current_cpu->h_gr_set (((UINT) 14), opval);
817   }
818 }
819 } else {
820 {
821   HI tmp_nvalue;
822   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12))));
823   {
824     HI opval = tmp_nvalue;
825     if (UNLIKELY(current_cpu->trace_result_p))
826       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
827     current_cpu->h_gr_set (FLD (f_Rdm), opval);
828   }
829   {
830     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
831     if (UNLIKELY(current_cpu->trace_result_p))
832       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
833     current_cpu->h_gr_set (((UINT) 14), opval);
834   }
835 }
836 }
837 }
838
839   current_cpu->done_insn (npc, status);
840   return status;
841 #undef FLD
842 }
843
844 // ********** movgriigr: mov$ws2 ($Rs,$imm12),$Rdm
845
846 sem_status
847 xstormy16_sem_movgriigr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
848 {
849 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
850   sem_status status = SEM_STATUS_NORMAL;
851   xstormy16_scache* abuf = sem;
852   PCADDR pc = abuf->addr;
853   PCADDR npc = pc + 4;
854
855 {
856 if (FLD (f_op2m)) {
857   {
858     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
859     if (UNLIKELY(current_cpu->trace_result_p))
860       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
861     current_cpu->SETMEMHI (pc, ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534), opval);
862   }
863 } else {
864   {
865     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
866     if (UNLIKELY(current_cpu->trace_result_p))
867       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
868     current_cpu->SETMEMQI (pc, ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), opval);
869   }
870 }
871 {
872   HI tmp_nvalue;
873   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
874   {
875     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
876     if (UNLIKELY(current_cpu->trace_result_p))
877       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
878     current_cpu->h_gr_set (((UINT) 14), opval);
879   }
880 }
881 }
882
883   current_cpu->done_insn (npc, status);
884   return status;
885 #undef FLD
886 }
887
888 // ********** movgriipostincgr: mov$ws2 ($Rs++,$imm12),$Rdm
889
890 sem_status
891 xstormy16_sem_movgriipostincgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
892 {
893 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
894   sem_status status = SEM_STATUS_NORMAL;
895   xstormy16_scache* abuf = sem;
896   PCADDR pc = abuf->addr;
897   PCADDR npc = pc + 4;
898
899 {
900 if (FLD (f_op2m)) {
901   {
902     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
903     if (UNLIKELY(current_cpu->trace_result_p))
904       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
905     current_cpu->SETMEMHI (pc, ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534), opval);
906   }
907 } else {
908   {
909     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
910     if (UNLIKELY(current_cpu->trace_result_p))
911       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
912     current_cpu->SETMEMQI (pc, ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), opval);
913   }
914 }
915 {
916   HI tmp_nvalue;
917   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
918   {
919     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
920     if (UNLIKELY(current_cpu->trace_result_p))
921       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
922     current_cpu->h_gr_set (((UINT) 14), opval);
923   }
924 }
925   {
926     SI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), 1);
927     if (UNLIKELY(current_cpu->trace_result_p))
928       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
929     current_cpu->h_gr_set (FLD (f_Rs), opval);
930   }
931 }
932
933   current_cpu->done_insn (npc, status);
934   return status;
935 #undef FLD
936 }
937
938 // ********** movgriipredecgr: mov$ws2 (--$Rs,$imm12),$Rdm
939
940 sem_status
941 xstormy16_sem_movgriipredecgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
942 {
943 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
944   sem_status status = SEM_STATUS_NORMAL;
945   xstormy16_scache* abuf = sem;
946   PCADDR pc = abuf->addr;
947   PCADDR npc = pc + 4;
948
949 {
950   {
951     SI opval = SUBSI (current_cpu->h_gr_get (FLD (f_Rs)), 1);
952     if (UNLIKELY(current_cpu->trace_result_p))
953       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
954     current_cpu->h_gr_set (FLD (f_Rs), opval);
955   }
956 {
957   HI tmp_nvalue;
958   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
959   {
960     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
961     if (UNLIKELY(current_cpu->trace_result_p))
962       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
963     current_cpu->h_gr_set (((UINT) 14), opval);
964   }
965 }
966 if (FLD (f_op2m)) {
967   {
968     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
969     if (UNLIKELY(current_cpu->trace_result_p))
970       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
971     current_cpu->SETMEMHI (pc, ANDSI (ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), 65534), opval);
972   }
973 } else {
974   {
975     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
976     if (UNLIKELY(current_cpu->trace_result_p))
977       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
978     current_cpu->SETMEMQI (pc, ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), FLD (f_imm12)), opval);
979   }
980 }
981 }
982
983   current_cpu->done_insn (npc, status);
984   return status;
985 #undef FLD
986 }
987
988 // ********** movgrgr: mov $Rd,$Rs
989
990 sem_status
991 xstormy16_sem_movgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
992 {
993 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
994   sem_status status = SEM_STATUS_NORMAL;
995   xstormy16_scache* abuf = sem;
996   PCADDR pc = abuf->addr;
997   PCADDR npc = pc + 2;
998
999 {
1000   HI tmp_nvalue;
1001   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rs));
1002   {
1003     HI opval = tmp_nvalue;
1004     if (UNLIKELY(current_cpu->trace_result_p))
1005       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1006     current_cpu->h_gr_set (FLD (f_Rd), opval);
1007   }
1008   {
1009     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
1010     if (UNLIKELY(current_cpu->trace_result_p))
1011       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1012     current_cpu->h_gr_set (((UINT) 14), opval);
1013   }
1014 }
1015
1016   current_cpu->done_insn (npc, status);
1017   return status;
1018 #undef FLD
1019 }
1020
1021 // ********** movwimm8: mov.w Rx,#$imm8
1022
1023 sem_status
1024 xstormy16_sem_movwimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1025 {
1026 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
1027   sem_status status = SEM_STATUS_NORMAL;
1028   xstormy16_scache* abuf = sem;
1029   PCADDR pc = abuf->addr;
1030   PCADDR npc = pc + 2;
1031
1032 {
1033   HI tmp_nvalue;
1034   tmp_nvalue = FLD (f_imm8);
1035   {
1036     HI opval = tmp_nvalue;
1037     if (UNLIKELY(current_cpu->trace_result_p))
1038       current_cpu->trace_stream << "gr" << '[' << current_cpu->h_Rpsw_get () << ']' << ":=0x" << hex << opval << dec << "  ";
1039     current_cpu->h_gr_set (current_cpu->h_Rpsw_get (), opval);
1040   }
1041   {
1042     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (current_cpu->h_Rpsw_get (), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
1043     if (UNLIKELY(current_cpu->trace_result_p))
1044       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1045     current_cpu->h_gr_set (((UINT) 14), opval);
1046   }
1047 }
1048
1049   current_cpu->done_insn (npc, status);
1050   return status;
1051 #undef FLD
1052 }
1053
1054 // ********** movwgrimm8: mov.w $Rm,#$imm8small
1055
1056 sem_status
1057 xstormy16_sem_movwgrimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1058 {
1059 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
1060   sem_status status = SEM_STATUS_NORMAL;
1061   xstormy16_scache* abuf = sem;
1062   PCADDR pc = abuf->addr;
1063   PCADDR npc = pc + 2;
1064
1065 {
1066   HI tmp_nvalue;
1067   tmp_nvalue = FLD (f_imm8);
1068   {
1069     HI opval = tmp_nvalue;
1070     if (UNLIKELY(current_cpu->trace_result_p))
1071       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rm) << ']' << ":=0x" << hex << opval << dec << "  ";
1072     current_cpu->h_gr_set (FLD (f_Rm), opval);
1073   }
1074   {
1075     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
1076     if (UNLIKELY(current_cpu->trace_result_p))
1077       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1078     current_cpu->h_gr_set (((UINT) 14), opval);
1079   }
1080 }
1081
1082   current_cpu->done_insn (npc, status);
1083   return status;
1084 #undef FLD
1085 }
1086
1087 // ********** movwgrimm16: mov.w $Rd,#$imm16
1088
1089 sem_status
1090 xstormy16_sem_movwgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1091 {
1092 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
1093   sem_status status = SEM_STATUS_NORMAL;
1094   xstormy16_scache* abuf = sem;
1095   PCADDR pc = abuf->addr;
1096   PCADDR npc = pc + 4;
1097
1098 {
1099   HI tmp_nvalue;
1100   tmp_nvalue = FLD (f_imm16);
1101   {
1102     HI opval = tmp_nvalue;
1103     if (UNLIKELY(current_cpu->trace_result_p))
1104       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1105     current_cpu->h_gr_set (FLD (f_Rd), opval);
1106   }
1107   {
1108     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
1109     if (UNLIKELY(current_cpu->trace_result_p))
1110       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1111     current_cpu->h_gr_set (((UINT) 14), opval);
1112   }
1113 }
1114
1115   current_cpu->done_insn (npc, status);
1116   return status;
1117 #undef FLD
1118 }
1119
1120 // ********** movlowgr: mov.b $Rd,RxL
1121
1122 sem_status
1123 xstormy16_sem_movlowgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1124 {
1125 #define FLD(f) abuf->fields.sfmt_jmp.f
1126   sem_status status = SEM_STATUS_NORMAL;
1127   xstormy16_scache* abuf = sem;
1128   PCADDR pc = abuf->addr;
1129   PCADDR npc = pc + 2;
1130
1131 {
1132   HI tmp_nvalue;
1133   tmp_nvalue = ORSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 65280), ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), 255));
1134   {
1135     HI opval = tmp_nvalue;
1136     if (UNLIKELY(current_cpu->trace_result_p))
1137       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1138     current_cpu->h_gr_set (FLD (f_Rd), opval);
1139   }
1140   {
1141     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (0, 8)), 0), 6)))));
1142     if (UNLIKELY(current_cpu->trace_result_p))
1143       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1144     current_cpu->h_gr_set (((UINT) 14), opval);
1145   }
1146 }
1147
1148   current_cpu->done_insn (npc, status);
1149   return status;
1150 #undef FLD
1151 }
1152
1153 // ********** movhighgr: mov.b $Rd,RxH
1154
1155 sem_status
1156 xstormy16_sem_movhighgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1157 {
1158 #define FLD(f) abuf->fields.sfmt_jmp.f
1159   sem_status status = SEM_STATUS_NORMAL;
1160   xstormy16_scache* abuf = sem;
1161   PCADDR pc = abuf->addr;
1162   PCADDR npc = pc + 2;
1163
1164 {
1165   HI tmp_nvalue;
1166   tmp_nvalue = ORSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 255), ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), 65280));
1167   {
1168     HI opval = tmp_nvalue;
1169     if (UNLIKELY(current_cpu->trace_result_p))
1170       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1171     current_cpu->h_gr_set (FLD (f_Rd), opval);
1172   }
1173   {
1174     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
1175     if (UNLIKELY(current_cpu->trace_result_p))
1176       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1177     current_cpu->h_gr_set (((UINT) 14), opval);
1178   }
1179 }
1180
1181   current_cpu->done_insn (npc, status);
1182   return status;
1183 #undef FLD
1184 }
1185
1186 // ********** movfgrgri: movf$ws2 $Rdm,($Rs)
1187
1188 sem_status
1189 xstormy16_sem_movfgrgri (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1190 {
1191 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1192   sem_status status = SEM_STATUS_NORMAL;
1193   xstormy16_scache* abuf = sem;
1194   PCADDR pc = abuf->addr;
1195   PCADDR npc = pc + 2;
1196
1197 if (FLD (f_op2m)) {
1198 {
1199   HI tmp_nvalue;
1200   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (ORSI (SLLSI (current_cpu->h_gr_get (((UINT) 8)), 16), current_cpu->h_gr_get (FLD (f_Rs))), 65534));
1201   {
1202     HI opval = tmp_nvalue;
1203     if (UNLIKELY(current_cpu->trace_result_p))
1204       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1205     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1206   }
1207   {
1208     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1209     if (UNLIKELY(current_cpu->trace_result_p))
1210       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1211     current_cpu->h_gr_set (((UINT) 14), opval);
1212   }
1213 }
1214 } else {
1215 {
1216   HI tmp_nvalue;
1217   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, ORSI (SLLSI (current_cpu->h_gr_get (((UINT) 8)), 16), current_cpu->h_gr_get (FLD (f_Rs)))));
1218   {
1219     HI opval = tmp_nvalue;
1220     if (UNLIKELY(current_cpu->trace_result_p))
1221       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1222     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1223   }
1224   {
1225     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1226     if (UNLIKELY(current_cpu->trace_result_p))
1227       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1228     current_cpu->h_gr_set (((UINT) 14), opval);
1229   }
1230 }
1231 }
1232
1233   current_cpu->done_insn (npc, status);
1234   return status;
1235 #undef FLD
1236 }
1237
1238 // ********** movfgrgripostinc: movf$ws2 $Rdm,($Rs++)
1239
1240 sem_status
1241 xstormy16_sem_movfgrgripostinc (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1242 {
1243 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1244   sem_status status = SEM_STATUS_NORMAL;
1245   xstormy16_scache* abuf = sem;
1246   PCADDR pc = abuf->addr;
1247   PCADDR npc = pc + 2;
1248
1249 {
1250 if (FLD (f_op2m)) {
1251 {
1252   HI tmp_nvalue;
1253   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), 65534));
1254   {
1255     HI opval = tmp_nvalue;
1256     if (UNLIKELY(current_cpu->trace_result_p))
1257       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1258     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1259   }
1260   {
1261     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1262     if (UNLIKELY(current_cpu->trace_result_p))
1263       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1264     current_cpu->h_gr_set (((UINT) 14), opval);
1265   }
1266 }
1267 } else {
1268 {
1269   HI tmp_nvalue;
1270   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs)))));
1271   {
1272     HI opval = tmp_nvalue;
1273     if (UNLIKELY(current_cpu->trace_result_p))
1274       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1275     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1276   }
1277   {
1278     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1279     if (UNLIKELY(current_cpu->trace_result_p))
1280       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1281     current_cpu->h_gr_set (((UINT) 14), opval);
1282   }
1283 }
1284 }
1285   {
1286     SI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
1287     if (UNLIKELY(current_cpu->trace_result_p))
1288       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
1289     current_cpu->h_gr_set (FLD (f_Rs), opval);
1290   }
1291 }
1292
1293   current_cpu->done_insn (npc, status);
1294   return status;
1295 #undef FLD
1296 }
1297
1298 // ********** movfgrgripredec: movf$ws2 $Rdm,(--$Rs)
1299
1300 sem_status
1301 xstormy16_sem_movfgrgripredec (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1302 {
1303 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1304   sem_status status = SEM_STATUS_NORMAL;
1305   xstormy16_scache* abuf = sem;
1306   PCADDR pc = abuf->addr;
1307   PCADDR npc = pc + 2;
1308
1309 {
1310   {
1311     SI opval = SUBSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
1312     if (UNLIKELY(current_cpu->trace_result_p))
1313       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
1314     current_cpu->h_gr_set (FLD (f_Rs), opval);
1315   }
1316 if (FLD (f_op2m)) {
1317 {
1318   HI tmp_nvalue;
1319   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), 65534));
1320   {
1321     HI opval = tmp_nvalue;
1322     if (UNLIKELY(current_cpu->trace_result_p))
1323       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1324     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1325   }
1326   {
1327     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1328     if (UNLIKELY(current_cpu->trace_result_p))
1329       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1330     current_cpu->h_gr_set (((UINT) 14), opval);
1331   }
1332 }
1333 } else {
1334 {
1335   HI tmp_nvalue;
1336   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs)))));
1337   {
1338     HI opval = tmp_nvalue;
1339     if (UNLIKELY(current_cpu->trace_result_p))
1340       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1341     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1342   }
1343   {
1344     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1345     if (UNLIKELY(current_cpu->trace_result_p))
1346       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1347     current_cpu->h_gr_set (((UINT) 14), opval);
1348   }
1349 }
1350 }
1351 }
1352
1353   current_cpu->done_insn (npc, status);
1354   return status;
1355 #undef FLD
1356 }
1357
1358 // ********** movfgrigr: movf$ws2 ($Rs),$Rdm
1359
1360 sem_status
1361 xstormy16_sem_movfgrigr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1362 {
1363 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1364   sem_status status = SEM_STATUS_NORMAL;
1365   xstormy16_scache* abuf = sem;
1366   PCADDR pc = abuf->addr;
1367   PCADDR npc = pc + 2;
1368
1369 {
1370 if (FLD (f_op2m)) {
1371   {
1372     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1373     if (UNLIKELY(current_cpu->trace_result_p))
1374       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1375     current_cpu->SETMEMHI (pc, ANDSI (JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), 65534), opval);
1376   }
1377 } else {
1378   {
1379     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1380     if (UNLIKELY(current_cpu->trace_result_p))
1381       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
1382     current_cpu->SETMEMQI (pc, JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), opval);
1383   }
1384 }
1385 {
1386   HI tmp_nvalue;
1387   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
1388   {
1389     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1390     if (UNLIKELY(current_cpu->trace_result_p))
1391       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1392     current_cpu->h_gr_set (((UINT) 14), opval);
1393   }
1394 }
1395 }
1396
1397   current_cpu->done_insn (npc, status);
1398   return status;
1399 #undef FLD
1400 }
1401
1402 // ********** movfgripostincgr: movf$ws2 ($Rs++),$Rdm
1403
1404 sem_status
1405 xstormy16_sem_movfgripostincgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1406 {
1407 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1408   sem_status status = SEM_STATUS_NORMAL;
1409   xstormy16_scache* abuf = sem;
1410   PCADDR pc = abuf->addr;
1411   PCADDR npc = pc + 2;
1412
1413 {
1414 if (FLD (f_op2m)) {
1415   {
1416     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1417     if (UNLIKELY(current_cpu->trace_result_p))
1418       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1419     current_cpu->SETMEMHI (pc, ANDSI (JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), 65534), opval);
1420   }
1421 } else {
1422   {
1423     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1424     if (UNLIKELY(current_cpu->trace_result_p))
1425       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
1426     current_cpu->SETMEMQI (pc, JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), opval);
1427   }
1428 }
1429 {
1430   HI tmp_nvalue;
1431   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
1432   {
1433     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1434     if (UNLIKELY(current_cpu->trace_result_p))
1435       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1436     current_cpu->h_gr_set (((UINT) 14), opval);
1437   }
1438 }
1439   {
1440     SI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
1441     if (UNLIKELY(current_cpu->trace_result_p))
1442       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
1443     current_cpu->h_gr_set (FLD (f_Rs), opval);
1444   }
1445 }
1446
1447   current_cpu->done_insn (npc, status);
1448   return status;
1449 #undef FLD
1450 }
1451
1452 // ********** movfgripredecgr: movf$ws2 (--$Rs),$Rdm
1453
1454 sem_status
1455 xstormy16_sem_movfgripredecgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1456 {
1457 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1458   sem_status status = SEM_STATUS_NORMAL;
1459   xstormy16_scache* abuf = sem;
1460   PCADDR pc = abuf->addr;
1461   PCADDR npc = pc + 2;
1462
1463 {
1464 {
1465   HI tmp_nvalue;
1466   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
1467   {
1468     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1469     if (UNLIKELY(current_cpu->trace_result_p))
1470       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1471     current_cpu->h_gr_set (((UINT) 14), opval);
1472   }
1473 }
1474   {
1475     SI opval = SUBSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
1476     if (UNLIKELY(current_cpu->trace_result_p))
1477       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
1478     current_cpu->h_gr_set (FLD (f_Rs), opval);
1479   }
1480 if (FLD (f_op2m)) {
1481   {
1482     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1483     if (UNLIKELY(current_cpu->trace_result_p))
1484       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), 65534) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1485     current_cpu->SETMEMHI (pc, ANDSI (JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), 65534), opval);
1486   }
1487 } else {
1488   {
1489     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1490     if (UNLIKELY(current_cpu->trace_result_p))
1491       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
1492     current_cpu->SETMEMQI (pc, JOINHISI (current_cpu->h_gr_get (((UINT) 8)), current_cpu->h_gr_get (FLD (f_Rs))), opval);
1493   }
1494 }
1495 }
1496
1497   current_cpu->done_insn (npc, status);
1498   return status;
1499 #undef FLD
1500 }
1501
1502 // ********** movfgrgrii: movf$ws2 $Rdm,($Rb,$Rs,$imm12)
1503
1504 sem_status
1505 xstormy16_sem_movfgrgrii (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1506 {
1507 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1508   sem_status status = SEM_STATUS_NORMAL;
1509   xstormy16_scache* abuf = sem;
1510   PCADDR pc = abuf->addr;
1511   PCADDR npc = pc + 4;
1512
1513 if (FLD (f_op2m)) {
1514 {
1515   HI tmp_nvalue;
1516   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 65534));
1517   {
1518     HI opval = tmp_nvalue;
1519     if (UNLIKELY(current_cpu->trace_result_p))
1520       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1521     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1522   }
1523   {
1524     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1525     if (UNLIKELY(current_cpu->trace_result_p))
1526       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1527     current_cpu->h_gr_set (((UINT) 14), opval);
1528   }
1529 }
1530 } else {
1531 {
1532   HI tmp_nvalue;
1533   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12))));
1534   {
1535     HI opval = tmp_nvalue;
1536     if (UNLIKELY(current_cpu->trace_result_p))
1537       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1538     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1539   }
1540   {
1541     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1542     if (UNLIKELY(current_cpu->trace_result_p))
1543       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1544     current_cpu->h_gr_set (((UINT) 14), opval);
1545   }
1546 }
1547 }
1548
1549   current_cpu->done_insn (npc, status);
1550   return status;
1551 #undef FLD
1552 }
1553
1554 // ********** movfgrgriipostinc: movf$ws2 $Rdm,($Rb,$Rs++,$imm12)
1555
1556 sem_status
1557 xstormy16_sem_movfgrgriipostinc (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1558 {
1559 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1560   sem_status status = SEM_STATUS_NORMAL;
1561   xstormy16_scache* abuf = sem;
1562   PCADDR pc = abuf->addr;
1563   PCADDR npc = pc + 4;
1564
1565 {
1566 if (FLD (f_op2m)) {
1567 {
1568   HI tmp_nvalue;
1569   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 65534));
1570   {
1571     HI opval = tmp_nvalue;
1572     if (UNLIKELY(current_cpu->trace_result_p))
1573       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1574     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1575   }
1576   {
1577     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1578     if (UNLIKELY(current_cpu->trace_result_p))
1579       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1580     current_cpu->h_gr_set (((UINT) 14), opval);
1581   }
1582 }
1583 } else {
1584 {
1585   HI tmp_nvalue;
1586   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12))));
1587   {
1588     HI opval = tmp_nvalue;
1589     if (UNLIKELY(current_cpu->trace_result_p))
1590       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1591     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1592   }
1593   {
1594     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1595     if (UNLIKELY(current_cpu->trace_result_p))
1596       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1597     current_cpu->h_gr_set (((UINT) 14), opval);
1598   }
1599 }
1600 }
1601   {
1602     SI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
1603     if (UNLIKELY(current_cpu->trace_result_p))
1604       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
1605     current_cpu->h_gr_set (FLD (f_Rs), opval);
1606   }
1607 }
1608
1609   current_cpu->done_insn (npc, status);
1610   return status;
1611 #undef FLD
1612 }
1613
1614 // ********** movfgrgriipredec: movf$ws2 $Rdm,($Rb,--$Rs,$imm12)
1615
1616 sem_status
1617 xstormy16_sem_movfgrgriipredec (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1618 {
1619 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1620   sem_status status = SEM_STATUS_NORMAL;
1621   xstormy16_scache* abuf = sem;
1622   PCADDR pc = abuf->addr;
1623   PCADDR npc = pc + 4;
1624
1625 {
1626   {
1627     SI opval = SUBSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
1628     if (UNLIKELY(current_cpu->trace_result_p))
1629       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
1630     current_cpu->h_gr_set (FLD (f_Rs), opval);
1631   }
1632 if (FLD (f_op2m)) {
1633 {
1634   HI tmp_nvalue;
1635   tmp_nvalue = current_cpu->GETMEMHI (pc, ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 65534));
1636   {
1637     HI opval = tmp_nvalue;
1638     if (UNLIKELY(current_cpu->trace_result_p))
1639       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1640     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1641   }
1642   {
1643     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1644     if (UNLIKELY(current_cpu->trace_result_p))
1645       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1646     current_cpu->h_gr_set (((UINT) 14), opval);
1647   }
1648 }
1649 } else {
1650 {
1651   HI tmp_nvalue;
1652   tmp_nvalue = ANDSI (255, current_cpu->GETMEMQI (pc, ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12))));
1653   {
1654     HI opval = tmp_nvalue;
1655     if (UNLIKELY(current_cpu->trace_result_p))
1656       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rdm) << ']' << ":=0x" << hex << opval << dec << "  ";
1657     current_cpu->h_gr_set (FLD (f_Rdm), opval);
1658   }
1659   {
1660     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1661     if (UNLIKELY(current_cpu->trace_result_p))
1662       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1663     current_cpu->h_gr_set (((UINT) 14), opval);
1664   }
1665 }
1666 }
1667 }
1668
1669   current_cpu->done_insn (npc, status);
1670   return status;
1671 #undef FLD
1672 }
1673
1674 // ********** movfgriigr: movf$ws2 ($Rb,$Rs,$imm12),$Rdm
1675
1676 sem_status
1677 xstormy16_sem_movfgriigr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1678 {
1679 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1680   sem_status status = SEM_STATUS_NORMAL;
1681   xstormy16_scache* abuf = sem;
1682   PCADDR pc = abuf->addr;
1683   PCADDR npc = pc + 4;
1684
1685 {
1686 if (FLD (f_op2m)) {
1687   {
1688     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1689     if (UNLIKELY(current_cpu->trace_result_p))
1690       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 0xfffffffe) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1691     current_cpu->SETMEMHI (pc, ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 0xfffffffe), opval);
1692   }
1693 } else {
1694   {
1695     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1696     if (UNLIKELY(current_cpu->trace_result_p))
1697       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
1698     current_cpu->SETMEMQI (pc, ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), opval);
1699   }
1700 }
1701 {
1702   HI tmp_nvalue;
1703   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
1704   {
1705     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1706     if (UNLIKELY(current_cpu->trace_result_p))
1707       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1708     current_cpu->h_gr_set (((UINT) 14), opval);
1709   }
1710 }
1711 }
1712
1713   current_cpu->done_insn (npc, status);
1714   return status;
1715 #undef FLD
1716 }
1717
1718 // ********** movfgriipostincgr: movf$ws2 ($Rb,$Rs++,$imm12),$Rdm
1719
1720 sem_status
1721 xstormy16_sem_movfgriipostincgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1722 {
1723 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1724   sem_status status = SEM_STATUS_NORMAL;
1725   xstormy16_scache* abuf = sem;
1726   PCADDR pc = abuf->addr;
1727   PCADDR npc = pc + 4;
1728
1729 {
1730 if (FLD (f_op2m)) {
1731   {
1732     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1733     if (UNLIKELY(current_cpu->trace_result_p))
1734       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 0xfffffffe) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1735     current_cpu->SETMEMHI (pc, ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 0xfffffffe), opval);
1736   }
1737 } else {
1738   {
1739     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1740     if (UNLIKELY(current_cpu->trace_result_p))
1741       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
1742     current_cpu->SETMEMQI (pc, ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), opval);
1743   }
1744 }
1745 {
1746   HI tmp_nvalue;
1747   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
1748   {
1749     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1750     if (UNLIKELY(current_cpu->trace_result_p))
1751       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1752     current_cpu->h_gr_set (((UINT) 14), opval);
1753   }
1754 }
1755   {
1756     SI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rs)), ADDSI (FLD (f_op2m), 1));
1757     if (UNLIKELY(current_cpu->trace_result_p))
1758       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
1759     current_cpu->h_gr_set (FLD (f_Rs), opval);
1760   }
1761 }
1762
1763   current_cpu->done_insn (npc, status);
1764   return status;
1765 #undef FLD
1766 }
1767
1768 // ********** movfgriipredecgr: movf$ws2 ($Rb,--$Rs,$imm12),$Rdm
1769
1770 sem_status
1771 xstormy16_sem_movfgriipredecgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1772 {
1773 #define FLD(f) abuf->fields.sfmt_movfgrgrii.f
1774   sem_status status = SEM_STATUS_NORMAL;
1775   xstormy16_scache* abuf = sem;
1776   PCADDR pc = abuf->addr;
1777   PCADDR npc = pc + 4;
1778
1779 {
1780   {
1781     SI opval = SUBSI (current_cpu->h_gr_get (FLD (f_Rs)), 1);
1782     if (UNLIKELY(current_cpu->trace_result_p))
1783       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
1784     current_cpu->h_gr_set (FLD (f_Rs), opval);
1785   }
1786 {
1787   HI tmp_nvalue;
1788   tmp_nvalue = current_cpu->h_gr_get (FLD (f_Rdm));
1789   {
1790     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rdm), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (FLD (f_op2m), 8)), 0), 6)))));
1791     if (UNLIKELY(current_cpu->trace_result_p))
1792       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1793     current_cpu->h_gr_set (((UINT) 14), opval);
1794   }
1795 }
1796 if (FLD (f_op2m)) {
1797   {
1798     HI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1799     if (UNLIKELY(current_cpu->trace_result_p))
1800       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 0xfffffffe) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1801     current_cpu->SETMEMHI (pc, ANDSI (ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), 0xfffffffe), opval);
1802   }
1803 } else {
1804   {
1805     QI opval = current_cpu->h_gr_get (FLD (f_Rdm));
1806     if (UNLIKELY(current_cpu->trace_result_p))
1807       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
1808     current_cpu->SETMEMQI (pc, ADDSI (JOINHISI (current_cpu->h_Rb_get (FLD (f_Rb)), current_cpu->h_gr_get (FLD (f_Rs))), FLD (f_imm12)), opval);
1809   }
1810 }
1811 }
1812
1813   current_cpu->done_insn (npc, status);
1814   return status;
1815 #undef FLD
1816 }
1817
1818 // ********** maskgrgr: mask $Rd,$Rs
1819
1820 sem_status
1821 xstormy16_sem_maskgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1822 {
1823 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
1824   sem_status status = SEM_STATUS_NORMAL;
1825   xstormy16_scache* abuf = sem;
1826   PCADDR pc = abuf->addr;
1827   PCADDR npc = pc + 2;
1828
1829 {
1830   HI tmp_nvalue;
1831   tmp_nvalue = ORHI (ANDHI (current_cpu->h_gr_get (FLD (f_Rd)), INVHI (current_cpu->h_gr_get (FLD (f_Rs)))), ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), current_cpu->h_gr_get (FLD (f_Rs))));
1832   {
1833     HI opval = tmp_nvalue;
1834     if (UNLIKELY(current_cpu->trace_result_p))
1835       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1836     current_cpu->h_gr_set (FLD (f_Rd), opval);
1837   }
1838   {
1839     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
1840     if (UNLIKELY(current_cpu->trace_result_p))
1841       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1842     current_cpu->h_gr_set (((UINT) 14), opval);
1843   }
1844 }
1845
1846   current_cpu->done_insn (npc, status);
1847   return status;
1848 #undef FLD
1849 }
1850
1851 // ********** maskgrimm16: mask $Rd,#$imm16
1852
1853 sem_status
1854 xstormy16_sem_maskgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1855 {
1856 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
1857   sem_status status = SEM_STATUS_NORMAL;
1858   xstormy16_scache* abuf = sem;
1859   PCADDR pc = abuf->addr;
1860   PCADDR npc = pc + 4;
1861
1862 {
1863   HI tmp_nvalue;
1864   tmp_nvalue = ORSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), INVSI (FLD (f_imm16))), ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm16)));
1865   {
1866     HI opval = tmp_nvalue;
1867     if (UNLIKELY(current_cpu->trace_result_p))
1868       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1869     current_cpu->h_gr_set (FLD (f_Rd), opval);
1870   }
1871   {
1872     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
1873     if (UNLIKELY(current_cpu->trace_result_p))
1874       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1875     current_cpu->h_gr_set (((UINT) 14), opval);
1876   }
1877 }
1878
1879   current_cpu->done_insn (npc, status);
1880   return status;
1881 #undef FLD
1882 }
1883
1884 // ********** pushgr: push $Rd
1885
1886 sem_status
1887 xstormy16_sem_pushgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1888 {
1889 #define FLD(f) abuf->fields.sfmt_jmp.f
1890   sem_status status = SEM_STATUS_NORMAL;
1891   xstormy16_scache* abuf = sem;
1892   PCADDR pc = abuf->addr;
1893   PCADDR npc = pc + 2;
1894
1895 {
1896   {
1897     HI opval = current_cpu->h_gr_get (FLD (f_Rd));
1898     if (UNLIKELY(current_cpu->trace_result_p))
1899       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (((UINT) 15)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1900     current_cpu->SETMEMHI (pc, current_cpu->h_gr_get (((UINT) 15)), opval);
1901   }
1902   {
1903     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), 2);
1904     if (UNLIKELY(current_cpu->trace_result_p))
1905       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
1906     current_cpu->h_gr_set (((UINT) 15), opval);
1907   }
1908 }
1909
1910   current_cpu->done_insn (npc, status);
1911   return status;
1912 #undef FLD
1913 }
1914
1915 // ********** popgr: pop $Rd
1916
1917 sem_status
1918 xstormy16_sem_popgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1919 {
1920 #define FLD(f) abuf->fields.sfmt_jmp.f
1921   sem_status status = SEM_STATUS_NORMAL;
1922   xstormy16_scache* abuf = sem;
1923   PCADDR pc = abuf->addr;
1924   PCADDR npc = pc + 2;
1925
1926 {
1927   {
1928     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), -2);
1929     if (UNLIKELY(current_cpu->trace_result_p))
1930       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
1931     current_cpu->h_gr_set (((UINT) 15), opval);
1932   }
1933   {
1934     SI opval = current_cpu->GETMEMHI (pc, current_cpu->h_gr_get (((UINT) 15)));
1935     if (UNLIKELY(current_cpu->trace_result_p))
1936       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1937     current_cpu->h_gr_set (FLD (f_Rd), opval);
1938   }
1939 }
1940
1941   current_cpu->done_insn (npc, status);
1942   return status;
1943 #undef FLD
1944 }
1945
1946 // ********** swpn: swpn $Rd
1947
1948 sem_status
1949 xstormy16_sem_swpn (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1950 {
1951 #define FLD(f) abuf->fields.sfmt_jmp.f
1952   sem_status status = SEM_STATUS_NORMAL;
1953   xstormy16_scache* abuf = sem;
1954   PCADDR pc = abuf->addr;
1955   PCADDR npc = pc + 2;
1956
1957 {
1958   HI tmp_nvalue;
1959   tmp_nvalue = ORSI (ORSI (ANDSI (SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), 4), 240), ANDSI (SRLSI (current_cpu->h_gr_get (FLD (f_Rd)), 4), 15)), ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 65280));
1960   {
1961     HI opval = tmp_nvalue;
1962     if (UNLIKELY(current_cpu->trace_result_p))
1963       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1964     current_cpu->h_gr_set (FLD (f_Rd), opval);
1965   }
1966   {
1967     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (0, 8)), 0), 6)))));
1968     if (UNLIKELY(current_cpu->trace_result_p))
1969       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
1970     current_cpu->h_gr_set (((UINT) 14), opval);
1971   }
1972 }
1973
1974   current_cpu->done_insn (npc, status);
1975   return status;
1976 #undef FLD
1977 }
1978
1979 // ********** swpb: swpb $Rd
1980
1981 sem_status
1982 xstormy16_sem_swpb (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
1983 {
1984 #define FLD(f) abuf->fields.sfmt_jmp.f
1985   sem_status status = SEM_STATUS_NORMAL;
1986   xstormy16_scache* abuf = sem;
1987   PCADDR pc = abuf->addr;
1988   PCADDR npc = pc + 2;
1989
1990 {
1991   HI tmp_nvalue;
1992   tmp_nvalue = ORSI (SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), 8), SRLSI (current_cpu->h_gr_get (FLD (f_Rd)), 8));
1993   {
1994     HI opval = tmp_nvalue;
1995     if (UNLIKELY(current_cpu->trace_result_p))
1996       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
1997     current_cpu->h_gr_set (FLD (f_Rd), opval);
1998   }
1999   {
2000     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2001     if (UNLIKELY(current_cpu->trace_result_p))
2002       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2003     current_cpu->h_gr_set (((UINT) 14), opval);
2004   }
2005 }
2006
2007   current_cpu->done_insn (npc, status);
2008   return status;
2009 #undef FLD
2010 }
2011
2012 // ********** swpw: swpw $Rd,$Rs
2013
2014 sem_status
2015 xstormy16_sem_swpw (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2016 {
2017 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
2018   sem_status status = SEM_STATUS_NORMAL;
2019   xstormy16_scache* abuf = sem;
2020   PCADDR pc = abuf->addr;
2021   PCADDR npc = pc + 2;
2022
2023 {
2024   HI tmp_foo;
2025   tmp_foo = current_cpu->h_gr_get (FLD (f_Rs));
2026   {
2027     SI opval = current_cpu->h_gr_get (FLD (f_Rd));
2028     if (UNLIKELY(current_cpu->trace_result_p))
2029       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rs) << ']' << ":=0x" << hex << opval << dec << "  ";
2030     current_cpu->h_gr_set (FLD (f_Rs), opval);
2031   }
2032 {
2033   HI tmp_nvalue;
2034   tmp_nvalue = tmp_foo;
2035   {
2036     HI opval = tmp_nvalue;
2037     if (UNLIKELY(current_cpu->trace_result_p))
2038       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2039     current_cpu->h_gr_set (FLD (f_Rd), opval);
2040   }
2041   {
2042     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2043     if (UNLIKELY(current_cpu->trace_result_p))
2044       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2045     current_cpu->h_gr_set (((UINT) 14), opval);
2046   }
2047 }
2048 }
2049
2050   current_cpu->done_insn (npc, status);
2051   return status;
2052 #undef FLD
2053 }
2054
2055 // ********** andgrgr: and $Rd,$Rs
2056
2057 sem_status
2058 xstormy16_sem_andgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2059 {
2060 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
2061   sem_status status = SEM_STATUS_NORMAL;
2062   xstormy16_scache* abuf = sem;
2063   PCADDR pc = abuf->addr;
2064   PCADDR npc = pc + 2;
2065
2066 {
2067   HI tmp_nvalue;
2068   tmp_nvalue = ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)));
2069   {
2070     HI opval = tmp_nvalue;
2071     if (UNLIKELY(current_cpu->trace_result_p))
2072       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2073     current_cpu->h_gr_set (FLD (f_Rd), opval);
2074   }
2075   {
2076     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2077     if (UNLIKELY(current_cpu->trace_result_p))
2078       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2079     current_cpu->h_gr_set (((UINT) 14), opval);
2080   }
2081 }
2082
2083   current_cpu->done_insn (npc, status);
2084   return status;
2085 #undef FLD
2086 }
2087
2088 // ********** andimm8: and Rx,#$imm8
2089
2090 sem_status
2091 xstormy16_sem_andimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2092 {
2093 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
2094   sem_status status = SEM_STATUS_NORMAL;
2095   xstormy16_scache* abuf = sem;
2096   PCADDR pc = abuf->addr;
2097   PCADDR npc = pc + 2;
2098
2099 {
2100   HI tmp_nvalue;
2101   tmp_nvalue = ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8));
2102   {
2103     HI opval = tmp_nvalue;
2104     if (UNLIKELY(current_cpu->trace_result_p))
2105       current_cpu->trace_stream << "gr" << '[' << current_cpu->h_Rpsw_get () << ']' << ":=0x" << hex << opval << dec << "  ";
2106     current_cpu->h_gr_set (current_cpu->h_Rpsw_get (), opval);
2107   }
2108   {
2109     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (current_cpu->h_Rpsw_get (), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2110     if (UNLIKELY(current_cpu->trace_result_p))
2111       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2112     current_cpu->h_gr_set (((UINT) 14), opval);
2113   }
2114 }
2115
2116   current_cpu->done_insn (npc, status);
2117   return status;
2118 #undef FLD
2119 }
2120
2121 // ********** andgrimm16: and $Rd,#$imm16
2122
2123 sem_status
2124 xstormy16_sem_andgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2125 {
2126 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
2127   sem_status status = SEM_STATUS_NORMAL;
2128   xstormy16_scache* abuf = sem;
2129   PCADDR pc = abuf->addr;
2130   PCADDR npc = pc + 4;
2131
2132 {
2133   HI tmp_nvalue;
2134   tmp_nvalue = ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16));
2135   {
2136     HI opval = tmp_nvalue;
2137     if (UNLIKELY(current_cpu->trace_result_p))
2138       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2139     current_cpu->h_gr_set (FLD (f_Rd), opval);
2140   }
2141   {
2142     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2143     if (UNLIKELY(current_cpu->trace_result_p))
2144       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2145     current_cpu->h_gr_set (((UINT) 14), opval);
2146   }
2147 }
2148
2149   current_cpu->done_insn (npc, status);
2150   return status;
2151 #undef FLD
2152 }
2153
2154 // ********** orgrgr: or $Rd,$Rs
2155
2156 sem_status
2157 xstormy16_sem_orgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2158 {
2159 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
2160   sem_status status = SEM_STATUS_NORMAL;
2161   xstormy16_scache* abuf = sem;
2162   PCADDR pc = abuf->addr;
2163   PCADDR npc = pc + 2;
2164
2165 {
2166   HI tmp_nvalue;
2167   tmp_nvalue = ORSI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)));
2168   {
2169     HI opval = tmp_nvalue;
2170     if (UNLIKELY(current_cpu->trace_result_p))
2171       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2172     current_cpu->h_gr_set (FLD (f_Rd), opval);
2173   }
2174   {
2175     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2176     if (UNLIKELY(current_cpu->trace_result_p))
2177       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2178     current_cpu->h_gr_set (((UINT) 14), opval);
2179   }
2180 }
2181
2182   current_cpu->done_insn (npc, status);
2183   return status;
2184 #undef FLD
2185 }
2186
2187 // ********** orimm8: or Rx,#$imm8
2188
2189 sem_status
2190 xstormy16_sem_orimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2191 {
2192 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
2193   sem_status status = SEM_STATUS_NORMAL;
2194   xstormy16_scache* abuf = sem;
2195   PCADDR pc = abuf->addr;
2196   PCADDR npc = pc + 2;
2197
2198 {
2199   HI tmp_nvalue;
2200   tmp_nvalue = ORHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8));
2201   {
2202     HI opval = tmp_nvalue;
2203     if (UNLIKELY(current_cpu->trace_result_p))
2204       current_cpu->trace_stream << "gr" << '[' << current_cpu->h_Rpsw_get () << ']' << ":=0x" << hex << opval << dec << "  ";
2205     current_cpu->h_gr_set (current_cpu->h_Rpsw_get (), opval);
2206   }
2207   {
2208     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (current_cpu->h_Rpsw_get (), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2209     if (UNLIKELY(current_cpu->trace_result_p))
2210       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2211     current_cpu->h_gr_set (((UINT) 14), opval);
2212   }
2213 }
2214
2215   current_cpu->done_insn (npc, status);
2216   return status;
2217 #undef FLD
2218 }
2219
2220 // ********** orgrimm16: or $Rd,#$imm16
2221
2222 sem_status
2223 xstormy16_sem_orgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2224 {
2225 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
2226   sem_status status = SEM_STATUS_NORMAL;
2227   xstormy16_scache* abuf = sem;
2228   PCADDR pc = abuf->addr;
2229   PCADDR npc = pc + 4;
2230
2231 {
2232   HI tmp_nvalue;
2233   tmp_nvalue = ORSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16));
2234   {
2235     HI opval = tmp_nvalue;
2236     if (UNLIKELY(current_cpu->trace_result_p))
2237       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2238     current_cpu->h_gr_set (FLD (f_Rd), opval);
2239   }
2240   {
2241     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2242     if (UNLIKELY(current_cpu->trace_result_p))
2243       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2244     current_cpu->h_gr_set (((UINT) 14), opval);
2245   }
2246 }
2247
2248   current_cpu->done_insn (npc, status);
2249   return status;
2250 #undef FLD
2251 }
2252
2253 // ********** xorgrgr: xor $Rd,$Rs
2254
2255 sem_status
2256 xstormy16_sem_xorgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2257 {
2258 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
2259   sem_status status = SEM_STATUS_NORMAL;
2260   xstormy16_scache* abuf = sem;
2261   PCADDR pc = abuf->addr;
2262   PCADDR npc = pc + 2;
2263
2264 {
2265   HI tmp_nvalue;
2266   tmp_nvalue = XORSI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)));
2267   {
2268     HI opval = tmp_nvalue;
2269     if (UNLIKELY(current_cpu->trace_result_p))
2270       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2271     current_cpu->h_gr_set (FLD (f_Rd), opval);
2272   }
2273   {
2274     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2275     if (UNLIKELY(current_cpu->trace_result_p))
2276       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2277     current_cpu->h_gr_set (((UINT) 14), opval);
2278   }
2279 }
2280
2281   current_cpu->done_insn (npc, status);
2282   return status;
2283 #undef FLD
2284 }
2285
2286 // ********** xorimm8: xor Rx,#$imm8
2287
2288 sem_status
2289 xstormy16_sem_xorimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2290 {
2291 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
2292   sem_status status = SEM_STATUS_NORMAL;
2293   xstormy16_scache* abuf = sem;
2294   PCADDR pc = abuf->addr;
2295   PCADDR npc = pc + 2;
2296
2297 {
2298   HI tmp_nvalue;
2299   tmp_nvalue = XORHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8));
2300   {
2301     HI opval = tmp_nvalue;
2302     if (UNLIKELY(current_cpu->trace_result_p))
2303       current_cpu->trace_stream << "gr" << '[' << current_cpu->h_Rpsw_get () << ']' << ":=0x" << hex << opval << dec << "  ";
2304     current_cpu->h_gr_set (current_cpu->h_Rpsw_get (), opval);
2305   }
2306   {
2307     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (current_cpu->h_Rpsw_get (), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2308     if (UNLIKELY(current_cpu->trace_result_p))
2309       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2310     current_cpu->h_gr_set (((UINT) 14), opval);
2311   }
2312 }
2313
2314   current_cpu->done_insn (npc, status);
2315   return status;
2316 #undef FLD
2317 }
2318
2319 // ********** xorgrimm16: xor $Rd,#$imm16
2320
2321 sem_status
2322 xstormy16_sem_xorgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2323 {
2324 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
2325   sem_status status = SEM_STATUS_NORMAL;
2326   xstormy16_scache* abuf = sem;
2327   PCADDR pc = abuf->addr;
2328   PCADDR npc = pc + 4;
2329
2330 {
2331   HI tmp_nvalue;
2332   tmp_nvalue = XORSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16));
2333   {
2334     HI opval = tmp_nvalue;
2335     if (UNLIKELY(current_cpu->trace_result_p))
2336       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2337     current_cpu->h_gr_set (FLD (f_Rd), opval);
2338   }
2339   {
2340     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2341     if (UNLIKELY(current_cpu->trace_result_p))
2342       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2343     current_cpu->h_gr_set (((UINT) 14), opval);
2344   }
2345 }
2346
2347   current_cpu->done_insn (npc, status);
2348   return status;
2349 #undef FLD
2350 }
2351
2352 // ********** notgr: not $Rd
2353
2354 sem_status
2355 xstormy16_sem_notgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2356 {
2357 #define FLD(f) abuf->fields.sfmt_jmp.f
2358   sem_status status = SEM_STATUS_NORMAL;
2359   xstormy16_scache* abuf = sem;
2360   PCADDR pc = abuf->addr;
2361   PCADDR npc = pc + 2;
2362
2363 {
2364   HI tmp_nvalue;
2365   tmp_nvalue = INVSI (current_cpu->h_gr_get (FLD (f_Rd)));
2366   {
2367     HI opval = tmp_nvalue;
2368     if (UNLIKELY(current_cpu->trace_result_p))
2369       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2370     current_cpu->h_gr_set (FLD (f_Rd), opval);
2371   }
2372   {
2373     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2374     if (UNLIKELY(current_cpu->trace_result_p))
2375       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2376     current_cpu->h_gr_set (((UINT) 14), opval);
2377   }
2378 }
2379
2380   current_cpu->done_insn (npc, status);
2381   return status;
2382 #undef FLD
2383 }
2384
2385 // ********** addgrgr: add $Rd,$Rs
2386
2387 sem_status
2388 xstormy16_sem_addgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2389 {
2390 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
2391   sem_status status = SEM_STATUS_NORMAL;
2392   xstormy16_scache* abuf = sem;
2393   PCADDR pc = abuf->addr;
2394   PCADDR npc = pc + 2;
2395
2396 {
2397   HI tmp_value;
2398   HI tmp_newpsw;
2399   tmp_value = ADDCSI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), 0);
2400   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (ADDOFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), 0), 4), SLLHI (ADDCFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), 0), 2)), ORHI (ANDHI (SRLHI (ADDCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 0), 1), 8), SLLSI (FLD (f_Rd), 12))));
2401   {
2402     HI opval = tmp_value;
2403     if (UNLIKELY(current_cpu->trace_result_p))
2404       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2405     current_cpu->h_gr_set (FLD (f_Rd), opval);
2406   }
2407   {
2408     SI opval = tmp_newpsw;
2409     if (UNLIKELY(current_cpu->trace_result_p))
2410       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2411     current_cpu->h_gr_set (((UINT) 14), opval);
2412   }
2413 }
2414
2415   current_cpu->done_insn (npc, status);
2416   return status;
2417 #undef FLD
2418 }
2419
2420 // ********** addgrimm4: add $Rd,#$imm4
2421
2422 sem_status
2423 xstormy16_sem_addgrimm4 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2424 {
2425 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
2426   sem_status status = SEM_STATUS_NORMAL;
2427   xstormy16_scache* abuf = sem;
2428   PCADDR pc = abuf->addr;
2429   PCADDR npc = pc + 2;
2430
2431 {
2432   HI tmp_value;
2433   HI tmp_newpsw;
2434   tmp_value = ADDCSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), 0);
2435   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (ADDOFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), 0), 4), SLLHI (ADDCFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), 0), 2)), ORHI (ANDHI (SRLHI (ADDCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (FLD (f_imm4), 15), 0), 1), 8), SLLSI (FLD (f_Rd), 12))));
2436   {
2437     HI opval = tmp_value;
2438     if (UNLIKELY(current_cpu->trace_result_p))
2439       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2440     current_cpu->h_gr_set (FLD (f_Rd), opval);
2441   }
2442   {
2443     SI opval = tmp_newpsw;
2444     if (UNLIKELY(current_cpu->trace_result_p))
2445       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2446     current_cpu->h_gr_set (((UINT) 14), opval);
2447   }
2448 }
2449
2450   current_cpu->done_insn (npc, status);
2451   return status;
2452 #undef FLD
2453 }
2454
2455 // ********** addimm8: add Rx,#$imm8
2456
2457 sem_status
2458 xstormy16_sem_addimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2459 {
2460 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
2461   sem_status status = SEM_STATUS_NORMAL;
2462   xstormy16_scache* abuf = sem;
2463   PCADDR pc = abuf->addr;
2464   PCADDR npc = pc + 2;
2465
2466 {
2467   HI tmp_value;
2468   HI tmp_newpsw;
2469   tmp_value = ADDCHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), 0);
2470   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (ADDOFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), 0), 4), SLLHI (ADDCFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), 0), 2)), ORHI (ANDHI (SRLHI (ADDCHI (ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), 15), ANDSI (FLD (f_imm8), 15), 0), 1), 8), SLLSI (current_cpu->h_Rpsw_get (), 12))));
2471   {
2472     HI opval = tmp_value;
2473     if (UNLIKELY(current_cpu->trace_result_p))
2474       current_cpu->trace_stream << "gr" << '[' << current_cpu->h_Rpsw_get () << ']' << ":=0x" << hex << opval << dec << "  ";
2475     current_cpu->h_gr_set (current_cpu->h_Rpsw_get (), opval);
2476   }
2477   {
2478     SI opval = tmp_newpsw;
2479     if (UNLIKELY(current_cpu->trace_result_p))
2480       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2481     current_cpu->h_gr_set (((UINT) 14), opval);
2482   }
2483 }
2484
2485   current_cpu->done_insn (npc, status);
2486   return status;
2487 #undef FLD
2488 }
2489
2490 // ********** addgrimm16: add $Rd,#$imm16
2491
2492 sem_status
2493 xstormy16_sem_addgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2494 {
2495 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
2496   sem_status status = SEM_STATUS_NORMAL;
2497   xstormy16_scache* abuf = sem;
2498   PCADDR pc = abuf->addr;
2499   PCADDR npc = pc + 4;
2500
2501 {
2502   HI tmp_value;
2503   HI tmp_newpsw;
2504   tmp_value = ADDCSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), 0);
2505   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (ADDOFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), 0), 4), SLLHI (ADDCFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), 0), 2)), ORHI (ANDHI (SRLHI (ADDCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (FLD (f_imm16), 15), 0), 1), 8), SLLSI (FLD (f_Rd), 12))));
2506   {
2507     HI opval = tmp_value;
2508     if (UNLIKELY(current_cpu->trace_result_p))
2509       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2510     current_cpu->h_gr_set (FLD (f_Rd), opval);
2511   }
2512   {
2513     SI opval = tmp_newpsw;
2514     if (UNLIKELY(current_cpu->trace_result_p))
2515       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2516     current_cpu->h_gr_set (((UINT) 14), opval);
2517   }
2518 }
2519
2520   current_cpu->done_insn (npc, status);
2521   return status;
2522 #undef FLD
2523 }
2524
2525 // ********** adcgrgr: adc $Rd,$Rs
2526
2527 sem_status
2528 xstormy16_sem_adcgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2529 {
2530 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
2531   sem_status status = SEM_STATUS_NORMAL;
2532   xstormy16_scache* abuf = sem;
2533   PCADDR pc = abuf->addr;
2534   PCADDR npc = pc + 2;
2535
2536 {
2537   HI tmp_value;
2538   HI tmp_newpsw;
2539   tmp_value = ADDCSI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), current_cpu->h_cy_get ());
2540   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (ADDOFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), current_cpu->h_cy_get ()), 4), SLLHI (ADDCFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), current_cpu->h_cy_get ()), 2)), ORHI (ANDHI (SRLHI (ADDCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), current_cpu->h_cy_get ()), 1), 8), SLLSI (FLD (f_Rd), 12))));
2541   {
2542     HI opval = tmp_value;
2543     if (UNLIKELY(current_cpu->trace_result_p))
2544       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2545     current_cpu->h_gr_set (FLD (f_Rd), opval);
2546   }
2547   {
2548     SI opval = tmp_newpsw;
2549     if (UNLIKELY(current_cpu->trace_result_p))
2550       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2551     current_cpu->h_gr_set (((UINT) 14), opval);
2552   }
2553 }
2554
2555   current_cpu->done_insn (npc, status);
2556   return status;
2557 #undef FLD
2558 }
2559
2560 // ********** adcgrimm4: adc $Rd,#$imm4
2561
2562 sem_status
2563 xstormy16_sem_adcgrimm4 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2564 {
2565 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
2566   sem_status status = SEM_STATUS_NORMAL;
2567   xstormy16_scache* abuf = sem;
2568   PCADDR pc = abuf->addr;
2569   PCADDR npc = pc + 2;
2570
2571 {
2572   HI tmp_value;
2573   HI tmp_newpsw;
2574   tmp_value = ADDCSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), current_cpu->h_cy_get ());
2575   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (ADDOFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), current_cpu->h_cy_get ()), 4), SLLHI (ADDCFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), current_cpu->h_cy_get ()), 2)), ORHI (ANDHI (SRLHI (ADDCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (FLD (f_imm4), 15), current_cpu->h_cy_get ()), 1), 8), SLLSI (FLD (f_Rd), 12))));
2576   {
2577     HI opval = tmp_value;
2578     if (UNLIKELY(current_cpu->trace_result_p))
2579       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2580     current_cpu->h_gr_set (FLD (f_Rd), opval);
2581   }
2582   {
2583     SI opval = tmp_newpsw;
2584     if (UNLIKELY(current_cpu->trace_result_p))
2585       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2586     current_cpu->h_gr_set (((UINT) 14), opval);
2587   }
2588 }
2589
2590   current_cpu->done_insn (npc, status);
2591   return status;
2592 #undef FLD
2593 }
2594
2595 // ********** adcimm8: adc Rx,#$imm8
2596
2597 sem_status
2598 xstormy16_sem_adcimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2599 {
2600 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
2601   sem_status status = SEM_STATUS_NORMAL;
2602   xstormy16_scache* abuf = sem;
2603   PCADDR pc = abuf->addr;
2604   PCADDR npc = pc + 2;
2605
2606 {
2607   HI tmp_value;
2608   HI tmp_newpsw;
2609   tmp_value = ADDCHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), current_cpu->h_cy_get ());
2610   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (ADDOFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), current_cpu->h_cy_get ()), 4), SLLHI (ADDCFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), current_cpu->h_cy_get ()), 2)), ORHI (ANDHI (SRLHI (ADDCHI (ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), 15), ANDSI (FLD (f_imm8), 15), current_cpu->h_cy_get ()), 1), 8), SLLSI (current_cpu->h_Rpsw_get (), 12))));
2611   {
2612     HI opval = tmp_value;
2613     if (UNLIKELY(current_cpu->trace_result_p))
2614       current_cpu->trace_stream << "gr" << '[' << current_cpu->h_Rpsw_get () << ']' << ":=0x" << hex << opval << dec << "  ";
2615     current_cpu->h_gr_set (current_cpu->h_Rpsw_get (), opval);
2616   }
2617   {
2618     SI opval = tmp_newpsw;
2619     if (UNLIKELY(current_cpu->trace_result_p))
2620       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2621     current_cpu->h_gr_set (((UINT) 14), opval);
2622   }
2623 }
2624
2625   current_cpu->done_insn (npc, status);
2626   return status;
2627 #undef FLD
2628 }
2629
2630 // ********** adcgrimm16: adc $Rd,#$imm16
2631
2632 sem_status
2633 xstormy16_sem_adcgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2634 {
2635 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
2636   sem_status status = SEM_STATUS_NORMAL;
2637   xstormy16_scache* abuf = sem;
2638   PCADDR pc = abuf->addr;
2639   PCADDR npc = pc + 4;
2640
2641 {
2642   HI tmp_value;
2643   HI tmp_newpsw;
2644   tmp_value = ADDCSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), current_cpu->h_cy_get ());
2645   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (ADDOFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), current_cpu->h_cy_get ()), 4), SLLHI (ADDCFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), current_cpu->h_cy_get ()), 2)), ORHI (ANDHI (SRLHI (ADDCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (FLD (f_imm16), 15), current_cpu->h_cy_get ()), 1), 8), SLLSI (FLD (f_Rd), 12))));
2646   {
2647     HI opval = tmp_value;
2648     if (UNLIKELY(current_cpu->trace_result_p))
2649       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2650     current_cpu->h_gr_set (FLD (f_Rd), opval);
2651   }
2652   {
2653     SI opval = tmp_newpsw;
2654     if (UNLIKELY(current_cpu->trace_result_p))
2655       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2656     current_cpu->h_gr_set (((UINT) 14), opval);
2657   }
2658 }
2659
2660   current_cpu->done_insn (npc, status);
2661   return status;
2662 #undef FLD
2663 }
2664
2665 // ********** subgrgr: sub $Rd,$Rs
2666
2667 sem_status
2668 xstormy16_sem_subgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2669 {
2670 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
2671   sem_status status = SEM_STATUS_NORMAL;
2672   xstormy16_scache* abuf = sem;
2673   PCADDR pc = abuf->addr;
2674   PCADDR npc = pc + 2;
2675
2676 {
2677   HI tmp_value;
2678   HI tmp_newpsw;
2679   tmp_value = SUBCSI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), 0);
2680   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), 0), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), 0), 2)), ORHI (ANDHI (SRLHI (SUBCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 0), 1), 8), SLLSI (FLD (f_Rd), 12))));
2681   {
2682     HI opval = tmp_value;
2683     if (UNLIKELY(current_cpu->trace_result_p))
2684       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2685     current_cpu->h_gr_set (FLD (f_Rd), opval);
2686   }
2687   {
2688     SI opval = tmp_newpsw;
2689     if (UNLIKELY(current_cpu->trace_result_p))
2690       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2691     current_cpu->h_gr_set (((UINT) 14), opval);
2692   }
2693 }
2694
2695   current_cpu->done_insn (npc, status);
2696   return status;
2697 #undef FLD
2698 }
2699
2700 // ********** subgrimm4: sub $Rd,#$imm4
2701
2702 sem_status
2703 xstormy16_sem_subgrimm4 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2704 {
2705 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
2706   sem_status status = SEM_STATUS_NORMAL;
2707   xstormy16_scache* abuf = sem;
2708   PCADDR pc = abuf->addr;
2709   PCADDR npc = pc + 2;
2710
2711 {
2712   HI tmp_value;
2713   HI tmp_newpsw;
2714   tmp_value = SUBCSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), 0);
2715   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), 0), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), 0), 2)), ORHI (ANDHI (SRLHI (SUBCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (FLD (f_imm4), 15), 0), 1), 8), SLLSI (FLD (f_Rd), 12))));
2716   {
2717     HI opval = tmp_value;
2718     if (UNLIKELY(current_cpu->trace_result_p))
2719       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2720     current_cpu->h_gr_set (FLD (f_Rd), opval);
2721   }
2722   {
2723     SI opval = tmp_newpsw;
2724     if (UNLIKELY(current_cpu->trace_result_p))
2725       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2726     current_cpu->h_gr_set (((UINT) 14), opval);
2727   }
2728 }
2729
2730   current_cpu->done_insn (npc, status);
2731   return status;
2732 #undef FLD
2733 }
2734
2735 // ********** subimm8: sub Rx,#$imm8
2736
2737 sem_status
2738 xstormy16_sem_subimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2739 {
2740 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
2741   sem_status status = SEM_STATUS_NORMAL;
2742   xstormy16_scache* abuf = sem;
2743   PCADDR pc = abuf->addr;
2744   PCADDR npc = pc + 2;
2745
2746 {
2747   HI tmp_value;
2748   HI tmp_newpsw;
2749   tmp_value = SUBCHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), 0);
2750   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), 0), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), 0), 2)), ORHI (ANDHI (SRLHI (SUBCHI (ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), 15), ANDSI (FLD (f_imm8), 15), 0), 1), 8), SLLSI (current_cpu->h_Rpsw_get (), 12))));
2751   {
2752     HI opval = tmp_value;
2753     if (UNLIKELY(current_cpu->trace_result_p))
2754       current_cpu->trace_stream << "gr" << '[' << current_cpu->h_Rpsw_get () << ']' << ":=0x" << hex << opval << dec << "  ";
2755     current_cpu->h_gr_set (current_cpu->h_Rpsw_get (), opval);
2756   }
2757   {
2758     SI opval = tmp_newpsw;
2759     if (UNLIKELY(current_cpu->trace_result_p))
2760       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2761     current_cpu->h_gr_set (((UINT) 14), opval);
2762   }
2763 }
2764
2765   current_cpu->done_insn (npc, status);
2766   return status;
2767 #undef FLD
2768 }
2769
2770 // ********** subgrimm16: sub $Rd,#$imm16
2771
2772 sem_status
2773 xstormy16_sem_subgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2774 {
2775 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
2776   sem_status status = SEM_STATUS_NORMAL;
2777   xstormy16_scache* abuf = sem;
2778   PCADDR pc = abuf->addr;
2779   PCADDR npc = pc + 4;
2780
2781 {
2782   HI tmp_value;
2783   HI tmp_newpsw;
2784   tmp_value = SUBCSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), 0);
2785   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), 0), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), 0), 2)), ORHI (ANDHI (SRLHI (SUBCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (FLD (f_imm16), 15), 0), 1), 8), SLLSI (FLD (f_Rd), 12))));
2786   {
2787     HI opval = tmp_value;
2788     if (UNLIKELY(current_cpu->trace_result_p))
2789       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2790     current_cpu->h_gr_set (FLD (f_Rd), opval);
2791   }
2792   {
2793     SI opval = tmp_newpsw;
2794     if (UNLIKELY(current_cpu->trace_result_p))
2795       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2796     current_cpu->h_gr_set (((UINT) 14), opval);
2797   }
2798 }
2799
2800   current_cpu->done_insn (npc, status);
2801   return status;
2802 #undef FLD
2803 }
2804
2805 // ********** sbcgrgr: sbc $Rd,$Rs
2806
2807 sem_status
2808 xstormy16_sem_sbcgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2809 {
2810 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
2811   sem_status status = SEM_STATUS_NORMAL;
2812   xstormy16_scache* abuf = sem;
2813   PCADDR pc = abuf->addr;
2814   PCADDR npc = pc + 2;
2815
2816 {
2817   HI tmp_value;
2818   HI tmp_newpsw;
2819   tmp_value = SUBCSI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), current_cpu->h_cy_get ());
2820   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), current_cpu->h_cy_get ()), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), current_cpu->h_cy_get ()), 2)), ORHI (ANDHI (SRLHI (SUBCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), current_cpu->h_cy_get ()), 1), 8), SLLSI (FLD (f_Rd), 12))));
2821   {
2822     HI opval = tmp_value;
2823     if (UNLIKELY(current_cpu->trace_result_p))
2824       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2825     current_cpu->h_gr_set (FLD (f_Rd), opval);
2826   }
2827   {
2828     SI opval = tmp_newpsw;
2829     if (UNLIKELY(current_cpu->trace_result_p))
2830       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2831     current_cpu->h_gr_set (((UINT) 14), opval);
2832   }
2833 }
2834
2835   current_cpu->done_insn (npc, status);
2836   return status;
2837 #undef FLD
2838 }
2839
2840 // ********** sbcgrimm4: sbc $Rd,#$imm4
2841
2842 sem_status
2843 xstormy16_sem_sbcgrimm4 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2844 {
2845 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
2846   sem_status status = SEM_STATUS_NORMAL;
2847   xstormy16_scache* abuf = sem;
2848   PCADDR pc = abuf->addr;
2849   PCADDR npc = pc + 2;
2850
2851 {
2852   HI tmp_value;
2853   HI tmp_newpsw;
2854   tmp_value = SUBCSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), current_cpu->h_cy_get ());
2855   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), current_cpu->h_cy_get ()), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4), current_cpu->h_cy_get ()), 2)), ORHI (ANDHI (SRLHI (SUBCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (FLD (f_imm4), 15), current_cpu->h_cy_get ()), 1), 8), SLLSI (FLD (f_Rd), 12))));
2856   {
2857     HI opval = tmp_value;
2858     if (UNLIKELY(current_cpu->trace_result_p))
2859       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2860     current_cpu->h_gr_set (FLD (f_Rd), opval);
2861   }
2862   {
2863     SI opval = tmp_newpsw;
2864     if (UNLIKELY(current_cpu->trace_result_p))
2865       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2866     current_cpu->h_gr_set (((UINT) 14), opval);
2867   }
2868 }
2869
2870   current_cpu->done_insn (npc, status);
2871   return status;
2872 #undef FLD
2873 }
2874
2875 // ********** sbcgrimm8: sbc Rx,#$imm8
2876
2877 sem_status
2878 xstormy16_sem_sbcgrimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2879 {
2880 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
2881   sem_status status = SEM_STATUS_NORMAL;
2882   xstormy16_scache* abuf = sem;
2883   PCADDR pc = abuf->addr;
2884   PCADDR npc = pc + 2;
2885
2886 {
2887   HI tmp_value;
2888   HI tmp_newpsw;
2889   tmp_value = SUBCHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), current_cpu->h_cy_get ());
2890   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), current_cpu->h_cy_get ()), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm8), current_cpu->h_cy_get ()), 2)), ORHI (ANDHI (SRLHI (SUBCHI (ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), 15), ANDSI (FLD (f_imm8), 15), current_cpu->h_cy_get ()), 1), 8), SLLSI (current_cpu->h_Rpsw_get (), 12))));
2891   {
2892     HI opval = tmp_value;
2893     if (UNLIKELY(current_cpu->trace_result_p))
2894       current_cpu->trace_stream << "gr" << '[' << current_cpu->h_Rpsw_get () << ']' << ":=0x" << hex << opval << dec << "  ";
2895     current_cpu->h_gr_set (current_cpu->h_Rpsw_get (), opval);
2896   }
2897   {
2898     SI opval = tmp_newpsw;
2899     if (UNLIKELY(current_cpu->trace_result_p))
2900       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2901     current_cpu->h_gr_set (((UINT) 14), opval);
2902   }
2903 }
2904
2905   current_cpu->done_insn (npc, status);
2906   return status;
2907 #undef FLD
2908 }
2909
2910 // ********** sbcgrimm16: sbc $Rd,#$imm16
2911
2912 sem_status
2913 xstormy16_sem_sbcgrimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2914 {
2915 #define FLD(f) abuf->fields.sfmt_movwgrimm16.f
2916   sem_status status = SEM_STATUS_NORMAL;
2917   xstormy16_scache* abuf = sem;
2918   PCADDR pc = abuf->addr;
2919   PCADDR npc = pc + 4;
2920
2921 {
2922   HI tmp_value;
2923   HI tmp_newpsw;
2924   tmp_value = SUBCSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), current_cpu->h_cy_get ());
2925   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), current_cpu->h_cy_get ()), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm16), current_cpu->h_cy_get ()), 2)), ORHI (ANDHI (SRLHI (SUBCHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (FLD (f_imm16), 15), current_cpu->h_cy_get ()), 1), 8), SLLSI (FLD (f_Rd), 12))));
2926   {
2927     HI opval = tmp_value;
2928     if (UNLIKELY(current_cpu->trace_result_p))
2929       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2930     current_cpu->h_gr_set (FLD (f_Rd), opval);
2931   }
2932   {
2933     SI opval = tmp_newpsw;
2934     if (UNLIKELY(current_cpu->trace_result_p))
2935       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2936     current_cpu->h_gr_set (((UINT) 14), opval);
2937   }
2938 }
2939
2940   current_cpu->done_insn (npc, status);
2941   return status;
2942 #undef FLD
2943 }
2944
2945 // ********** incgrimm2: inc $Rd,#$imm2
2946
2947 sem_status
2948 xstormy16_sem_incgrimm2 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2949 {
2950 #define FLD(f) abuf->fields.sfmt_incgrimm2.f
2951   sem_status status = SEM_STATUS_NORMAL;
2952   xstormy16_scache* abuf = sem;
2953   PCADDR pc = abuf->addr;
2954   PCADDR npc = pc + 2;
2955
2956 {
2957   HI tmp_nvalue;
2958   tmp_nvalue = ADDSI (current_cpu->h_gr_get (FLD (f_Rd)), ADDSI (FLD (f_imm2), 1));
2959   {
2960     HI opval = tmp_nvalue;
2961     if (UNLIKELY(current_cpu->trace_result_p))
2962       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2963     current_cpu->h_gr_set (FLD (f_Rd), opval);
2964   }
2965   {
2966     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
2967     if (UNLIKELY(current_cpu->trace_result_p))
2968       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
2969     current_cpu->h_gr_set (((UINT) 14), opval);
2970   }
2971 }
2972
2973   current_cpu->done_insn (npc, status);
2974   return status;
2975 #undef FLD
2976 }
2977
2978 // ********** decgrimm2: dec $Rd,#$imm2
2979
2980 sem_status
2981 xstormy16_sem_decgrimm2 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
2982 {
2983 #define FLD(f) abuf->fields.sfmt_incgrimm2.f
2984   sem_status status = SEM_STATUS_NORMAL;
2985   xstormy16_scache* abuf = sem;
2986   PCADDR pc = abuf->addr;
2987   PCADDR npc = pc + 2;
2988
2989 {
2990   HI tmp_nvalue;
2991   tmp_nvalue = SUBSI (current_cpu->h_gr_get (FLD (f_Rd)), ADDSI (FLD (f_imm2), 1));
2992   {
2993     HI opval = tmp_nvalue;
2994     if (UNLIKELY(current_cpu->trace_result_p))
2995       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
2996     current_cpu->h_gr_set (FLD (f_Rd), opval);
2997   }
2998   {
2999     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3000     if (UNLIKELY(current_cpu->trace_result_p))
3001       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3002     current_cpu->h_gr_set (((UINT) 14), opval);
3003   }
3004 }
3005
3006   current_cpu->done_insn (npc, status);
3007   return status;
3008 #undef FLD
3009 }
3010
3011 // ********** rrcgrgr: rrc $Rd,$Rs
3012
3013 sem_status
3014 xstormy16_sem_rrcgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3015 {
3016 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
3017   sem_status status = SEM_STATUS_NORMAL;
3018   xstormy16_scache* abuf = sem;
3019   PCADDR pc = abuf->addr;
3020   PCADDR npc = pc + 2;
3021
3022 {
3023   SI tmp_tmpfoo;
3024   tmp_tmpfoo = ORSI (ORSI (ANDSI (SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), 17), 0xfffe0000), current_cpu->h_gr_get (FLD (f_Rd))), SLLSI (current_cpu->h_cy_get (), 16));
3025   tmp_tmpfoo = RORSI (tmp_tmpfoo, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15));
3026 {
3027   HI tmp_nvalue;
3028   HI tmp_newpsw;
3029   tmp_nvalue = TRUNCSIHI (tmp_tmpfoo);
3030   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (ANDSI (SRLSI (tmp_tmpfoo, 16), 1), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3031   {
3032     HI opval = tmp_nvalue;
3033     if (UNLIKELY(current_cpu->trace_result_p))
3034       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3035     current_cpu->h_gr_set (FLD (f_Rd), opval);
3036   }
3037   {
3038     SI opval = tmp_newpsw;
3039     if (UNLIKELY(current_cpu->trace_result_p))
3040       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3041     current_cpu->h_gr_set (((UINT) 14), opval);
3042   }
3043 }
3044 }
3045
3046   current_cpu->done_insn (npc, status);
3047   return status;
3048 #undef FLD
3049 }
3050
3051 // ********** rrcgrimm4: rrc $Rd,#$imm4
3052
3053 sem_status
3054 xstormy16_sem_rrcgrimm4 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3055 {
3056 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
3057   sem_status status = SEM_STATUS_NORMAL;
3058   xstormy16_scache* abuf = sem;
3059   PCADDR pc = abuf->addr;
3060   PCADDR npc = pc + 2;
3061
3062 {
3063   SI tmp_tmpfoo;
3064   tmp_tmpfoo = ORSI (ORSI (ANDSI (SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), 17), 0xfffe0000), current_cpu->h_gr_get (FLD (f_Rd))), SLLSI (current_cpu->h_cy_get (), 16));
3065   tmp_tmpfoo = RORSI (tmp_tmpfoo, ANDSI (FLD (f_imm4), 15));
3066 {
3067   HI tmp_nvalue;
3068   HI tmp_newpsw;
3069   tmp_nvalue = TRUNCSIHI (tmp_tmpfoo);
3070   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (ANDSI (SRLSI (tmp_tmpfoo, 16), 1), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3071   {
3072     HI opval = tmp_nvalue;
3073     if (UNLIKELY(current_cpu->trace_result_p))
3074       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3075     current_cpu->h_gr_set (FLD (f_Rd), opval);
3076   }
3077   {
3078     SI opval = tmp_newpsw;
3079     if (UNLIKELY(current_cpu->trace_result_p))
3080       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3081     current_cpu->h_gr_set (((UINT) 14), opval);
3082   }
3083 }
3084 }
3085
3086   current_cpu->done_insn (npc, status);
3087   return status;
3088 #undef FLD
3089 }
3090
3091 // ********** rlcgrgr: rlc $Rd,$Rs
3092
3093 sem_status
3094 xstormy16_sem_rlcgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3095 {
3096 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
3097   sem_status status = SEM_STATUS_NORMAL;
3098   xstormy16_scache* abuf = sem;
3099   PCADDR pc = abuf->addr;
3100   PCADDR npc = pc + 2;
3101
3102 {
3103   SI tmp_tmpfoo;
3104   tmp_tmpfoo = ORSI (ORSI (ANDSI (SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), 2147352576), current_cpu->h_gr_get (FLD (f_Rd))), ORSI (SLLSI (current_cpu->h_cy_get (), 31), SLLSI (current_cpu->h_cy_get (), 16)));
3105   tmp_tmpfoo = ROLSI (tmp_tmpfoo, ANDSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 31));
3106 {
3107   HI tmp_nvalue;
3108   HI tmp_newpsw;
3109   tmp_nvalue = TRUNCSIHI (tmp_tmpfoo);
3110   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (ANDSI (SRLSI (tmp_tmpfoo, 16), 1), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3111   {
3112     HI opval = tmp_nvalue;
3113     if (UNLIKELY(current_cpu->trace_result_p))
3114       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3115     current_cpu->h_gr_set (FLD (f_Rd), opval);
3116   }
3117   {
3118     SI opval = tmp_newpsw;
3119     if (UNLIKELY(current_cpu->trace_result_p))
3120       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3121     current_cpu->h_gr_set (((UINT) 14), opval);
3122   }
3123 }
3124 }
3125
3126   current_cpu->done_insn (npc, status);
3127   return status;
3128 #undef FLD
3129 }
3130
3131 // ********** rlcgrimm4: rlc $Rd,#$imm4
3132
3133 sem_status
3134 xstormy16_sem_rlcgrimm4 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3135 {
3136 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
3137   sem_status status = SEM_STATUS_NORMAL;
3138   xstormy16_scache* abuf = sem;
3139   PCADDR pc = abuf->addr;
3140   PCADDR npc = pc + 2;
3141
3142 {
3143   SI tmp_tmpfoo;
3144   tmp_tmpfoo = ORSI (ORSI (ANDSI (SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), 2147352576), current_cpu->h_gr_get (FLD (f_Rd))), ORSI (SLLSI (current_cpu->h_cy_get (), 31), SLLSI (current_cpu->h_cy_get (), 16)));
3145   tmp_tmpfoo = ROLSI (tmp_tmpfoo, ANDSI (FLD (f_imm4), 31));
3146 {
3147   HI tmp_nvalue;
3148   HI tmp_newpsw;
3149   tmp_nvalue = TRUNCSIHI (tmp_tmpfoo);
3150   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (ANDSI (SRLSI (tmp_tmpfoo, 16), 1), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3151   {
3152     HI opval = tmp_nvalue;
3153     if (UNLIKELY(current_cpu->trace_result_p))
3154       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3155     current_cpu->h_gr_set (FLD (f_Rd), opval);
3156   }
3157   {
3158     SI opval = tmp_newpsw;
3159     if (UNLIKELY(current_cpu->trace_result_p))
3160       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3161     current_cpu->h_gr_set (((UINT) 14), opval);
3162   }
3163 }
3164 }
3165
3166   current_cpu->done_insn (npc, status);
3167   return status;
3168 #undef FLD
3169 }
3170
3171 // ********** shrgrgr: shr $Rd,$Rs
3172
3173 sem_status
3174 xstormy16_sem_shrgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3175 {
3176 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
3177   sem_status status = SEM_STATUS_NORMAL;
3178   xstormy16_scache* abuf = sem;
3179   PCADDR pc = abuf->addr;
3180   PCADDR npc = pc + 2;
3181
3182 {
3183   HI tmp_nvalue;
3184   HI tmp_newpsw;
3185   tmp_nvalue = SRLSI (current_cpu->h_gr_get (FLD (f_Rd)), ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15));
3186   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (ANDSI (((EQSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 0)) ? (current_cpu->h_cy_get ()) : (SRLSI (current_cpu->h_gr_get (FLD (f_Rd)), SUBSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 1)))), 1), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3187   {
3188     HI opval = tmp_nvalue;
3189     if (UNLIKELY(current_cpu->trace_result_p))
3190       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3191     current_cpu->h_gr_set (FLD (f_Rd), opval);
3192   }
3193   {
3194     SI opval = tmp_newpsw;
3195     if (UNLIKELY(current_cpu->trace_result_p))
3196       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3197     current_cpu->h_gr_set (((UINT) 14), opval);
3198   }
3199 }
3200
3201   current_cpu->done_insn (npc, status);
3202   return status;
3203 #undef FLD
3204 }
3205
3206 // ********** shrgrimm: shr $Rd,#$imm4
3207
3208 sem_status
3209 xstormy16_sem_shrgrimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3210 {
3211 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
3212   sem_status status = SEM_STATUS_NORMAL;
3213   xstormy16_scache* abuf = sem;
3214   PCADDR pc = abuf->addr;
3215   PCADDR npc = pc + 2;
3216
3217 {
3218   HI tmp_nvalue;
3219   HI tmp_newpsw;
3220   tmp_nvalue = SRLSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4));
3221   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (ANDSI (((EQSI (FLD (f_imm4), 0)) ? (current_cpu->h_cy_get ()) : (SRLSI (current_cpu->h_gr_get (FLD (f_Rd)), SUBSI (FLD (f_imm4), 1)))), 1), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3222   {
3223     HI opval = tmp_nvalue;
3224     if (UNLIKELY(current_cpu->trace_result_p))
3225       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3226     current_cpu->h_gr_set (FLD (f_Rd), opval);
3227   }
3228   {
3229     SI opval = tmp_newpsw;
3230     if (UNLIKELY(current_cpu->trace_result_p))
3231       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3232     current_cpu->h_gr_set (((UINT) 14), opval);
3233   }
3234 }
3235
3236   current_cpu->done_insn (npc, status);
3237   return status;
3238 #undef FLD
3239 }
3240
3241 // ********** shlgrgr: shl $Rd,$Rs
3242
3243 sem_status
3244 xstormy16_sem_shlgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3245 {
3246 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
3247   sem_status status = SEM_STATUS_NORMAL;
3248   xstormy16_scache* abuf = sem;
3249   PCADDR pc = abuf->addr;
3250   PCADDR npc = pc + 2;
3251
3252 {
3253   HI tmp_nvalue;
3254   HI tmp_newpsw;
3255   tmp_nvalue = SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15));
3256   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (SRLSI (((EQSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 0)) ? (SLLSI (current_cpu->h_cy_get (), 15)) : (SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), SUBSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 1)))), 15), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3257   {
3258     HI opval = tmp_nvalue;
3259     if (UNLIKELY(current_cpu->trace_result_p))
3260       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3261     current_cpu->h_gr_set (FLD (f_Rd), opval);
3262   }
3263   {
3264     SI opval = tmp_newpsw;
3265     if (UNLIKELY(current_cpu->trace_result_p))
3266       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3267     current_cpu->h_gr_set (((UINT) 14), opval);
3268   }
3269 }
3270
3271   current_cpu->done_insn (npc, status);
3272   return status;
3273 #undef FLD
3274 }
3275
3276 // ********** shlgrimm: shl $Rd,#$imm4
3277
3278 sem_status
3279 xstormy16_sem_shlgrimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3280 {
3281 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
3282   sem_status status = SEM_STATUS_NORMAL;
3283   xstormy16_scache* abuf = sem;
3284   PCADDR pc = abuf->addr;
3285   PCADDR npc = pc + 2;
3286
3287 {
3288   HI tmp_nvalue;
3289   HI tmp_newpsw;
3290   tmp_nvalue = SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4));
3291   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (SRLSI (((EQSI (FLD (f_imm4), 0)) ? (SLLSI (current_cpu->h_cy_get (), 15)) : (SLLSI (current_cpu->h_gr_get (FLD (f_Rd)), SUBSI (FLD (f_imm4), 1)))), 15), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3292   {
3293     HI opval = tmp_nvalue;
3294     if (UNLIKELY(current_cpu->trace_result_p))
3295       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3296     current_cpu->h_gr_set (FLD (f_Rd), opval);
3297   }
3298   {
3299     SI opval = tmp_newpsw;
3300     if (UNLIKELY(current_cpu->trace_result_p))
3301       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3302     current_cpu->h_gr_set (((UINT) 14), opval);
3303   }
3304 }
3305
3306   current_cpu->done_insn (npc, status);
3307   return status;
3308 #undef FLD
3309 }
3310
3311 // ********** asrgrgr: asr $Rd,$Rs
3312
3313 sem_status
3314 xstormy16_sem_asrgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3315 {
3316 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
3317   sem_status status = SEM_STATUS_NORMAL;
3318   xstormy16_scache* abuf = sem;
3319   PCADDR pc = abuf->addr;
3320   PCADDR npc = pc + 2;
3321
3322 {
3323   HI tmp_nvalue;
3324   HI tmp_newpsw;
3325   tmp_nvalue = SRAHI (current_cpu->h_gr_get (FLD (f_Rd)), ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15));
3326   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (ANDSI (((EQSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 0)) ? (current_cpu->h_cy_get ()) : (SRLSI (current_cpu->h_gr_get (FLD (f_Rd)), SUBSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15), 1)))), 1), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3327   {
3328     HI opval = tmp_nvalue;
3329     if (UNLIKELY(current_cpu->trace_result_p))
3330       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3331     current_cpu->h_gr_set (FLD (f_Rd), opval);
3332   }
3333   {
3334     SI opval = tmp_newpsw;
3335     if (UNLIKELY(current_cpu->trace_result_p))
3336       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3337     current_cpu->h_gr_set (((UINT) 14), opval);
3338   }
3339 }
3340
3341   current_cpu->done_insn (npc, status);
3342   return status;
3343 #undef FLD
3344 }
3345
3346 // ********** asrgrimm: asr $Rd,#$imm4
3347
3348 sem_status
3349 xstormy16_sem_asrgrimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3350 {
3351 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
3352   sem_status status = SEM_STATUS_NORMAL;
3353   xstormy16_scache* abuf = sem;
3354   PCADDR pc = abuf->addr;
3355   PCADDR npc = pc + 2;
3356
3357 {
3358   HI tmp_nvalue;
3359   HI tmp_newpsw;
3360   tmp_nvalue = SRAHI (current_cpu->h_gr_get (FLD (f_Rd)), FLD (f_imm4));
3361   tmp_newpsw = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3992), SLLSI (ANDSI (ANDSI (((EQSI (FLD (f_imm4), 0)) ? (current_cpu->h_cy_get ()) : (SRLSI (current_cpu->h_gr_get (FLD (f_Rd)), SUBSI (FLD (f_imm4), 1)))), 1), 1), 2)), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3362   {
3363     HI opval = tmp_nvalue;
3364     if (UNLIKELY(current_cpu->trace_result_p))
3365       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3366     current_cpu->h_gr_set (FLD (f_Rd), opval);
3367   }
3368   {
3369     SI opval = tmp_newpsw;
3370     if (UNLIKELY(current_cpu->trace_result_p))
3371       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3372     current_cpu->h_gr_set (((UINT) 14), opval);
3373   }
3374 }
3375
3376   current_cpu->done_insn (npc, status);
3377   return status;
3378 #undef FLD
3379 }
3380
3381 // ********** set1grimm: set1 $Rd,#$imm4
3382
3383 sem_status
3384 xstormy16_sem_set1grimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3385 {
3386 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
3387   sem_status status = SEM_STATUS_NORMAL;
3388   xstormy16_scache* abuf = sem;
3389   PCADDR pc = abuf->addr;
3390   PCADDR npc = pc + 2;
3391
3392 {
3393   HI tmp_nvalue;
3394   tmp_nvalue = ORSI (current_cpu->h_gr_get (FLD (f_Rd)), SLLSI (1, FLD (f_imm4)));
3395   {
3396     HI opval = tmp_nvalue;
3397     if (UNLIKELY(current_cpu->trace_result_p))
3398       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3399     current_cpu->h_gr_set (FLD (f_Rd), opval);
3400   }
3401   {
3402     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3403     if (UNLIKELY(current_cpu->trace_result_p))
3404       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3405     current_cpu->h_gr_set (((UINT) 14), opval);
3406   }
3407 }
3408
3409   current_cpu->done_insn (npc, status);
3410   return status;
3411 #undef FLD
3412 }
3413
3414 // ********** set1grgr: set1 $Rd,$Rs
3415
3416 sem_status
3417 xstormy16_sem_set1grgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3418 {
3419 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
3420   sem_status status = SEM_STATUS_NORMAL;
3421   xstormy16_scache* abuf = sem;
3422   PCADDR pc = abuf->addr;
3423   PCADDR npc = pc + 2;
3424
3425 {
3426   HI tmp_nvalue;
3427   tmp_nvalue = ORSI (current_cpu->h_gr_get (FLD (f_Rd)), SLLSI (1, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15)));
3428   {
3429     HI opval = tmp_nvalue;
3430     if (UNLIKELY(current_cpu->trace_result_p))
3431       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3432     current_cpu->h_gr_set (FLD (f_Rd), opval);
3433   }
3434   {
3435     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3436     if (UNLIKELY(current_cpu->trace_result_p))
3437       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3438     current_cpu->h_gr_set (((UINT) 14), opval);
3439   }
3440 }
3441
3442   current_cpu->done_insn (npc, status);
3443   return status;
3444 #undef FLD
3445 }
3446
3447 // ********** set1lmemimm: set1 $lmem8,#$imm3
3448
3449 sem_status
3450 xstormy16_sem_set1lmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3451 {
3452 #define FLD(f) abuf->fields.sfmt_set1lmemimm.f
3453   sem_status status = SEM_STATUS_NORMAL;
3454   xstormy16_scache* abuf = sem;
3455   PCADDR pc = abuf->addr;
3456   PCADDR npc = pc + 2;
3457
3458 {
3459   HI tmp_nvalue;
3460   tmp_nvalue = ORQI (current_cpu->GETMEMQI (pc, FLD (f_lmem8)), SLLSI (1, FLD (f_imm3)));
3461   {
3462     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (0, 8)), 0), 6))));
3463     if (UNLIKELY(current_cpu->trace_result_p))
3464       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3465     current_cpu->h_gr_set (((UINT) 14), opval);
3466   }
3467   {
3468     QI opval = tmp_nvalue;
3469     if (UNLIKELY(current_cpu->trace_result_p))
3470       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) FLD (f_lmem8) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
3471     current_cpu->SETMEMQI (pc, FLD (f_lmem8), opval);
3472   }
3473 }
3474
3475   current_cpu->done_insn (npc, status);
3476   return status;
3477 #undef FLD
3478 }
3479
3480 // ********** set1hmemimm: set1 $hmem8,#$imm3
3481
3482 sem_status
3483 xstormy16_sem_set1hmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3484 {
3485 #define FLD(f) abuf->fields.sfmt_set1hmemimm.f
3486   sem_status status = SEM_STATUS_NORMAL;
3487   xstormy16_scache* abuf = sem;
3488   PCADDR pc = abuf->addr;
3489   PCADDR npc = pc + 2;
3490
3491 {
3492   HI tmp_nvalue;
3493   tmp_nvalue = ORQI (current_cpu->GETMEMQI (pc, FLD (f_hmem8)), SLLSI (1, FLD (f_imm3)));
3494   {
3495     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (0, 8)), 0), 6))));
3496     if (UNLIKELY(current_cpu->trace_result_p))
3497       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3498     current_cpu->h_gr_set (((UINT) 14), opval);
3499   }
3500   {
3501     QI opval = tmp_nvalue;
3502     if (UNLIKELY(current_cpu->trace_result_p))
3503       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) FLD (f_hmem8) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
3504     current_cpu->SETMEMQI (pc, FLD (f_hmem8), opval);
3505   }
3506 }
3507
3508   current_cpu->done_insn (npc, status);
3509   return status;
3510 #undef FLD
3511 }
3512
3513 // ********** clr1grimm: clr1 $Rd,#$imm4
3514
3515 sem_status
3516 xstormy16_sem_clr1grimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3517 {
3518 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
3519   sem_status status = SEM_STATUS_NORMAL;
3520   xstormy16_scache* abuf = sem;
3521   PCADDR pc = abuf->addr;
3522   PCADDR npc = pc + 2;
3523
3524 {
3525   HI tmp_nvalue;
3526   tmp_nvalue = ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), INVSI (SLLSI (1, FLD (f_imm4))));
3527   {
3528     HI opval = tmp_nvalue;
3529     if (UNLIKELY(current_cpu->trace_result_p))
3530       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3531     current_cpu->h_gr_set (FLD (f_Rd), opval);
3532   }
3533   {
3534     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3535     if (UNLIKELY(current_cpu->trace_result_p))
3536       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3537     current_cpu->h_gr_set (((UINT) 14), opval);
3538   }
3539 }
3540
3541   current_cpu->done_insn (npc, status);
3542   return status;
3543 #undef FLD
3544 }
3545
3546 // ********** clr1grgr: clr1 $Rd,$Rs
3547
3548 sem_status
3549 xstormy16_sem_clr1grgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3550 {
3551 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
3552   sem_status status = SEM_STATUS_NORMAL;
3553   xstormy16_scache* abuf = sem;
3554   PCADDR pc = abuf->addr;
3555   PCADDR npc = pc + 2;
3556
3557 {
3558   HI tmp_nvalue;
3559   tmp_nvalue = ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), INVSI (SLLSI (1, ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15))));
3560   {
3561     HI opval = tmp_nvalue;
3562     if (UNLIKELY(current_cpu->trace_result_p))
3563       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3564     current_cpu->h_gr_set (FLD (f_Rd), opval);
3565   }
3566   {
3567     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3568     if (UNLIKELY(current_cpu->trace_result_p))
3569       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3570     current_cpu->h_gr_set (((UINT) 14), opval);
3571   }
3572 }
3573
3574   current_cpu->done_insn (npc, status);
3575   return status;
3576 #undef FLD
3577 }
3578
3579 // ********** clr1lmemimm: clr1 $lmem8,#$imm3
3580
3581 sem_status
3582 xstormy16_sem_clr1lmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3583 {
3584 #define FLD(f) abuf->fields.sfmt_set1lmemimm.f
3585   sem_status status = SEM_STATUS_NORMAL;
3586   xstormy16_scache* abuf = sem;
3587   PCADDR pc = abuf->addr;
3588   PCADDR npc = pc + 2;
3589
3590 {
3591   HI tmp_nvalue;
3592   tmp_nvalue = ANDQI (current_cpu->GETMEMQI (pc, FLD (f_lmem8)), INVSI (SLLSI (1, FLD (f_imm3))));
3593   {
3594     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (0, 8)), 0), 6))));
3595     if (UNLIKELY(current_cpu->trace_result_p))
3596       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3597     current_cpu->h_gr_set (((UINT) 14), opval);
3598   }
3599   {
3600     QI opval = tmp_nvalue;
3601     if (UNLIKELY(current_cpu->trace_result_p))
3602       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) FLD (f_lmem8) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
3603     current_cpu->SETMEMQI (pc, FLD (f_lmem8), opval);
3604   }
3605 }
3606
3607   current_cpu->done_insn (npc, status);
3608   return status;
3609 #undef FLD
3610 }
3611
3612 // ********** clr1hmemimm: clr1 $hmem8,#$imm3
3613
3614 sem_status
3615 xstormy16_sem_clr1hmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3616 {
3617 #define FLD(f) abuf->fields.sfmt_set1hmemimm.f
3618   sem_status status = SEM_STATUS_NORMAL;
3619   xstormy16_scache* abuf = sem;
3620   PCADDR pc = abuf->addr;
3621   PCADDR npc = pc + 2;
3622
3623 {
3624   HI tmp_nvalue;
3625   tmp_nvalue = ANDQI (current_cpu->GETMEMQI (pc, FLD (f_hmem8)), INVSI (SLLSI (1, FLD (f_imm3))));
3626   {
3627     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (0, 8)), 0), 6))));
3628     if (UNLIKELY(current_cpu->trace_result_p))
3629       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3630     current_cpu->h_gr_set (((UINT) 14), opval);
3631   }
3632   {
3633     QI opval = tmp_nvalue;
3634     if (UNLIKELY(current_cpu->trace_result_p))
3635       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) FLD (f_hmem8) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
3636     current_cpu->SETMEMQI (pc, FLD (f_hmem8), opval);
3637   }
3638 }
3639
3640   current_cpu->done_insn (npc, status);
3641   return status;
3642 #undef FLD
3643 }
3644
3645 // ********** cbwgr: cbw $Rd
3646
3647 sem_status
3648 xstormy16_sem_cbwgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3649 {
3650 #define FLD(f) abuf->fields.sfmt_jmp.f
3651   sem_status status = SEM_STATUS_NORMAL;
3652   xstormy16_scache* abuf = sem;
3653   PCADDR pc = abuf->addr;
3654   PCADDR npc = pc + 2;
3655
3656 {
3657   HI tmp_nvalue;
3658   tmp_nvalue = EXTQIHI (TRUNCSIQI (current_cpu->h_gr_get (FLD (f_Rd))));
3659   {
3660     HI opval = tmp_nvalue;
3661     if (UNLIKELY(current_cpu->trace_result_p))
3662       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3663     current_cpu->h_gr_set (FLD (f_Rd), opval);
3664   }
3665   {
3666     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3667     if (UNLIKELY(current_cpu->trace_result_p))
3668       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3669     current_cpu->h_gr_set (((UINT) 14), opval);
3670   }
3671 }
3672
3673   current_cpu->done_insn (npc, status);
3674   return status;
3675 #undef FLD
3676 }
3677
3678 // ********** revgr: rev $Rd
3679
3680 sem_status
3681 xstormy16_sem_revgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3682 {
3683 #define FLD(f) abuf->fields.sfmt_jmp.f
3684   sem_status status = SEM_STATUS_NORMAL;
3685   xstormy16_scache* abuf = sem;
3686   PCADDR pc = abuf->addr;
3687   PCADDR npc = pc + 2;
3688
3689 {
3690   HI tmp_nvalue;
3691   tmp_nvalue = ORSI (SLLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 1), 15), ORSI (SLLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 2), 13), ORSI (SLLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 4), 11), ORSI (SLLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 8), 9), ORSI (SLLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 16), 7), ORSI (SLLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 32), 5), ORSI (SLLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 64), 3), ORSI (SLLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 128), 1), ORSI (SRLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 256), 1), ORSI (SRLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 512), 3), ORSI (SRLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 1024), 5), ORSI (SRLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 2048), 7), ORSI (SRLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 4096), 9), ORSI (SRLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 8192), 11), ORSI (SRLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 16384), 13), SRLSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 32768), 15))))))))))))))));
3692   {
3693     HI opval = tmp_nvalue;
3694     if (UNLIKELY(current_cpu->trace_result_p))
3695       current_cpu->trace_stream << "gr" << '[' << FLD (f_Rd) << ']' << ":=0x" << hex << opval << dec << "  ";
3696     current_cpu->h_gr_set (FLD (f_Rd), opval);
3697   }
3698   {
3699     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3996), ORSI (SLLSI (FLD (f_Rd), 12), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6)))));
3700     if (UNLIKELY(current_cpu->trace_result_p))
3701       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3702     current_cpu->h_gr_set (((UINT) 14), opval);
3703   }
3704 }
3705
3706   current_cpu->done_insn (npc, status);
3707   return status;
3708 #undef FLD
3709 }
3710
3711 // ********** bccgrgr: b$bcond5 $Rd,$Rs,$rel12
3712
3713 sem_status
3714 xstormy16_sem_bccgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3715 {
3716 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
3717   sem_status status = SEM_STATUS_NORMAL;
3718   xstormy16_scache* abuf = sem;
3719   PCADDR pc = abuf->addr;
3720   PCADDR npc = pc + 4;
3721
3722 {
3723 {
3724   HI tmp_value;
3725   tmp_value = SUBSI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)));
3726   {
3727     SI opval = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), 0), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (FLD (f_Rd)), current_cpu->h_gr_get (FLD (f_Rs)), 0), 2)), ORHI (ANDHI (SRLHI (SUBHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), 15), ANDSI (current_cpu->h_gr_get (FLD (f_Rs)), 15)), 1), 8), SLLSI (FLD (f_Rd), 12))));
3728     if (UNLIKELY(current_cpu->trace_result_p))
3729       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3730     current_cpu->h_gr_set (((UINT) 14), opval);
3731   }
3732 }
3733 {
3734   BI tmp_tmp;
3735   switch (FLD (f_op5))
3736   {
3737   case 0 : {
3738   tmp_tmp = NOTSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()));
3739 }
3740     break;
3741   case 1 : {
3742   tmp_tmp = NOTSI (current_cpu->h_cy_get ());
3743 }
3744     break;
3745   case 2 : {
3746   tmp_tmp = XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ());
3747 }
3748     break;
3749   case 3 : {
3750   tmp_tmp = current_cpu->h_cy_get ();
3751 }
3752     break;
3753   case 4 : {
3754   tmp_tmp = NOTSI (ORSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()), current_cpu->h_z16_get ()));
3755 }
3756     break;
3757   case 5 : {
3758   tmp_tmp = NOTSI (ORSI (current_cpu->h_cy_get (), current_cpu->h_z16_get ()));
3759 }
3760     break;
3761   case 6 : {
3762   tmp_tmp = ORSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()), current_cpu->h_z16_get ());
3763 }
3764     break;
3765   case 7 : {
3766   tmp_tmp = ORSI (current_cpu->h_cy_get (), current_cpu->h_z16_get ());
3767 }
3768     break;
3769   case 8 : {
3770   tmp_tmp = NOTSI (current_cpu->h_s_get ());
3771 }
3772     break;
3773   case 9 : {
3774   tmp_tmp = NOTSI (current_cpu->h_ov_get ());
3775 }
3776     break;
3777   case 10 : {
3778   tmp_tmp = current_cpu->h_s_get ();
3779 }
3780     break;
3781   case 11 : {
3782   tmp_tmp = current_cpu->h_ov_get ();
3783 }
3784     break;
3785   case 12 : {
3786   tmp_tmp = NOTSI (current_cpu->h_z8_get ());
3787 }
3788     break;
3789   case 13 : {
3790   tmp_tmp = NOTSI (current_cpu->h_z16_get ());
3791 }
3792     break;
3793   case 14 : {
3794   tmp_tmp = current_cpu->h_z8_get ();
3795 }
3796     break;
3797   case 15 : {
3798   tmp_tmp = current_cpu->h_z16_get ();
3799 }
3800     break;
3801   }
3802 if (tmp_tmp) {
3803   {
3804     USI opval = FLD (f_rel12);
3805     if (UNLIKELY(current_cpu->trace_result_p))
3806       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3807     current_cpu->branch (opval, npc, status);
3808   }
3809 }
3810 }
3811 }
3812
3813   current_cpu->done_cti_insn (npc, status);
3814   return status;
3815 #undef FLD
3816 }
3817
3818 // ********** bccgrimm8: b$bcond5 $Rm,#$imm8,$rel12
3819
3820 sem_status
3821 xstormy16_sem_bccgrimm8 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3822 {
3823 #define FLD(f) abuf->fields.sfmt_bccgrimm8.f
3824   sem_status status = SEM_STATUS_NORMAL;
3825   xstormy16_scache* abuf = sem;
3826   PCADDR pc = abuf->addr;
3827   PCADDR npc = pc + 4;
3828
3829 {
3830 {
3831   HI tmp_value;
3832   tmp_value = SUBSI (current_cpu->h_gr_get (FLD (f_Rm)), FLD (f_imm8));
3833   {
3834     SI opval = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (FLD (f_Rm)), FLD (f_imm8), 0), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (FLD (f_Rm)), FLD (f_imm8), 0), 2)), ORHI (ANDHI (SRLHI (SUBHI (ANDSI (current_cpu->h_gr_get (FLD (f_Rm)), 15), ANDSI (FLD (f_imm8), 15)), 1), 8), SLLSI (FLD (f_Rm), 12))));
3835     if (UNLIKELY(current_cpu->trace_result_p))
3836       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3837     current_cpu->h_gr_set (((UINT) 14), opval);
3838   }
3839 }
3840 {
3841   BI tmp_tmp;
3842   switch (FLD (f_op5))
3843   {
3844   case 0 : {
3845   tmp_tmp = NOTSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()));
3846 }
3847     break;
3848   case 1 : {
3849   tmp_tmp = NOTSI (current_cpu->h_cy_get ());
3850 }
3851     break;
3852   case 2 : {
3853   tmp_tmp = XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ());
3854 }
3855     break;
3856   case 3 : {
3857   tmp_tmp = current_cpu->h_cy_get ();
3858 }
3859     break;
3860   case 4 : {
3861   tmp_tmp = NOTSI (ORSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()), current_cpu->h_z16_get ()));
3862 }
3863     break;
3864   case 5 : {
3865   tmp_tmp = NOTSI (ORSI (current_cpu->h_cy_get (), current_cpu->h_z16_get ()));
3866 }
3867     break;
3868   case 6 : {
3869   tmp_tmp = ORSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()), current_cpu->h_z16_get ());
3870 }
3871     break;
3872   case 7 : {
3873   tmp_tmp = ORSI (current_cpu->h_cy_get (), current_cpu->h_z16_get ());
3874 }
3875     break;
3876   case 8 : {
3877   tmp_tmp = NOTSI (current_cpu->h_s_get ());
3878 }
3879     break;
3880   case 9 : {
3881   tmp_tmp = NOTSI (current_cpu->h_ov_get ());
3882 }
3883     break;
3884   case 10 : {
3885   tmp_tmp = current_cpu->h_s_get ();
3886 }
3887     break;
3888   case 11 : {
3889   tmp_tmp = current_cpu->h_ov_get ();
3890 }
3891     break;
3892   case 12 : {
3893   tmp_tmp = NOTSI (current_cpu->h_z8_get ());
3894 }
3895     break;
3896   case 13 : {
3897   tmp_tmp = NOTSI (current_cpu->h_z16_get ());
3898 }
3899     break;
3900   case 14 : {
3901   tmp_tmp = current_cpu->h_z8_get ();
3902 }
3903     break;
3904   case 15 : {
3905   tmp_tmp = current_cpu->h_z16_get ();
3906 }
3907     break;
3908   }
3909 if (tmp_tmp) {
3910   {
3911     USI opval = FLD (f_rel12);
3912     if (UNLIKELY(current_cpu->trace_result_p))
3913       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3914     current_cpu->branch (opval, npc, status);
3915   }
3916 }
3917 }
3918 }
3919
3920   current_cpu->done_cti_insn (npc, status);
3921   return status;
3922 #undef FLD
3923 }
3924
3925 // ********** bccimm16: b$bcond2 Rx,#$imm16,${rel8-4}
3926
3927 sem_status
3928 xstormy16_sem_bccimm16 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
3929 {
3930 #define FLD(f) abuf->fields.sfmt_bccimm16.f
3931   sem_status status = SEM_STATUS_NORMAL;
3932   xstormy16_scache* abuf = sem;
3933   PCADDR pc = abuf->addr;
3934   PCADDR npc = pc + 4;
3935
3936 {
3937 {
3938   HI tmp_value;
3939   tmp_value = SUBHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm16));
3940   {
3941     SI opval = ORSI (ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 3968), ORBI (ORBI (EQHI (ANDHI (tmp_value, 255), 0), SLLHI (EQHI (tmp_value, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_value), 5), SLLHI (LTQI (SRLHI (tmp_value, MULSI (1, 8)), 0), 6)))), ORHI (ORHI (SLLHI (SUBOFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm16), 0), 4), SLLHI (SUBCFHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), FLD (f_imm16), 0), 2)), ORHI (ANDHI (SRLHI (SUBHI (ANDHI (current_cpu->h_gr_get (current_cpu->h_Rpsw_get ()), 15), ANDSI (FLD (f_imm16), 15)), 1), 8), SLLSI (current_cpu->h_Rpsw_get (), 12))));
3942     if (UNLIKELY(current_cpu->trace_result_p))
3943       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
3944     current_cpu->h_gr_set (((UINT) 14), opval);
3945   }
3946 }
3947 {
3948   BI tmp_tmp;
3949   switch (FLD (f_op2))
3950   {
3951   case 0 : {
3952   tmp_tmp = NOTSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()));
3953 }
3954     break;
3955   case 1 : {
3956   tmp_tmp = NOTSI (current_cpu->h_cy_get ());
3957 }
3958     break;
3959   case 2 : {
3960   tmp_tmp = XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ());
3961 }
3962     break;
3963   case 3 : {
3964   tmp_tmp = current_cpu->h_cy_get ();
3965 }
3966     break;
3967   case 4 : {
3968   tmp_tmp = NOTSI (ORSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()), current_cpu->h_z16_get ()));
3969 }
3970     break;
3971   case 5 : {
3972   tmp_tmp = NOTSI (ORSI (current_cpu->h_cy_get (), current_cpu->h_z16_get ()));
3973 }
3974     break;
3975   case 6 : {
3976   tmp_tmp = ORSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()), current_cpu->h_z16_get ());
3977 }
3978     break;
3979   case 7 : {
3980   tmp_tmp = ORSI (current_cpu->h_cy_get (), current_cpu->h_z16_get ());
3981 }
3982     break;
3983   case 8 : {
3984   tmp_tmp = NOTSI (current_cpu->h_s_get ());
3985 }
3986     break;
3987   case 9 : {
3988   tmp_tmp = NOTSI (current_cpu->h_ov_get ());
3989 }
3990     break;
3991   case 10 : {
3992   tmp_tmp = current_cpu->h_s_get ();
3993 }
3994     break;
3995   case 11 : {
3996   tmp_tmp = current_cpu->h_ov_get ();
3997 }
3998     break;
3999   case 12 : {
4000   tmp_tmp = NOTSI (current_cpu->h_z8_get ());
4001 }
4002     break;
4003   case 13 : {
4004   tmp_tmp = NOTSI (current_cpu->h_z16_get ());
4005 }
4006     break;
4007   case 14 : {
4008   tmp_tmp = current_cpu->h_z8_get ();
4009 }
4010     break;
4011   case 15 : {
4012   tmp_tmp = current_cpu->h_z16_get ();
4013 }
4014     break;
4015   }
4016 if (tmp_tmp) {
4017   {
4018     USI opval = FLD (f_rel8_4);
4019     if (UNLIKELY(current_cpu->trace_result_p))
4020       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4021     current_cpu->branch (opval, npc, status);
4022   }
4023 }
4024 }
4025 }
4026
4027   current_cpu->done_cti_insn (npc, status);
4028   return status;
4029 #undef FLD
4030 }
4031
4032 // ********** bngrimm4: bn $Rd,#$imm4,$rel12
4033
4034 sem_status
4035 xstormy16_sem_bngrimm4 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4036 {
4037 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
4038   sem_status status = SEM_STATUS_NORMAL;
4039   xstormy16_scache* abuf = sem;
4040   PCADDR pc = abuf->addr;
4041   PCADDR npc = pc + 4;
4042
4043 {
4044   {
4045     SI opval = FLD (f_Rd);
4046     if (UNLIKELY(current_cpu->trace_result_p))
4047       current_cpu->trace_stream << "Rpsw" << ":=0x" << hex << opval << dec << "  ";
4048     current_cpu->h_Rpsw_set (opval);
4049   }
4050 if (EQSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), SLLSI (1, FLD (f_imm4))), 0)) {
4051   {
4052     USI opval = FLD (f_rel12);
4053     if (UNLIKELY(current_cpu->trace_result_p))
4054       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4055     current_cpu->branch (opval, npc, status);
4056   }
4057 }
4058 }
4059
4060   current_cpu->done_cti_insn (npc, status);
4061   return status;
4062 #undef FLD
4063 }
4064
4065 // ********** bngrgr: bn $Rd,$Rs,$rel12
4066
4067 sem_status
4068 xstormy16_sem_bngrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4069 {
4070 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
4071   sem_status status = SEM_STATUS_NORMAL;
4072   xstormy16_scache* abuf = sem;
4073   PCADDR pc = abuf->addr;
4074   PCADDR npc = pc + 4;
4075
4076 {
4077   {
4078     SI opval = FLD (f_Rd);
4079     if (UNLIKELY(current_cpu->trace_result_p))
4080       current_cpu->trace_stream << "Rpsw" << ":=0x" << hex << opval << dec << "  ";
4081     current_cpu->h_Rpsw_set (opval);
4082   }
4083 if (EQSI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), SLLSI (1, current_cpu->h_gr_get (FLD (f_Rs)))), 0)) {
4084   {
4085     USI opval = FLD (f_rel12);
4086     if (UNLIKELY(current_cpu->trace_result_p))
4087       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4088     current_cpu->branch (opval, npc, status);
4089   }
4090 }
4091 }
4092
4093   current_cpu->done_cti_insn (npc, status);
4094   return status;
4095 #undef FLD
4096 }
4097
4098 // ********** bnlmemimm: bn $lmem8,#$imm3b,$rel12
4099
4100 sem_status
4101 xstormy16_sem_bnlmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4102 {
4103 #define FLD(f) abuf->fields.sfmt_bnlmemimm.f
4104   sem_status status = SEM_STATUS_NORMAL;
4105   xstormy16_scache* abuf = sem;
4106   PCADDR pc = abuf->addr;
4107   PCADDR npc = pc + 4;
4108
4109 if (EQQI (ANDQI (current_cpu->GETMEMQI (pc, FLD (f_lmem8)), SLLSI (1, FLD (f_imm3b))), 0)) {
4110   {
4111     USI opval = FLD (f_rel12);
4112     if (UNLIKELY(current_cpu->trace_result_p))
4113       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4114     current_cpu->branch (opval, npc, status);
4115   }
4116 }
4117
4118   current_cpu->done_cti_insn (npc, status);
4119   return status;
4120 #undef FLD
4121 }
4122
4123 // ********** bnhmemimm: bn $hmem8,#$imm3b,$rel12
4124
4125 sem_status
4126 xstormy16_sem_bnhmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4127 {
4128 #define FLD(f) abuf->fields.sfmt_bnhmemimm.f
4129   sem_status status = SEM_STATUS_NORMAL;
4130   xstormy16_scache* abuf = sem;
4131   PCADDR pc = abuf->addr;
4132   PCADDR npc = pc + 4;
4133
4134 if (EQQI (ANDQI (current_cpu->GETMEMQI (pc, FLD (f_hmem8)), SLLSI (1, FLD (f_imm3b))), 0)) {
4135   {
4136     USI opval = FLD (f_rel12);
4137     if (UNLIKELY(current_cpu->trace_result_p))
4138       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4139     current_cpu->branch (opval, npc, status);
4140   }
4141 }
4142
4143   current_cpu->done_cti_insn (npc, status);
4144   return status;
4145 #undef FLD
4146 }
4147
4148 // ********** bpgrimm4: bp $Rd,#$imm4,$rel12
4149
4150 sem_status
4151 xstormy16_sem_bpgrimm4 (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4152 {
4153 #define FLD(f) abuf->fields.sfmt_bngrimm4.f
4154   sem_status status = SEM_STATUS_NORMAL;
4155   xstormy16_scache* abuf = sem;
4156   PCADDR pc = abuf->addr;
4157   PCADDR npc = pc + 4;
4158
4159 {
4160   {
4161     SI opval = FLD (f_Rd);
4162     if (UNLIKELY(current_cpu->trace_result_p))
4163       current_cpu->trace_stream << "Rpsw" << ":=0x" << hex << opval << dec << "  ";
4164     current_cpu->h_Rpsw_set (opval);
4165   }
4166 if (NESI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), SLLSI (1, FLD (f_imm4))), 0)) {
4167   {
4168     USI opval = FLD (f_rel12);
4169     if (UNLIKELY(current_cpu->trace_result_p))
4170       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4171     current_cpu->branch (opval, npc, status);
4172   }
4173 }
4174 }
4175
4176   current_cpu->done_cti_insn (npc, status);
4177   return status;
4178 #undef FLD
4179 }
4180
4181 // ********** bpgrgr: bp $Rd,$Rs,$rel12
4182
4183 sem_status
4184 xstormy16_sem_bpgrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4185 {
4186 #define FLD(f) abuf->fields.sfmt_bccgrgr.f
4187   sem_status status = SEM_STATUS_NORMAL;
4188   xstormy16_scache* abuf = sem;
4189   PCADDR pc = abuf->addr;
4190   PCADDR npc = pc + 4;
4191
4192 {
4193   {
4194     SI opval = FLD (f_Rd);
4195     if (UNLIKELY(current_cpu->trace_result_p))
4196       current_cpu->trace_stream << "Rpsw" << ":=0x" << hex << opval << dec << "  ";
4197     current_cpu->h_Rpsw_set (opval);
4198   }
4199 if (NESI (ANDSI (current_cpu->h_gr_get (FLD (f_Rd)), SLLSI (1, current_cpu->h_gr_get (FLD (f_Rs)))), 0)) {
4200   {
4201     USI opval = FLD (f_rel12);
4202     if (UNLIKELY(current_cpu->trace_result_p))
4203       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4204     current_cpu->branch (opval, npc, status);
4205   }
4206 }
4207 }
4208
4209   current_cpu->done_cti_insn (npc, status);
4210   return status;
4211 #undef FLD
4212 }
4213
4214 // ********** bplmemimm: bp $lmem8,#$imm3b,$rel12
4215
4216 sem_status
4217 xstormy16_sem_bplmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4218 {
4219 #define FLD(f) abuf->fields.sfmt_bnlmemimm.f
4220   sem_status status = SEM_STATUS_NORMAL;
4221   xstormy16_scache* abuf = sem;
4222   PCADDR pc = abuf->addr;
4223   PCADDR npc = pc + 4;
4224
4225 if (NEQI (ANDQI (current_cpu->GETMEMQI (pc, FLD (f_lmem8)), SLLSI (1, FLD (f_imm3b))), 0)) {
4226   {
4227     USI opval = FLD (f_rel12);
4228     if (UNLIKELY(current_cpu->trace_result_p))
4229       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4230     current_cpu->branch (opval, npc, status);
4231   }
4232 }
4233
4234   current_cpu->done_cti_insn (npc, status);
4235   return status;
4236 #undef FLD
4237 }
4238
4239 // ********** bphmemimm: bp $hmem8,#$imm3b,$rel12
4240
4241 sem_status
4242 xstormy16_sem_bphmemimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4243 {
4244 #define FLD(f) abuf->fields.sfmt_bnhmemimm.f
4245   sem_status status = SEM_STATUS_NORMAL;
4246   xstormy16_scache* abuf = sem;
4247   PCADDR pc = abuf->addr;
4248   PCADDR npc = pc + 4;
4249
4250 if (NEQI (ANDQI (current_cpu->GETMEMQI (pc, FLD (f_hmem8)), SLLSI (1, FLD (f_imm3b))), 0)) {
4251   {
4252     USI opval = FLD (f_rel12);
4253     if (UNLIKELY(current_cpu->trace_result_p))
4254       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4255     current_cpu->branch (opval, npc, status);
4256   }
4257 }
4258
4259   current_cpu->done_cti_insn (npc, status);
4260   return status;
4261 #undef FLD
4262 }
4263
4264 // ********** bcc: b$bcond2 ${rel8-2}
4265
4266 sem_status
4267 xstormy16_sem_bcc (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4268 {
4269 #define FLD(f) abuf->fields.sfmt_bcc.f
4270   sem_status status = SEM_STATUS_NORMAL;
4271   xstormy16_scache* abuf = sem;
4272   PCADDR pc = abuf->addr;
4273   PCADDR npc = pc + 2;
4274
4275 {
4276   BI tmp_tmp;
4277   switch (FLD (f_op2))
4278   {
4279   case 0 : {
4280   tmp_tmp = NOTSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()));
4281 }
4282     break;
4283   case 1 : {
4284   tmp_tmp = NOTSI (current_cpu->h_cy_get ());
4285 }
4286     break;
4287   case 2 : {
4288   tmp_tmp = XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ());
4289 }
4290     break;
4291   case 3 : {
4292   tmp_tmp = current_cpu->h_cy_get ();
4293 }
4294     break;
4295   case 4 : {
4296   tmp_tmp = NOTSI (ORSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()), current_cpu->h_z16_get ()));
4297 }
4298     break;
4299   case 5 : {
4300   tmp_tmp = NOTSI (ORSI (current_cpu->h_cy_get (), current_cpu->h_z16_get ()));
4301 }
4302     break;
4303   case 6 : {
4304   tmp_tmp = ORSI (XORSI (current_cpu->h_s_get (), current_cpu->h_ov_get ()), current_cpu->h_z16_get ());
4305 }
4306     break;
4307   case 7 : {
4308   tmp_tmp = ORSI (current_cpu->h_cy_get (), current_cpu->h_z16_get ());
4309 }
4310     break;
4311   case 8 : {
4312   tmp_tmp = NOTSI (current_cpu->h_s_get ());
4313 }
4314     break;
4315   case 9 : {
4316   tmp_tmp = NOTSI (current_cpu->h_ov_get ());
4317 }
4318     break;
4319   case 10 : {
4320   tmp_tmp = current_cpu->h_s_get ();
4321 }
4322     break;
4323   case 11 : {
4324   tmp_tmp = current_cpu->h_ov_get ();
4325 }
4326     break;
4327   case 12 : {
4328   tmp_tmp = NOTSI (current_cpu->h_z8_get ());
4329 }
4330     break;
4331   case 13 : {
4332   tmp_tmp = NOTSI (current_cpu->h_z16_get ());
4333 }
4334     break;
4335   case 14 : {
4336   tmp_tmp = current_cpu->h_z8_get ();
4337 }
4338     break;
4339   case 15 : {
4340   tmp_tmp = current_cpu->h_z16_get ();
4341 }
4342     break;
4343   }
4344 if (tmp_tmp) {
4345   {
4346     USI opval = FLD (f_rel8_2);
4347     if (UNLIKELY(current_cpu->trace_result_p))
4348       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4349     current_cpu->branch (opval, npc, status);
4350   }
4351 }
4352 }
4353
4354   current_cpu->done_cti_insn (npc, status);
4355   return status;
4356 #undef FLD
4357 }
4358
4359 // ********** bgr: br $Rd
4360
4361 sem_status
4362 xstormy16_sem_bgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4363 {
4364 #define FLD(f) abuf->fields.sfmt_jmp.f
4365   sem_status status = SEM_STATUS_NORMAL;
4366   xstormy16_scache* abuf = sem;
4367   PCADDR pc = abuf->addr;
4368   PCADDR npc = pc + 2;
4369
4370   {
4371     USI opval = ADDSI (ADDSI (pc, 2), current_cpu->h_gr_get (FLD (f_Rd)));
4372     if (UNLIKELY(current_cpu->trace_result_p))
4373       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4374     current_cpu->branch (opval, npc, status);
4375   }
4376
4377   current_cpu->done_cti_insn (npc, status);
4378   return status;
4379 #undef FLD
4380 }
4381
4382 // ********** br: br $rel12a
4383
4384 sem_status
4385 xstormy16_sem_br (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4386 {
4387 #define FLD(f) abuf->fields.sfmt_br.f
4388   sem_status status = SEM_STATUS_NORMAL;
4389   xstormy16_scache* abuf = sem;
4390   PCADDR pc = abuf->addr;
4391   PCADDR npc = pc + 2;
4392
4393   {
4394     USI opval = FLD (f_rel12a);
4395     if (UNLIKELY(current_cpu->trace_result_p))
4396       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4397     current_cpu->branch (opval, npc, status);
4398   }
4399
4400   current_cpu->done_cti_insn (npc, status);
4401   return status;
4402 #undef FLD
4403 }
4404
4405 // ********** jmp: jmp $Rbj,$Rd
4406
4407 sem_status
4408 xstormy16_sem_jmp (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4409 {
4410 #define FLD(f) abuf->fields.sfmt_jmp.f
4411   sem_status status = SEM_STATUS_NORMAL;
4412   xstormy16_scache* abuf = sem;
4413   PCADDR pc = abuf->addr;
4414   PCADDR npc = pc + 2;
4415
4416   {
4417     USI opval = JOINHISI (current_cpu->h_Rbj_get (FLD (f_Rbj)), current_cpu->h_gr_get (FLD (f_Rd)));
4418     if (UNLIKELY(current_cpu->trace_result_p))
4419       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4420     current_cpu->branch (opval, npc, status);
4421   }
4422
4423   current_cpu->done_cti_insn (npc, status);
4424   return status;
4425 #undef FLD
4426 }
4427
4428 // ********** jmpf: jmpf $abs24
4429
4430 sem_status
4431 xstormy16_sem_jmpf (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4432 {
4433 #define FLD(f) abuf->fields.sfmt_jmpf.f
4434   sem_status status = SEM_STATUS_NORMAL;
4435   xstormy16_scache* abuf = sem;
4436   PCADDR pc = abuf->addr;
4437   PCADDR npc = pc + 4;
4438
4439   {
4440     USI opval = FLD (f_abs24);
4441     if (UNLIKELY(current_cpu->trace_result_p))
4442       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4443     current_cpu->branch (opval, npc, status);
4444   }
4445
4446   current_cpu->done_cti_insn (npc, status);
4447   return status;
4448 #undef FLD
4449 }
4450
4451 // ********** callrgr: callr $Rd
4452
4453 sem_status
4454 xstormy16_sem_callrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4455 {
4456 #define FLD(f) abuf->fields.sfmt_jmp.f
4457   sem_status status = SEM_STATUS_NORMAL;
4458   xstormy16_scache* abuf = sem;
4459   PCADDR pc = abuf->addr;
4460   PCADDR npc = pc + 2;
4461
4462 {
4463   {
4464     SI opval = ADDSI (pc, 2);
4465     if (UNLIKELY(current_cpu->trace_result_p))
4466       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (((UINT) 15)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4467     current_cpu->SETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)), opval);
4468   }
4469   {
4470     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4);
4471     if (UNLIKELY(current_cpu->trace_result_p))
4472       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4473     current_cpu->h_gr_set (((UINT) 15), opval);
4474   }
4475   {
4476     USI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rd)), ADDSI (pc, 2));
4477     if (UNLIKELY(current_cpu->trace_result_p))
4478       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4479     current_cpu->branch (opval, npc, status);
4480   }
4481 }
4482
4483   current_cpu->done_cti_insn (npc, status);
4484   return status;
4485 #undef FLD
4486 }
4487
4488 // ********** callrimm: callr $rel12a
4489
4490 sem_status
4491 xstormy16_sem_callrimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4492 {
4493 #define FLD(f) abuf->fields.sfmt_br.f
4494   sem_status status = SEM_STATUS_NORMAL;
4495   xstormy16_scache* abuf = sem;
4496   PCADDR pc = abuf->addr;
4497   PCADDR npc = pc + 2;
4498
4499 {
4500   {
4501     SI opval = ADDSI (pc, 2);
4502     if (UNLIKELY(current_cpu->trace_result_p))
4503       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (((UINT) 15)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4504     current_cpu->SETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)), opval);
4505   }
4506   {
4507     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4);
4508     if (UNLIKELY(current_cpu->trace_result_p))
4509       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4510     current_cpu->h_gr_set (((UINT) 15), opval);
4511   }
4512   {
4513     USI opval = FLD (f_rel12a);
4514     if (UNLIKELY(current_cpu->trace_result_p))
4515       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4516     current_cpu->branch (opval, npc, status);
4517   }
4518 }
4519
4520   current_cpu->done_cti_insn (npc, status);
4521   return status;
4522 #undef FLD
4523 }
4524
4525 // ********** callgr: call $Rbj,$Rd
4526
4527 sem_status
4528 xstormy16_sem_callgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4529 {
4530 #define FLD(f) abuf->fields.sfmt_jmp.f
4531   sem_status status = SEM_STATUS_NORMAL;
4532   xstormy16_scache* abuf = sem;
4533   PCADDR pc = abuf->addr;
4534   PCADDR npc = pc + 2;
4535
4536 {
4537   {
4538     SI opval = ADDSI (pc, 2);
4539     if (UNLIKELY(current_cpu->trace_result_p))
4540       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (((UINT) 15)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4541     current_cpu->SETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)), opval);
4542   }
4543   {
4544     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4);
4545     if (UNLIKELY(current_cpu->trace_result_p))
4546       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4547     current_cpu->h_gr_set (((UINT) 15), opval);
4548   }
4549   {
4550     USI opval = JOINHISI (current_cpu->h_Rbj_get (FLD (f_Rbj)), current_cpu->h_gr_get (FLD (f_Rd)));
4551     if (UNLIKELY(current_cpu->trace_result_p))
4552       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4553     current_cpu->branch (opval, npc, status);
4554   }
4555 }
4556
4557   current_cpu->done_cti_insn (npc, status);
4558   return status;
4559 #undef FLD
4560 }
4561
4562 // ********** callfimm: callf $abs24
4563
4564 sem_status
4565 xstormy16_sem_callfimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4566 {
4567 #define FLD(f) abuf->fields.sfmt_jmpf.f
4568   sem_status status = SEM_STATUS_NORMAL;
4569   xstormy16_scache* abuf = sem;
4570   PCADDR pc = abuf->addr;
4571   PCADDR npc = pc + 4;
4572
4573 {
4574   {
4575     SI opval = ADDSI (pc, 4);
4576     if (UNLIKELY(current_cpu->trace_result_p))
4577       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (((UINT) 15)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4578     current_cpu->SETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)), opval);
4579   }
4580   {
4581     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4);
4582     if (UNLIKELY(current_cpu->trace_result_p))
4583       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4584     current_cpu->h_gr_set (((UINT) 15), opval);
4585   }
4586   {
4587     USI opval = FLD (f_abs24);
4588     if (UNLIKELY(current_cpu->trace_result_p))
4589       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4590     current_cpu->branch (opval, npc, status);
4591   }
4592 }
4593
4594   current_cpu->done_cti_insn (npc, status);
4595   return status;
4596 #undef FLD
4597 }
4598
4599 // ********** icallrgr: icallr $Rd
4600
4601 sem_status
4602 xstormy16_sem_icallrgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4603 {
4604 #define FLD(f) abuf->fields.sfmt_jmp.f
4605   sem_status status = SEM_STATUS_NORMAL;
4606   xstormy16_scache* abuf = sem;
4607   PCADDR pc = abuf->addr;
4608   PCADDR npc = pc + 2;
4609
4610 {
4611   {
4612     SI opval = ADDSI (pc, 2);
4613     if (UNLIKELY(current_cpu->trace_result_p))
4614       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (((UINT) 15)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4615     current_cpu->SETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)), opval);
4616   }
4617   {
4618     HI opval = current_cpu->h_gr_get (((UINT) 14));
4619     if (UNLIKELY(current_cpu->trace_result_p))
4620       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4621     current_cpu->SETMEMHI (pc, ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4), opval);
4622   }
4623   {
4624     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), 6);
4625     if (UNLIKELY(current_cpu->trace_result_p))
4626       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4627     current_cpu->h_gr_set (((UINT) 15), opval);
4628   }
4629   {
4630     USI opval = ADDSI (current_cpu->h_gr_get (FLD (f_Rd)), ADDSI (pc, 2));
4631     if (UNLIKELY(current_cpu->trace_result_p))
4632       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4633     current_cpu->branch (opval, npc, status);
4634   }
4635 }
4636
4637   current_cpu->done_cti_insn (npc, status);
4638   return status;
4639 #undef FLD
4640 }
4641
4642 // ********** icallgr: icall $Rbj,$Rd
4643
4644 sem_status
4645 xstormy16_sem_icallgr (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4646 {
4647 #define FLD(f) abuf->fields.sfmt_jmp.f
4648   sem_status status = SEM_STATUS_NORMAL;
4649   xstormy16_scache* abuf = sem;
4650   PCADDR pc = abuf->addr;
4651   PCADDR npc = pc + 2;
4652
4653 {
4654   {
4655     SI opval = ADDSI (pc, 2);
4656     if (UNLIKELY(current_cpu->trace_result_p))
4657       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (((UINT) 15)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4658     current_cpu->SETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)), opval);
4659   }
4660   {
4661     HI opval = current_cpu->h_gr_get (((UINT) 14));
4662     if (UNLIKELY(current_cpu->trace_result_p))
4663       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4664     current_cpu->SETMEMHI (pc, ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4), opval);
4665   }
4666   {
4667     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), 6);
4668     if (UNLIKELY(current_cpu->trace_result_p))
4669       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4670     current_cpu->h_gr_set (((UINT) 15), opval);
4671   }
4672   {
4673     USI opval = JOINHISI (current_cpu->h_Rbj_get (FLD (f_Rbj)), current_cpu->h_gr_get (FLD (f_Rd)));
4674     if (UNLIKELY(current_cpu->trace_result_p))
4675       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4676     current_cpu->branch (opval, npc, status);
4677   }
4678 }
4679
4680   current_cpu->done_cti_insn (npc, status);
4681   return status;
4682 #undef FLD
4683 }
4684
4685 // ********** icallfimm: icallf $abs24
4686
4687 sem_status
4688 xstormy16_sem_icallfimm (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4689 {
4690 #define FLD(f) abuf->fields.sfmt_jmpf.f
4691   sem_status status = SEM_STATUS_NORMAL;
4692   xstormy16_scache* abuf = sem;
4693   PCADDR pc = abuf->addr;
4694   PCADDR npc = pc + 4;
4695
4696 {
4697   {
4698     SI opval = ADDSI (pc, 4);
4699     if (UNLIKELY(current_cpu->trace_result_p))
4700       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) current_cpu->h_gr_get (((UINT) 15)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4701     current_cpu->SETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)), opval);
4702   }
4703   {
4704     HI opval = current_cpu->h_gr_get (((UINT) 14));
4705     if (UNLIKELY(current_cpu->trace_result_p))
4706       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
4707     current_cpu->SETMEMHI (pc, ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4), opval);
4708   }
4709   {
4710     SI opval = ADDSI (current_cpu->h_gr_get (((UINT) 15)), 6);
4711     if (UNLIKELY(current_cpu->trace_result_p))
4712       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4713     current_cpu->h_gr_set (((UINT) 15), opval);
4714   }
4715   {
4716     USI opval = FLD (f_abs24);
4717     if (UNLIKELY(current_cpu->trace_result_p))
4718       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4719     current_cpu->branch (opval, npc, status);
4720   }
4721 }
4722
4723   current_cpu->done_cti_insn (npc, status);
4724   return status;
4725 #undef FLD
4726 }
4727
4728 // ********** iret: iret
4729
4730 sem_status
4731 xstormy16_sem_iret (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4732 {
4733 #define FLD(f) abuf->fields.fmt_empty.f
4734   sem_status status = SEM_STATUS_NORMAL;
4735   xstormy16_scache* abuf = sem;
4736   PCADDR pc = abuf->addr;
4737   PCADDR npc = pc + 2;
4738
4739 {
4740   {
4741     SI opval = SUBSI (current_cpu->h_gr_get (((UINT) 15)), 6);
4742     if (UNLIKELY(current_cpu->trace_result_p))
4743       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4744     current_cpu->h_gr_set (((UINT) 15), opval);
4745   }
4746   {
4747     USI opval = current_cpu->GETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)));
4748     if (UNLIKELY(current_cpu->trace_result_p))
4749       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4750     current_cpu->branch (opval, npc, status);
4751   }
4752   {
4753     SI opval = current_cpu->GETMEMHI (pc, ADDSI (current_cpu->h_gr_get (((UINT) 15)), 4));
4754     if (UNLIKELY(current_cpu->trace_result_p))
4755       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
4756     current_cpu->h_gr_set (((UINT) 14), opval);
4757   }
4758 }
4759
4760   current_cpu->done_cti_insn (npc, status);
4761   return status;
4762 #undef FLD
4763 }
4764
4765 // ********** ret: ret
4766
4767 sem_status
4768 xstormy16_sem_ret (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4769 {
4770 #define FLD(f) abuf->fields.fmt_empty.f
4771   sem_status status = SEM_STATUS_NORMAL;
4772   xstormy16_scache* abuf = sem;
4773   PCADDR pc = abuf->addr;
4774   PCADDR npc = pc + 2;
4775
4776 {
4777   {
4778     SI opval = SUBSI (current_cpu->h_gr_get (((UINT) 15)), 4);
4779     if (UNLIKELY(current_cpu->trace_result_p))
4780       current_cpu->trace_stream << "gr" << '[' << ((UINT) 15) << ']' << ":=0x" << hex << opval << dec << "  ";
4781     current_cpu->h_gr_set (((UINT) 15), opval);
4782   }
4783   {
4784     USI opval = current_cpu->GETMEMSI (pc, current_cpu->h_gr_get (((UINT) 15)));
4785     if (UNLIKELY(current_cpu->trace_result_p))
4786       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4787     current_cpu->branch (opval, npc, status);
4788   }
4789 }
4790
4791   current_cpu->done_cti_insn (npc, status);
4792   return status;
4793 #undef FLD
4794 }
4795
4796 // ********** mul: mul
4797
4798 sem_status
4799 xstormy16_sem_mul (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4800 {
4801 #define FLD(f) abuf->fields.fmt_empty.f
4802   sem_status status = SEM_STATUS_NORMAL;
4803   xstormy16_scache* abuf = sem;
4804   PCADDR pc = abuf->addr;
4805   PCADDR npc = pc + 2;
4806
4807 {
4808   SI tmp_value;
4809   tmp_value = MULSI (ANDSI (current_cpu->h_gr_get (((UINT) 0)), 65535), ANDSI (current_cpu->h_gr_get (((UINT) 2)), 65535));
4810   {
4811     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (TRUNCSIHI (tmp_value), 255), 0), SLLHI (EQHI (TRUNCSIHI (tmp_value), 0), 1)), ORHI (SLLHI (current_cpu->parity (TRUNCSIHI (tmp_value)), 5), SLLHI (LTQI (SRLHI (TRUNCSIHI (tmp_value), MULSI (1, 8)), 0), 6))));
4812     if (UNLIKELY(current_cpu->trace_result_p))
4813       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
4814     current_cpu->h_gr_set (((UINT) 14), opval);
4815   }
4816   {
4817     SI opval = TRUNCSIHI (tmp_value);
4818     if (UNLIKELY(current_cpu->trace_result_p))
4819       current_cpu->trace_stream << "gr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
4820     current_cpu->h_gr_set (((UINT) 0), opval);
4821   }
4822   {
4823     SI opval = TRUNCSIHI (SRLSI (tmp_value, 16));
4824     if (UNLIKELY(current_cpu->trace_result_p))
4825       current_cpu->trace_stream << "gr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
4826     current_cpu->h_gr_set (((UINT) 1), opval);
4827   }
4828 }
4829
4830   current_cpu->done_insn (npc, status);
4831   return status;
4832 #undef FLD
4833 }
4834
4835 // ********** div: div
4836
4837 sem_status
4838 xstormy16_sem_div (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4839 {
4840 #define FLD(f) abuf->fields.fmt_empty.f
4841   sem_status status = SEM_STATUS_NORMAL;
4842   xstormy16_scache* abuf = sem;
4843   PCADDR pc = abuf->addr;
4844   PCADDR npc = pc + 2;
4845
4846 {
4847   {
4848     SI opval = UMODSI (current_cpu->h_gr_get (((UINT) 0)), current_cpu->h_gr_get (((UINT) 2)));
4849     if (UNLIKELY(current_cpu->trace_result_p))
4850       current_cpu->trace_stream << "gr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
4851     current_cpu->h_gr_set (((UINT) 1), opval);
4852   }
4853 {
4854   HI tmp_nvalue;
4855   tmp_nvalue = UDIVSI (current_cpu->h_gr_get (((UINT) 0)), current_cpu->h_gr_get (((UINT) 2)));
4856   {
4857     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6))));
4858     if (UNLIKELY(current_cpu->trace_result_p))
4859       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
4860     current_cpu->h_gr_set (((UINT) 14), opval);
4861   }
4862   {
4863     SI opval = tmp_nvalue;
4864     if (UNLIKELY(current_cpu->trace_result_p))
4865       current_cpu->trace_stream << "gr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
4866     current_cpu->h_gr_set (((UINT) 0), opval);
4867   }
4868 }
4869 }
4870
4871   current_cpu->done_insn (npc, status);
4872   return status;
4873 #undef FLD
4874 }
4875
4876 // ********** sdiv: sdiv
4877
4878 sem_status
4879 xstormy16_sem_sdiv (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4880 {
4881 #define FLD(f) abuf->fields.fmt_empty.f
4882   sem_status status = SEM_STATUS_NORMAL;
4883   xstormy16_scache* abuf = sem;
4884   PCADDR pc = abuf->addr;
4885   PCADDR npc = pc + 2;
4886
4887 {
4888   {
4889     SI opval = MODHI (current_cpu->h_gr_get (((UINT) 0)), current_cpu->h_gr_get (((UINT) 2)));
4890     if (UNLIKELY(current_cpu->trace_result_p))
4891       current_cpu->trace_stream << "gr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
4892     current_cpu->h_gr_set (((UINT) 1), opval);
4893   }
4894 {
4895   HI tmp_nvalue;
4896   tmp_nvalue = DIVHI (current_cpu->h_gr_get (((UINT) 0)), current_cpu->h_gr_get (((UINT) 2)));
4897   {
4898     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6))));
4899     if (UNLIKELY(current_cpu->trace_result_p))
4900       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
4901     current_cpu->h_gr_set (((UINT) 14), opval);
4902   }
4903   {
4904     SI opval = tmp_nvalue;
4905     if (UNLIKELY(current_cpu->trace_result_p))
4906       current_cpu->trace_stream << "gr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
4907     current_cpu->h_gr_set (((UINT) 0), opval);
4908   }
4909 }
4910 }
4911
4912   current_cpu->done_insn (npc, status);
4913   return status;
4914 #undef FLD
4915 }
4916
4917 // ********** sdivlh: sdivlh
4918
4919 sem_status
4920 xstormy16_sem_sdivlh (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4921 {
4922 #define FLD(f) abuf->fields.fmt_empty.f
4923   sem_status status = SEM_STATUS_NORMAL;
4924   xstormy16_scache* abuf = sem;
4925   PCADDR pc = abuf->addr;
4926   PCADDR npc = pc + 2;
4927
4928 {
4929   SI tmp_value;
4930   tmp_value = ADDSI (SLLSI (ANDSI (current_cpu->h_gr_get (((UINT) 1)), 65535), 16), ANDSI (current_cpu->h_gr_get (((UINT) 0)), 65535));
4931   {
4932     SI opval = MODSI (tmp_value, EXTHISI (TRUNCSIHI (current_cpu->h_gr_get (((UINT) 2)))));
4933     if (UNLIKELY(current_cpu->trace_result_p))
4934       current_cpu->trace_stream << "gr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
4935     current_cpu->h_gr_set (((UINT) 1), opval);
4936   }
4937 {
4938   HI tmp_nvalue;
4939   tmp_nvalue = DIVSI (tmp_value, EXTHISI (TRUNCSIHI (current_cpu->h_gr_get (((UINT) 2)))));
4940   {
4941     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6))));
4942     if (UNLIKELY(current_cpu->trace_result_p))
4943       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
4944     current_cpu->h_gr_set (((UINT) 14), opval);
4945   }
4946   {
4947     SI opval = tmp_nvalue;
4948     if (UNLIKELY(current_cpu->trace_result_p))
4949       current_cpu->trace_stream << "gr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
4950     current_cpu->h_gr_set (((UINT) 0), opval);
4951   }
4952 }
4953 }
4954
4955   current_cpu->done_insn (npc, status);
4956   return status;
4957 #undef FLD
4958 }
4959
4960 // ********** divlh: divlh
4961
4962 sem_status
4963 xstormy16_sem_divlh (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
4964 {
4965 #define FLD(f) abuf->fields.fmt_empty.f
4966   sem_status status = SEM_STATUS_NORMAL;
4967   xstormy16_scache* abuf = sem;
4968   PCADDR pc = abuf->addr;
4969   PCADDR npc = pc + 2;
4970
4971 {
4972   SI tmp_value;
4973   tmp_value = ADDSI (SLLSI (ANDSI (current_cpu->h_gr_get (((UINT) 1)), 65535), 16), ANDSI (current_cpu->h_gr_get (((UINT) 0)), 65535));
4974   {
4975     SI opval = UMODSI (tmp_value, current_cpu->h_gr_get (((UINT) 2)));
4976     if (UNLIKELY(current_cpu->trace_result_p))
4977       current_cpu->trace_stream << "gr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
4978     current_cpu->h_gr_set (((UINT) 1), opval);
4979   }
4980 {
4981   HI tmp_nvalue;
4982   tmp_nvalue = UDIVSI (tmp_value, current_cpu->h_gr_get (((UINT) 2)));
4983   {
4984     SI opval = ORSI (ANDSI (current_cpu->h_gr_get (((UINT) 14)), 65436), ORBI (ORBI (EQHI (ANDHI (tmp_nvalue, 255), 0), SLLHI (EQHI (tmp_nvalue, 0), 1)), ORHI (SLLHI (current_cpu->parity (tmp_nvalue), 5), SLLHI (LTQI (SRLHI (tmp_nvalue, MULSI (1, 8)), 0), 6))));
4985     if (UNLIKELY(current_cpu->trace_result_p))
4986       current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << "  ";
4987     current_cpu->h_gr_set (((UINT) 14), opval);
4988   }
4989   {
4990     SI opval = tmp_nvalue;
4991     if (UNLIKELY(current_cpu->trace_result_p))
4992       current_cpu->trace_stream << "gr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
4993     current_cpu->h_gr_set (((UINT) 0), opval);
4994   }
4995 }
4996 }
4997
4998   current_cpu->done_insn (npc, status);
4999   return status;
5000 #undef FLD
5001 }
5002
5003 // ********** reset: reset
5004
5005 sem_status
5006 xstormy16_sem_reset (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
5007 {
5008 #define FLD(f) abuf->fields.fmt_empty.f
5009   sem_status status = SEM_STATUS_NORMAL;
5010   xstormy16_scache* abuf = sem;
5011   PCADDR pc = abuf->addr;
5012   PCADDR npc = pc + 2;
5013
5014 ((void) 0); /*nop*/
5015
5016   current_cpu->done_insn (npc, status);
5017   return status;
5018 #undef FLD
5019 }
5020
5021 // ********** nop: nop
5022
5023 sem_status
5024 xstormy16_sem_nop (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
5025 {
5026 #define FLD(f) abuf->fields.fmt_empty.f
5027   sem_status status = SEM_STATUS_NORMAL;
5028   xstormy16_scache* abuf = sem;
5029   PCADDR pc = abuf->addr;
5030   PCADDR npc = pc + 2;
5031
5032 ((void) 0); /*nop*/
5033
5034   current_cpu->done_insn (npc, status);
5035   return status;
5036 #undef FLD
5037 }
5038
5039 // ********** halt: halt
5040
5041 sem_status
5042 xstormy16_sem_halt (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
5043 {
5044 #define FLD(f) abuf->fields.fmt_empty.f
5045   sem_status status = SEM_STATUS_NORMAL;
5046   xstormy16_scache* abuf = sem;
5047   PCADDR pc = abuf->addr;
5048   PCADDR npc = pc + 2;
5049
5050 current_cpu->do_halt ();
5051
5052   current_cpu->done_insn (npc, status);
5053   return status;
5054 #undef FLD
5055 }
5056
5057 // ********** hold: hold
5058
5059 sem_status
5060 xstormy16_sem_hold (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
5061 {
5062 #define FLD(f) abuf->fields.fmt_empty.f
5063   sem_status status = SEM_STATUS_NORMAL;
5064   xstormy16_scache* abuf = sem;
5065   PCADDR pc = abuf->addr;
5066   PCADDR npc = pc + 2;
5067
5068 current_cpu->do_hold ();
5069
5070   current_cpu->done_insn (npc, status);
5071   return status;
5072 #undef FLD
5073 }
5074
5075 // ********** holdx: holdx
5076
5077 sem_status
5078 xstormy16_sem_holdx (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
5079 {
5080 #define FLD(f) abuf->fields.fmt_empty.f
5081   sem_status status = SEM_STATUS_NORMAL;
5082   xstormy16_scache* abuf = sem;
5083   PCADDR pc = abuf->addr;
5084   PCADDR npc = pc + 2;
5085
5086 current_cpu->do_holdx ();
5087
5088   current_cpu->done_insn (npc, status);
5089   return status;
5090 #undef FLD
5091 }
5092
5093 // ********** brk: brk
5094
5095 sem_status
5096 xstormy16_sem_brk (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
5097 {
5098 #define FLD(f) abuf->fields.fmt_empty.f
5099   sem_status status = SEM_STATUS_NORMAL;
5100   xstormy16_scache* abuf = sem;
5101   PCADDR pc = abuf->addr;
5102   PCADDR npc = pc + 2;
5103
5104 current_cpu->do_brk ();
5105
5106   current_cpu->done_insn (npc, status);
5107   return status;
5108 #undef FLD
5109 }
5110
5111 // ********** syscall: --unused--
5112
5113 sem_status
5114 xstormy16_sem_syscall (xstormy16_cpu* current_cpu, xstormy16_scache* sem)
5115 {
5116 #define FLD(f) abuf->fields.fmt_empty.f
5117   sem_status status = SEM_STATUS_NORMAL;
5118   xstormy16_scache* abuf = sem;
5119   PCADDR pc = abuf->addr;
5120   PCADDR npc = pc + 2;
5121
5122 current_cpu->syscall ();
5123
5124   current_cpu->done_insn (npc, status);
5125   return status;
5126 #undef FLD
5127 }
5128