OSDN Git Service

Regenerate cgen files, update copyright year.
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / cgen-cpu / mep / mep-core1-sem.cxx
1 /* Simulator instruction semantics for mepcore1.
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 "mep_ext1.h"
17
18 using namespace mep_ext1; // FIXME: namespace organization still wip
19 #define GET_ATTR(name) GET_ATTR_##name ()
20
21
22 // ********** x-invalid: --invalid--
23
24 sem_status
25 mepcore1_sem_x_invalid (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
26 {
27 #define FLD(f) abuf->fields.fmt_empty.f
28   sem_status status = SEM_STATUS_NORMAL;
29   mepcore1_scache* abuf = sem;
30   unsigned long long written = 0;
31   PCADDR pc = abuf->addr;
32   PCADDR npc = pc + 0;
33
34   {
35     current_cpu->invalid_insn (pc);
36     assert (0);
37     /* NOTREACHED */
38   }
39
40   current_cpu->done_insn (npc, status);
41   return status;
42 #undef FLD
43 }
44
45 // ********** stcb_r: stcb $rn,($rma)
46
47 sem_status
48 mepcore1_sem_stcb_r (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
49 {
50 #define FLD(f) abuf->fields.sfmt_stcb_r.f
51   sem_status status = SEM_STATUS_NORMAL;
52   mepcore1_scache* abuf = sem;
53   unsigned long long written = 0;
54   PCADDR pc = abuf->addr;
55   PCADDR npc = pc + 2;
56
57 current_cpu->do_stcb (* FLD (i_rn), ANDSI (* FLD (i_rma), 65535));
58
59   current_cpu->done_insn (npc, status);
60   return status;
61 #undef FLD
62 }
63
64 // ********** ldcb_r: ldcb $rn,($rma)
65
66 sem_status
67 mepcore1_sem_ldcb_r (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
68 {
69 #define FLD(f) abuf->fields.sfmt_ldcb_r.f
70   sem_status status = SEM_STATUS_NORMAL;
71   mepcore1_scache* abuf = sem;
72   unsigned long long written = 0;
73   PCADDR pc = abuf->addr;
74   PCADDR npc = pc + 2;
75
76   {
77     SI opval = current_cpu->do_ldcb (ANDSI (* FLD (i_rma), 65535));
78     if (UNLIKELY(current_cpu->trace_result_p))
79       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
80     * FLD (i_rn) = opval;
81   }
82
83   current_cpu->done_insn (npc, status);
84   return status;
85 #undef FLD
86 }
87
88 // ********** pref: pref $cimm4,($rma)
89
90 sem_status
91 mepcore1_sem_pref (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
92 {
93 #define FLD(f) abuf->fields.sfmt_ldcb_r.f
94   sem_status status = SEM_STATUS_NORMAL;
95   mepcore1_scache* abuf = sem;
96   unsigned long long written = 0;
97   PCADDR pc = abuf->addr;
98   PCADDR npc = pc + 2;
99
100 {
101 current_cpu->check_option_dcache (pc);
102 current_cpu->do_cache_prefetch (FLD (f_rn), * FLD (i_rma), pc);
103 }
104
105   current_cpu->done_insn (npc, status);
106   return status;
107 #undef FLD
108 }
109
110 // ********** prefd: pref $cimm4,$sdisp16($rma)
111
112 sem_status
113 mepcore1_sem_prefd (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
114 {
115 #define FLD(f) abuf->fields.sfmt_lhu16.f
116   sem_status status = SEM_STATUS_NORMAL;
117   mepcore1_scache* abuf = sem;
118   unsigned long long written = 0;
119   PCADDR pc = abuf->addr;
120   PCADDR npc = pc + 4;
121
122 {
123 current_cpu->check_option_dcache (pc);
124 current_cpu->do_cache_prefetch (FLD (f_rn), ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), pc);
125 }
126
127   current_cpu->done_insn (npc, status);
128   return status;
129 #undef FLD
130 }
131
132 // ********** casb3: casb3 $rl5,$rn,($rm)
133
134 sem_status
135 mepcore1_sem_casb3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
136 {
137 #define FLD(f) abuf->fields.sfmt_casb3.f
138   sem_status status = SEM_STATUS_NORMAL;
139   mepcore1_scache* abuf = sem;
140   unsigned long long written = 0;
141   PCADDR pc = abuf->addr;
142   PCADDR npc = pc + 4;
143
144 {
145 current_cpu->do_casb3 (FLD (f_rl5), * FLD (i_rn), * FLD (i_rm), pc);
146   {
147     SI opval = * FLD (i_rl5);
148     if (UNLIKELY(current_cpu->trace_result_p))
149       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rl5) << ']' << ":=0x" << hex << opval << dec << "  ";
150     * FLD (i_rl5) = opval;
151   }
152 }
153
154   current_cpu->done_insn (npc, status);
155   return status;
156 #undef FLD
157 }
158
159 // ********** cash3: cash3 $rl5,$rn,($rm)
160
161 sem_status
162 mepcore1_sem_cash3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
163 {
164 #define FLD(f) abuf->fields.sfmt_casb3.f
165   sem_status status = SEM_STATUS_NORMAL;
166   mepcore1_scache* abuf = sem;
167   unsigned long long written = 0;
168   PCADDR pc = abuf->addr;
169   PCADDR npc = pc + 4;
170
171 {
172 current_cpu->do_cash3 (FLD (f_rl5), * FLD (i_rn), * FLD (i_rm), pc);
173   {
174     SI opval = * FLD (i_rl5);
175     if (UNLIKELY(current_cpu->trace_result_p))
176       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rl5) << ']' << ":=0x" << hex << opval << dec << "  ";
177     * FLD (i_rl5) = opval;
178   }
179 }
180
181   current_cpu->done_insn (npc, status);
182   return status;
183 #undef FLD
184 }
185
186 // ********** casw3: casw3 $rl5,$rn,($rm)
187
188 sem_status
189 mepcore1_sem_casw3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
190 {
191 #define FLD(f) abuf->fields.sfmt_casb3.f
192   sem_status status = SEM_STATUS_NORMAL;
193   mepcore1_scache* abuf = sem;
194   unsigned long long written = 0;
195   PCADDR pc = abuf->addr;
196   PCADDR npc = pc + 4;
197
198 {
199 current_cpu->do_casw3 (FLD (f_rl5), * FLD (i_rn), * FLD (i_rm), pc);
200   {
201     SI opval = * FLD (i_rl5);
202     if (UNLIKELY(current_cpu->trace_result_p))
203       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rl5) << ']' << ":=0x" << hex << opval << dec << "  ";
204     * FLD (i_rl5) = opval;
205   }
206 }
207
208   current_cpu->done_insn (npc, status);
209   return status;
210 #undef FLD
211 }
212
213 // ********** sbcp: sbcp $crn,$cdisp12($rma)
214
215 sem_status
216 mepcore1_sem_sbcp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
217 {
218 #define FLD(f) abuf->fields.sfmt_sbcp.f
219   sem_status status = SEM_STATUS_NORMAL;
220   mepcore1_scache* abuf = sem;
221   unsigned long long written = 0;
222   PCADDR pc = abuf->addr;
223   PCADDR npc = pc + 4;
224
225 {
226 current_cpu->check_option_cp (pc);
227 current_cpu->check_write_to_text (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20))));
228   {
229     QI opval = ANDSI (current_cpu->h_cr_get (FLD (f_crn)), 255);
230     if (UNLIKELY(current_cpu->trace_result_p))
231       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20))) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
232     current_cpu->SETMEMQI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20))), opval);
233   }
234 }
235
236   current_cpu->done_insn (npc, status);
237   return status;
238 #undef FLD
239 }
240
241 // ********** lbcp: lbcp $crn,$cdisp12($rma)
242
243 sem_status
244 mepcore1_sem_lbcp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
245 {
246 #define FLD(f) abuf->fields.sfmt_sbcp.f
247   sem_status status = SEM_STATUS_NORMAL;
248   mepcore1_scache* abuf = sem;
249   unsigned long long written = 0;
250   PCADDR pc = abuf->addr;
251   PCADDR npc = pc + 4;
252
253 {
254 current_cpu->check_option_cp (pc);
255   {
256     SI opval = EXTQISI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20)))));
257     if (UNLIKELY(current_cpu->trace_result_p))
258       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
259     current_cpu->h_cr_set (FLD (f_crn), opval);
260   }
261 }
262
263   current_cpu->done_insn (npc, status);
264   return status;
265 #undef FLD
266 }
267
268 // ********** lbucp: lbucp $crn,$cdisp12($rma)
269
270 sem_status
271 mepcore1_sem_lbucp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
272 {
273 #define FLD(f) abuf->fields.sfmt_sbcp.f
274   sem_status status = SEM_STATUS_NORMAL;
275   mepcore1_scache* abuf = sem;
276   unsigned long long written = 0;
277   PCADDR pc = abuf->addr;
278   PCADDR npc = pc + 4;
279
280 {
281 current_cpu->check_option_cp (pc);
282   {
283     SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20)))));
284     if (UNLIKELY(current_cpu->trace_result_p))
285       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
286     current_cpu->h_cr_set (FLD (f_crn), opval);
287   }
288 }
289
290   current_cpu->done_insn (npc, status);
291   return status;
292 #undef FLD
293 }
294
295 // ********** shcp: shcp $crn,$cdisp12($rma)
296
297 sem_status
298 mepcore1_sem_shcp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
299 {
300 #define FLD(f) abuf->fields.sfmt_sbcp.f
301   sem_status status = SEM_STATUS_NORMAL;
302   mepcore1_scache* abuf = sem;
303   unsigned long long written = 0;
304   PCADDR pc = abuf->addr;
305   PCADDR npc = pc + 4;
306
307 {
308 current_cpu->check_option_cp (pc);
309 current_cpu->check_write_to_text (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20))));
310   {
311     HI opval = ANDSI (current_cpu->h_cr_get (FLD (f_crn)), 65535);
312     if (UNLIKELY(current_cpu->trace_result_p))
313       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20))) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
314     current_cpu->SETMEMHI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20))), opval);
315   }
316 }
317
318   current_cpu->done_insn (npc, status);
319   return status;
320 #undef FLD
321 }
322
323 // ********** lhcp: lhcp $crn,$cdisp12($rma)
324
325 sem_status
326 mepcore1_sem_lhcp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
327 {
328 #define FLD(f) abuf->fields.sfmt_sbcp.f
329   sem_status status = SEM_STATUS_NORMAL;
330   mepcore1_scache* abuf = sem;
331   unsigned long long written = 0;
332   PCADDR pc = abuf->addr;
333   PCADDR npc = pc + 4;
334
335 {
336 current_cpu->check_option_cp (pc);
337   {
338     SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20)))));
339     if (UNLIKELY(current_cpu->trace_result_p))
340       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
341     current_cpu->h_cr_set (FLD (f_crn), opval);
342   }
343 }
344
345   current_cpu->done_insn (npc, status);
346   return status;
347 #undef FLD
348 }
349
350 // ********** lhucp: lhucp $crn,$cdisp12($rma)
351
352 sem_status
353 mepcore1_sem_lhucp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
354 {
355 #define FLD(f) abuf->fields.sfmt_sbcp.f
356   sem_status status = SEM_STATUS_NORMAL;
357   mepcore1_scache* abuf = sem;
358   unsigned long long written = 0;
359   PCADDR pc = abuf->addr;
360   PCADDR npc = pc + 4;
361
362 {
363 current_cpu->check_option_cp (pc);
364   {
365     SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_12s20)))));
366     if (UNLIKELY(current_cpu->trace_result_p))
367       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
368     current_cpu->h_cr_set (FLD (f_crn), opval);
369   }
370 }
371
372   current_cpu->done_insn (npc, status);
373   return status;
374 #undef FLD
375 }
376
377 // ********** lbucpa: lbucpa $crn,($rma+),$cdisp10
378
379 sem_status
380 mepcore1_sem_lbucpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
381 {
382 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
383   sem_status status = SEM_STATUS_NORMAL;
384   mepcore1_scache* abuf = sem;
385   unsigned long long written = 0;
386   PCADDR pc = abuf->addr;
387   PCADDR npc = pc + 4;
388
389 {
390 current_cpu->check_option_cp (pc);
391   {
392     SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_rma)));
393     if (UNLIKELY(current_cpu->trace_result_p))
394       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
395     current_cpu->h_cr_set (FLD (f_crn), opval);
396   }
397   {
398     SI opval = ADDSI (* FLD (i_rma), FLD (f_cdisp10));
399     if (UNLIKELY(current_cpu->trace_result_p))
400       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
401     * FLD (i_rma) = opval;
402   }
403 }
404
405   current_cpu->done_insn (npc, status);
406   return status;
407 #undef FLD
408 }
409
410 // ********** lhucpa: lhucpa $crn,($rma+),$cdisp10a2
411
412 sem_status
413 mepcore1_sem_lhucpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
414 {
415 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
416   sem_status status = SEM_STATUS_NORMAL;
417   mepcore1_scache* abuf = sem;
418   unsigned long long written = 0;
419   PCADDR pc = abuf->addr;
420   PCADDR npc = pc + 4;
421
422 {
423 current_cpu->check_option_cp (pc);
424   {
425     SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1))));
426     if (UNLIKELY(current_cpu->trace_result_p))
427       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
428     current_cpu->h_cr_set (FLD (f_crn), opval);
429   }
430   {
431     SI opval = ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10)));
432     if (UNLIKELY(current_cpu->trace_result_p))
433       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
434     * FLD (i_rma) = opval;
435   }
436 }
437
438   current_cpu->done_insn (npc, status);
439   return status;
440 #undef FLD
441 }
442
443 // ********** lbucpm0: lbucpm0 $crn,($rma+),$cdisp10
444
445 sem_status
446 mepcore1_sem_lbucpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
447 {
448 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
449   sem_status status = SEM_STATUS_NORMAL;
450   mepcore1_scache* abuf = sem;
451   unsigned long long written = 0;
452   PCADDR pc = abuf->addr;
453   PCADDR npc = pc + 4;
454
455 {
456 current_cpu->check_option_cp (pc);
457   {
458     SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_rma)));
459     if (UNLIKELY(current_cpu->trace_result_p))
460       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
461     current_cpu->h_cr_set (FLD (f_crn), opval);
462   }
463   {
464     SI opval = ({   SI tmp_modulo_mask;
465   tmp_modulo_mask = ({   SI tmp_temp;
466   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
467 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
468 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
469     if (UNLIKELY(current_cpu->trace_result_p))
470       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
471     * FLD (i_rma) = opval;
472   }
473 }
474
475   current_cpu->done_insn (npc, status);
476   return status;
477 #undef FLD
478 }
479
480 // ********** lhucpm0: lhucpm0 $crn,($rma+),$cdisp10a2
481
482 sem_status
483 mepcore1_sem_lhucpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
484 {
485 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
486   sem_status status = SEM_STATUS_NORMAL;
487   mepcore1_scache* abuf = sem;
488   unsigned long long written = 0;
489   PCADDR pc = abuf->addr;
490   PCADDR npc = pc + 4;
491
492 {
493 current_cpu->check_option_cp (pc);
494   {
495     SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1))));
496     if (UNLIKELY(current_cpu->trace_result_p))
497       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
498     current_cpu->h_cr_set (FLD (f_crn), opval);
499   }
500   {
501     SI opval = ({   SI tmp_modulo_mask;
502   tmp_modulo_mask = ({   SI tmp_temp;
503   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
504 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
505 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
506     if (UNLIKELY(current_cpu->trace_result_p))
507       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
508     * FLD (i_rma) = opval;
509   }
510 }
511
512   current_cpu->done_insn (npc, status);
513   return status;
514 #undef FLD
515 }
516
517 // ********** lbucpm1: lbucpm1 $crn,($rma+),$cdisp10
518
519 sem_status
520 mepcore1_sem_lbucpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
521 {
522 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
523   sem_status status = SEM_STATUS_NORMAL;
524   mepcore1_scache* abuf = sem;
525   unsigned long long written = 0;
526   PCADDR pc = abuf->addr;
527   PCADDR npc = pc + 4;
528
529 {
530 current_cpu->check_option_cp (pc);
531   {
532     SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_rma)));
533     if (UNLIKELY(current_cpu->trace_result_p))
534       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
535     current_cpu->h_cr_set (FLD (f_crn), opval);
536   }
537   {
538     SI opval = ({   SI tmp_modulo_mask;
539   tmp_modulo_mask = ({   SI tmp_temp;
540   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
541 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
542 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
543     if (UNLIKELY(current_cpu->trace_result_p))
544       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
545     * FLD (i_rma) = opval;
546   }
547 }
548
549   current_cpu->done_insn (npc, status);
550   return status;
551 #undef FLD
552 }
553
554 // ********** lhucpm1: lhucpm1 $crn,($rma+),$cdisp10a2
555
556 sem_status
557 mepcore1_sem_lhucpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
558 {
559 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
560   sem_status status = SEM_STATUS_NORMAL;
561   mepcore1_scache* abuf = sem;
562   unsigned long long written = 0;
563   PCADDR pc = abuf->addr;
564   PCADDR npc = pc + 4;
565
566 {
567 current_cpu->check_option_cp (pc);
568   {
569     SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1))));
570     if (UNLIKELY(current_cpu->trace_result_p))
571       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
572     current_cpu->h_cr_set (FLD (f_crn), opval);
573   }
574   {
575     SI opval = ({   SI tmp_modulo_mask;
576   tmp_modulo_mask = ({   SI tmp_temp;
577   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
578 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
579 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
580     if (UNLIKELY(current_cpu->trace_result_p))
581       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
582     * FLD (i_rma) = opval;
583   }
584 }
585
586   current_cpu->done_insn (npc, status);
587   return status;
588 #undef FLD
589 }
590
591 // ********** uci: uci $rn,$rm,$uimm16
592
593 sem_status
594 mepcore1_sem_uci (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
595 {
596 #define FLD(f) abuf->fields.sfmt_uci.f
597   sem_status status = SEM_STATUS_NORMAL;
598   mepcore1_scache* abuf = sem;
599   unsigned long long written = 0;
600   PCADDR pc = abuf->addr;
601   PCADDR npc = pc + 4;
602
603   {
604     SI opval = current_cpu->do_UCI (* FLD (i_rn), * FLD (i_rm), ZEXTSISI (FLD (f_16u16)), pc);
605     if (UNLIKELY(current_cpu->trace_result_p))
606       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
607     * FLD (i_rn) = opval;
608   }
609
610   current_cpu->done_insn (npc, status);
611   return status;
612 #undef FLD
613 }
614
615 // ********** dsp: dsp $rn,$rm,$uimm16
616
617 sem_status
618 mepcore1_sem_dsp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
619 {
620 #define FLD(f) abuf->fields.sfmt_uci.f
621   sem_status status = SEM_STATUS_NORMAL;
622   mepcore1_scache* abuf = sem;
623   unsigned long long written = 0;
624   PCADDR pc = abuf->addr;
625   PCADDR npc = pc + 4;
626
627   {
628     SI opval = current_cpu->do_DSP (* FLD (i_rn), * FLD (i_rm), ZEXTSISI (FLD (f_16u16)), pc);
629     if (UNLIKELY(current_cpu->trace_result_p))
630       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
631     * FLD (i_rn) = opval;
632   }
633
634   current_cpu->done_insn (npc, status);
635   return status;
636 #undef FLD
637 }
638
639 // ********** sb: sb $rnc,($rma)
640
641 sem_status
642 mepcore1_sem_sb (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
643 {
644 #define FLD(f) abuf->fields.sfmt_sb16.f
645   sem_status status = SEM_STATUS_NORMAL;
646   mepcore1_scache* abuf = sem;
647   unsigned long long written = 0;
648   PCADDR pc = abuf->addr;
649   PCADDR npc = pc + 2;
650
651 {
652 current_cpu->check_write_to_text (* FLD (i_rma));
653   {
654     UQI opval = ANDSI (* FLD (i_rnc), 255);
655     if (UNLIKELY(current_cpu->trace_result_p))
656       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) * FLD (i_rma) << dec << ']' << ":=0x" << hex << (USI) opval << dec << "  ";
657     current_cpu->SETMEMUQI (pc, * FLD (i_rma), opval);
658   }
659 }
660
661   current_cpu->done_insn (npc, status);
662   return status;
663 #undef FLD
664 }
665
666 // ********** sh: sh $rns,($rma)
667
668 sem_status
669 mepcore1_sem_sh (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
670 {
671 #define FLD(f) abuf->fields.sfmt_sh16.f
672   sem_status status = SEM_STATUS_NORMAL;
673   mepcore1_scache* abuf = sem;
674   unsigned long long written = 0;
675   PCADDR pc = abuf->addr;
676   PCADDR npc = pc + 2;
677
678 {
679 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (1)));
680   {
681     UHI opval = ANDSI (* FLD (i_rns), 65535);
682     if (UNLIKELY(current_cpu->trace_result_p))
683       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (1)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
684     current_cpu->SETMEMUHI (pc, ANDSI (* FLD (i_rma), INVSI (1)), opval);
685   }
686 }
687
688   current_cpu->done_insn (npc, status);
689   return status;
690 #undef FLD
691 }
692
693 // ********** sw: sw $rnl,($rma)
694
695 sem_status
696 mepcore1_sem_sw (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
697 {
698 #define FLD(f) abuf->fields.sfmt_sw16.f
699   sem_status status = SEM_STATUS_NORMAL;
700   mepcore1_scache* abuf = sem;
701   unsigned long long written = 0;
702   PCADDR pc = abuf->addr;
703   PCADDR npc = pc + 2;
704
705 {
706 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (3)));
707   {
708     USI opval = * FLD (i_rnl);
709     if (UNLIKELY(current_cpu->trace_result_p))
710       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
711     current_cpu->SETMEMUSI (pc, ANDSI (* FLD (i_rma), INVSI (3)), opval);
712   }
713 }
714
715   current_cpu->done_insn (npc, status);
716   return status;
717 #undef FLD
718 }
719
720 // ********** lb: lb $rnc,($rma)
721
722 sem_status
723 mepcore1_sem_lb (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
724 {
725 #define FLD(f) abuf->fields.sfmt_lb16.f
726   sem_status status = SEM_STATUS_NORMAL;
727   mepcore1_scache* abuf = sem;
728   unsigned long long written = 0;
729   PCADDR pc = abuf->addr;
730   PCADDR npc = pc + 2;
731
732   {
733     SI opval = EXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_rma)));
734     if (UNLIKELY(current_cpu->trace_result_p))
735       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
736     * FLD (i_rnc) = opval;
737   }
738
739   current_cpu->done_insn (npc, status);
740   return status;
741 #undef FLD
742 }
743
744 // ********** lh: lh $rns,($rma)
745
746 sem_status
747 mepcore1_sem_lh (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
748 {
749 #define FLD(f) abuf->fields.sfmt_lh16.f
750   sem_status status = SEM_STATUS_NORMAL;
751   mepcore1_scache* abuf = sem;
752   unsigned long long written = 0;
753   PCADDR pc = abuf->addr;
754   PCADDR npc = pc + 2;
755
756   {
757     SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1))));
758     if (UNLIKELY(current_cpu->trace_result_p))
759       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
760     * FLD (i_rns) = opval;
761   }
762
763   current_cpu->done_insn (npc, status);
764   return status;
765 #undef FLD
766 }
767
768 // ********** lw: lw $rnl,($rma)
769
770 sem_status
771 mepcore1_sem_lw (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
772 {
773 #define FLD(f) abuf->fields.sfmt_lw16.f
774   sem_status status = SEM_STATUS_NORMAL;
775   mepcore1_scache* abuf = sem;
776   unsigned long long written = 0;
777   PCADDR pc = abuf->addr;
778   PCADDR npc = pc + 2;
779
780   {
781     SI opval = current_cpu->GETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)));
782     if (UNLIKELY(current_cpu->trace_result_p))
783       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
784     * FLD (i_rnl) = opval;
785   }
786
787   current_cpu->done_insn (npc, status);
788   return status;
789 #undef FLD
790 }
791
792 // ********** lbu: lbu $rnuc,($rma)
793
794 sem_status
795 mepcore1_sem_lbu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
796 {
797 #define FLD(f) abuf->fields.sfmt_lbu16.f
798   sem_status status = SEM_STATUS_NORMAL;
799   mepcore1_scache* abuf = sem;
800   unsigned long long written = 0;
801   PCADDR pc = abuf->addr;
802   PCADDR npc = pc + 2;
803
804   {
805     SI opval = ZEXTQISI (current_cpu->GETMEMUQI (pc, * FLD (i_rma)));
806     if (UNLIKELY(current_cpu->trace_result_p))
807       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
808     * FLD (i_rnuc) = opval;
809   }
810
811   current_cpu->done_insn (npc, status);
812   return status;
813 #undef FLD
814 }
815
816 // ********** lhu: lhu $rnus,($rma)
817
818 sem_status
819 mepcore1_sem_lhu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
820 {
821 #define FLD(f) abuf->fields.sfmt_lhu16.f
822   sem_status status = SEM_STATUS_NORMAL;
823   mepcore1_scache* abuf = sem;
824   unsigned long long written = 0;
825   PCADDR pc = abuf->addr;
826   PCADDR npc = pc + 2;
827
828   {
829     SI opval = ZEXTHISI (current_cpu->GETMEMUHI (pc, ANDSI (* FLD (i_rma), INVSI (1))));
830     if (UNLIKELY(current_cpu->trace_result_p))
831       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
832     * FLD (i_rnus) = opval;
833   }
834
835   current_cpu->done_insn (npc, status);
836   return status;
837 #undef FLD
838 }
839
840 // ********** sw-sp: sw $rnl,$udisp7a4($spr)
841
842 sem_status
843 mepcore1_sem_sw_sp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
844 {
845 #define FLD(f) abuf->fields.sfmt_sw_sp.f
846   sem_status status = SEM_STATUS_NORMAL;
847   mepcore1_scache* abuf = sem;
848   unsigned long long written = 0;
849   PCADDR pc = abuf->addr;
850   PCADDR npc = pc + 2;
851
852 {
853 current_cpu->check_write_to_text (ANDSI (ADDSI (FLD (f_7u9a4), current_cpu->hardware.h_gpr[((UINT) 15)]), INVSI (3)));
854   {
855     SI opval = * FLD (i_rnl);
856     if (UNLIKELY(current_cpu->trace_result_p))
857       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (FLD (f_7u9a4), current_cpu->hardware.h_gpr[((UINT) 15)]), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
858     current_cpu->SETMEMSI (pc, ANDSI (ADDSI (FLD (f_7u9a4), current_cpu->hardware.h_gpr[((UINT) 15)]), INVSI (3)), opval);
859   }
860 }
861
862   current_cpu->done_insn (npc, status);
863   return status;
864 #undef FLD
865 }
866
867 // ********** lw-sp: lw $rnl,$udisp7a4($spr)
868
869 sem_status
870 mepcore1_sem_lw_sp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
871 {
872 #define FLD(f) abuf->fields.sfmt_lw_sp.f
873   sem_status status = SEM_STATUS_NORMAL;
874   mepcore1_scache* abuf = sem;
875   unsigned long long written = 0;
876   PCADDR pc = abuf->addr;
877   PCADDR npc = pc + 2;
878
879   {
880     SI opval = current_cpu->GETMEMSI (pc, ANDSI (ADDSI (FLD (f_7u9a4), current_cpu->hardware.h_gpr[((UINT) 15)]), INVSI (3)));
881     if (UNLIKELY(current_cpu->trace_result_p))
882       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
883     * FLD (i_rnl) = opval;
884   }
885
886   current_cpu->done_insn (npc, status);
887   return status;
888 #undef FLD
889 }
890
891 // ********** sb-tp: sb $rn3c,$udisp7($tpr)
892
893 sem_status
894 mepcore1_sem_sb_tp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
895 {
896 #define FLD(f) abuf->fields.sfmt_sb_tp.f
897   sem_status status = SEM_STATUS_NORMAL;
898   mepcore1_scache* abuf = sem;
899   unsigned long long written = 0;
900   PCADDR pc = abuf->addr;
901   PCADDR npc = pc + 2;
902
903 {
904 current_cpu->check_write_to_text (ADDSI (ZEXTSISI (FLD (f_7u9)), current_cpu->hardware.h_gpr[((UINT) 13)]));
905   {
906     QI opval = ANDSI (* FLD (i_rn3c), 255);
907     if (UNLIKELY(current_cpu->trace_result_p))
908       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (ZEXTSISI (FLD (f_7u9)), current_cpu->hardware.h_gpr[((UINT) 13)]) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
909     current_cpu->SETMEMQI (pc, ADDSI (ZEXTSISI (FLD (f_7u9)), current_cpu->hardware.h_gpr[((UINT) 13)]), opval);
910   }
911 }
912
913   current_cpu->done_insn (npc, status);
914   return status;
915 #undef FLD
916 }
917
918 // ********** sh-tp: sh $rn3s,$udisp7a2($tpr)
919
920 sem_status
921 mepcore1_sem_sh_tp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
922 {
923 #define FLD(f) abuf->fields.sfmt_sh_tp.f
924   sem_status status = SEM_STATUS_NORMAL;
925   mepcore1_scache* abuf = sem;
926   unsigned long long written = 0;
927   PCADDR pc = abuf->addr;
928   PCADDR npc = pc + 2;
929
930 {
931 current_cpu->check_write_to_text (ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a2)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (1)));
932   {
933     HI opval = ANDSI (* FLD (i_rn3s), 65535);
934     if (UNLIKELY(current_cpu->trace_result_p))
935       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a2)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (1)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
936     current_cpu->SETMEMHI (pc, ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a2)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (1)), opval);
937   }
938 }
939
940   current_cpu->done_insn (npc, status);
941   return status;
942 #undef FLD
943 }
944
945 // ********** sw-tp: sw $rn3l,$udisp7a4($tpr)
946
947 sem_status
948 mepcore1_sem_sw_tp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
949 {
950 #define FLD(f) abuf->fields.sfmt_sw_tp.f
951   sem_status status = SEM_STATUS_NORMAL;
952   mepcore1_scache* abuf = sem;
953   unsigned long long written = 0;
954   PCADDR pc = abuf->addr;
955   PCADDR npc = pc + 2;
956
957 {
958 current_cpu->check_write_to_text (ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a4)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (3)));
959   {
960     SI opval = * FLD (i_rn3l);
961     if (UNLIKELY(current_cpu->trace_result_p))
962       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a4)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
963     current_cpu->SETMEMSI (pc, ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a4)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (3)), opval);
964   }
965 }
966
967   current_cpu->done_insn (npc, status);
968   return status;
969 #undef FLD
970 }
971
972 // ********** lb-tp: lb $rn3c,$udisp7($tpr)
973
974 sem_status
975 mepcore1_sem_lb_tp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
976 {
977 #define FLD(f) abuf->fields.sfmt_lb_tp.f
978   sem_status status = SEM_STATUS_NORMAL;
979   mepcore1_scache* abuf = sem;
980   unsigned long long written = 0;
981   PCADDR pc = abuf->addr;
982   PCADDR npc = pc + 2;
983
984   {
985     SI opval = EXTQISI (current_cpu->GETMEMQI (pc, ADDSI (ZEXTSISI (FLD (f_7u9)), current_cpu->hardware.h_gpr[((UINT) 13)])));
986     if (UNLIKELY(current_cpu->trace_result_p))
987       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn3) << ']' << ":=0x" << hex << opval << dec << "  ";
988     * FLD (i_rn3c) = opval;
989   }
990
991   current_cpu->done_insn (npc, status);
992   return status;
993 #undef FLD
994 }
995
996 // ********** lh-tp: lh $rn3s,$udisp7a2($tpr)
997
998 sem_status
999 mepcore1_sem_lh_tp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1000 {
1001 #define FLD(f) abuf->fields.sfmt_lh_tp.f
1002   sem_status status = SEM_STATUS_NORMAL;
1003   mepcore1_scache* abuf = sem;
1004   unsigned long long written = 0;
1005   PCADDR pc = abuf->addr;
1006   PCADDR npc = pc + 2;
1007
1008   {
1009     SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a2)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (1))));
1010     if (UNLIKELY(current_cpu->trace_result_p))
1011       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn3) << ']' << ":=0x" << hex << opval << dec << "  ";
1012     * FLD (i_rn3s) = opval;
1013   }
1014
1015   current_cpu->done_insn (npc, status);
1016   return status;
1017 #undef FLD
1018 }
1019
1020 // ********** lw-tp: lw $rn3l,$udisp7a4($tpr)
1021
1022 sem_status
1023 mepcore1_sem_lw_tp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1024 {
1025 #define FLD(f) abuf->fields.sfmt_lw_tp.f
1026   sem_status status = SEM_STATUS_NORMAL;
1027   mepcore1_scache* abuf = sem;
1028   unsigned long long written = 0;
1029   PCADDR pc = abuf->addr;
1030   PCADDR npc = pc + 2;
1031
1032   {
1033     SI opval = current_cpu->GETMEMSI (pc, ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a4)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (3)));
1034     if (UNLIKELY(current_cpu->trace_result_p))
1035       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn3) << ']' << ":=0x" << hex << opval << dec << "  ";
1036     * FLD (i_rn3l) = opval;
1037   }
1038
1039   current_cpu->done_insn (npc, status);
1040   return status;
1041 #undef FLD
1042 }
1043
1044 // ********** lbu-tp: lbu $rn3uc,$udisp7($tpr)
1045
1046 sem_status
1047 mepcore1_sem_lbu_tp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1048 {
1049 #define FLD(f) abuf->fields.sfmt_lbu_tp.f
1050   sem_status status = SEM_STATUS_NORMAL;
1051   mepcore1_scache* abuf = sem;
1052   unsigned long long written = 0;
1053   PCADDR pc = abuf->addr;
1054   PCADDR npc = pc + 2;
1055
1056   {
1057     SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, ADDSI (ZEXTSISI (FLD (f_7u9)), current_cpu->hardware.h_gpr[((UINT) 13)])));
1058     if (UNLIKELY(current_cpu->trace_result_p))
1059       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn3) << ']' << ":=0x" << hex << opval << dec << "  ";
1060     * FLD (i_rn3uc) = opval;
1061   }
1062
1063   current_cpu->done_insn (npc, status);
1064   return status;
1065 #undef FLD
1066 }
1067
1068 // ********** lhu-tp: lhu $rn3us,$udisp7a2($tpr)
1069
1070 sem_status
1071 mepcore1_sem_lhu_tp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1072 {
1073 #define FLD(f) abuf->fields.sfmt_lhu_tp.f
1074   sem_status status = SEM_STATUS_NORMAL;
1075   mepcore1_scache* abuf = sem;
1076   unsigned long long written = 0;
1077   PCADDR pc = abuf->addr;
1078   PCADDR npc = pc + 2;
1079
1080   {
1081     SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, ANDSI (ADDSI (ZEXTSISI (FLD (f_7u9a2)), current_cpu->hardware.h_gpr[((UINT) 13)]), INVSI (1))));
1082     if (UNLIKELY(current_cpu->trace_result_p))
1083       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn3) << ']' << ":=0x" << hex << opval << dec << "  ";
1084     * FLD (i_rn3us) = opval;
1085   }
1086
1087   current_cpu->done_insn (npc, status);
1088   return status;
1089 #undef FLD
1090 }
1091
1092 // ********** sb16: sb $rnc,$sdisp16($rma)
1093
1094 sem_status
1095 mepcore1_sem_sb16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1096 {
1097 #define FLD(f) abuf->fields.sfmt_sb16.f
1098   sem_status status = SEM_STATUS_NORMAL;
1099   mepcore1_scache* abuf = sem;
1100   unsigned long long written = 0;
1101   PCADDR pc = abuf->addr;
1102   PCADDR npc = pc + 4;
1103
1104 {
1105 current_cpu->check_write_to_text (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))));
1106   {
1107     QI opval = ANDSI (* FLD (i_rnc), 255);
1108     if (UNLIKELY(current_cpu->trace_result_p))
1109       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
1110     current_cpu->SETMEMQI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), opval);
1111   }
1112 }
1113
1114   current_cpu->done_insn (npc, status);
1115   return status;
1116 #undef FLD
1117 }
1118
1119 // ********** sh16: sh $rns,$sdisp16($rma)
1120
1121 sem_status
1122 mepcore1_sem_sh16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1123 {
1124 #define FLD(f) abuf->fields.sfmt_sh16.f
1125   sem_status status = SEM_STATUS_NORMAL;
1126   mepcore1_scache* abuf = sem;
1127   unsigned long long written = 0;
1128   PCADDR pc = abuf->addr;
1129   PCADDR npc = pc + 4;
1130
1131 {
1132 current_cpu->check_write_to_text (ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (1)));
1133   {
1134     HI opval = ANDSI (* FLD (i_rns), 65535);
1135     if (UNLIKELY(current_cpu->trace_result_p))
1136       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (1)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1137     current_cpu->SETMEMHI (pc, ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (1)), opval);
1138   }
1139 }
1140
1141   current_cpu->done_insn (npc, status);
1142   return status;
1143 #undef FLD
1144 }
1145
1146 // ********** sw16: sw $rnl,$sdisp16($rma)
1147
1148 sem_status
1149 mepcore1_sem_sw16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1150 {
1151 #define FLD(f) abuf->fields.sfmt_sw16.f
1152   sem_status status = SEM_STATUS_NORMAL;
1153   mepcore1_scache* abuf = sem;
1154   unsigned long long written = 0;
1155   PCADDR pc = abuf->addr;
1156   PCADDR npc = pc + 4;
1157
1158 {
1159 current_cpu->check_write_to_text (ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (3)));
1160   {
1161     SI opval = * FLD (i_rnl);
1162     if (UNLIKELY(current_cpu->trace_result_p))
1163       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1164     current_cpu->SETMEMSI (pc, ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (3)), opval);
1165   }
1166 }
1167
1168   current_cpu->done_insn (npc, status);
1169   return status;
1170 #undef FLD
1171 }
1172
1173 // ********** lb16: lb $rnc,$sdisp16($rma)
1174
1175 sem_status
1176 mepcore1_sem_lb16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1177 {
1178 #define FLD(f) abuf->fields.sfmt_lb16.f
1179   sem_status status = SEM_STATUS_NORMAL;
1180   mepcore1_scache* abuf = sem;
1181   unsigned long long written = 0;
1182   PCADDR pc = abuf->addr;
1183   PCADDR npc = pc + 4;
1184
1185   {
1186     SI opval = EXTQISI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16)))));
1187     if (UNLIKELY(current_cpu->trace_result_p))
1188       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1189     * FLD (i_rnc) = opval;
1190   }
1191
1192   current_cpu->done_insn (npc, status);
1193   return status;
1194 #undef FLD
1195 }
1196
1197 // ********** lh16: lh $rns,$sdisp16($rma)
1198
1199 sem_status
1200 mepcore1_sem_lh16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1201 {
1202 #define FLD(f) abuf->fields.sfmt_lh16.f
1203   sem_status status = SEM_STATUS_NORMAL;
1204   mepcore1_scache* abuf = sem;
1205   unsigned long long written = 0;
1206   PCADDR pc = abuf->addr;
1207   PCADDR npc = pc + 4;
1208
1209   {
1210     SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (1))));
1211     if (UNLIKELY(current_cpu->trace_result_p))
1212       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1213     * FLD (i_rns) = opval;
1214   }
1215
1216   current_cpu->done_insn (npc, status);
1217   return status;
1218 #undef FLD
1219 }
1220
1221 // ********** lw16: lw $rnl,$sdisp16($rma)
1222
1223 sem_status
1224 mepcore1_sem_lw16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1225 {
1226 #define FLD(f) abuf->fields.sfmt_lw16.f
1227   sem_status status = SEM_STATUS_NORMAL;
1228   mepcore1_scache* abuf = sem;
1229   unsigned long long written = 0;
1230   PCADDR pc = abuf->addr;
1231   PCADDR npc = pc + 4;
1232
1233   {
1234     SI opval = current_cpu->GETMEMSI (pc, ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (3)));
1235     if (UNLIKELY(current_cpu->trace_result_p))
1236       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1237     * FLD (i_rnl) = opval;
1238   }
1239
1240   current_cpu->done_insn (npc, status);
1241   return status;
1242 #undef FLD
1243 }
1244
1245 // ********** lbu16: lbu $rnuc,$sdisp16($rma)
1246
1247 sem_status
1248 mepcore1_sem_lbu16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1249 {
1250 #define FLD(f) abuf->fields.sfmt_lbu16.f
1251   sem_status status = SEM_STATUS_NORMAL;
1252   mepcore1_scache* abuf = sem;
1253   unsigned long long written = 0;
1254   PCADDR pc = abuf->addr;
1255   PCADDR npc = pc + 4;
1256
1257   {
1258     SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16)))));
1259     if (UNLIKELY(current_cpu->trace_result_p))
1260       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1261     * FLD (i_rnuc) = opval;
1262   }
1263
1264   current_cpu->done_insn (npc, status);
1265   return status;
1266 #undef FLD
1267 }
1268
1269 // ********** lhu16: lhu $rnus,$sdisp16($rma)
1270
1271 sem_status
1272 mepcore1_sem_lhu16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1273 {
1274 #define FLD(f) abuf->fields.sfmt_lhu16.f
1275   sem_status status = SEM_STATUS_NORMAL;
1276   mepcore1_scache* abuf = sem;
1277   unsigned long long written = 0;
1278   PCADDR pc = abuf->addr;
1279   PCADDR npc = pc + 4;
1280
1281   {
1282     SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, ANDSI (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_16s16))), INVSI (1))));
1283     if (UNLIKELY(current_cpu->trace_result_p))
1284       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1285     * FLD (i_rnus) = opval;
1286   }
1287
1288   current_cpu->done_insn (npc, status);
1289   return status;
1290 #undef FLD
1291 }
1292
1293 // ********** sw24: sw $rnl,($addr24a4)
1294
1295 sem_status
1296 mepcore1_sem_sw24 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1297 {
1298 #define FLD(f) abuf->fields.sfmt_sw24.f
1299   sem_status status = SEM_STATUS_NORMAL;
1300   mepcore1_scache* abuf = sem;
1301   unsigned long long written = 0;
1302   PCADDR pc = abuf->addr;
1303   PCADDR npc = pc + 4;
1304
1305 {
1306 current_cpu->check_write_to_text (ZEXTSISI (FLD (f_24u8a4n)));
1307   {
1308     SI opval = * FLD (i_rnl);
1309     if (UNLIKELY(current_cpu->trace_result_p))
1310       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ZEXTSISI (FLD (f_24u8a4n)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
1311     current_cpu->SETMEMSI (pc, ZEXTSISI (FLD (f_24u8a4n)), opval);
1312   }
1313 }
1314
1315   current_cpu->done_insn (npc, status);
1316   return status;
1317 #undef FLD
1318 }
1319
1320 // ********** lw24: lw $rnl,($addr24a4)
1321
1322 sem_status
1323 mepcore1_sem_lw24 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1324 {
1325 #define FLD(f) abuf->fields.sfmt_lw24.f
1326   sem_status status = SEM_STATUS_NORMAL;
1327   mepcore1_scache* abuf = sem;
1328   unsigned long long written = 0;
1329   PCADDR pc = abuf->addr;
1330   PCADDR npc = pc + 4;
1331
1332   {
1333     SI opval = current_cpu->GETMEMSI (pc, ZEXTSISI (FLD (f_24u8a4n)));
1334     if (UNLIKELY(current_cpu->trace_result_p))
1335       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1336     * FLD (i_rnl) = opval;
1337   }
1338
1339   current_cpu->done_insn (npc, status);
1340   return status;
1341 #undef FLD
1342 }
1343
1344 // ********** extb: extb $rn
1345
1346 sem_status
1347 mepcore1_sem_extb (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1348 {
1349 #define FLD(f) abuf->fields.sfmt_clip.f
1350   sem_status status = SEM_STATUS_NORMAL;
1351   mepcore1_scache* abuf = sem;
1352   unsigned long long written = 0;
1353   PCADDR pc = abuf->addr;
1354   PCADDR npc = pc + 2;
1355
1356   {
1357     SI opval = EXTQISI (ANDQI (* FLD (i_rn), 255));
1358     if (UNLIKELY(current_cpu->trace_result_p))
1359       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1360     * FLD (i_rn) = opval;
1361   }
1362
1363   current_cpu->done_insn (npc, status);
1364   return status;
1365 #undef FLD
1366 }
1367
1368 // ********** exth: exth $rn
1369
1370 sem_status
1371 mepcore1_sem_exth (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1372 {
1373 #define FLD(f) abuf->fields.sfmt_clip.f
1374   sem_status status = SEM_STATUS_NORMAL;
1375   mepcore1_scache* abuf = sem;
1376   unsigned long long written = 0;
1377   PCADDR pc = abuf->addr;
1378   PCADDR npc = pc + 2;
1379
1380   {
1381     SI opval = EXTHISI (ANDHI (* FLD (i_rn), 65535));
1382     if (UNLIKELY(current_cpu->trace_result_p))
1383       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1384     * FLD (i_rn) = opval;
1385   }
1386
1387   current_cpu->done_insn (npc, status);
1388   return status;
1389 #undef FLD
1390 }
1391
1392 // ********** extub: extub $rn
1393
1394 sem_status
1395 mepcore1_sem_extub (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1396 {
1397 #define FLD(f) abuf->fields.sfmt_clip.f
1398   sem_status status = SEM_STATUS_NORMAL;
1399   mepcore1_scache* abuf = sem;
1400   unsigned long long written = 0;
1401   PCADDR pc = abuf->addr;
1402   PCADDR npc = pc + 2;
1403
1404   {
1405     SI opval = ZEXTSISI (ANDSI (* FLD (i_rn), 255));
1406     if (UNLIKELY(current_cpu->trace_result_p))
1407       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1408     * FLD (i_rn) = opval;
1409   }
1410
1411   current_cpu->done_insn (npc, status);
1412   return status;
1413 #undef FLD
1414 }
1415
1416 // ********** extuh: extuh $rn
1417
1418 sem_status
1419 mepcore1_sem_extuh (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1420 {
1421 #define FLD(f) abuf->fields.sfmt_clip.f
1422   sem_status status = SEM_STATUS_NORMAL;
1423   mepcore1_scache* abuf = sem;
1424   unsigned long long written = 0;
1425   PCADDR pc = abuf->addr;
1426   PCADDR npc = pc + 2;
1427
1428   {
1429     SI opval = ZEXTSISI (ANDSI (* FLD (i_rn), 65535));
1430     if (UNLIKELY(current_cpu->trace_result_p))
1431       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1432     * FLD (i_rn) = opval;
1433   }
1434
1435   current_cpu->done_insn (npc, status);
1436   return status;
1437 #undef FLD
1438 }
1439
1440 // ********** ssarb: ssarb $udisp2($rm)
1441
1442 sem_status
1443 mepcore1_sem_ssarb (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1444 {
1445 #define FLD(f) abuf->fields.sfmt_ssarb.f
1446   sem_status status = SEM_STATUS_NORMAL;
1447   mepcore1_scache* abuf = sem;
1448   unsigned long long written = 0;
1449   PCADDR pc = abuf->addr;
1450   PCADDR npc = pc + 2;
1451
1452 if (current_cpu->big_endian_p ()) {
1453   {
1454     SI opval = ZEXTSISI (MULSI (ANDSI (ADDSI (FLD (f_2u6), * FLD (i_rm)), 3), 8));
1455     written |= (1ULL << 2);
1456     if (UNLIKELY(current_cpu->trace_result_p))
1457       current_cpu->trace_stream << "csr" << '[' << ((UINT) 2) << ']' << ":=0x" << hex << opval << dec << "  ";
1458     current_cpu->h_csr_set (((UINT) 2), opval);
1459   }
1460 } else {
1461   {
1462     SI opval = SUBSI (32, ZEXTSISI (MULSI (ANDSI (ADDSI (FLD (f_2u6), * FLD (i_rm)), 3), 8)));
1463     written |= (1ULL << 2);
1464     if (UNLIKELY(current_cpu->trace_result_p))
1465       current_cpu->trace_stream << "csr" << '[' << ((UINT) 2) << ']' << ":=0x" << hex << opval << dec << "  ";
1466     current_cpu->h_csr_set (((UINT) 2), opval);
1467   }
1468 }
1469
1470   abuf->written = written;
1471   current_cpu->done_insn (npc, status);
1472   return status;
1473 #undef FLD
1474 }
1475
1476 // ********** mov: mov $rn,$rm
1477
1478 sem_status
1479 mepcore1_sem_mov (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1480 {
1481 #define FLD(f) abuf->fields.sfmt_add3x.f
1482   sem_status status = SEM_STATUS_NORMAL;
1483   mepcore1_scache* abuf = sem;
1484   unsigned long long written = 0;
1485   PCADDR pc = abuf->addr;
1486   PCADDR npc = pc + 2;
1487
1488   {
1489     SI opval = * FLD (i_rm);
1490     if (UNLIKELY(current_cpu->trace_result_p))
1491       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1492     * FLD (i_rn) = opval;
1493   }
1494
1495   current_cpu->done_insn (npc, status);
1496   return status;
1497 #undef FLD
1498 }
1499
1500 // ********** movi8: mov $rn,$simm8
1501
1502 sem_status
1503 mepcore1_sem_movi8 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1504 {
1505 #define FLD(f) abuf->fields.sfmt_movi8.f
1506   sem_status status = SEM_STATUS_NORMAL;
1507   mepcore1_scache* abuf = sem;
1508   unsigned long long written = 0;
1509   PCADDR pc = abuf->addr;
1510   PCADDR npc = pc + 2;
1511
1512   {
1513     SI opval = EXTSISI (FLD (f_8s8));
1514     if (UNLIKELY(current_cpu->trace_result_p))
1515       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1516     * FLD (i_rn) = opval;
1517   }
1518
1519   current_cpu->done_insn (npc, status);
1520   return status;
1521 #undef FLD
1522 }
1523
1524 // ********** movi16: mov $rn,$simm16
1525
1526 sem_status
1527 mepcore1_sem_movi16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1528 {
1529 #define FLD(f) abuf->fields.sfmt_add3x.f
1530   sem_status status = SEM_STATUS_NORMAL;
1531   mepcore1_scache* abuf = sem;
1532   unsigned long long written = 0;
1533   PCADDR pc = abuf->addr;
1534   PCADDR npc = pc + 4;
1535
1536   {
1537     SI opval = EXTSISI (FLD (f_16s16));
1538     if (UNLIKELY(current_cpu->trace_result_p))
1539       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1540     * FLD (i_rn) = opval;
1541   }
1542
1543   current_cpu->done_insn (npc, status);
1544   return status;
1545 #undef FLD
1546 }
1547
1548 // ********** movu24: movu $rn3,$uimm24
1549
1550 sem_status
1551 mepcore1_sem_movu24 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1552 {
1553 #define FLD(f) abuf->fields.sfmt_movu24.f
1554   sem_status status = SEM_STATUS_NORMAL;
1555   mepcore1_scache* abuf = sem;
1556   unsigned long long written = 0;
1557   PCADDR pc = abuf->addr;
1558   PCADDR npc = pc + 4;
1559
1560   {
1561     SI opval = ZEXTSISI (FLD (f_24u8n));
1562     if (UNLIKELY(current_cpu->trace_result_p))
1563       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn3) << ']' << ":=0x" << hex << opval << dec << "  ";
1564     * FLD (i_rn3) = opval;
1565   }
1566
1567   current_cpu->done_insn (npc, status);
1568   return status;
1569 #undef FLD
1570 }
1571
1572 // ********** movu16: movu $rn,$uimm16
1573
1574 sem_status
1575 mepcore1_sem_movu16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1576 {
1577 #define FLD(f) abuf->fields.sfmt_uci.f
1578   sem_status status = SEM_STATUS_NORMAL;
1579   mepcore1_scache* abuf = sem;
1580   unsigned long long written = 0;
1581   PCADDR pc = abuf->addr;
1582   PCADDR npc = pc + 4;
1583
1584   {
1585     SI opval = ZEXTSISI (FLD (f_16u16));
1586     if (UNLIKELY(current_cpu->trace_result_p))
1587       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1588     * FLD (i_rn) = opval;
1589   }
1590
1591   current_cpu->done_insn (npc, status);
1592   return status;
1593 #undef FLD
1594 }
1595
1596 // ********** movh: movh $rn,$uimm16
1597
1598 sem_status
1599 mepcore1_sem_movh (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1600 {
1601 #define FLD(f) abuf->fields.sfmt_uci.f
1602   sem_status status = SEM_STATUS_NORMAL;
1603   mepcore1_scache* abuf = sem;
1604   unsigned long long written = 0;
1605   PCADDR pc = abuf->addr;
1606   PCADDR npc = pc + 4;
1607
1608   {
1609     SI opval = SLLSI (FLD (f_16u16), 16);
1610     if (UNLIKELY(current_cpu->trace_result_p))
1611       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1612     * FLD (i_rn) = opval;
1613   }
1614
1615   current_cpu->done_insn (npc, status);
1616   return status;
1617 #undef FLD
1618 }
1619
1620 // ********** add3: add3 $rl,$rn,$rm
1621
1622 sem_status
1623 mepcore1_sem_add3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1624 {
1625 #define FLD(f) abuf->fields.sfmt_add3.f
1626   sem_status status = SEM_STATUS_NORMAL;
1627   mepcore1_scache* abuf = sem;
1628   unsigned long long written = 0;
1629   PCADDR pc = abuf->addr;
1630   PCADDR npc = pc + 2;
1631
1632   {
1633     SI opval = ADDSI (* FLD (i_rn), * FLD (i_rm));
1634     if (UNLIKELY(current_cpu->trace_result_p))
1635       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rl) << ']' << ":=0x" << hex << opval << dec << "  ";
1636     * FLD (i_rl) = opval;
1637   }
1638
1639   current_cpu->done_insn (npc, status);
1640   return status;
1641 #undef FLD
1642 }
1643
1644 // ********** add: add $rn,$simm6
1645
1646 sem_status
1647 mepcore1_sem_add (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1648 {
1649 #define FLD(f) abuf->fields.sfmt_add.f
1650   sem_status status = SEM_STATUS_NORMAL;
1651   mepcore1_scache* abuf = sem;
1652   unsigned long long written = 0;
1653   PCADDR pc = abuf->addr;
1654   PCADDR npc = pc + 2;
1655
1656   {
1657     SI opval = ADDSI (* FLD (i_rn), EXTSISI (FLD (f_6s8)));
1658     if (UNLIKELY(current_cpu->trace_result_p))
1659       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1660     * FLD (i_rn) = opval;
1661   }
1662
1663   current_cpu->done_insn (npc, status);
1664   return status;
1665 #undef FLD
1666 }
1667
1668 // ********** add3i: add3 $rn,$spr,$uimm7a4
1669
1670 sem_status
1671 mepcore1_sem_add3i (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1672 {
1673 #define FLD(f) abuf->fields.sfmt_add3i.f
1674   sem_status status = SEM_STATUS_NORMAL;
1675   mepcore1_scache* abuf = sem;
1676   unsigned long long written = 0;
1677   PCADDR pc = abuf->addr;
1678   PCADDR npc = pc + 2;
1679
1680   {
1681     SI opval = ADDSI (current_cpu->hardware.h_gpr[((UINT) 15)], ZEXTSISI (FLD (f_7u9a4)));
1682     if (UNLIKELY(current_cpu->trace_result_p))
1683       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1684     * FLD (i_rn) = opval;
1685   }
1686
1687   current_cpu->done_insn (npc, status);
1688   return status;
1689 #undef FLD
1690 }
1691
1692 // ********** advck3: advck3 \$0,$rn,$rm
1693
1694 sem_status
1695 mepcore1_sem_advck3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1696 {
1697 #define FLD(f) abuf->fields.sfmt_advck3.f
1698   sem_status status = SEM_STATUS_NORMAL;
1699   mepcore1_scache* abuf = sem;
1700   unsigned long long written = 0;
1701   PCADDR pc = abuf->addr;
1702   PCADDR npc = pc + 2;
1703
1704 if (ADDOFSI (* FLD (i_rn), * FLD (i_rm), 0)) {
1705   {
1706     SI opval = 1;
1707     written |= (1ULL << 2);
1708     if (UNLIKELY(current_cpu->trace_result_p))
1709       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1710     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1711   }
1712 } else {
1713   {
1714     SI opval = 0;
1715     written |= (1ULL << 2);
1716     if (UNLIKELY(current_cpu->trace_result_p))
1717       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1718     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1719   }
1720 }
1721
1722   abuf->written = written;
1723   current_cpu->done_insn (npc, status);
1724   return status;
1725 #undef FLD
1726 }
1727
1728 // ********** sub: sub $rn,$rm
1729
1730 sem_status
1731 mepcore1_sem_sub (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1732 {
1733 #define FLD(f) abuf->fields.sfmt_fsft.f
1734   sem_status status = SEM_STATUS_NORMAL;
1735   mepcore1_scache* abuf = sem;
1736   unsigned long long written = 0;
1737   PCADDR pc = abuf->addr;
1738   PCADDR npc = pc + 2;
1739
1740   {
1741     SI opval = SUBSI (* FLD (i_rn), * FLD (i_rm));
1742     if (UNLIKELY(current_cpu->trace_result_p))
1743       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1744     * FLD (i_rn) = opval;
1745   }
1746
1747   current_cpu->done_insn (npc, status);
1748   return status;
1749 #undef FLD
1750 }
1751
1752 // ********** sbvck3: sbvck3 \$0,$rn,$rm
1753
1754 sem_status
1755 mepcore1_sem_sbvck3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1756 {
1757 #define FLD(f) abuf->fields.sfmt_advck3.f
1758   sem_status status = SEM_STATUS_NORMAL;
1759   mepcore1_scache* abuf = sem;
1760   unsigned long long written = 0;
1761   PCADDR pc = abuf->addr;
1762   PCADDR npc = pc + 2;
1763
1764 if (SUBOFSI (* FLD (i_rn), * FLD (i_rm), 0)) {
1765   {
1766     SI opval = 1;
1767     written |= (1ULL << 2);
1768     if (UNLIKELY(current_cpu->trace_result_p))
1769       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1770     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1771   }
1772 } else {
1773   {
1774     SI opval = 0;
1775     written |= (1ULL << 2);
1776     if (UNLIKELY(current_cpu->trace_result_p))
1777       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1778     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1779   }
1780 }
1781
1782   abuf->written = written;
1783   current_cpu->done_insn (npc, status);
1784   return status;
1785 #undef FLD
1786 }
1787
1788 // ********** neg: neg $rn,$rm
1789
1790 sem_status
1791 mepcore1_sem_neg (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1792 {
1793 #define FLD(f) abuf->fields.sfmt_add3x.f
1794   sem_status status = SEM_STATUS_NORMAL;
1795   mepcore1_scache* abuf = sem;
1796   unsigned long long written = 0;
1797   PCADDR pc = abuf->addr;
1798   PCADDR npc = pc + 2;
1799
1800   {
1801     SI opval = NEGSI (* FLD (i_rm));
1802     if (UNLIKELY(current_cpu->trace_result_p))
1803       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
1804     * FLD (i_rn) = opval;
1805   }
1806
1807   current_cpu->done_insn (npc, status);
1808   return status;
1809 #undef FLD
1810 }
1811
1812 // ********** slt3: slt3 \$0,$rn,$rm
1813
1814 sem_status
1815 mepcore1_sem_slt3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1816 {
1817 #define FLD(f) abuf->fields.sfmt_advck3.f
1818   sem_status status = SEM_STATUS_NORMAL;
1819   mepcore1_scache* abuf = sem;
1820   unsigned long long written = 0;
1821   PCADDR pc = abuf->addr;
1822   PCADDR npc = pc + 2;
1823
1824 if (LTSI (* FLD (i_rn), * FLD (i_rm))) {
1825   {
1826     SI opval = 1;
1827     written |= (1ULL << 2);
1828     if (UNLIKELY(current_cpu->trace_result_p))
1829       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1830     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1831   }
1832 } else {
1833   {
1834     SI opval = 0;
1835     written |= (1ULL << 2);
1836     if (UNLIKELY(current_cpu->trace_result_p))
1837       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1838     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1839   }
1840 }
1841
1842   abuf->written = written;
1843   current_cpu->done_insn (npc, status);
1844   return status;
1845 #undef FLD
1846 }
1847
1848 // ********** sltu3: sltu3 \$0,$rn,$rm
1849
1850 sem_status
1851 mepcore1_sem_sltu3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1852 {
1853 #define FLD(f) abuf->fields.sfmt_advck3.f
1854   sem_status status = SEM_STATUS_NORMAL;
1855   mepcore1_scache* abuf = sem;
1856   unsigned long long written = 0;
1857   PCADDR pc = abuf->addr;
1858   PCADDR npc = pc + 2;
1859
1860 if (LTUSI (* FLD (i_rn), * FLD (i_rm))) {
1861   {
1862     SI opval = 1;
1863     written |= (1ULL << 2);
1864     if (UNLIKELY(current_cpu->trace_result_p))
1865       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1866     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1867   }
1868 } else {
1869   {
1870     SI opval = 0;
1871     written |= (1ULL << 2);
1872     if (UNLIKELY(current_cpu->trace_result_p))
1873       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1874     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1875   }
1876 }
1877
1878   abuf->written = written;
1879   current_cpu->done_insn (npc, status);
1880   return status;
1881 #undef FLD
1882 }
1883
1884 // ********** slt3i: slt3 \$0,$rn,$uimm5
1885
1886 sem_status
1887 mepcore1_sem_slt3i (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1888 {
1889 #define FLD(f) abuf->fields.sfmt_slt3i.f
1890   sem_status status = SEM_STATUS_NORMAL;
1891   mepcore1_scache* abuf = sem;
1892   unsigned long long written = 0;
1893   PCADDR pc = abuf->addr;
1894   PCADDR npc = pc + 2;
1895
1896 if (LTSI (* FLD (i_rn), ZEXTSISI (FLD (f_5u8)))) {
1897   {
1898     SI opval = 1;
1899     written |= (1ULL << 2);
1900     if (UNLIKELY(current_cpu->trace_result_p))
1901       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1902     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1903   }
1904 } else {
1905   {
1906     SI opval = 0;
1907     written |= (1ULL << 2);
1908     if (UNLIKELY(current_cpu->trace_result_p))
1909       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1910     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1911   }
1912 }
1913
1914   abuf->written = written;
1915   current_cpu->done_insn (npc, status);
1916   return status;
1917 #undef FLD
1918 }
1919
1920 // ********** sltu3i: sltu3 \$0,$rn,$uimm5
1921
1922 sem_status
1923 mepcore1_sem_sltu3i (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1924 {
1925 #define FLD(f) abuf->fields.sfmt_slt3i.f
1926   sem_status status = SEM_STATUS_NORMAL;
1927   mepcore1_scache* abuf = sem;
1928   unsigned long long written = 0;
1929   PCADDR pc = abuf->addr;
1930   PCADDR npc = pc + 2;
1931
1932 if (LTUSI (* FLD (i_rn), ZEXTSISI (FLD (f_5u8)))) {
1933   {
1934     SI opval = 1;
1935     written |= (1ULL << 2);
1936     if (UNLIKELY(current_cpu->trace_result_p))
1937       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1938     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1939   }
1940 } else {
1941   {
1942     SI opval = 0;
1943     written |= (1ULL << 2);
1944     if (UNLIKELY(current_cpu->trace_result_p))
1945       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1946     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1947   }
1948 }
1949
1950   abuf->written = written;
1951   current_cpu->done_insn (npc, status);
1952   return status;
1953 #undef FLD
1954 }
1955
1956 // ********** sl1ad3: sl1ad3 \$0,$rn,$rm
1957
1958 sem_status
1959 mepcore1_sem_sl1ad3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1960 {
1961 #define FLD(f) abuf->fields.sfmt_advck3.f
1962   sem_status status = SEM_STATUS_NORMAL;
1963   mepcore1_scache* abuf = sem;
1964   unsigned long long written = 0;
1965   PCADDR pc = abuf->addr;
1966   PCADDR npc = pc + 2;
1967
1968   {
1969     SI opval = ADDSI (SLLSI (* FLD (i_rn), 1), * FLD (i_rm));
1970     if (UNLIKELY(current_cpu->trace_result_p))
1971       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1972     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1973   }
1974
1975   current_cpu->done_insn (npc, status);
1976   return status;
1977 #undef FLD
1978 }
1979
1980 // ********** sl2ad3: sl2ad3 \$0,$rn,$rm
1981
1982 sem_status
1983 mepcore1_sem_sl2ad3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
1984 {
1985 #define FLD(f) abuf->fields.sfmt_advck3.f
1986   sem_status status = SEM_STATUS_NORMAL;
1987   mepcore1_scache* abuf = sem;
1988   unsigned long long written = 0;
1989   PCADDR pc = abuf->addr;
1990   PCADDR npc = pc + 2;
1991
1992   {
1993     SI opval = ADDSI (SLLSI (* FLD (i_rn), 2), * FLD (i_rm));
1994     if (UNLIKELY(current_cpu->trace_result_p))
1995       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
1996     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
1997   }
1998
1999   current_cpu->done_insn (npc, status);
2000   return status;
2001 #undef FLD
2002 }
2003
2004 // ********** add3x: add3 $rn,$rm,$simm16
2005
2006 sem_status
2007 mepcore1_sem_add3x (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2008 {
2009 #define FLD(f) abuf->fields.sfmt_add3x.f
2010   sem_status status = SEM_STATUS_NORMAL;
2011   mepcore1_scache* abuf = sem;
2012   unsigned long long written = 0;
2013   PCADDR pc = abuf->addr;
2014   PCADDR npc = pc + 4;
2015
2016   {
2017     SI opval = ADDSI (* FLD (i_rm), EXTSISI (FLD (f_16s16)));
2018     if (UNLIKELY(current_cpu->trace_result_p))
2019       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2020     * FLD (i_rn) = opval;
2021   }
2022
2023   current_cpu->done_insn (npc, status);
2024   return status;
2025 #undef FLD
2026 }
2027
2028 // ********** slt3x: slt3 $rn,$rm,$simm16
2029
2030 sem_status
2031 mepcore1_sem_slt3x (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2032 {
2033 #define FLD(f) abuf->fields.sfmt_add3x.f
2034   sem_status status = SEM_STATUS_NORMAL;
2035   mepcore1_scache* abuf = sem;
2036   unsigned long long written = 0;
2037   PCADDR pc = abuf->addr;
2038   PCADDR npc = pc + 4;
2039
2040 if (LTSI (* FLD (i_rm), EXTSISI (FLD (f_16s16)))) {
2041   {
2042     SI opval = 1;
2043     written |= (1ULL << 2);
2044     if (UNLIKELY(current_cpu->trace_result_p))
2045       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2046     * FLD (i_rn) = opval;
2047   }
2048 } else {
2049   {
2050     SI opval = 0;
2051     written |= (1ULL << 2);
2052     if (UNLIKELY(current_cpu->trace_result_p))
2053       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2054     * FLD (i_rn) = opval;
2055   }
2056 }
2057
2058   abuf->written = written;
2059   current_cpu->done_insn (npc, status);
2060   return status;
2061 #undef FLD
2062 }
2063
2064 // ********** sltu3x: sltu3 $rn,$rm,$uimm16
2065
2066 sem_status
2067 mepcore1_sem_sltu3x (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2068 {
2069 #define FLD(f) abuf->fields.sfmt_uci.f
2070   sem_status status = SEM_STATUS_NORMAL;
2071   mepcore1_scache* abuf = sem;
2072   unsigned long long written = 0;
2073   PCADDR pc = abuf->addr;
2074   PCADDR npc = pc + 4;
2075
2076 if (LTUSI (* FLD (i_rm), ZEXTSISI (FLD (f_16u16)))) {
2077   {
2078     SI opval = 1;
2079     written |= (1ULL << 2);
2080     if (UNLIKELY(current_cpu->trace_result_p))
2081       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2082     * FLD (i_rn) = opval;
2083   }
2084 } else {
2085   {
2086     SI opval = 0;
2087     written |= (1ULL << 2);
2088     if (UNLIKELY(current_cpu->trace_result_p))
2089       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2090     * FLD (i_rn) = opval;
2091   }
2092 }
2093
2094   abuf->written = written;
2095   current_cpu->done_insn (npc, status);
2096   return status;
2097 #undef FLD
2098 }
2099
2100 // ********** or: or $rn,$rm
2101
2102 sem_status
2103 mepcore1_sem_or (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2104 {
2105 #define FLD(f) abuf->fields.sfmt_fsft.f
2106   sem_status status = SEM_STATUS_NORMAL;
2107   mepcore1_scache* abuf = sem;
2108   unsigned long long written = 0;
2109   PCADDR pc = abuf->addr;
2110   PCADDR npc = pc + 2;
2111
2112   {
2113     SI opval = ORSI (* FLD (i_rn), * FLD (i_rm));
2114     if (UNLIKELY(current_cpu->trace_result_p))
2115       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2116     * FLD (i_rn) = opval;
2117   }
2118
2119   current_cpu->done_insn (npc, status);
2120   return status;
2121 #undef FLD
2122 }
2123
2124 // ********** and: and $rn,$rm
2125
2126 sem_status
2127 mepcore1_sem_and (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2128 {
2129 #define FLD(f) abuf->fields.sfmt_fsft.f
2130   sem_status status = SEM_STATUS_NORMAL;
2131   mepcore1_scache* abuf = sem;
2132   unsigned long long written = 0;
2133   PCADDR pc = abuf->addr;
2134   PCADDR npc = pc + 2;
2135
2136   {
2137     SI opval = ANDSI (* FLD (i_rn), * FLD (i_rm));
2138     if (UNLIKELY(current_cpu->trace_result_p))
2139       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2140     * FLD (i_rn) = opval;
2141   }
2142
2143   current_cpu->done_insn (npc, status);
2144   return status;
2145 #undef FLD
2146 }
2147
2148 // ********** xor: xor $rn,$rm
2149
2150 sem_status
2151 mepcore1_sem_xor (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2152 {
2153 #define FLD(f) abuf->fields.sfmt_fsft.f
2154   sem_status status = SEM_STATUS_NORMAL;
2155   mepcore1_scache* abuf = sem;
2156   unsigned long long written = 0;
2157   PCADDR pc = abuf->addr;
2158   PCADDR npc = pc + 2;
2159
2160   {
2161     SI opval = XORSI (* FLD (i_rn), * FLD (i_rm));
2162     if (UNLIKELY(current_cpu->trace_result_p))
2163       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2164     * FLD (i_rn) = opval;
2165   }
2166
2167   current_cpu->done_insn (npc, status);
2168   return status;
2169 #undef FLD
2170 }
2171
2172 // ********** nor: nor $rn,$rm
2173
2174 sem_status
2175 mepcore1_sem_nor (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2176 {
2177 #define FLD(f) abuf->fields.sfmt_fsft.f
2178   sem_status status = SEM_STATUS_NORMAL;
2179   mepcore1_scache* abuf = sem;
2180   unsigned long long written = 0;
2181   PCADDR pc = abuf->addr;
2182   PCADDR npc = pc + 2;
2183
2184   {
2185     SI opval = INVSI (ORSI (* FLD (i_rn), * FLD (i_rm)));
2186     if (UNLIKELY(current_cpu->trace_result_p))
2187       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2188     * FLD (i_rn) = opval;
2189   }
2190
2191   current_cpu->done_insn (npc, status);
2192   return status;
2193 #undef FLD
2194 }
2195
2196 // ********** or3: or3 $rn,$rm,$uimm16
2197
2198 sem_status
2199 mepcore1_sem_or3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2200 {
2201 #define FLD(f) abuf->fields.sfmt_uci.f
2202   sem_status status = SEM_STATUS_NORMAL;
2203   mepcore1_scache* abuf = sem;
2204   unsigned long long written = 0;
2205   PCADDR pc = abuf->addr;
2206   PCADDR npc = pc + 4;
2207
2208   {
2209     SI opval = ORSI (* FLD (i_rm), ZEXTSISI (FLD (f_16u16)));
2210     if (UNLIKELY(current_cpu->trace_result_p))
2211       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2212     * FLD (i_rn) = opval;
2213   }
2214
2215   current_cpu->done_insn (npc, status);
2216   return status;
2217 #undef FLD
2218 }
2219
2220 // ********** and3: and3 $rn,$rm,$uimm16
2221
2222 sem_status
2223 mepcore1_sem_and3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2224 {
2225 #define FLD(f) abuf->fields.sfmt_uci.f
2226   sem_status status = SEM_STATUS_NORMAL;
2227   mepcore1_scache* abuf = sem;
2228   unsigned long long written = 0;
2229   PCADDR pc = abuf->addr;
2230   PCADDR npc = pc + 4;
2231
2232   {
2233     SI opval = ANDSI (* FLD (i_rm), ZEXTSISI (FLD (f_16u16)));
2234     if (UNLIKELY(current_cpu->trace_result_p))
2235       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2236     * FLD (i_rn) = opval;
2237   }
2238
2239   current_cpu->done_insn (npc, status);
2240   return status;
2241 #undef FLD
2242 }
2243
2244 // ********** xor3: xor3 $rn,$rm,$uimm16
2245
2246 sem_status
2247 mepcore1_sem_xor3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2248 {
2249 #define FLD(f) abuf->fields.sfmt_uci.f
2250   sem_status status = SEM_STATUS_NORMAL;
2251   mepcore1_scache* abuf = sem;
2252   unsigned long long written = 0;
2253   PCADDR pc = abuf->addr;
2254   PCADDR npc = pc + 4;
2255
2256   {
2257     SI opval = XORSI (* FLD (i_rm), ZEXTSISI (FLD (f_16u16)));
2258     if (UNLIKELY(current_cpu->trace_result_p))
2259       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2260     * FLD (i_rn) = opval;
2261   }
2262
2263   current_cpu->done_insn (npc, status);
2264   return status;
2265 #undef FLD
2266 }
2267
2268 // ********** sra: sra $rn,$rm
2269
2270 sem_status
2271 mepcore1_sem_sra (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2272 {
2273 #define FLD(f) abuf->fields.sfmt_fsft.f
2274   sem_status status = SEM_STATUS_NORMAL;
2275   mepcore1_scache* abuf = sem;
2276   unsigned long long written = 0;
2277   PCADDR pc = abuf->addr;
2278   PCADDR npc = pc + 2;
2279
2280   {
2281     SI opval = SRASI (* FLD (i_rn), ANDSI (* FLD (i_rm), 31));
2282     if (UNLIKELY(current_cpu->trace_result_p))
2283       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2284     * FLD (i_rn) = opval;
2285   }
2286
2287   current_cpu->done_insn (npc, status);
2288   return status;
2289 #undef FLD
2290 }
2291
2292 // ********** srl: srl $rn,$rm
2293
2294 sem_status
2295 mepcore1_sem_srl (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2296 {
2297 #define FLD(f) abuf->fields.sfmt_fsft.f
2298   sem_status status = SEM_STATUS_NORMAL;
2299   mepcore1_scache* abuf = sem;
2300   unsigned long long written = 0;
2301   PCADDR pc = abuf->addr;
2302   PCADDR npc = pc + 2;
2303
2304   {
2305     SI opval = SRLSI (* FLD (i_rn), ANDSI (* FLD (i_rm), 31));
2306     if (UNLIKELY(current_cpu->trace_result_p))
2307       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2308     * FLD (i_rn) = opval;
2309   }
2310
2311   current_cpu->done_insn (npc, status);
2312   return status;
2313 #undef FLD
2314 }
2315
2316 // ********** sll: sll $rn,$rm
2317
2318 sem_status
2319 mepcore1_sem_sll (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2320 {
2321 #define FLD(f) abuf->fields.sfmt_fsft.f
2322   sem_status status = SEM_STATUS_NORMAL;
2323   mepcore1_scache* abuf = sem;
2324   unsigned long long written = 0;
2325   PCADDR pc = abuf->addr;
2326   PCADDR npc = pc + 2;
2327
2328   {
2329     SI opval = SLLSI (* FLD (i_rn), ANDSI (* FLD (i_rm), 31));
2330     if (UNLIKELY(current_cpu->trace_result_p))
2331       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2332     * FLD (i_rn) = opval;
2333   }
2334
2335   current_cpu->done_insn (npc, status);
2336   return status;
2337 #undef FLD
2338 }
2339
2340 // ********** srai: sra $rn,$uimm5
2341
2342 sem_status
2343 mepcore1_sem_srai (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2344 {
2345 #define FLD(f) abuf->fields.sfmt_srai.f
2346   sem_status status = SEM_STATUS_NORMAL;
2347   mepcore1_scache* abuf = sem;
2348   unsigned long long written = 0;
2349   PCADDR pc = abuf->addr;
2350   PCADDR npc = pc + 2;
2351
2352   {
2353     SI opval = SRASI (* FLD (i_rn), FLD (f_5u8));
2354     if (UNLIKELY(current_cpu->trace_result_p))
2355       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2356     * FLD (i_rn) = opval;
2357   }
2358
2359   current_cpu->done_insn (npc, status);
2360   return status;
2361 #undef FLD
2362 }
2363
2364 // ********** srli: srl $rn,$uimm5
2365
2366 sem_status
2367 mepcore1_sem_srli (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2368 {
2369 #define FLD(f) abuf->fields.sfmt_srai.f
2370   sem_status status = SEM_STATUS_NORMAL;
2371   mepcore1_scache* abuf = sem;
2372   unsigned long long written = 0;
2373   PCADDR pc = abuf->addr;
2374   PCADDR npc = pc + 2;
2375
2376   {
2377     SI opval = SRLSI (* FLD (i_rn), FLD (f_5u8));
2378     if (UNLIKELY(current_cpu->trace_result_p))
2379       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2380     * FLD (i_rn) = opval;
2381   }
2382
2383   current_cpu->done_insn (npc, status);
2384   return status;
2385 #undef FLD
2386 }
2387
2388 // ********** slli: sll $rn,$uimm5
2389
2390 sem_status
2391 mepcore1_sem_slli (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2392 {
2393 #define FLD(f) abuf->fields.sfmt_srai.f
2394   sem_status status = SEM_STATUS_NORMAL;
2395   mepcore1_scache* abuf = sem;
2396   unsigned long long written = 0;
2397   PCADDR pc = abuf->addr;
2398   PCADDR npc = pc + 2;
2399
2400   {
2401     SI opval = SLLSI (* FLD (i_rn), FLD (f_5u8));
2402     if (UNLIKELY(current_cpu->trace_result_p))
2403       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2404     * FLD (i_rn) = opval;
2405   }
2406
2407   current_cpu->done_insn (npc, status);
2408   return status;
2409 #undef FLD
2410 }
2411
2412 // ********** sll3: sll3 \$0,$rn,$uimm5
2413
2414 sem_status
2415 mepcore1_sem_sll3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2416 {
2417 #define FLD(f) abuf->fields.sfmt_slt3i.f
2418   sem_status status = SEM_STATUS_NORMAL;
2419   mepcore1_scache* abuf = sem;
2420   unsigned long long written = 0;
2421   PCADDR pc = abuf->addr;
2422   PCADDR npc = pc + 2;
2423
2424   {
2425     SI opval = SLLSI (* FLD (i_rn), FLD (f_5u8));
2426     if (UNLIKELY(current_cpu->trace_result_p))
2427       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
2428     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
2429   }
2430
2431   current_cpu->done_insn (npc, status);
2432   return status;
2433 #undef FLD
2434 }
2435
2436 // ********** fsft: fsft $rn,$rm
2437
2438 sem_status
2439 mepcore1_sem_fsft (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2440 {
2441 #define FLD(f) abuf->fields.sfmt_fsft.f
2442   sem_status status = SEM_STATUS_NORMAL;
2443   mepcore1_scache* abuf = sem;
2444   unsigned long long written = 0;
2445   PCADDR pc = abuf->addr;
2446   PCADDR npc = pc + 2;
2447
2448 {
2449   DI tmp_temp;
2450   QI tmp_shamt;
2451   tmp_shamt = ANDSI (current_cpu->h_csr_get (((UINT) 2)), 63);
2452   tmp_temp = SLLDI (ORDI (SLLDI (ZEXTSIDI (* FLD (i_rn)), 32), ZEXTSIDI (* FLD (i_rm))), tmp_shamt);
2453   {
2454     SI opval = SUBWORDDISI (SRLDI (tmp_temp, 32), 1);
2455     if (UNLIKELY(current_cpu->trace_result_p))
2456       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
2457     * FLD (i_rn) = opval;
2458   }
2459 }
2460
2461   current_cpu->done_insn (npc, status);
2462   return status;
2463 #undef FLD
2464 }
2465
2466 // ********** bra: bra $pcrel12a2
2467
2468 sem_status
2469 mepcore1_sem_bra (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2470 {
2471 #define FLD(f) abuf->fields.sfmt_bsr12.f
2472   sem_status status = SEM_STATUS_NORMAL;
2473   mepcore1_scache* abuf = sem;
2474   unsigned long long written = 0;
2475   PCADDR pc = abuf->addr;
2476   PCADDR npc = pc + 2;
2477
2478 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2479   {
2480     USI opval = ANDSI (FLD (f_12s4a2), INVSI (7));
2481     written |= (1ULL << 3);
2482     if (UNLIKELY(current_cpu->trace_result_p))
2483       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2484     current_cpu->branch (opval, npc, status);
2485   }
2486 }
2487  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2488   {
2489     USI opval = ANDSI (FLD (f_12s4a2), INVSI (3));
2490     written |= (1ULL << 3);
2491     if (UNLIKELY(current_cpu->trace_result_p))
2492       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2493     current_cpu->branch (opval, npc, status);
2494   }
2495 }
2496  else {
2497   {
2498     USI opval = ANDSI (FLD (f_12s4a2), INVSI (1));
2499     written |= (1ULL << 3);
2500     if (UNLIKELY(current_cpu->trace_result_p))
2501       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2502     current_cpu->branch (opval, npc, status);
2503   }
2504 }
2505
2506   abuf->written = written;
2507   current_cpu->done_cti_insn (npc, status);
2508   return status;
2509 #undef FLD
2510 }
2511
2512 // ********** beqz: beqz $rn,$pcrel8a2
2513
2514 sem_status
2515 mepcore1_sem_beqz (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2516 {
2517 #define FLD(f) abuf->fields.sfmt_beqz.f
2518   sem_status status = SEM_STATUS_NORMAL;
2519   mepcore1_scache* abuf = sem;
2520   unsigned long long written = 0;
2521   PCADDR pc = abuf->addr;
2522   PCADDR npc = pc + 2;
2523
2524 if (EQSI (* FLD (i_rn), 0)) {
2525 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2526   {
2527     USI opval = ANDSI (FLD (f_8s8a2), INVSI (7));
2528     written |= (1ULL << 4);
2529     if (UNLIKELY(current_cpu->trace_result_p))
2530       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2531     current_cpu->branch (opval, npc, status);
2532   }
2533 }
2534  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2535   {
2536     USI opval = ANDSI (FLD (f_8s8a2), INVSI (3));
2537     written |= (1ULL << 4);
2538     if (UNLIKELY(current_cpu->trace_result_p))
2539       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2540     current_cpu->branch (opval, npc, status);
2541   }
2542 }
2543  else {
2544   {
2545     USI opval = ANDSI (FLD (f_8s8a2), INVSI (1));
2546     written |= (1ULL << 4);
2547     if (UNLIKELY(current_cpu->trace_result_p))
2548       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2549     current_cpu->branch (opval, npc, status);
2550   }
2551 }
2552 }
2553
2554   abuf->written = written;
2555   current_cpu->done_cti_insn (npc, status);
2556   return status;
2557 #undef FLD
2558 }
2559
2560 // ********** bnez: bnez $rn,$pcrel8a2
2561
2562 sem_status
2563 mepcore1_sem_bnez (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2564 {
2565 #define FLD(f) abuf->fields.sfmt_beqz.f
2566   sem_status status = SEM_STATUS_NORMAL;
2567   mepcore1_scache* abuf = sem;
2568   unsigned long long written = 0;
2569   PCADDR pc = abuf->addr;
2570   PCADDR npc = pc + 2;
2571
2572 if (NESI (* FLD (i_rn), 0)) {
2573 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2574   {
2575     USI opval = ANDSI (FLD (f_8s8a2), INVSI (7));
2576     written |= (1ULL << 4);
2577     if (UNLIKELY(current_cpu->trace_result_p))
2578       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2579     current_cpu->branch (opval, npc, status);
2580   }
2581 }
2582  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2583   {
2584     USI opval = ANDSI (FLD (f_8s8a2), INVSI (3));
2585     written |= (1ULL << 4);
2586     if (UNLIKELY(current_cpu->trace_result_p))
2587       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2588     current_cpu->branch (opval, npc, status);
2589   }
2590 }
2591  else {
2592   {
2593     USI opval = ANDSI (FLD (f_8s8a2), INVSI (1));
2594     written |= (1ULL << 4);
2595     if (UNLIKELY(current_cpu->trace_result_p))
2596       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2597     current_cpu->branch (opval, npc, status);
2598   }
2599 }
2600 }
2601
2602   abuf->written = written;
2603   current_cpu->done_cti_insn (npc, status);
2604   return status;
2605 #undef FLD
2606 }
2607
2608 // ********** beqi: beqi $rn,$uimm4,$pcrel17a2
2609
2610 sem_status
2611 mepcore1_sem_beqi (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2612 {
2613 #define FLD(f) abuf->fields.sfmt_beqi.f
2614   sem_status status = SEM_STATUS_NORMAL;
2615   mepcore1_scache* abuf = sem;
2616   unsigned long long written = 0;
2617   PCADDR pc = abuf->addr;
2618   PCADDR npc = pc + 4;
2619
2620 if (EQSI (* FLD (i_rn), ZEXTSISI (FLD (f_4u8)))) {
2621 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2622   {
2623     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
2624     written |= (1ULL << 5);
2625     if (UNLIKELY(current_cpu->trace_result_p))
2626       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2627     current_cpu->branch (opval, npc, status);
2628   }
2629 }
2630  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2631   {
2632     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
2633     written |= (1ULL << 5);
2634     if (UNLIKELY(current_cpu->trace_result_p))
2635       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2636     current_cpu->branch (opval, npc, status);
2637   }
2638 }
2639  else {
2640   {
2641     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
2642     written |= (1ULL << 5);
2643     if (UNLIKELY(current_cpu->trace_result_p))
2644       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2645     current_cpu->branch (opval, npc, status);
2646   }
2647 }
2648 }
2649
2650   abuf->written = written;
2651   current_cpu->done_cti_insn (npc, status);
2652   return status;
2653 #undef FLD
2654 }
2655
2656 // ********** bnei: bnei $rn,$uimm4,$pcrel17a2
2657
2658 sem_status
2659 mepcore1_sem_bnei (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2660 {
2661 #define FLD(f) abuf->fields.sfmt_beqi.f
2662   sem_status status = SEM_STATUS_NORMAL;
2663   mepcore1_scache* abuf = sem;
2664   unsigned long long written = 0;
2665   PCADDR pc = abuf->addr;
2666   PCADDR npc = pc + 4;
2667
2668 if (NESI (* FLD (i_rn), ZEXTSISI (FLD (f_4u8)))) {
2669 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2670   {
2671     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
2672     written |= (1ULL << 5);
2673     if (UNLIKELY(current_cpu->trace_result_p))
2674       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2675     current_cpu->branch (opval, npc, status);
2676   }
2677 }
2678  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2679   {
2680     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
2681     written |= (1ULL << 5);
2682     if (UNLIKELY(current_cpu->trace_result_p))
2683       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2684     current_cpu->branch (opval, npc, status);
2685   }
2686 }
2687  else {
2688   {
2689     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
2690     written |= (1ULL << 5);
2691     if (UNLIKELY(current_cpu->trace_result_p))
2692       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2693     current_cpu->branch (opval, npc, status);
2694   }
2695 }
2696 }
2697
2698   abuf->written = written;
2699   current_cpu->done_cti_insn (npc, status);
2700   return status;
2701 #undef FLD
2702 }
2703
2704 // ********** blti: blti $rn,$uimm4,$pcrel17a2
2705
2706 sem_status
2707 mepcore1_sem_blti (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2708 {
2709 #define FLD(f) abuf->fields.sfmt_beqi.f
2710   sem_status status = SEM_STATUS_NORMAL;
2711   mepcore1_scache* abuf = sem;
2712   unsigned long long written = 0;
2713   PCADDR pc = abuf->addr;
2714   PCADDR npc = pc + 4;
2715
2716 if (LTSI (* FLD (i_rn), ZEXTSISI (FLD (f_4u8)))) {
2717 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2718   {
2719     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
2720     written |= (1ULL << 5);
2721     if (UNLIKELY(current_cpu->trace_result_p))
2722       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2723     current_cpu->branch (opval, npc, status);
2724   }
2725 }
2726  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2727   {
2728     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
2729     written |= (1ULL << 5);
2730     if (UNLIKELY(current_cpu->trace_result_p))
2731       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2732     current_cpu->branch (opval, npc, status);
2733   }
2734 }
2735  else {
2736   {
2737     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
2738     written |= (1ULL << 5);
2739     if (UNLIKELY(current_cpu->trace_result_p))
2740       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2741     current_cpu->branch (opval, npc, status);
2742   }
2743 }
2744 }
2745
2746   abuf->written = written;
2747   current_cpu->done_cti_insn (npc, status);
2748   return status;
2749 #undef FLD
2750 }
2751
2752 // ********** bgei: bgei $rn,$uimm4,$pcrel17a2
2753
2754 sem_status
2755 mepcore1_sem_bgei (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2756 {
2757 #define FLD(f) abuf->fields.sfmt_beqi.f
2758   sem_status status = SEM_STATUS_NORMAL;
2759   mepcore1_scache* abuf = sem;
2760   unsigned long long written = 0;
2761   PCADDR pc = abuf->addr;
2762   PCADDR npc = pc + 4;
2763
2764 if (GESI (* FLD (i_rn), ZEXTSISI (FLD (f_4u8)))) {
2765 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2766   {
2767     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
2768     written |= (1ULL << 5);
2769     if (UNLIKELY(current_cpu->trace_result_p))
2770       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2771     current_cpu->branch (opval, npc, status);
2772   }
2773 }
2774  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2775   {
2776     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
2777     written |= (1ULL << 5);
2778     if (UNLIKELY(current_cpu->trace_result_p))
2779       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2780     current_cpu->branch (opval, npc, status);
2781   }
2782 }
2783  else {
2784   {
2785     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
2786     written |= (1ULL << 5);
2787     if (UNLIKELY(current_cpu->trace_result_p))
2788       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2789     current_cpu->branch (opval, npc, status);
2790   }
2791 }
2792 }
2793
2794   abuf->written = written;
2795   current_cpu->done_cti_insn (npc, status);
2796   return status;
2797 #undef FLD
2798 }
2799
2800 // ********** beq: beq $rn,$rm,$pcrel17a2
2801
2802 sem_status
2803 mepcore1_sem_beq (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2804 {
2805 #define FLD(f) abuf->fields.sfmt_beq.f
2806   sem_status status = SEM_STATUS_NORMAL;
2807   mepcore1_scache* abuf = sem;
2808   unsigned long long written = 0;
2809   PCADDR pc = abuf->addr;
2810   PCADDR npc = pc + 4;
2811
2812 if (EQSI (* FLD (i_rn), * FLD (i_rm))) {
2813 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2814   {
2815     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
2816     written |= (1ULL << 5);
2817     if (UNLIKELY(current_cpu->trace_result_p))
2818       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2819     current_cpu->branch (opval, npc, status);
2820   }
2821 }
2822  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2823   {
2824     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
2825     written |= (1ULL << 5);
2826     if (UNLIKELY(current_cpu->trace_result_p))
2827       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2828     current_cpu->branch (opval, npc, status);
2829   }
2830 }
2831  else {
2832   {
2833     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
2834     written |= (1ULL << 5);
2835     if (UNLIKELY(current_cpu->trace_result_p))
2836       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2837     current_cpu->branch (opval, npc, status);
2838   }
2839 }
2840 }
2841
2842   abuf->written = written;
2843   current_cpu->done_cti_insn (npc, status);
2844   return status;
2845 #undef FLD
2846 }
2847
2848 // ********** bne: bne $rn,$rm,$pcrel17a2
2849
2850 sem_status
2851 mepcore1_sem_bne (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2852 {
2853 #define FLD(f) abuf->fields.sfmt_beq.f
2854   sem_status status = SEM_STATUS_NORMAL;
2855   mepcore1_scache* abuf = sem;
2856   unsigned long long written = 0;
2857   PCADDR pc = abuf->addr;
2858   PCADDR npc = pc + 4;
2859
2860 if (NESI (* FLD (i_rn), * FLD (i_rm))) {
2861 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2862   {
2863     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
2864     written |= (1ULL << 5);
2865     if (UNLIKELY(current_cpu->trace_result_p))
2866       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2867     current_cpu->branch (opval, npc, status);
2868   }
2869 }
2870  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2871   {
2872     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
2873     written |= (1ULL << 5);
2874     if (UNLIKELY(current_cpu->trace_result_p))
2875       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2876     current_cpu->branch (opval, npc, status);
2877   }
2878 }
2879  else {
2880   {
2881     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
2882     written |= (1ULL << 5);
2883     if (UNLIKELY(current_cpu->trace_result_p))
2884       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2885     current_cpu->branch (opval, npc, status);
2886   }
2887 }
2888 }
2889
2890   abuf->written = written;
2891   current_cpu->done_cti_insn (npc, status);
2892   return status;
2893 #undef FLD
2894 }
2895
2896 // ********** bsr12: bsr $pcrel12a2
2897
2898 sem_status
2899 mepcore1_sem_bsr12 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2900 {
2901 #define FLD(f) abuf->fields.sfmt_bsr12.f
2902   sem_status status = SEM_STATUS_NORMAL;
2903   mepcore1_scache* abuf = sem;
2904   unsigned long long written = 0;
2905   PCADDR pc = abuf->addr;
2906   PCADDR npc = pc + 2;
2907
2908 {
2909 current_cpu->cg_profile (pc, FLD (f_12s4a2));
2910 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2911   {
2912     SI opval = ADDSI (pc, 8);
2913     written |= (1ULL << 4);
2914     if (UNLIKELY(current_cpu->trace_result_p))
2915       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
2916     current_cpu->h_csr_set (((UINT) 1), opval);
2917   }
2918 }
2919  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2920   {
2921     SI opval = ADDSI (pc, 4);
2922     written |= (1ULL << 4);
2923     if (UNLIKELY(current_cpu->trace_result_p))
2924       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
2925     current_cpu->h_csr_set (((UINT) 1), opval);
2926   }
2927 }
2928  else {
2929   {
2930     SI opval = ADDSI (pc, 2);
2931     written |= (1ULL << 4);
2932     if (UNLIKELY(current_cpu->trace_result_p))
2933       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
2934     current_cpu->h_csr_set (((UINT) 1), opval);
2935   }
2936 }
2937 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2938   {
2939     USI opval = ANDSI (FLD (f_12s4a2), INVSI (7));
2940     written |= (1ULL << 5);
2941     if (UNLIKELY(current_cpu->trace_result_p))
2942       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2943     current_cpu->branch (opval, npc, status);
2944   }
2945 }
2946  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2947   {
2948     USI opval = ANDSI (FLD (f_12s4a2), INVSI (3));
2949     written |= (1ULL << 5);
2950     if (UNLIKELY(current_cpu->trace_result_p))
2951       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2952     current_cpu->branch (opval, npc, status);
2953   }
2954 }
2955  else {
2956   {
2957     USI opval = ANDSI (FLD (f_12s4a2), INVSI (1));
2958     written |= (1ULL << 5);
2959     if (UNLIKELY(current_cpu->trace_result_p))
2960       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
2961     current_cpu->branch (opval, npc, status);
2962   }
2963 }
2964 }
2965
2966   abuf->written = written;
2967   current_cpu->done_cti_insn (npc, status);
2968   return status;
2969 #undef FLD
2970 }
2971
2972 // ********** bsr24: bsr $pcrel24a2
2973
2974 sem_status
2975 mepcore1_sem_bsr24 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
2976 {
2977 #define FLD(f) abuf->fields.sfmt_bsr24.f
2978   sem_status status = SEM_STATUS_NORMAL;
2979   mepcore1_scache* abuf = sem;
2980   unsigned long long written = 0;
2981   PCADDR pc = abuf->addr;
2982   PCADDR npc = pc + 4;
2983
2984 {
2985 current_cpu->cg_profile (pc, FLD (f_24s5a2n));
2986 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
2987   {
2988     SI opval = ADDSI (pc, 8);
2989     written |= (1ULL << 4);
2990     if (UNLIKELY(current_cpu->trace_result_p))
2991       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
2992     current_cpu->h_csr_set (((UINT) 1), opval);
2993   }
2994 }
2995  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
2996   {
2997     SI opval = ADDSI (pc, 4);
2998     written |= (1ULL << 4);
2999     if (UNLIKELY(current_cpu->trace_result_p))
3000       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
3001     current_cpu->h_csr_set (((UINT) 1), opval);
3002   }
3003 }
3004  else {
3005   {
3006     SI opval = ADDSI (pc, 4);
3007     written |= (1ULL << 4);
3008     if (UNLIKELY(current_cpu->trace_result_p))
3009       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
3010     current_cpu->h_csr_set (((UINT) 1), opval);
3011   }
3012 }
3013 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3014   {
3015     USI opval = ANDSI (FLD (f_24s5a2n), INVSI (7));
3016     written |= (1ULL << 5);
3017     if (UNLIKELY(current_cpu->trace_result_p))
3018       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3019     current_cpu->branch (opval, npc, status);
3020   }
3021 }
3022  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3023   {
3024     USI opval = ANDSI (FLD (f_24s5a2n), INVSI (3));
3025     written |= (1ULL << 5);
3026     if (UNLIKELY(current_cpu->trace_result_p))
3027       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3028     current_cpu->branch (opval, npc, status);
3029   }
3030 }
3031  else {
3032   {
3033     USI opval = ANDSI (FLD (f_24s5a2n), INVSI (1));
3034     written |= (1ULL << 5);
3035     if (UNLIKELY(current_cpu->trace_result_p))
3036       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3037     current_cpu->branch (opval, npc, status);
3038   }
3039 }
3040 }
3041
3042   abuf->written = written;
3043   current_cpu->done_cti_insn (npc, status);
3044   return status;
3045 #undef FLD
3046 }
3047
3048 // ********** jmp: jmp $rm
3049
3050 sem_status
3051 mepcore1_sem_jmp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3052 {
3053 #define FLD(f) abuf->fields.sfmt_jsr.f
3054   sem_status status = SEM_STATUS_NORMAL;
3055   mepcore1_scache* abuf = sem;
3056   unsigned long long written = 0;
3057   PCADDR pc = abuf->addr;
3058   PCADDR npc = pc + 2;
3059
3060 {
3061 if (EQSI (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), 0)) {
3062 if (ANDSI (* FLD (i_rm), 1)) {
3063 {
3064 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (1, 12)));
3065 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1)) {
3066   {
3067     USI opval = ANDSI (* FLD (i_rm), INVSI (3));
3068     written |= (1ULL << 4);
3069     if (UNLIKELY(current_cpu->trace_result_p))
3070       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3071     current_cpu->branch (opval, npc, status);
3072   }
3073 } else {
3074   {
3075     USI opval = ANDSI (* FLD (i_rm), INVSI (7));
3076     written |= (1ULL << 4);
3077     if (UNLIKELY(current_cpu->trace_result_p))
3078       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3079     current_cpu->branch (opval, npc, status);
3080   }
3081 }
3082 }
3083 } else {
3084   {
3085     USI opval = ANDSI (* FLD (i_rm), INVSI (1));
3086     written |= (1ULL << 4);
3087     if (UNLIKELY(current_cpu->trace_result_p))
3088       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3089     current_cpu->branch (opval, npc, status);
3090   }
3091 }
3092 } else {
3093 if (ANDSI (* FLD (i_rm), 1)) {
3094 {
3095 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (0, 12)));
3096   {
3097     USI opval = ANDSI (* FLD (i_rm), INVSI (1));
3098     written |= (1ULL << 4);
3099     if (UNLIKELY(current_cpu->trace_result_p))
3100       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3101     current_cpu->branch (opval, npc, status);
3102   }
3103 }
3104 } else {
3105 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1)) {
3106   {
3107     USI opval = ANDSI (* FLD (i_rm), INVSI (3));
3108     written |= (1ULL << 4);
3109     if (UNLIKELY(current_cpu->trace_result_p))
3110       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3111     current_cpu->branch (opval, npc, status);
3112   }
3113 } else {
3114   {
3115     USI opval = ANDSI (* FLD (i_rm), INVSI (7));
3116     written |= (1ULL << 4);
3117     if (UNLIKELY(current_cpu->trace_result_p))
3118       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3119     current_cpu->branch (opval, npc, status);
3120   }
3121 }
3122 }
3123 }
3124 current_cpu->cg_profile_jump (pc, * FLD (i_rm));
3125 }
3126
3127   abuf->written = written;
3128   current_cpu->done_cti_insn (npc, status);
3129   return status;
3130 #undef FLD
3131 }
3132
3133 // ********** jmp24: jmp $pcabs24a2
3134
3135 sem_status
3136 mepcore1_sem_jmp24 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3137 {
3138 #define FLD(f) abuf->fields.sfmt_jmp24.f
3139   sem_status status = SEM_STATUS_NORMAL;
3140   mepcore1_scache* abuf = sem;
3141   unsigned long long written = 0;
3142   PCADDR pc = abuf->addr;
3143   PCADDR npc = pc + 4;
3144
3145 {
3146 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3147   {
3148     USI opval = ANDSI (ORSI (ANDSI (pc, 0xf0000000), FLD (f_24u5a2n)), INVSI (7));
3149     written |= (1ULL << 4);
3150     if (UNLIKELY(current_cpu->trace_result_p))
3151       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3152     current_cpu->branch (opval, npc, status);
3153   }
3154 }
3155  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3156   {
3157     USI opval = ANDSI (ORSI (ANDSI (pc, 0xf0000000), FLD (f_24u5a2n)), INVSI (3));
3158     written |= (1ULL << 4);
3159     if (UNLIKELY(current_cpu->trace_result_p))
3160       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3161     current_cpu->branch (opval, npc, status);
3162   }
3163 }
3164  else {
3165   {
3166     USI opval = ANDSI (ORSI (ANDSI (pc, 0xf0000000), FLD (f_24u5a2n)), INVSI (1));
3167     written |= (1ULL << 4);
3168     if (UNLIKELY(current_cpu->trace_result_p))
3169       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3170     current_cpu->branch (opval, npc, status);
3171   }
3172 }
3173 current_cpu->cg_profile_jump (pc, FLD (f_24u5a2n));
3174 }
3175
3176   abuf->written = written;
3177   current_cpu->done_cti_insn (npc, status);
3178   return status;
3179 #undef FLD
3180 }
3181
3182 // ********** jsr: jsr $rm
3183
3184 sem_status
3185 mepcore1_sem_jsr (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3186 {
3187 #define FLD(f) abuf->fields.sfmt_jsr.f
3188   sem_status status = SEM_STATUS_NORMAL;
3189   mepcore1_scache* abuf = sem;
3190   unsigned long long written = 0;
3191   PCADDR pc = abuf->addr;
3192   PCADDR npc = pc + 2;
3193
3194 {
3195 current_cpu->cg_profile (pc, * FLD (i_rm));
3196 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3197   {
3198     SI opval = ADDSI (pc, 8);
3199     written |= (1ULL << 4);
3200     if (UNLIKELY(current_cpu->trace_result_p))
3201       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
3202     current_cpu->h_csr_set (((UINT) 1), opval);
3203   }
3204 }
3205  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3206   {
3207     SI opval = ADDSI (pc, 4);
3208     written |= (1ULL << 4);
3209     if (UNLIKELY(current_cpu->trace_result_p))
3210       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
3211     current_cpu->h_csr_set (((UINT) 1), opval);
3212   }
3213 }
3214  else {
3215   {
3216     SI opval = ADDSI (pc, 2);
3217     written |= (1ULL << 4);
3218     if (UNLIKELY(current_cpu->trace_result_p))
3219       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
3220     current_cpu->h_csr_set (((UINT) 1), opval);
3221   }
3222 }
3223 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3224   {
3225     USI opval = ANDSI (* FLD (i_rm), INVSI (7));
3226     written |= (1ULL << 5);
3227     if (UNLIKELY(current_cpu->trace_result_p))
3228       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3229     current_cpu->branch (opval, npc, status);
3230   }
3231 }
3232  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3233   {
3234     USI opval = ANDSI (* FLD (i_rm), INVSI (3));
3235     written |= (1ULL << 5);
3236     if (UNLIKELY(current_cpu->trace_result_p))
3237       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3238     current_cpu->branch (opval, npc, status);
3239   }
3240 }
3241  else {
3242   {
3243     USI opval = ANDSI (* FLD (i_rm), INVSI (1));
3244     written |= (1ULL << 5);
3245     if (UNLIKELY(current_cpu->trace_result_p))
3246       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3247     current_cpu->branch (opval, npc, status);
3248   }
3249 }
3250 }
3251
3252   abuf->written = written;
3253   current_cpu->done_cti_insn (npc, status);
3254   return status;
3255 #undef FLD
3256 }
3257
3258 // ********** ret: ret
3259
3260 sem_status
3261 mepcore1_sem_ret (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3262 {
3263 #define FLD(f) abuf->fields.sfmt_ret.f
3264   sem_status status = SEM_STATUS_NORMAL;
3265   mepcore1_scache* abuf = sem;
3266   unsigned long long written = 0;
3267   PCADDR pc = abuf->addr;
3268   PCADDR npc = pc + 2;
3269
3270 {
3271 if (EQSI (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), 0)) {
3272 if (ANDSI (current_cpu->h_csr_get (((UINT) 1)), 1)) {
3273 {
3274 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (1, 12)));
3275 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1)) {
3276   {
3277     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 1)), INVSI (3));
3278     written |= (1ULL << 4);
3279     if (UNLIKELY(current_cpu->trace_result_p))
3280       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3281     current_cpu->branch (opval, npc, status);
3282   }
3283 } else {
3284   {
3285     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 1)), INVSI (7));
3286     written |= (1ULL << 4);
3287     if (UNLIKELY(current_cpu->trace_result_p))
3288       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3289     current_cpu->branch (opval, npc, status);
3290   }
3291 }
3292 }
3293 } else {
3294   {
3295     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 1)), INVSI (1));
3296     written |= (1ULL << 4);
3297     if (UNLIKELY(current_cpu->trace_result_p))
3298       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3299     current_cpu->branch (opval, npc, status);
3300   }
3301 }
3302 } else {
3303 if (ANDSI (current_cpu->h_csr_get (((UINT) 1)), 1)) {
3304 {
3305 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (0, 12)));
3306   {
3307     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 1)), INVSI (1));
3308     written |= (1ULL << 4);
3309     if (UNLIKELY(current_cpu->trace_result_p))
3310       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3311     current_cpu->branch (opval, npc, status);
3312   }
3313 }
3314 } else {
3315 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1)) {
3316   {
3317     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 1)), INVSI (3));
3318     written |= (1ULL << 4);
3319     if (UNLIKELY(current_cpu->trace_result_p))
3320       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3321     current_cpu->branch (opval, npc, status);
3322   }
3323 } else {
3324   {
3325     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 1)), INVSI (7));
3326     written |= (1ULL << 4);
3327     if (UNLIKELY(current_cpu->trace_result_p))
3328       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3329     current_cpu->branch (opval, npc, status);
3330   }
3331 }
3332 }
3333 }
3334 current_cpu->notify_ret (pc);
3335 }
3336
3337   abuf->written = written;
3338   current_cpu->done_cti_insn (npc, status);
3339   return status;
3340 #undef FLD
3341 }
3342
3343 // ********** repeat: repeat $rn,$pcrel17a2
3344
3345 sem_status
3346 mepcore1_sem_repeat (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3347 {
3348 #define FLD(f) abuf->fields.sfmt_repeat.f
3349   sem_status status = SEM_STATUS_NORMAL;
3350   mepcore1_scache* abuf = sem;
3351   unsigned long long written = 0;
3352   PCADDR pc = abuf->addr;
3353   PCADDR npc = pc + 4;
3354
3355 {
3356 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3357   {
3358     SI opval = ADDSI (pc, 8);
3359     written |= (1ULL << 5);
3360     if (UNLIKELY(current_cpu->trace_result_p))
3361       current_cpu->trace_stream << "csr" << '[' << ((UINT) 4) << ']' << ":=0x" << hex << opval << dec << "  ";
3362     current_cpu->h_csr_set (((UINT) 4), opval);
3363   }
3364 }
3365  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3366   {
3367     SI opval = ADDSI (pc, 4);
3368     written |= (1ULL << 5);
3369     if (UNLIKELY(current_cpu->trace_result_p))
3370       current_cpu->trace_stream << "csr" << '[' << ((UINT) 4) << ']' << ":=0x" << hex << opval << dec << "  ";
3371     current_cpu->h_csr_set (((UINT) 4), opval);
3372   }
3373 }
3374  else {
3375   {
3376     SI opval = ADDSI (pc, 4);
3377     written |= (1ULL << 5);
3378     if (UNLIKELY(current_cpu->trace_result_p))
3379       current_cpu->trace_stream << "csr" << '[' << ((UINT) 4) << ']' << ":=0x" << hex << opval << dec << "  ";
3380     current_cpu->h_csr_set (((UINT) 4), opval);
3381   }
3382 }
3383 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3384   {
3385     SI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
3386     written |= (1ULL << 6);
3387     if (UNLIKELY(current_cpu->trace_result_p))
3388       current_cpu->trace_stream << "csr" << '[' << ((UINT) 5) << ']' << ":=0x" << hex << opval << dec << "  ";
3389     current_cpu->h_csr_set (((UINT) 5), opval);
3390   }
3391 }
3392  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3393   {
3394     SI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
3395     written |= (1ULL << 6);
3396     if (UNLIKELY(current_cpu->trace_result_p))
3397       current_cpu->trace_stream << "csr" << '[' << ((UINT) 5) << ']' << ":=0x" << hex << opval << dec << "  ";
3398     current_cpu->h_csr_set (((UINT) 5), opval);
3399   }
3400 }
3401  else {
3402   {
3403     SI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
3404     written |= (1ULL << 6);
3405     if (UNLIKELY(current_cpu->trace_result_p))
3406       current_cpu->trace_stream << "csr" << '[' << ((UINT) 5) << ']' << ":=0x" << hex << opval << dec << "  ";
3407     current_cpu->h_csr_set (((UINT) 5), opval);
3408   }
3409 }
3410   {
3411     SI opval = * FLD (i_rn);
3412     if (UNLIKELY(current_cpu->trace_result_p))
3413       current_cpu->trace_stream << "csr" << '[' << ((UINT) 6) << ']' << ":=0x" << hex << opval << dec << "  ";
3414     current_cpu->h_csr_set (((UINT) 6), opval);
3415   }
3416 }
3417
3418   abuf->written = written;
3419   current_cpu->done_insn (npc, status);
3420   return status;
3421 #undef FLD
3422 }
3423
3424 // ********** erepeat: erepeat $pcrel17a2
3425
3426 sem_status
3427 mepcore1_sem_erepeat (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3428 {
3429 #define FLD(f) abuf->fields.sfmt_repeat.f
3430   sem_status status = SEM_STATUS_NORMAL;
3431   mepcore1_scache* abuf = sem;
3432   unsigned long long written = 0;
3433   PCADDR pc = abuf->addr;
3434   PCADDR npc = pc + 4;
3435
3436 {
3437 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3438   {
3439     SI opval = ADDSI (pc, 8);
3440     written |= (1ULL << 4);
3441     if (UNLIKELY(current_cpu->trace_result_p))
3442       current_cpu->trace_stream << "csr" << '[' << ((UINT) 4) << ']' << ":=0x" << hex << opval << dec << "  ";
3443     current_cpu->h_csr_set (((UINT) 4), opval);
3444   }
3445 }
3446  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3447   {
3448     SI opval = ADDSI (pc, 4);
3449     written |= (1ULL << 4);
3450     if (UNLIKELY(current_cpu->trace_result_p))
3451       current_cpu->trace_stream << "csr" << '[' << ((UINT) 4) << ']' << ":=0x" << hex << opval << dec << "  ";
3452     current_cpu->h_csr_set (((UINT) 4), opval);
3453   }
3454 }
3455  else {
3456   {
3457     SI opval = ADDSI (pc, 4);
3458     written |= (1ULL << 4);
3459     if (UNLIKELY(current_cpu->trace_result_p))
3460       current_cpu->trace_stream << "csr" << '[' << ((UINT) 4) << ']' << ":=0x" << hex << opval << dec << "  ";
3461     current_cpu->h_csr_set (((UINT) 4), opval);
3462   }
3463 }
3464 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3465   {
3466     SI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
3467     written |= (1ULL << 5);
3468     if (UNLIKELY(current_cpu->trace_result_p))
3469       current_cpu->trace_stream << "csr" << '[' << ((UINT) 5) << ']' << ":=0x" << hex << opval << dec << "  ";
3470     current_cpu->h_csr_set (((UINT) 5), opval);
3471   }
3472 }
3473  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3474   {
3475     SI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
3476     written |= (1ULL << 5);
3477     if (UNLIKELY(current_cpu->trace_result_p))
3478       current_cpu->trace_stream << "csr" << '[' << ((UINT) 5) << ']' << ":=0x" << hex << opval << dec << "  ";
3479     current_cpu->h_csr_set (((UINT) 5), opval);
3480   }
3481 }
3482  else {
3483   {
3484     SI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
3485     written |= (1ULL << 5);
3486     if (UNLIKELY(current_cpu->trace_result_p))
3487       current_cpu->trace_stream << "csr" << '[' << ((UINT) 5) << ']' << ":=0x" << hex << opval << dec << "  ";
3488     current_cpu->h_csr_set (((UINT) 5), opval);
3489   }
3490 }
3491 current_cpu->hardware.h_csr[((UINT) 5)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 5)], INVSI (SLLSI (1, 0))), ANDSI (SLLSI (1, 0), SLLSI (1, 0)));
3492   {
3493     SI opval = 1;
3494     if (UNLIKELY(current_cpu->trace_result_p))
3495       current_cpu->trace_stream << "csr" << '[' << ((UINT) 6) << ']' << ":=0x" << hex << opval << dec << "  ";
3496     current_cpu->h_csr_set (((UINT) 6), opval);
3497   }
3498 }
3499
3500   abuf->written = written;
3501   current_cpu->done_insn (npc, status);
3502   return status;
3503 #undef FLD
3504 }
3505
3506 // ********** stc_lp: stc $rn,\$lp
3507
3508 sem_status
3509 mepcore1_sem_stc_lp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3510 {
3511 #define FLD(f) abuf->fields.sfmt_stc_lp.f
3512   sem_status status = SEM_STATUS_NORMAL;
3513   mepcore1_scache* abuf = sem;
3514   unsigned long long written = 0;
3515   PCADDR pc = abuf->addr;
3516   PCADDR npc = pc + 2;
3517
3518   {
3519     SI opval = * FLD (i_rn);
3520     if (UNLIKELY(current_cpu->trace_result_p))
3521       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
3522     current_cpu->h_csr_set (((UINT) 1), opval);
3523   }
3524
3525   current_cpu->done_insn (npc, status);
3526   return status;
3527 #undef FLD
3528 }
3529
3530 // ********** stc_hi: stc $rn,\$hi
3531
3532 sem_status
3533 mepcore1_sem_stc_hi (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3534 {
3535 #define FLD(f) abuf->fields.sfmt_maddr.f
3536   sem_status status = SEM_STATUS_NORMAL;
3537   mepcore1_scache* abuf = sem;
3538   unsigned long long written = 0;
3539   PCADDR pc = abuf->addr;
3540   PCADDR npc = pc + 2;
3541
3542   {
3543     SI opval = * FLD (i_rn);
3544     if (UNLIKELY(current_cpu->trace_result_p))
3545       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
3546     current_cpu->h_csr_set (((UINT) 7), opval);
3547   }
3548
3549   current_cpu->done_insn (npc, status);
3550   return status;
3551 #undef FLD
3552 }
3553
3554 // ********** stc_lo: stc $rn,\$lo
3555
3556 sem_status
3557 mepcore1_sem_stc_lo (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3558 {
3559 #define FLD(f) abuf->fields.sfmt_maddr.f
3560   sem_status status = SEM_STATUS_NORMAL;
3561   mepcore1_scache* abuf = sem;
3562   unsigned long long written = 0;
3563   PCADDR pc = abuf->addr;
3564   PCADDR npc = pc + 2;
3565
3566   {
3567     SI opval = * FLD (i_rn);
3568     if (UNLIKELY(current_cpu->trace_result_p))
3569       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
3570     current_cpu->h_csr_set (((UINT) 8), opval);
3571   }
3572
3573   current_cpu->done_insn (npc, status);
3574   return status;
3575 #undef FLD
3576 }
3577
3578 // ********** stc: stc $rn,$csrn
3579
3580 sem_status
3581 mepcore1_sem_stc (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3582 {
3583 #define FLD(f) abuf->fields.sfmt_stc.f
3584   sem_status status = SEM_STATUS_NORMAL;
3585   mepcore1_scache* abuf = sem;
3586   unsigned long long written = 0;
3587   PCADDR pc = abuf->addr;
3588   PCADDR npc = pc + 2;
3589
3590   {
3591     SI opval = * FLD (i_rn);
3592     if (UNLIKELY(current_cpu->trace_result_p))
3593       current_cpu->trace_stream << "csr" << '[' << FLD (f_csrn) << ']' << ":=0x" << hex << opval << dec << "  ";
3594     current_cpu->h_csr_set (FLD (f_csrn), opval);
3595   }
3596
3597   current_cpu->done_insn (npc, status);
3598   return status;
3599 #undef FLD
3600 }
3601
3602 // ********** ldc_lp: ldc $rn,\$lp
3603
3604 sem_status
3605 mepcore1_sem_ldc_lp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3606 {
3607 #define FLD(f) abuf->fields.sfmt_ldc_lp.f
3608   sem_status status = SEM_STATUS_NORMAL;
3609   mepcore1_scache* abuf = sem;
3610   unsigned long long written = 0;
3611   PCADDR pc = abuf->addr;
3612   PCADDR npc = pc + 2;
3613
3614   {
3615     SI opval = current_cpu->h_csr_get (((UINT) 1));
3616     if (UNLIKELY(current_cpu->trace_result_p))
3617       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
3618     * FLD (i_rn) = opval;
3619   }
3620
3621   current_cpu->done_insn (npc, status);
3622   return status;
3623 #undef FLD
3624 }
3625
3626 // ********** ldc_hi: ldc $rn,\$hi
3627
3628 sem_status
3629 mepcore1_sem_ldc_hi (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3630 {
3631 #define FLD(f) abuf->fields.sfmt_maddr.f
3632   sem_status status = SEM_STATUS_NORMAL;
3633   mepcore1_scache* abuf = sem;
3634   unsigned long long written = 0;
3635   PCADDR pc = abuf->addr;
3636   PCADDR npc = pc + 2;
3637
3638   {
3639     SI opval = current_cpu->h_csr_get (((UINT) 7));
3640     if (UNLIKELY(current_cpu->trace_result_p))
3641       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
3642     * FLD (i_rn) = opval;
3643   }
3644
3645   current_cpu->done_insn (npc, status);
3646   return status;
3647 #undef FLD
3648 }
3649
3650 // ********** ldc_lo: ldc $rn,\$lo
3651
3652 sem_status
3653 mepcore1_sem_ldc_lo (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3654 {
3655 #define FLD(f) abuf->fields.sfmt_maddr.f
3656   sem_status status = SEM_STATUS_NORMAL;
3657   mepcore1_scache* abuf = sem;
3658   unsigned long long written = 0;
3659   PCADDR pc = abuf->addr;
3660   PCADDR npc = pc + 2;
3661
3662   {
3663     SI opval = current_cpu->h_csr_get (((UINT) 8));
3664     if (UNLIKELY(current_cpu->trace_result_p))
3665       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
3666     * FLD (i_rn) = opval;
3667   }
3668
3669   current_cpu->done_insn (npc, status);
3670   return status;
3671 #undef FLD
3672 }
3673
3674 // ********** ldc: ldc $rn,$csrn
3675
3676 sem_status
3677 mepcore1_sem_ldc (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3678 {
3679 #define FLD(f) abuf->fields.sfmt_ldc.f
3680   sem_status status = SEM_STATUS_NORMAL;
3681   mepcore1_scache* abuf = sem;
3682   unsigned long long written = 0;
3683   PCADDR pc = abuf->addr;
3684   PCADDR npc = pc + 2;
3685
3686 if (EQSI (FLD (f_csrn), 0)) {
3687 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
3688   {
3689     SI opval = ADDSI (pc, 8);
3690     written |= (1ULL << 5);
3691     if (UNLIKELY(current_cpu->trace_result_p))
3692       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
3693     * FLD (i_rn) = opval;
3694   }
3695 }
3696  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
3697   {
3698     SI opval = ADDSI (pc, 4);
3699     written |= (1ULL << 5);
3700     if (UNLIKELY(current_cpu->trace_result_p))
3701       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
3702     * FLD (i_rn) = opval;
3703   }
3704 }
3705  else {
3706   {
3707     SI opval = ADDSI (pc, 2);
3708     written |= (1ULL << 5);
3709     if (UNLIKELY(current_cpu->trace_result_p))
3710       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
3711     * FLD (i_rn) = opval;
3712   }
3713 }
3714 } else {
3715   {
3716     SI opval = current_cpu->h_csr_get (FLD (f_csrn));
3717     written |= (1ULL << 5);
3718     if (UNLIKELY(current_cpu->trace_result_p))
3719       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
3720     * FLD (i_rn) = opval;
3721   }
3722 }
3723
3724   abuf->written = written;
3725   current_cpu->done_insn (npc, status);
3726   return status;
3727 #undef FLD
3728 }
3729
3730 // ********** di: di
3731
3732 sem_status
3733 mepcore1_sem_di (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3734 {
3735 #define FLD(f) abuf->fields.sfmt_di.f
3736   sem_status status = SEM_STATUS_NORMAL;
3737   mepcore1_scache* abuf = sem;
3738   unsigned long long written = 0;
3739   PCADDR pc = abuf->addr;
3740   PCADDR npc = pc + 2;
3741
3742   {
3743     SI opval = SLLSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 1), 1);
3744     if (UNLIKELY(current_cpu->trace_result_p))
3745       current_cpu->trace_stream << "csr" << '[' << ((UINT) 16) << ']' << ":=0x" << hex << opval << dec << "  ";
3746     current_cpu->h_csr_set (((UINT) 16), opval);
3747   }
3748
3749   current_cpu->done_insn (npc, status);
3750   return status;
3751 #undef FLD
3752 }
3753
3754 // ********** ei: ei
3755
3756 sem_status
3757 mepcore1_sem_ei (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3758 {
3759 #define FLD(f) abuf->fields.sfmt_di.f
3760   sem_status status = SEM_STATUS_NORMAL;
3761   mepcore1_scache* abuf = sem;
3762   unsigned long long written = 0;
3763   PCADDR pc = abuf->addr;
3764   PCADDR npc = pc + 2;
3765
3766   {
3767     SI opval = ORSI (current_cpu->h_csr_get (((UINT) 16)), 1);
3768     if (UNLIKELY(current_cpu->trace_result_p))
3769       current_cpu->trace_stream << "csr" << '[' << ((UINT) 16) << ']' << ":=0x" << hex << opval << dec << "  ";
3770     current_cpu->h_csr_set (((UINT) 16), opval);
3771   }
3772
3773   current_cpu->done_insn (npc, status);
3774   return status;
3775 #undef FLD
3776 }
3777
3778 // ********** reti: reti
3779
3780 sem_status
3781 mepcore1_sem_reti (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3782 {
3783 #define FLD(f) abuf->fields.sfmt_reti.f
3784   sem_status status = SEM_STATUS_NORMAL;
3785   mepcore1_scache* abuf = sem;
3786   unsigned long long written = 0;
3787   PCADDR pc = abuf->addr;
3788   PCADDR npc = pc + 2;
3789
3790 if (EQSI (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), 0)) {
3791 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 9), 1)) {
3792 if (ANDSI (current_cpu->h_csr_get (((UINT) 23)), 1)) {
3793 {
3794 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (1, 12)));
3795 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1)) {
3796   {
3797     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 23)), INVSI (3));
3798     written |= (1ULL << 4);
3799     if (UNLIKELY(current_cpu->trace_result_p))
3800       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3801     current_cpu->branch (opval, npc, status);
3802   }
3803 } else {
3804   {
3805     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 23)), INVSI (7));
3806     written |= (1ULL << 4);
3807     if (UNLIKELY(current_cpu->trace_result_p))
3808       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3809     current_cpu->branch (opval, npc, status);
3810   }
3811 }
3812 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 9))), ANDSI (SLLSI (1, 9), SLLSI (0, 9)));
3813 }
3814 } else {
3815 {
3816   {
3817     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 23)), INVSI (1));
3818     written |= (1ULL << 4);
3819     if (UNLIKELY(current_cpu->trace_result_p))
3820       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3821     current_cpu->branch (opval, npc, status);
3822   }
3823 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 9))), ANDSI (SLLSI (1, 9), SLLSI (0, 9)));
3824 }
3825 }
3826 } else {
3827 if (ANDSI (current_cpu->h_csr_get (((UINT) 19)), 1)) {
3828 {
3829 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (1, 12)));
3830 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1)) {
3831   {
3832     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 19)), INVSI (3));
3833     written |= (1ULL << 4);
3834     if (UNLIKELY(current_cpu->trace_result_p))
3835       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3836     current_cpu->branch (opval, npc, status);
3837   }
3838 } else {
3839   {
3840     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 19)), INVSI (7));
3841     written |= (1ULL << 4);
3842     if (UNLIKELY(current_cpu->trace_result_p))
3843       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3844     current_cpu->branch (opval, npc, status);
3845   }
3846 }
3847 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 2))), ANDSI (SLLSI (1, 2), SLLSI (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 3), 1), 2)));
3848 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 0))), ANDSI (SLLSI (1, 0), SLLSI (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 1), 1), 0)));
3849 }
3850 } else {
3851 {
3852   {
3853     USI opval = ANDSI (current_cpu->h_csr_get (((UINT) 19)), INVSI (1));
3854     written |= (1ULL << 4);
3855     if (UNLIKELY(current_cpu->trace_result_p))
3856       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3857     current_cpu->branch (opval, npc, status);
3858   }
3859 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 2))), ANDSI (SLLSI (1, 2), SLLSI (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 3), 1), 2)));
3860 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 0))), ANDSI (SLLSI (1, 0), SLLSI (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 1), 1), 0)));
3861 }
3862 }
3863 }
3864 } else {
3865 ((void) 0); /*nop*/
3866 }
3867
3868   abuf->written = written;
3869   current_cpu->done_cti_insn (npc, status);
3870   return status;
3871 #undef FLD
3872 }
3873
3874 // ********** halt: halt
3875
3876 sem_status
3877 mepcore1_sem_halt (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3878 {
3879 #define FLD(f) abuf->fields.sfmt_di.f
3880   sem_status status = SEM_STATUS_NORMAL;
3881   mepcore1_scache* abuf = sem;
3882   unsigned long long written = 0;
3883   PCADDR pc = abuf->addr;
3884   PCADDR npc = pc + 2;
3885
3886 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (current_cpu->h_csr_get (((UINT) 16)), SLLSI (1, 11));
3887
3888   current_cpu->done_insn (npc, status);
3889   return status;
3890 #undef FLD
3891 }
3892
3893 // ********** sleep: sleep
3894
3895 sem_status
3896 mepcore1_sem_sleep (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3897 {
3898 #define FLD(f) abuf->fields.fmt_empty.f
3899   sem_status status = SEM_STATUS_NORMAL;
3900   mepcore1_scache* abuf = sem;
3901   unsigned long long written = 0;
3902   PCADDR pc = abuf->addr;
3903   PCADDR npc = pc + 2;
3904
3905 current_cpu->do_sleep ();
3906
3907   current_cpu->done_insn (npc, status);
3908   return status;
3909 #undef FLD
3910 }
3911
3912 // ********** swi: swi $uimm2
3913
3914 sem_status
3915 mepcore1_sem_swi (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3916 {
3917 #define FLD(f) abuf->fields.sfmt_swi.f
3918   sem_status status = SEM_STATUS_NORMAL;
3919   mepcore1_scache* abuf = sem;
3920   unsigned long long written = 0;
3921   PCADDR pc = abuf->addr;
3922   PCADDR npc = pc + 2;
3923
3924 if (EQSI (FLD (f_2u10), 0)) {
3925   {
3926     SI opval = ORSI (current_cpu->h_csr_get (((UINT) 20)), SLLSI (1, 4));
3927     written |= (1ULL << 2);
3928     if (UNLIKELY(current_cpu->trace_result_p))
3929       current_cpu->trace_stream << "csr" << '[' << ((UINT) 20) << ']' << ":=0x" << hex << opval << dec << "  ";
3930     current_cpu->h_csr_set (((UINT) 20), opval);
3931   }
3932 }
3933  else if (EQSI (FLD (f_2u10), 1)) {
3934   {
3935     SI opval = ORSI (current_cpu->h_csr_get (((UINT) 20)), SLLSI (1, 5));
3936     written |= (1ULL << 2);
3937     if (UNLIKELY(current_cpu->trace_result_p))
3938       current_cpu->trace_stream << "csr" << '[' << ((UINT) 20) << ']' << ":=0x" << hex << opval << dec << "  ";
3939     current_cpu->h_csr_set (((UINT) 20), opval);
3940   }
3941 }
3942  else if (EQSI (FLD (f_2u10), 2)) {
3943   {
3944     SI opval = ORSI (current_cpu->h_csr_get (((UINT) 20)), SLLSI (1, 6));
3945     written |= (1ULL << 2);
3946     if (UNLIKELY(current_cpu->trace_result_p))
3947       current_cpu->trace_stream << "csr" << '[' << ((UINT) 20) << ']' << ":=0x" << hex << opval << dec << "  ";
3948     current_cpu->h_csr_set (((UINT) 20), opval);
3949   }
3950 }
3951  else if (EQSI (FLD (f_2u10), 3)) {
3952   {
3953     SI opval = ORSI (current_cpu->h_csr_get (((UINT) 20)), SLLSI (1, 7));
3954     written |= (1ULL << 2);
3955     if (UNLIKELY(current_cpu->trace_result_p))
3956       current_cpu->trace_stream << "csr" << '[' << ((UINT) 20) << ']' << ":=0x" << hex << opval << dec << "  ";
3957     current_cpu->h_csr_set (((UINT) 20), opval);
3958   }
3959 }
3960
3961   abuf->written = written;
3962   current_cpu->done_insn (npc, status);
3963   return status;
3964 #undef FLD
3965 }
3966
3967 // ********** break: break
3968
3969 sem_status
3970 mepcore1_sem_break (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3971 {
3972 #define FLD(f) abuf->fields.fmt_empty.f
3973   sem_status status = SEM_STATUS_NORMAL;
3974   mepcore1_scache* abuf = sem;
3975   unsigned long long written = 0;
3976   PCADDR pc = abuf->addr;
3977   PCADDR npc = pc + 2;
3978
3979   {
3980     USI opval = current_cpu->break_exception (pc);
3981     if (UNLIKELY(current_cpu->trace_result_p))
3982       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
3983     current_cpu->branch (opval, npc, status);
3984   }
3985
3986   current_cpu->done_cti_insn (npc, status);
3987   return status;
3988 #undef FLD
3989 }
3990
3991 // ********** syncm: syncm
3992
3993 sem_status
3994 mepcore1_sem_syncm (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
3995 {
3996 #define FLD(f) abuf->fields.fmt_empty.f
3997   sem_status status = SEM_STATUS_NORMAL;
3998   mepcore1_scache* abuf = sem;
3999   unsigned long long written = 0;
4000   PCADDR pc = abuf->addr;
4001   PCADDR npc = pc + 2;
4002
4003 ((void) 0); /*nop*/
4004
4005   current_cpu->done_insn (npc, status);
4006   return status;
4007 #undef FLD
4008 }
4009
4010 // ********** stcb: stcb $rn,$uimm16
4011
4012 sem_status
4013 mepcore1_sem_stcb (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4014 {
4015 #define FLD(f) abuf->fields.sfmt_uci.f
4016   sem_status status = SEM_STATUS_NORMAL;
4017   mepcore1_scache* abuf = sem;
4018   unsigned long long written = 0;
4019   PCADDR pc = abuf->addr;
4020   PCADDR npc = pc + 4;
4021
4022 current_cpu->do_stcb (* FLD (i_rn), FLD (f_16u16));
4023
4024   current_cpu->done_insn (npc, status);
4025   return status;
4026 #undef FLD
4027 }
4028
4029 // ********** ldcb: ldcb $rn,$uimm16
4030
4031 sem_status
4032 mepcore1_sem_ldcb (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4033 {
4034 #define FLD(f) abuf->fields.sfmt_uci.f
4035   sem_status status = SEM_STATUS_NORMAL;
4036   mepcore1_scache* abuf = sem;
4037   unsigned long long written = 0;
4038   PCADDR pc = abuf->addr;
4039   PCADDR npc = pc + 4;
4040
4041   {
4042     SI opval = current_cpu->do_ldcb (FLD (f_16u16));
4043     if (UNLIKELY(current_cpu->trace_result_p))
4044       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4045     * FLD (i_rn) = opval;
4046   }
4047
4048   current_cpu->done_insn (npc, status);
4049   return status;
4050 #undef FLD
4051 }
4052
4053 // ********** bsetm: bsetm ($rma),$uimm3
4054
4055 sem_status
4056 mepcore1_sem_bsetm (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4057 {
4058 #define FLD(f) abuf->fields.sfmt_btstm.f
4059   sem_status status = SEM_STATUS_NORMAL;
4060   mepcore1_scache* abuf = sem;
4061   unsigned long long written = 0;
4062   PCADDR pc = abuf->addr;
4063   PCADDR npc = pc + 2;
4064
4065 {
4066 current_cpu->check_option_bit (pc);
4067   {
4068     UQI opval = ORQI (current_cpu->GETMEMUQI (pc, * FLD (i_rma)), SLLSI (1, FLD (f_3u5)));
4069     if (UNLIKELY(current_cpu->trace_result_p))
4070       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) * FLD (i_rma) << dec << ']' << ":=0x" << hex << (USI) opval << dec << "  ";
4071     current_cpu->SETMEMUQI (pc, * FLD (i_rma), opval);
4072   }
4073 }
4074
4075   current_cpu->done_insn (npc, status);
4076   return status;
4077 #undef FLD
4078 }
4079
4080 // ********** bclrm: bclrm ($rma),$uimm3
4081
4082 sem_status
4083 mepcore1_sem_bclrm (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4084 {
4085 #define FLD(f) abuf->fields.sfmt_btstm.f
4086   sem_status status = SEM_STATUS_NORMAL;
4087   mepcore1_scache* abuf = sem;
4088   unsigned long long written = 0;
4089   PCADDR pc = abuf->addr;
4090   PCADDR npc = pc + 2;
4091
4092 {
4093 current_cpu->check_option_bit (pc);
4094   {
4095     UQI opval = ANDQI (current_cpu->GETMEMUQI (pc, * FLD (i_rma)), INVSI (SLLSI (1, FLD (f_3u5))));
4096     if (UNLIKELY(current_cpu->trace_result_p))
4097       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) * FLD (i_rma) << dec << ']' << ":=0x" << hex << (USI) opval << dec << "  ";
4098     current_cpu->SETMEMUQI (pc, * FLD (i_rma), opval);
4099   }
4100 }
4101
4102   current_cpu->done_insn (npc, status);
4103   return status;
4104 #undef FLD
4105 }
4106
4107 // ********** bnotm: bnotm ($rma),$uimm3
4108
4109 sem_status
4110 mepcore1_sem_bnotm (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4111 {
4112 #define FLD(f) abuf->fields.sfmt_btstm.f
4113   sem_status status = SEM_STATUS_NORMAL;
4114   mepcore1_scache* abuf = sem;
4115   unsigned long long written = 0;
4116   PCADDR pc = abuf->addr;
4117   PCADDR npc = pc + 2;
4118
4119 {
4120 current_cpu->check_option_bit (pc);
4121   {
4122     UQI opval = XORQI (current_cpu->GETMEMUQI (pc, * FLD (i_rma)), SLLSI (1, FLD (f_3u5)));
4123     if (UNLIKELY(current_cpu->trace_result_p))
4124       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) * FLD (i_rma) << dec << ']' << ":=0x" << hex << (USI) opval << dec << "  ";
4125     current_cpu->SETMEMUQI (pc, * FLD (i_rma), opval);
4126   }
4127 }
4128
4129   current_cpu->done_insn (npc, status);
4130   return status;
4131 #undef FLD
4132 }
4133
4134 // ********** btstm: btstm \$0,($rma),$uimm3
4135
4136 sem_status
4137 mepcore1_sem_btstm (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4138 {
4139 #define FLD(f) abuf->fields.sfmt_btstm.f
4140   sem_status status = SEM_STATUS_NORMAL;
4141   mepcore1_scache* abuf = sem;
4142   unsigned long long written = 0;
4143   PCADDR pc = abuf->addr;
4144   PCADDR npc = pc + 2;
4145
4146 {
4147 current_cpu->check_option_bit (pc);
4148   {
4149     SI opval = ZEXTQISI (ANDQI (current_cpu->GETMEMUQI (pc, * FLD (i_rma)), SLLSI (1, FLD (f_3u5))));
4150     if (UNLIKELY(current_cpu->trace_result_p))
4151       current_cpu->trace_stream << "gpr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << "  ";
4152     current_cpu->hardware.h_gpr[((UINT) 0)] = opval;
4153   }
4154 }
4155
4156   current_cpu->done_insn (npc, status);
4157   return status;
4158 #undef FLD
4159 }
4160
4161 // ********** tas: tas $rn,($rma)
4162
4163 sem_status
4164 mepcore1_sem_tas (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4165 {
4166 #define FLD(f) abuf->fields.sfmt_ldcb_r.f
4167   sem_status status = SEM_STATUS_NORMAL;
4168   mepcore1_scache* abuf = sem;
4169   unsigned long long written = 0;
4170   PCADDR pc = abuf->addr;
4171   PCADDR npc = pc + 2;
4172
4173 {
4174   SI tmp_result;
4175 current_cpu->check_option_bit (pc);
4176   tmp_result = ZEXTQISI (current_cpu->GETMEMUQI (pc, * FLD (i_rma)));
4177   {
4178     UQI opval = 1;
4179     if (UNLIKELY(current_cpu->trace_result_p))
4180       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) * FLD (i_rma) << dec << ']' << ":=0x" << hex << (USI) opval << dec << "  ";
4181     current_cpu->SETMEMUQI (pc, * FLD (i_rma), opval);
4182   }
4183   {
4184     SI opval = tmp_result;
4185     if (UNLIKELY(current_cpu->trace_result_p))
4186       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4187     * FLD (i_rn) = opval;
4188   }
4189 }
4190
4191   current_cpu->done_insn (npc, status);
4192   return status;
4193 #undef FLD
4194 }
4195
4196 // ********** cache: cache $cimm4,($rma)
4197
4198 sem_status
4199 mepcore1_sem_cache (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4200 {
4201 #define FLD(f) abuf->fields.sfmt_ldcb_r.f
4202   sem_status status = SEM_STATUS_NORMAL;
4203   mepcore1_scache* abuf = sem;
4204   unsigned long long written = 0;
4205   PCADDR pc = abuf->addr;
4206   PCADDR npc = pc + 2;
4207
4208 current_cpu->do_cache (FLD (f_rn), * FLD (i_rma), pc);
4209
4210   current_cpu->done_insn (npc, status);
4211   return status;
4212 #undef FLD
4213 }
4214
4215 // ********** mul: mul $rn,$rm
4216
4217 sem_status
4218 mepcore1_sem_mul (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4219 {
4220 #define FLD(f) abuf->fields.sfmt_maddr.f
4221   sem_status status = SEM_STATUS_NORMAL;
4222   mepcore1_scache* abuf = sem;
4223   unsigned long long written = 0;
4224   PCADDR pc = abuf->addr;
4225   PCADDR npc = pc + 2;
4226
4227 {
4228   DI tmp_result;
4229 current_cpu->check_option_mul (pc);
4230   tmp_result = MULDI (EXTSIDI (* FLD (i_rn)), EXTSIDI (* FLD (i_rm)));
4231   {
4232     SI opval = SUBWORDDISI (tmp_result, 0);
4233     if (UNLIKELY(current_cpu->trace_result_p))
4234       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4235     current_cpu->h_csr_set (((UINT) 7), opval);
4236   }
4237   {
4238     SI opval = SUBWORDDISI (tmp_result, 1);
4239     if (UNLIKELY(current_cpu->trace_result_p))
4240       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4241     current_cpu->h_csr_set (((UINT) 8), opval);
4242   }
4243 }
4244
4245   current_cpu->done_insn (npc, status);
4246   return status;
4247 #undef FLD
4248 }
4249
4250 // ********** mulu: mulu $rn,$rm
4251
4252 sem_status
4253 mepcore1_sem_mulu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4254 {
4255 #define FLD(f) abuf->fields.sfmt_maddr.f
4256   sem_status status = SEM_STATUS_NORMAL;
4257   mepcore1_scache* abuf = sem;
4258   unsigned long long written = 0;
4259   PCADDR pc = abuf->addr;
4260   PCADDR npc = pc + 2;
4261
4262 {
4263   DI tmp_result;
4264 current_cpu->check_option_mul (pc);
4265   tmp_result = MULDI (ZEXTSIDI (* FLD (i_rn)), ZEXTSIDI (* FLD (i_rm)));
4266   {
4267     SI opval = SUBWORDDISI (tmp_result, 0);
4268     if (UNLIKELY(current_cpu->trace_result_p))
4269       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4270     current_cpu->h_csr_set (((UINT) 7), opval);
4271   }
4272   {
4273     SI opval = SUBWORDDISI (tmp_result, 1);
4274     if (UNLIKELY(current_cpu->trace_result_p))
4275       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4276     current_cpu->h_csr_set (((UINT) 8), opval);
4277   }
4278 }
4279
4280   current_cpu->done_insn (npc, status);
4281   return status;
4282 #undef FLD
4283 }
4284
4285 // ********** mulr: mulr $rn,$rm
4286
4287 sem_status
4288 mepcore1_sem_mulr (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4289 {
4290 #define FLD(f) abuf->fields.sfmt_maddr.f
4291   sem_status status = SEM_STATUS_NORMAL;
4292   mepcore1_scache* abuf = sem;
4293   unsigned long long written = 0;
4294   PCADDR pc = abuf->addr;
4295   PCADDR npc = pc + 2;
4296
4297 {
4298   DI tmp_result;
4299 current_cpu->check_option_mul (pc);
4300   tmp_result = MULDI (EXTSIDI (* FLD (i_rn)), EXTSIDI (* FLD (i_rm)));
4301   {
4302     SI opval = SUBWORDDISI (tmp_result, 0);
4303     if (UNLIKELY(current_cpu->trace_result_p))
4304       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4305     current_cpu->h_csr_set (((UINT) 7), opval);
4306   }
4307   {
4308     SI opval = SUBWORDDISI (tmp_result, 1);
4309     if (UNLIKELY(current_cpu->trace_result_p))
4310       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4311     current_cpu->h_csr_set (((UINT) 8), opval);
4312   }
4313   {
4314     SI opval = SUBWORDDISI (tmp_result, 1);
4315     if (UNLIKELY(current_cpu->trace_result_p))
4316       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4317     * FLD (i_rn) = opval;
4318   }
4319 }
4320
4321   current_cpu->done_insn (npc, status);
4322   return status;
4323 #undef FLD
4324 }
4325
4326 // ********** mulru: mulru $rn,$rm
4327
4328 sem_status
4329 mepcore1_sem_mulru (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4330 {
4331 #define FLD(f) abuf->fields.sfmt_maddr.f
4332   sem_status status = SEM_STATUS_NORMAL;
4333   mepcore1_scache* abuf = sem;
4334   unsigned long long written = 0;
4335   PCADDR pc = abuf->addr;
4336   PCADDR npc = pc + 2;
4337
4338 {
4339   DI tmp_result;
4340 current_cpu->check_option_mul (pc);
4341   tmp_result = MULDI (ZEXTSIDI (* FLD (i_rn)), ZEXTSIDI (* FLD (i_rm)));
4342   {
4343     SI opval = SUBWORDDISI (tmp_result, 0);
4344     if (UNLIKELY(current_cpu->trace_result_p))
4345       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4346     current_cpu->h_csr_set (((UINT) 7), opval);
4347   }
4348   {
4349     SI opval = SUBWORDDISI (tmp_result, 1);
4350     if (UNLIKELY(current_cpu->trace_result_p))
4351       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4352     current_cpu->h_csr_set (((UINT) 8), opval);
4353   }
4354   {
4355     SI opval = SUBWORDDISI (tmp_result, 1);
4356     if (UNLIKELY(current_cpu->trace_result_p))
4357       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4358     * FLD (i_rn) = opval;
4359   }
4360 }
4361
4362   current_cpu->done_insn (npc, status);
4363   return status;
4364 #undef FLD
4365 }
4366
4367 // ********** madd: madd $rn,$rm
4368
4369 sem_status
4370 mepcore1_sem_madd (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4371 {
4372 #define FLD(f) abuf->fields.sfmt_maddr.f
4373   sem_status status = SEM_STATUS_NORMAL;
4374   mepcore1_scache* abuf = sem;
4375   unsigned long long written = 0;
4376   PCADDR pc = abuf->addr;
4377   PCADDR npc = pc + 4;
4378
4379 {
4380   DI tmp_result;
4381 current_cpu->check_option_mul (pc);
4382   tmp_result = ORDI (SLLDI (ZEXTSIDI (current_cpu->h_csr_get (((UINT) 7))), 32), ZEXTSIDI (current_cpu->h_csr_get (((UINT) 8))));
4383   tmp_result = ADDDI (tmp_result, MULDI (EXTSIDI (* FLD (i_rn)), EXTSIDI (* FLD (i_rm))));
4384   {
4385     SI opval = SUBWORDDISI (tmp_result, 0);
4386     if (UNLIKELY(current_cpu->trace_result_p))
4387       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4388     current_cpu->h_csr_set (((UINT) 7), opval);
4389   }
4390   {
4391     SI opval = SUBWORDDISI (tmp_result, 1);
4392     if (UNLIKELY(current_cpu->trace_result_p))
4393       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4394     current_cpu->h_csr_set (((UINT) 8), opval);
4395   }
4396 }
4397
4398   current_cpu->done_insn (npc, status);
4399   return status;
4400 #undef FLD
4401 }
4402
4403 // ********** maddu: maddu $rn,$rm
4404
4405 sem_status
4406 mepcore1_sem_maddu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4407 {
4408 #define FLD(f) abuf->fields.sfmt_maddr.f
4409   sem_status status = SEM_STATUS_NORMAL;
4410   mepcore1_scache* abuf = sem;
4411   unsigned long long written = 0;
4412   PCADDR pc = abuf->addr;
4413   PCADDR npc = pc + 4;
4414
4415 {
4416   DI tmp_result;
4417 current_cpu->check_option_mul (pc);
4418   tmp_result = ORDI (SLLDI (ZEXTSIDI (current_cpu->h_csr_get (((UINT) 7))), 32), ZEXTSIDI (current_cpu->h_csr_get (((UINT) 8))));
4419   tmp_result = ADDDI (tmp_result, MULDI (ZEXTSIDI (* FLD (i_rn)), ZEXTSIDI (* FLD (i_rm))));
4420   {
4421     SI opval = SUBWORDDISI (tmp_result, 0);
4422     if (UNLIKELY(current_cpu->trace_result_p))
4423       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4424     current_cpu->h_csr_set (((UINT) 7), opval);
4425   }
4426   {
4427     SI opval = SUBWORDDISI (tmp_result, 1);
4428     if (UNLIKELY(current_cpu->trace_result_p))
4429       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4430     current_cpu->h_csr_set (((UINT) 8), opval);
4431   }
4432 }
4433
4434   current_cpu->done_insn (npc, status);
4435   return status;
4436 #undef FLD
4437 }
4438
4439 // ********** maddr: maddr $rn,$rm
4440
4441 sem_status
4442 mepcore1_sem_maddr (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4443 {
4444 #define FLD(f) abuf->fields.sfmt_maddr.f
4445   sem_status status = SEM_STATUS_NORMAL;
4446   mepcore1_scache* abuf = sem;
4447   unsigned long long written = 0;
4448   PCADDR pc = abuf->addr;
4449   PCADDR npc = pc + 4;
4450
4451 {
4452   DI tmp_result;
4453 current_cpu->check_option_mul (pc);
4454   tmp_result = ORDI (SLLDI (ZEXTSIDI (current_cpu->h_csr_get (((UINT) 7))), 32), ZEXTSIDI (current_cpu->h_csr_get (((UINT) 8))));
4455   tmp_result = ADDDI (tmp_result, MULDI (EXTSIDI (* FLD (i_rn)), EXTSIDI (* FLD (i_rm))));
4456   {
4457     SI opval = SUBWORDDISI (tmp_result, 0);
4458     if (UNLIKELY(current_cpu->trace_result_p))
4459       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4460     current_cpu->h_csr_set (((UINT) 7), opval);
4461   }
4462   {
4463     SI opval = SUBWORDDISI (tmp_result, 1);
4464     if (UNLIKELY(current_cpu->trace_result_p))
4465       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4466     current_cpu->h_csr_set (((UINT) 8), opval);
4467   }
4468   {
4469     SI opval = SUBWORDDISI (tmp_result, 1);
4470     if (UNLIKELY(current_cpu->trace_result_p))
4471       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4472     * FLD (i_rn) = opval;
4473   }
4474 }
4475
4476   current_cpu->done_insn (npc, status);
4477   return status;
4478 #undef FLD
4479 }
4480
4481 // ********** maddru: maddru $rn,$rm
4482
4483 sem_status
4484 mepcore1_sem_maddru (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4485 {
4486 #define FLD(f) abuf->fields.sfmt_maddr.f
4487   sem_status status = SEM_STATUS_NORMAL;
4488   mepcore1_scache* abuf = sem;
4489   unsigned long long written = 0;
4490   PCADDR pc = abuf->addr;
4491   PCADDR npc = pc + 4;
4492
4493 {
4494   DI tmp_result;
4495 current_cpu->check_option_mul (pc);
4496   tmp_result = ORDI (SLLDI (ZEXTSIDI (current_cpu->h_csr_get (((UINT) 7))), 32), ZEXTSIDI (current_cpu->h_csr_get (((UINT) 8))));
4497   tmp_result = ADDDI (tmp_result, MULDI (ZEXTSIDI (* FLD (i_rn)), ZEXTSIDI (* FLD (i_rm))));
4498   {
4499     SI opval = SUBWORDDISI (tmp_result, 0);
4500     if (UNLIKELY(current_cpu->trace_result_p))
4501       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4502     current_cpu->h_csr_set (((UINT) 7), opval);
4503   }
4504   {
4505     SI opval = SUBWORDDISI (tmp_result, 1);
4506     if (UNLIKELY(current_cpu->trace_result_p))
4507       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4508     current_cpu->h_csr_set (((UINT) 8), opval);
4509   }
4510   {
4511     SI opval = SUBWORDDISI (tmp_result, 1);
4512     if (UNLIKELY(current_cpu->trace_result_p))
4513       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4514     * FLD (i_rn) = opval;
4515   }
4516 }
4517
4518   current_cpu->done_insn (npc, status);
4519   return status;
4520 #undef FLD
4521 }
4522
4523 // ********** div: div $rn,$rm
4524
4525 sem_status
4526 mepcore1_sem_div (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4527 {
4528 #define FLD(f) abuf->fields.sfmt_maddr.f
4529   sem_status status = SEM_STATUS_NORMAL;
4530   mepcore1_scache* abuf = sem;
4531   unsigned long long written = 0;
4532   PCADDR pc = abuf->addr;
4533   PCADDR npc = pc + 2;
4534
4535 {
4536 current_cpu->check_option_div (pc);
4537 if (EQSI (* FLD (i_rm), 0)) {
4538   {
4539     USI opval = current_cpu->zdiv_exception (pc);
4540     written |= (1ULL << 5);
4541     if (UNLIKELY(current_cpu->trace_result_p))
4542       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4543     current_cpu->branch (opval, npc, status);
4544   }
4545 } else {
4546 if (ANDBI (EQSI (* FLD (i_rn), 0x80000000), EQSI (* FLD (i_rm), 0xffffffff))) {
4547 {
4548   {
4549     SI opval = 0x80000000;
4550     written |= (1ULL << 4);
4551     if (UNLIKELY(current_cpu->trace_result_p))
4552       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4553     current_cpu->h_csr_set (((UINT) 8), opval);
4554   }
4555   {
4556     SI opval = 0;
4557     written |= (1ULL << 3);
4558     if (UNLIKELY(current_cpu->trace_result_p))
4559       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4560     current_cpu->h_csr_set (((UINT) 7), opval);
4561   }
4562 }
4563 } else {
4564 {
4565   {
4566     SI opval = DIVSI (* FLD (i_rn), * FLD (i_rm));
4567     written |= (1ULL << 4);
4568     if (UNLIKELY(current_cpu->trace_result_p))
4569       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4570     current_cpu->h_csr_set (((UINT) 8), opval);
4571   }
4572   {
4573     SI opval = MODSI (* FLD (i_rn), * FLD (i_rm));
4574     written |= (1ULL << 3);
4575     if (UNLIKELY(current_cpu->trace_result_p))
4576       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4577     current_cpu->h_csr_set (((UINT) 7), opval);
4578   }
4579 }
4580 }
4581 }
4582 }
4583
4584   abuf->written = written;
4585   current_cpu->done_cti_insn (npc, status);
4586   return status;
4587 #undef FLD
4588 }
4589
4590 // ********** divu: divu $rn,$rm
4591
4592 sem_status
4593 mepcore1_sem_divu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4594 {
4595 #define FLD(f) abuf->fields.sfmt_maddr.f
4596   sem_status status = SEM_STATUS_NORMAL;
4597   mepcore1_scache* abuf = sem;
4598   unsigned long long written = 0;
4599   PCADDR pc = abuf->addr;
4600   PCADDR npc = pc + 2;
4601
4602 {
4603 current_cpu->check_option_div (pc);
4604 if (EQSI (* FLD (i_rm), 0)) {
4605   {
4606     USI opval = current_cpu->zdiv_exception (pc);
4607     written |= (1ULL << 5);
4608     if (UNLIKELY(current_cpu->trace_result_p))
4609       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4610     current_cpu->branch (opval, npc, status);
4611   }
4612 } else {
4613 {
4614   {
4615     SI opval = UDIVSI (* FLD (i_rn), * FLD (i_rm));
4616     written |= (1ULL << 4);
4617     if (UNLIKELY(current_cpu->trace_result_p))
4618       current_cpu->trace_stream << "csr" << '[' << ((UINT) 8) << ']' << ":=0x" << hex << opval << dec << "  ";
4619     current_cpu->h_csr_set (((UINT) 8), opval);
4620   }
4621   {
4622     SI opval = UMODSI (* FLD (i_rn), * FLD (i_rm));
4623     written |= (1ULL << 3);
4624     if (UNLIKELY(current_cpu->trace_result_p))
4625       current_cpu->trace_stream << "csr" << '[' << ((UINT) 7) << ']' << ":=0x" << hex << opval << dec << "  ";
4626     current_cpu->h_csr_set (((UINT) 7), opval);
4627   }
4628 }
4629 }
4630 }
4631
4632   abuf->written = written;
4633   current_cpu->done_cti_insn (npc, status);
4634   return status;
4635 #undef FLD
4636 }
4637
4638 // ********** dret: dret
4639
4640 sem_status
4641 mepcore1_sem_dret (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4642 {
4643 #define FLD(f) abuf->fields.sfmt_dret.f
4644   sem_status status = SEM_STATUS_NORMAL;
4645   mepcore1_scache* abuf = sem;
4646   unsigned long long written = 0;
4647   PCADDR pc = abuf->addr;
4648   PCADDR npc = pc + 2;
4649
4650 {
4651 current_cpu->check_option_debug (pc);
4652   {
4653     SI opval = ANDSI (current_cpu->h_csr_get (((UINT) 24)), INVSI (SLLSI (1, 15)));
4654     if (UNLIKELY(current_cpu->trace_result_p))
4655       current_cpu->trace_stream << "csr" << '[' << ((UINT) 24) << ']' << ":=0x" << hex << opval << dec << "  ";
4656     current_cpu->h_csr_set (((UINT) 24), opval);
4657   }
4658   {
4659     USI opval = current_cpu->h_csr_get (((UINT) 25));
4660     if (UNLIKELY(current_cpu->trace_result_p))
4661       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
4662     current_cpu->branch (opval, npc, status);
4663   }
4664 }
4665
4666   current_cpu->done_cti_insn (npc, status);
4667   return status;
4668 #undef FLD
4669 }
4670
4671 // ********** dbreak: dbreak
4672
4673 sem_status
4674 mepcore1_sem_dbreak (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4675 {
4676 #define FLD(f) abuf->fields.sfmt_dret.f
4677   sem_status status = SEM_STATUS_NORMAL;
4678   mepcore1_scache* abuf = sem;
4679   unsigned long long written = 0;
4680   PCADDR pc = abuf->addr;
4681   PCADDR npc = pc + 2;
4682
4683 {
4684 current_cpu->check_option_debug (pc);
4685   {
4686     SI opval = ORSI (current_cpu->h_csr_get (((UINT) 24)), 1);
4687     if (UNLIKELY(current_cpu->trace_result_p))
4688       current_cpu->trace_stream << "csr" << '[' << ((UINT) 24) << ']' << ":=0x" << hex << opval << dec << "  ";
4689     current_cpu->h_csr_set (((UINT) 24), opval);
4690   }
4691 }
4692
4693   current_cpu->done_insn (npc, status);
4694   return status;
4695 #undef FLD
4696 }
4697
4698 // ********** ldz: ldz $rn,$rm
4699
4700 sem_status
4701 mepcore1_sem_ldz (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4702 {
4703 #define FLD(f) abuf->fields.sfmt_add3x.f
4704   sem_status status = SEM_STATUS_NORMAL;
4705   mepcore1_scache* abuf = sem;
4706   unsigned long long written = 0;
4707   PCADDR pc = abuf->addr;
4708   PCADDR npc = pc + 4;
4709
4710 {
4711 current_cpu->check_option_ldz (pc);
4712   {
4713     SI opval = current_cpu->do_ldz (* FLD (i_rm));
4714     if (UNLIKELY(current_cpu->trace_result_p))
4715       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4716     * FLD (i_rn) = opval;
4717   }
4718 }
4719
4720   current_cpu->done_insn (npc, status);
4721   return status;
4722 #undef FLD
4723 }
4724
4725 // ********** abs: abs $rn,$rm
4726
4727 sem_status
4728 mepcore1_sem_abs (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4729 {
4730 #define FLD(f) abuf->fields.sfmt_fsft.f
4731   sem_status status = SEM_STATUS_NORMAL;
4732   mepcore1_scache* abuf = sem;
4733   unsigned long long written = 0;
4734   PCADDR pc = abuf->addr;
4735   PCADDR npc = pc + 4;
4736
4737 {
4738 current_cpu->check_option_abs (pc);
4739   {
4740     SI opval = ABSSI (SUBSI (* FLD (i_rn), * FLD (i_rm)));
4741     if (UNLIKELY(current_cpu->trace_result_p))
4742       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4743     * FLD (i_rn) = opval;
4744   }
4745 }
4746
4747   current_cpu->done_insn (npc, status);
4748   return status;
4749 #undef FLD
4750 }
4751
4752 // ********** ave: ave $rn,$rm
4753
4754 sem_status
4755 mepcore1_sem_ave (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4756 {
4757 #define FLD(f) abuf->fields.sfmt_fsft.f
4758   sem_status status = SEM_STATUS_NORMAL;
4759   mepcore1_scache* abuf = sem;
4760   unsigned long long written = 0;
4761   PCADDR pc = abuf->addr;
4762   PCADDR npc = pc + 4;
4763
4764 {
4765 current_cpu->check_option_ave (pc);
4766   {
4767     SI opval = SRASI (ADDSI (ADDSI (* FLD (i_rn), * FLD (i_rm)), 1), 1);
4768     if (UNLIKELY(current_cpu->trace_result_p))
4769       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4770     * FLD (i_rn) = opval;
4771   }
4772 }
4773
4774   current_cpu->done_insn (npc, status);
4775   return status;
4776 #undef FLD
4777 }
4778
4779 // ********** min: min $rn,$rm
4780
4781 sem_status
4782 mepcore1_sem_min (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4783 {
4784 #define FLD(f) abuf->fields.sfmt_fsft.f
4785   sem_status status = SEM_STATUS_NORMAL;
4786   mepcore1_scache* abuf = sem;
4787   unsigned long long written = 0;
4788   PCADDR pc = abuf->addr;
4789   PCADDR npc = pc + 4;
4790
4791 {
4792 current_cpu->check_option_minmax (pc);
4793 if (GTSI (* FLD (i_rn), * FLD (i_rm))) {
4794   {
4795     SI opval = * FLD (i_rm);
4796     written |= (1ULL << 3);
4797     if (UNLIKELY(current_cpu->trace_result_p))
4798       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4799     * FLD (i_rn) = opval;
4800   }
4801 }
4802 }
4803
4804   abuf->written = written;
4805   current_cpu->done_insn (npc, status);
4806   return status;
4807 #undef FLD
4808 }
4809
4810 // ********** max: max $rn,$rm
4811
4812 sem_status
4813 mepcore1_sem_max (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4814 {
4815 #define FLD(f) abuf->fields.sfmt_fsft.f
4816   sem_status status = SEM_STATUS_NORMAL;
4817   mepcore1_scache* abuf = sem;
4818   unsigned long long written = 0;
4819   PCADDR pc = abuf->addr;
4820   PCADDR npc = pc + 4;
4821
4822 {
4823 current_cpu->check_option_minmax (pc);
4824 if (LTSI (* FLD (i_rn), * FLD (i_rm))) {
4825   {
4826     SI opval = * FLD (i_rm);
4827     written |= (1ULL << 3);
4828     if (UNLIKELY(current_cpu->trace_result_p))
4829       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4830     * FLD (i_rn) = opval;
4831   }
4832 }
4833 }
4834
4835   abuf->written = written;
4836   current_cpu->done_insn (npc, status);
4837   return status;
4838 #undef FLD
4839 }
4840
4841 // ********** minu: minu $rn,$rm
4842
4843 sem_status
4844 mepcore1_sem_minu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4845 {
4846 #define FLD(f) abuf->fields.sfmt_fsft.f
4847   sem_status status = SEM_STATUS_NORMAL;
4848   mepcore1_scache* abuf = sem;
4849   unsigned long long written = 0;
4850   PCADDR pc = abuf->addr;
4851   PCADDR npc = pc + 4;
4852
4853 {
4854 current_cpu->check_option_minmax (pc);
4855 if (GTUSI (* FLD (i_rn), * FLD (i_rm))) {
4856   {
4857     SI opval = * FLD (i_rm);
4858     written |= (1ULL << 3);
4859     if (UNLIKELY(current_cpu->trace_result_p))
4860       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4861     * FLD (i_rn) = opval;
4862   }
4863 }
4864 }
4865
4866   abuf->written = written;
4867   current_cpu->done_insn (npc, status);
4868   return status;
4869 #undef FLD
4870 }
4871
4872 // ********** maxu: maxu $rn,$rm
4873
4874 sem_status
4875 mepcore1_sem_maxu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4876 {
4877 #define FLD(f) abuf->fields.sfmt_fsft.f
4878   sem_status status = SEM_STATUS_NORMAL;
4879   mepcore1_scache* abuf = sem;
4880   unsigned long long written = 0;
4881   PCADDR pc = abuf->addr;
4882   PCADDR npc = pc + 4;
4883
4884 {
4885 current_cpu->check_option_minmax (pc);
4886 if (LTUSI (* FLD (i_rn), * FLD (i_rm))) {
4887   {
4888     SI opval = * FLD (i_rm);
4889     written |= (1ULL << 3);
4890     if (UNLIKELY(current_cpu->trace_result_p))
4891       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4892     * FLD (i_rn) = opval;
4893   }
4894 }
4895 }
4896
4897   abuf->written = written;
4898   current_cpu->done_insn (npc, status);
4899   return status;
4900 #undef FLD
4901 }
4902
4903 // ********** clip: clip $rn,$cimm5
4904
4905 sem_status
4906 mepcore1_sem_clip (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4907 {
4908 #define FLD(f) abuf->fields.sfmt_clip.f
4909   sem_status status = SEM_STATUS_NORMAL;
4910   mepcore1_scache* abuf = sem;
4911   unsigned long long written = 0;
4912   PCADDR pc = abuf->addr;
4913   PCADDR npc = pc + 4;
4914
4915 {
4916   SI tmp_min;
4917   SI tmp_max;
4918 current_cpu->check_option_clip (pc);
4919   tmp_max = SUBSI (SLLSI (1, SUBSI (FLD (f_5u24), 1)), 1);
4920   tmp_min = NEGSI (SLLSI (1, SUBSI (FLD (f_5u24), 1)));
4921 if (EQSI (FLD (f_5u24), 0)) {
4922   {
4923     SI opval = 0;
4924     written |= (1ULL << 3);
4925     if (UNLIKELY(current_cpu->trace_result_p))
4926       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4927     * FLD (i_rn) = opval;
4928   }
4929 }
4930  else if (GTSI (* FLD (i_rn), tmp_max)) {
4931   {
4932     SI opval = tmp_max;
4933     written |= (1ULL << 3);
4934     if (UNLIKELY(current_cpu->trace_result_p))
4935       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4936     * FLD (i_rn) = opval;
4937   }
4938 }
4939  else if (LTSI (* FLD (i_rn), tmp_min)) {
4940   {
4941     SI opval = tmp_min;
4942     written |= (1ULL << 3);
4943     if (UNLIKELY(current_cpu->trace_result_p))
4944       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4945     * FLD (i_rn) = opval;
4946   }
4947 }
4948 }
4949
4950   abuf->written = written;
4951   current_cpu->done_insn (npc, status);
4952   return status;
4953 #undef FLD
4954 }
4955
4956 // ********** clipu: clipu $rn,$cimm5
4957
4958 sem_status
4959 mepcore1_sem_clipu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
4960 {
4961 #define FLD(f) abuf->fields.sfmt_clip.f
4962   sem_status status = SEM_STATUS_NORMAL;
4963   mepcore1_scache* abuf = sem;
4964   unsigned long long written = 0;
4965   PCADDR pc = abuf->addr;
4966   PCADDR npc = pc + 4;
4967
4968 {
4969   SI tmp_max;
4970 current_cpu->check_option_clip (pc);
4971   tmp_max = SUBSI (SLLSI (1, FLD (f_5u24)), 1);
4972 if (EQSI (FLD (f_5u24), 0)) {
4973   {
4974     SI opval = 0;
4975     written |= (1ULL << 3);
4976     if (UNLIKELY(current_cpu->trace_result_p))
4977       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4978     * FLD (i_rn) = opval;
4979   }
4980 }
4981  else if (GTSI (* FLD (i_rn), tmp_max)) {
4982   {
4983     SI opval = tmp_max;
4984     written |= (1ULL << 3);
4985     if (UNLIKELY(current_cpu->trace_result_p))
4986       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4987     * FLD (i_rn) = opval;
4988   }
4989 }
4990  else if (LTSI (* FLD (i_rn), 0)) {
4991   {
4992     SI opval = 0;
4993     written |= (1ULL << 3);
4994     if (UNLIKELY(current_cpu->trace_result_p))
4995       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
4996     * FLD (i_rn) = opval;
4997   }
4998 }
4999 }
5000
5001   abuf->written = written;
5002   current_cpu->done_insn (npc, status);
5003   return status;
5004 #undef FLD
5005 }
5006
5007 // ********** sadd: sadd $rn,$rm
5008
5009 sem_status
5010 mepcore1_sem_sadd (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5011 {
5012 #define FLD(f) abuf->fields.sfmt_fsft.f
5013   sem_status status = SEM_STATUS_NORMAL;
5014   mepcore1_scache* abuf = sem;
5015   unsigned long long written = 0;
5016   PCADDR pc = abuf->addr;
5017   PCADDR npc = pc + 4;
5018
5019 {
5020 current_cpu->check_option_sat (pc);
5021 if (ADDOFSI (* FLD (i_rn), * FLD (i_rm), 0)) {
5022 if (LTSI (* FLD (i_rn), 0)) {
5023   {
5024     SI opval = NEGSI (SLLSI (1, 31));
5025     written |= (1ULL << 3);
5026     if (UNLIKELY(current_cpu->trace_result_p))
5027       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5028     * FLD (i_rn) = opval;
5029   }
5030 } else {
5031   {
5032     SI opval = SUBSI (SLLSI (1, 31), 1);
5033     written |= (1ULL << 3);
5034     if (UNLIKELY(current_cpu->trace_result_p))
5035       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5036     * FLD (i_rn) = opval;
5037   }
5038 }
5039 } else {
5040   {
5041     SI opval = ADDSI (* FLD (i_rn), * FLD (i_rm));
5042     written |= (1ULL << 3);
5043     if (UNLIKELY(current_cpu->trace_result_p))
5044       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5045     * FLD (i_rn) = opval;
5046   }
5047 }
5048 }
5049
5050   abuf->written = written;
5051   current_cpu->done_insn (npc, status);
5052   return status;
5053 #undef FLD
5054 }
5055
5056 // ********** ssub: ssub $rn,$rm
5057
5058 sem_status
5059 mepcore1_sem_ssub (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5060 {
5061 #define FLD(f) abuf->fields.sfmt_fsft.f
5062   sem_status status = SEM_STATUS_NORMAL;
5063   mepcore1_scache* abuf = sem;
5064   unsigned long long written = 0;
5065   PCADDR pc = abuf->addr;
5066   PCADDR npc = pc + 4;
5067
5068 {
5069 current_cpu->check_option_sat (pc);
5070 if (SUBOFSI (* FLD (i_rn), * FLD (i_rm), 0)) {
5071 if (LTSI (* FLD (i_rn), 0)) {
5072   {
5073     SI opval = NEGSI (SLLSI (1, 31));
5074     written |= (1ULL << 3);
5075     if (UNLIKELY(current_cpu->trace_result_p))
5076       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5077     * FLD (i_rn) = opval;
5078   }
5079 } else {
5080   {
5081     SI opval = SUBSI (SLLSI (1, 31), 1);
5082     written |= (1ULL << 3);
5083     if (UNLIKELY(current_cpu->trace_result_p))
5084       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5085     * FLD (i_rn) = opval;
5086   }
5087 }
5088 } else {
5089   {
5090     SI opval = SUBSI (* FLD (i_rn), * FLD (i_rm));
5091     written |= (1ULL << 3);
5092     if (UNLIKELY(current_cpu->trace_result_p))
5093       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5094     * FLD (i_rn) = opval;
5095   }
5096 }
5097 }
5098
5099   abuf->written = written;
5100   current_cpu->done_insn (npc, status);
5101   return status;
5102 #undef FLD
5103 }
5104
5105 // ********** saddu: saddu $rn,$rm
5106
5107 sem_status
5108 mepcore1_sem_saddu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5109 {
5110 #define FLD(f) abuf->fields.sfmt_fsft.f
5111   sem_status status = SEM_STATUS_NORMAL;
5112   mepcore1_scache* abuf = sem;
5113   unsigned long long written = 0;
5114   PCADDR pc = abuf->addr;
5115   PCADDR npc = pc + 4;
5116
5117 {
5118 current_cpu->check_option_sat (pc);
5119 if (ADDCFSI (* FLD (i_rn), * FLD (i_rm), 0)) {
5120   {
5121     SI opval = INVSI (0);
5122     written |= (1ULL << 3);
5123     if (UNLIKELY(current_cpu->trace_result_p))
5124       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5125     * FLD (i_rn) = opval;
5126   }
5127 } else {
5128   {
5129     SI opval = ADDSI (* FLD (i_rn), * FLD (i_rm));
5130     written |= (1ULL << 3);
5131     if (UNLIKELY(current_cpu->trace_result_p))
5132       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5133     * FLD (i_rn) = opval;
5134   }
5135 }
5136 }
5137
5138   abuf->written = written;
5139   current_cpu->done_insn (npc, status);
5140   return status;
5141 #undef FLD
5142 }
5143
5144 // ********** ssubu: ssubu $rn,$rm
5145
5146 sem_status
5147 mepcore1_sem_ssubu (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5148 {
5149 #define FLD(f) abuf->fields.sfmt_fsft.f
5150   sem_status status = SEM_STATUS_NORMAL;
5151   mepcore1_scache* abuf = sem;
5152   unsigned long long written = 0;
5153   PCADDR pc = abuf->addr;
5154   PCADDR npc = pc + 4;
5155
5156 {
5157 current_cpu->check_option_sat (pc);
5158 if (SUBCFSI (* FLD (i_rn), * FLD (i_rm), 0)) {
5159   {
5160     SI opval = 0;
5161     written |= (1ULL << 3);
5162     if (UNLIKELY(current_cpu->trace_result_p))
5163       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5164     * FLD (i_rn) = opval;
5165   }
5166 } else {
5167   {
5168     SI opval = SUBSI (* FLD (i_rn), * FLD (i_rm));
5169     written |= (1ULL << 3);
5170     if (UNLIKELY(current_cpu->trace_result_p))
5171       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rn) << ']' << ":=0x" << hex << opval << dec << "  ";
5172     * FLD (i_rn) = opval;
5173   }
5174 }
5175 }
5176
5177   abuf->written = written;
5178   current_cpu->done_insn (npc, status);
5179   return status;
5180 #undef FLD
5181 }
5182
5183 // ********** swcp: swcp $crn,($rma)
5184
5185 sem_status
5186 mepcore1_sem_swcp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5187 {
5188 #define FLD(f) abuf->fields.sfmt_swcp16.f
5189   sem_status status = SEM_STATUS_NORMAL;
5190   mepcore1_scache* abuf = sem;
5191   unsigned long long written = 0;
5192   PCADDR pc = abuf->addr;
5193   PCADDR npc = pc + 2;
5194
5195 {
5196 current_cpu->check_option_cp (pc);
5197 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (3)));
5198   {
5199     SI opval = current_cpu->h_cr_get (FLD (f_crn));
5200     if (UNLIKELY(current_cpu->trace_result_p))
5201       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
5202     current_cpu->SETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)), opval);
5203   }
5204 }
5205
5206   current_cpu->done_insn (npc, status);
5207   return status;
5208 #undef FLD
5209 }
5210
5211 // ********** lwcp: lwcp $crn,($rma)
5212
5213 sem_status
5214 mepcore1_sem_lwcp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5215 {
5216 #define FLD(f) abuf->fields.sfmt_swcp16.f
5217   sem_status status = SEM_STATUS_NORMAL;
5218   mepcore1_scache* abuf = sem;
5219   unsigned long long written = 0;
5220   PCADDR pc = abuf->addr;
5221   PCADDR npc = pc + 2;
5222
5223 {
5224 current_cpu->check_option_cp (pc);
5225   {
5226     SI opval = current_cpu->GETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)));
5227     if (UNLIKELY(current_cpu->trace_result_p))
5228       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5229     current_cpu->h_cr_set (FLD (f_crn), opval);
5230   }
5231 }
5232
5233   current_cpu->done_insn (npc, status);
5234   return status;
5235 #undef FLD
5236 }
5237
5238 // ********** smcp: smcp $crn64,($rma)
5239
5240 sem_status
5241 mepcore1_sem_smcp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5242 {
5243 #define FLD(f) abuf->fields.sfmt_swcp16.f
5244   sem_status status = SEM_STATUS_NORMAL;
5245   mepcore1_scache* abuf = sem;
5246   unsigned long long written = 0;
5247   PCADDR pc = abuf->addr;
5248   PCADDR npc = pc + 2;
5249
5250 {
5251 current_cpu->check_option_cp (pc);
5252 current_cpu->check_option_cp64 (pc);
5253 current_cpu->check_write_to_text (* FLD (i_rma));
5254 current_cpu->do_smcp (* FLD (i_rma), current_cpu->hardware.h_cr64[FLD (f_crn)], pc);
5255 }
5256
5257   current_cpu->done_insn (npc, status);
5258   return status;
5259 #undef FLD
5260 }
5261
5262 // ********** lmcp: lmcp $crn64,($rma)
5263
5264 sem_status
5265 mepcore1_sem_lmcp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5266 {
5267 #define FLD(f) abuf->fields.sfmt_swcp16.f
5268   sem_status status = SEM_STATUS_NORMAL;
5269   mepcore1_scache* abuf = sem;
5270   unsigned long long written = 0;
5271   PCADDR pc = abuf->addr;
5272   PCADDR npc = pc + 2;
5273
5274 {
5275 current_cpu->check_option_cp (pc);
5276 current_cpu->check_option_cp64 (pc);
5277   {
5278     DI opval = current_cpu->do_lmcp (* FLD (i_rma), pc);
5279     if (UNLIKELY(current_cpu->trace_result_p))
5280       current_cpu->trace_stream << "cr64" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5281     current_cpu->h_cr64_set (FLD (f_crn), opval);
5282   }
5283 }
5284
5285   current_cpu->done_insn (npc, status);
5286   return status;
5287 #undef FLD
5288 }
5289
5290 // ********** swcpi: swcpi $crn,($rma+)
5291
5292 sem_status
5293 mepcore1_sem_swcpi (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5294 {
5295 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5296   sem_status status = SEM_STATUS_NORMAL;
5297   mepcore1_scache* abuf = sem;
5298   unsigned long long written = 0;
5299   PCADDR pc = abuf->addr;
5300   PCADDR npc = pc + 2;
5301
5302 {
5303 current_cpu->check_option_cp (pc);
5304 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (3)));
5305   {
5306     SI opval = current_cpu->h_cr_get (FLD (f_crn));
5307     if (UNLIKELY(current_cpu->trace_result_p))
5308       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
5309     current_cpu->SETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)), opval);
5310   }
5311   {
5312     SI opval = ADDSI (* FLD (i_rma), 4);
5313     if (UNLIKELY(current_cpu->trace_result_p))
5314       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5315     * FLD (i_rma) = opval;
5316   }
5317 }
5318
5319   current_cpu->done_insn (npc, status);
5320   return status;
5321 #undef FLD
5322 }
5323
5324 // ********** lwcpi: lwcpi $crn,($rma+)
5325
5326 sem_status
5327 mepcore1_sem_lwcpi (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5328 {
5329 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5330   sem_status status = SEM_STATUS_NORMAL;
5331   mepcore1_scache* abuf = sem;
5332   unsigned long long written = 0;
5333   PCADDR pc = abuf->addr;
5334   PCADDR npc = pc + 2;
5335
5336 {
5337 current_cpu->check_option_cp (pc);
5338   {
5339     SI opval = current_cpu->GETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)));
5340     if (UNLIKELY(current_cpu->trace_result_p))
5341       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5342     current_cpu->h_cr_set (FLD (f_crn), opval);
5343   }
5344   {
5345     SI opval = ADDSI (* FLD (i_rma), 4);
5346     if (UNLIKELY(current_cpu->trace_result_p))
5347       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5348     * FLD (i_rma) = opval;
5349   }
5350 }
5351
5352   current_cpu->done_insn (npc, status);
5353   return status;
5354 #undef FLD
5355 }
5356
5357 // ********** smcpi: smcpi $crn64,($rma+)
5358
5359 sem_status
5360 mepcore1_sem_smcpi (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5361 {
5362 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5363   sem_status status = SEM_STATUS_NORMAL;
5364   mepcore1_scache* abuf = sem;
5365   unsigned long long written = 0;
5366   PCADDR pc = abuf->addr;
5367   PCADDR npc = pc + 2;
5368
5369 {
5370 current_cpu->check_option_cp (pc);
5371 current_cpu->check_option_cp64 (pc);
5372 current_cpu->check_write_to_text (* FLD (i_rma));
5373 current_cpu->do_smcpi (FLD (f_rm), current_cpu->hardware.h_cr64[FLD (f_crn)], pc);
5374   {
5375     SI opval = * FLD (i_rma);
5376     if (UNLIKELY(current_cpu->trace_result_p))
5377       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5378     * FLD (i_rma) = opval;
5379   }
5380 }
5381
5382   current_cpu->done_insn (npc, status);
5383   return status;
5384 #undef FLD
5385 }
5386
5387 // ********** lmcpi: lmcpi $crn64,($rma+)
5388
5389 sem_status
5390 mepcore1_sem_lmcpi (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5391 {
5392 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5393   sem_status status = SEM_STATUS_NORMAL;
5394   mepcore1_scache* abuf = sem;
5395   unsigned long long written = 0;
5396   PCADDR pc = abuf->addr;
5397   PCADDR npc = pc + 2;
5398
5399 {
5400 current_cpu->check_option_cp (pc);
5401 current_cpu->check_option_cp64 (pc);
5402   {
5403     DI opval = current_cpu->do_lmcpi (FLD (f_rm), pc);
5404     if (UNLIKELY(current_cpu->trace_result_p))
5405       current_cpu->trace_stream << "cr64" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5406     current_cpu->h_cr64_set (FLD (f_crn), opval);
5407   }
5408   {
5409     SI opval = * FLD (i_rma);
5410     if (UNLIKELY(current_cpu->trace_result_p))
5411       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5412     * FLD (i_rma) = opval;
5413   }
5414 }
5415
5416   current_cpu->done_insn (npc, status);
5417   return status;
5418 #undef FLD
5419 }
5420
5421 // ********** swcp16: swcp $crn,$sdisp16($rma)
5422
5423 sem_status
5424 mepcore1_sem_swcp16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5425 {
5426 #define FLD(f) abuf->fields.sfmt_swcp16.f
5427   sem_status status = SEM_STATUS_NORMAL;
5428   mepcore1_scache* abuf = sem;
5429   unsigned long long written = 0;
5430   PCADDR pc = abuf->addr;
5431   PCADDR npc = pc + 4;
5432
5433 {
5434 current_cpu->check_option_cp (pc);
5435   {
5436     SI opval = current_cpu->h_cr_get (FLD (f_crn));
5437     if (UNLIKELY(current_cpu->trace_result_p))
5438       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (ADDSI (* FLD (i_rma), FLD (f_16s16)), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
5439     current_cpu->SETMEMSI (pc, ANDSI (ADDSI (* FLD (i_rma), FLD (f_16s16)), INVSI (3)), opval);
5440   }
5441 }
5442
5443   current_cpu->done_insn (npc, status);
5444   return status;
5445 #undef FLD
5446 }
5447
5448 // ********** lwcp16: lwcp $crn,$sdisp16($rma)
5449
5450 sem_status
5451 mepcore1_sem_lwcp16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5452 {
5453 #define FLD(f) abuf->fields.sfmt_swcp16.f
5454   sem_status status = SEM_STATUS_NORMAL;
5455   mepcore1_scache* abuf = sem;
5456   unsigned long long written = 0;
5457   PCADDR pc = abuf->addr;
5458   PCADDR npc = pc + 4;
5459
5460 {
5461 current_cpu->check_option_cp (pc);
5462   {
5463     SI opval = current_cpu->GETMEMSI (pc, ANDSI (ADDSI (* FLD (i_rma), FLD (f_16s16)), INVSI (3)));
5464     if (UNLIKELY(current_cpu->trace_result_p))
5465       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5466     current_cpu->h_cr_set (FLD (f_crn), opval);
5467   }
5468 }
5469
5470   current_cpu->done_insn (npc, status);
5471   return status;
5472 #undef FLD
5473 }
5474
5475 // ********** smcp16: smcp $crn64,$sdisp16($rma)
5476
5477 sem_status
5478 mepcore1_sem_smcp16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5479 {
5480 #define FLD(f) abuf->fields.sfmt_swcp16.f
5481   sem_status status = SEM_STATUS_NORMAL;
5482   mepcore1_scache* abuf = sem;
5483   unsigned long long written = 0;
5484   PCADDR pc = abuf->addr;
5485   PCADDR npc = pc + 4;
5486
5487 {
5488 current_cpu->check_option_cp (pc);
5489 current_cpu->check_option_cp64 (pc);
5490 current_cpu->do_smcp16 (* FLD (i_rma), FLD (f_16s16), current_cpu->hardware.h_cr64[FLD (f_crn)], pc);
5491 }
5492
5493   current_cpu->done_insn (npc, status);
5494   return status;
5495 #undef FLD
5496 }
5497
5498 // ********** lmcp16: lmcp $crn64,$sdisp16($rma)
5499
5500 sem_status
5501 mepcore1_sem_lmcp16 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5502 {
5503 #define FLD(f) abuf->fields.sfmt_swcp16.f
5504   sem_status status = SEM_STATUS_NORMAL;
5505   mepcore1_scache* abuf = sem;
5506   unsigned long long written = 0;
5507   PCADDR pc = abuf->addr;
5508   PCADDR npc = pc + 4;
5509
5510 {
5511 current_cpu->check_option_cp (pc);
5512 current_cpu->check_option_cp64 (pc);
5513   {
5514     DI opval = current_cpu->do_lmcp16 (* FLD (i_rma), FLD (f_16s16), pc);
5515     if (UNLIKELY(current_cpu->trace_result_p))
5516       current_cpu->trace_stream << "cr64" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5517     current_cpu->h_cr64_set (FLD (f_crn), opval);
5518   }
5519 }
5520
5521   current_cpu->done_insn (npc, status);
5522   return status;
5523 #undef FLD
5524 }
5525
5526 // ********** sbcpa: sbcpa $crn,($rma+),$cdisp10
5527
5528 sem_status
5529 mepcore1_sem_sbcpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5530 {
5531 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5532   sem_status status = SEM_STATUS_NORMAL;
5533   mepcore1_scache* abuf = sem;
5534   unsigned long long written = 0;
5535   PCADDR pc = abuf->addr;
5536   PCADDR npc = pc + 4;
5537
5538 {
5539 current_cpu->check_option_cp (pc);
5540 current_cpu->check_write_to_text (* FLD (i_rma));
5541   {
5542     QI opval = ANDSI (current_cpu->h_cr_get (FLD (f_crn)), 255);
5543     if (UNLIKELY(current_cpu->trace_result_p))
5544       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) * FLD (i_rma) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
5545     current_cpu->SETMEMQI (pc, * FLD (i_rma), opval);
5546   }
5547   {
5548     SI opval = ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10)));
5549     if (UNLIKELY(current_cpu->trace_result_p))
5550       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5551     * FLD (i_rma) = opval;
5552   }
5553 }
5554
5555   current_cpu->done_insn (npc, status);
5556   return status;
5557 #undef FLD
5558 }
5559
5560 // ********** lbcpa: lbcpa $crn,($rma+),$cdisp10
5561
5562 sem_status
5563 mepcore1_sem_lbcpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5564 {
5565 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5566   sem_status status = SEM_STATUS_NORMAL;
5567   mepcore1_scache* abuf = sem;
5568   unsigned long long written = 0;
5569   PCADDR pc = abuf->addr;
5570   PCADDR npc = pc + 4;
5571
5572 {
5573 current_cpu->check_option_cp (pc);
5574   {
5575     SI opval = EXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_rma)));
5576     if (UNLIKELY(current_cpu->trace_result_p))
5577       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5578     current_cpu->h_cr_set (FLD (f_crn), opval);
5579   }
5580   {
5581     SI opval = ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10)));
5582     if (UNLIKELY(current_cpu->trace_result_p))
5583       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5584     * FLD (i_rma) = opval;
5585   }
5586 }
5587
5588   current_cpu->done_insn (npc, status);
5589   return status;
5590 #undef FLD
5591 }
5592
5593 // ********** shcpa: shcpa $crn,($rma+),$cdisp10a2
5594
5595 sem_status
5596 mepcore1_sem_shcpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5597 {
5598 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5599   sem_status status = SEM_STATUS_NORMAL;
5600   mepcore1_scache* abuf = sem;
5601   unsigned long long written = 0;
5602   PCADDR pc = abuf->addr;
5603   PCADDR npc = pc + 4;
5604
5605 {
5606 current_cpu->check_option_cp (pc);
5607 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (1)));
5608   {
5609     HI opval = ANDSI (current_cpu->h_cr_get (FLD (f_crn)), 65535);
5610     if (UNLIKELY(current_cpu->trace_result_p))
5611       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (1)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
5612     current_cpu->SETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1)), opval);
5613   }
5614   {
5615     SI opval = ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10)));
5616     if (UNLIKELY(current_cpu->trace_result_p))
5617       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5618     * FLD (i_rma) = opval;
5619   }
5620 }
5621
5622   current_cpu->done_insn (npc, status);
5623   return status;
5624 #undef FLD
5625 }
5626
5627 // ********** lhcpa: lhcpa $crn,($rma+),$cdisp10a2
5628
5629 sem_status
5630 mepcore1_sem_lhcpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5631 {
5632 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5633   sem_status status = SEM_STATUS_NORMAL;
5634   mepcore1_scache* abuf = sem;
5635   unsigned long long written = 0;
5636   PCADDR pc = abuf->addr;
5637   PCADDR npc = pc + 4;
5638
5639 {
5640 current_cpu->check_option_cp (pc);
5641   {
5642     SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1))));
5643     if (UNLIKELY(current_cpu->trace_result_p))
5644       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5645     current_cpu->h_cr_set (FLD (f_crn), opval);
5646   }
5647   {
5648     SI opval = ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10)));
5649     if (UNLIKELY(current_cpu->trace_result_p))
5650       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5651     * FLD (i_rma) = opval;
5652   }
5653 }
5654
5655   current_cpu->done_insn (npc, status);
5656   return status;
5657 #undef FLD
5658 }
5659
5660 // ********** swcpa: swcpa $crn,($rma+),$cdisp10a4
5661
5662 sem_status
5663 mepcore1_sem_swcpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5664 {
5665 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5666   sem_status status = SEM_STATUS_NORMAL;
5667   mepcore1_scache* abuf = sem;
5668   unsigned long long written = 0;
5669   PCADDR pc = abuf->addr;
5670   PCADDR npc = pc + 4;
5671
5672 {
5673 current_cpu->check_option_cp (pc);
5674 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (3)));
5675   {
5676     SI opval = current_cpu->h_cr_get (FLD (f_crn));
5677     if (UNLIKELY(current_cpu->trace_result_p))
5678       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
5679     current_cpu->SETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)), opval);
5680   }
5681   {
5682     SI opval = ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10)));
5683     if (UNLIKELY(current_cpu->trace_result_p))
5684       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5685     * FLD (i_rma) = opval;
5686   }
5687 }
5688
5689   current_cpu->done_insn (npc, status);
5690   return status;
5691 #undef FLD
5692 }
5693
5694 // ********** lwcpa: lwcpa $crn,($rma+),$cdisp10a4
5695
5696 sem_status
5697 mepcore1_sem_lwcpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5698 {
5699 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5700   sem_status status = SEM_STATUS_NORMAL;
5701   mepcore1_scache* abuf = sem;
5702   unsigned long long written = 0;
5703   PCADDR pc = abuf->addr;
5704   PCADDR npc = pc + 4;
5705
5706 {
5707 current_cpu->check_option_cp (pc);
5708   {
5709     SI opval = current_cpu->GETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)));
5710     if (UNLIKELY(current_cpu->trace_result_p))
5711       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5712     current_cpu->h_cr_set (FLD (f_crn), opval);
5713   }
5714   {
5715     SI opval = ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10)));
5716     if (UNLIKELY(current_cpu->trace_result_p))
5717       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5718     * FLD (i_rma) = opval;
5719   }
5720 }
5721
5722   current_cpu->done_insn (npc, status);
5723   return status;
5724 #undef FLD
5725 }
5726
5727 // ********** smcpa: smcpa $crn64,($rma+),$cdisp10a8
5728
5729 sem_status
5730 mepcore1_sem_smcpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5731 {
5732 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5733   sem_status status = SEM_STATUS_NORMAL;
5734   mepcore1_scache* abuf = sem;
5735   unsigned long long written = 0;
5736   PCADDR pc = abuf->addr;
5737   PCADDR npc = pc + 4;
5738
5739 {
5740 current_cpu->check_option_cp (pc);
5741 current_cpu->check_option_cp64 (pc);
5742 current_cpu->check_write_to_text (* FLD (i_rma));
5743 current_cpu->do_smcpa (FLD (f_rm), FLD (f_cdisp10), current_cpu->hardware.h_cr64[FLD (f_crn)], pc);
5744   {
5745     SI opval = * FLD (i_rma);
5746     if (UNLIKELY(current_cpu->trace_result_p))
5747       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5748     * FLD (i_rma) = opval;
5749   }
5750 }
5751
5752   current_cpu->done_insn (npc, status);
5753   return status;
5754 #undef FLD
5755 }
5756
5757 // ********** lmcpa: lmcpa $crn64,($rma+),$cdisp10a8
5758
5759 sem_status
5760 mepcore1_sem_lmcpa (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5761 {
5762 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
5763   sem_status status = SEM_STATUS_NORMAL;
5764   mepcore1_scache* abuf = sem;
5765   unsigned long long written = 0;
5766   PCADDR pc = abuf->addr;
5767   PCADDR npc = pc + 4;
5768
5769 {
5770 current_cpu->check_option_cp (pc);
5771 current_cpu->check_option_cp64 (pc);
5772   {
5773     DI opval = current_cpu->do_lmcpa (FLD (f_rm), FLD (f_cdisp10), pc);
5774     if (UNLIKELY(current_cpu->trace_result_p))
5775       current_cpu->trace_stream << "cr64" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5776     current_cpu->h_cr64_set (FLD (f_crn), opval);
5777   }
5778   {
5779     SI opval = * FLD (i_rma);
5780     if (UNLIKELY(current_cpu->trace_result_p))
5781       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5782     * FLD (i_rma) = opval;
5783   }
5784 }
5785
5786   current_cpu->done_insn (npc, status);
5787   return status;
5788 #undef FLD
5789 }
5790
5791 // ********** sbcpm0: sbcpm0 $crn,($rma+),$cdisp10
5792
5793 sem_status
5794 mepcore1_sem_sbcpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5795 {
5796 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
5797   sem_status status = SEM_STATUS_NORMAL;
5798   mepcore1_scache* abuf = sem;
5799   unsigned long long written = 0;
5800   PCADDR pc = abuf->addr;
5801   PCADDR npc = pc + 4;
5802
5803 {
5804 current_cpu->check_option_cp (pc);
5805 current_cpu->check_write_to_text (* FLD (i_rma));
5806   {
5807     QI opval = ANDSI (current_cpu->h_cr_get (FLD (f_crn)), 255);
5808     if (UNLIKELY(current_cpu->trace_result_p))
5809       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) * FLD (i_rma) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
5810     current_cpu->SETMEMQI (pc, * FLD (i_rma), opval);
5811   }
5812   {
5813     SI opval = ({   SI tmp_modulo_mask;
5814   tmp_modulo_mask = ({   SI tmp_temp;
5815   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
5816 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
5817 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
5818     if (UNLIKELY(current_cpu->trace_result_p))
5819       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5820     * FLD (i_rma) = opval;
5821   }
5822 }
5823
5824   current_cpu->done_insn (npc, status);
5825   return status;
5826 #undef FLD
5827 }
5828
5829 // ********** lbcpm0: lbcpm0 $crn,($rma+),$cdisp10
5830
5831 sem_status
5832 mepcore1_sem_lbcpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5833 {
5834 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
5835   sem_status status = SEM_STATUS_NORMAL;
5836   mepcore1_scache* abuf = sem;
5837   unsigned long long written = 0;
5838   PCADDR pc = abuf->addr;
5839   PCADDR npc = pc + 4;
5840
5841 {
5842 current_cpu->check_option_cp (pc);
5843   {
5844     SI opval = EXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_rma)));
5845     if (UNLIKELY(current_cpu->trace_result_p))
5846       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5847     current_cpu->h_cr_set (FLD (f_crn), opval);
5848   }
5849   {
5850     SI opval = ({   SI tmp_modulo_mask;
5851   tmp_modulo_mask = ({   SI tmp_temp;
5852   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
5853 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
5854 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
5855     if (UNLIKELY(current_cpu->trace_result_p))
5856       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5857     * FLD (i_rma) = opval;
5858   }
5859 }
5860
5861   current_cpu->done_insn (npc, status);
5862   return status;
5863 #undef FLD
5864 }
5865
5866 // ********** shcpm0: shcpm0 $crn,($rma+),$cdisp10a2
5867
5868 sem_status
5869 mepcore1_sem_shcpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5870 {
5871 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
5872   sem_status status = SEM_STATUS_NORMAL;
5873   mepcore1_scache* abuf = sem;
5874   unsigned long long written = 0;
5875   PCADDR pc = abuf->addr;
5876   PCADDR npc = pc + 4;
5877
5878 {
5879 current_cpu->check_option_cp (pc);
5880 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (1)));
5881   {
5882     HI opval = ANDSI (current_cpu->h_cr_get (FLD (f_crn)), 65535);
5883     if (UNLIKELY(current_cpu->trace_result_p))
5884       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (1)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
5885     current_cpu->SETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1)), opval);
5886   }
5887   {
5888     SI opval = ({   SI tmp_modulo_mask;
5889   tmp_modulo_mask = ({   SI tmp_temp;
5890   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
5891 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
5892 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
5893     if (UNLIKELY(current_cpu->trace_result_p))
5894       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5895     * FLD (i_rma) = opval;
5896   }
5897 }
5898
5899   current_cpu->done_insn (npc, status);
5900   return status;
5901 #undef FLD
5902 }
5903
5904 // ********** lhcpm0: lhcpm0 $crn,($rma+),$cdisp10a2
5905
5906 sem_status
5907 mepcore1_sem_lhcpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5908 {
5909 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
5910   sem_status status = SEM_STATUS_NORMAL;
5911   mepcore1_scache* abuf = sem;
5912   unsigned long long written = 0;
5913   PCADDR pc = abuf->addr;
5914   PCADDR npc = pc + 4;
5915
5916 {
5917 current_cpu->check_option_cp (pc);
5918   {
5919     SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1))));
5920     if (UNLIKELY(current_cpu->trace_result_p))
5921       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5922     current_cpu->h_cr_set (FLD (f_crn), opval);
5923   }
5924   {
5925     SI opval = ({   SI tmp_modulo_mask;
5926   tmp_modulo_mask = ({   SI tmp_temp;
5927   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
5928 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
5929 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
5930     if (UNLIKELY(current_cpu->trace_result_p))
5931       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5932     * FLD (i_rma) = opval;
5933   }
5934 }
5935
5936   current_cpu->done_insn (npc, status);
5937   return status;
5938 #undef FLD
5939 }
5940
5941 // ********** swcpm0: swcpm0 $crn,($rma+),$cdisp10a4
5942
5943 sem_status
5944 mepcore1_sem_swcpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5945 {
5946 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
5947   sem_status status = SEM_STATUS_NORMAL;
5948   mepcore1_scache* abuf = sem;
5949   unsigned long long written = 0;
5950   PCADDR pc = abuf->addr;
5951   PCADDR npc = pc + 4;
5952
5953 {
5954 current_cpu->check_option_cp (pc);
5955 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (3)));
5956   {
5957     SI opval = current_cpu->h_cr_get (FLD (f_crn));
5958     if (UNLIKELY(current_cpu->trace_result_p))
5959       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
5960     current_cpu->SETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)), opval);
5961   }
5962   {
5963     SI opval = ({   SI tmp_modulo_mask;
5964   tmp_modulo_mask = ({   SI tmp_temp;
5965   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
5966 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
5967 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
5968     if (UNLIKELY(current_cpu->trace_result_p))
5969       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
5970     * FLD (i_rma) = opval;
5971   }
5972 }
5973
5974   current_cpu->done_insn (npc, status);
5975   return status;
5976 #undef FLD
5977 }
5978
5979 // ********** lwcpm0: lwcpm0 $crn,($rma+),$cdisp10a4
5980
5981 sem_status
5982 mepcore1_sem_lwcpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
5983 {
5984 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
5985   sem_status status = SEM_STATUS_NORMAL;
5986   mepcore1_scache* abuf = sem;
5987   unsigned long long written = 0;
5988   PCADDR pc = abuf->addr;
5989   PCADDR npc = pc + 4;
5990
5991 {
5992 current_cpu->check_option_cp (pc);
5993   {
5994     SI opval = current_cpu->GETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)));
5995     if (UNLIKELY(current_cpu->trace_result_p))
5996       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
5997     current_cpu->h_cr_set (FLD (f_crn), opval);
5998   }
5999   {
6000     SI opval = ({   SI tmp_modulo_mask;
6001   tmp_modulo_mask = ({   SI tmp_temp;
6002   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
6003 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6004 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6005     if (UNLIKELY(current_cpu->trace_result_p))
6006       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6007     * FLD (i_rma) = opval;
6008   }
6009 }
6010
6011   current_cpu->done_insn (npc, status);
6012   return status;
6013 #undef FLD
6014 }
6015
6016 // ********** smcpm0: smcpm0 $crn64,($rma+),$cdisp10a8
6017
6018 sem_status
6019 mepcore1_sem_smcpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6020 {
6021 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
6022   sem_status status = SEM_STATUS_NORMAL;
6023   mepcore1_scache* abuf = sem;
6024   unsigned long long written = 0;
6025   PCADDR pc = abuf->addr;
6026   PCADDR npc = pc + 4;
6027
6028 {
6029 current_cpu->check_option_cp (pc);
6030 current_cpu->check_option_cp64 (pc);
6031 current_cpu->check_write_to_text (* FLD (i_rma));
6032 current_cpu->do_smcp (* FLD (i_rma), current_cpu->hardware.h_cr64[FLD (f_crn)], pc);
6033   {
6034     SI opval = ({   SI tmp_modulo_mask;
6035   tmp_modulo_mask = ({   SI tmp_temp;
6036   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
6037 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6038 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6039     if (UNLIKELY(current_cpu->trace_result_p))
6040       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6041     * FLD (i_rma) = opval;
6042   }
6043 }
6044
6045   current_cpu->done_insn (npc, status);
6046   return status;
6047 #undef FLD
6048 }
6049
6050 // ********** lmcpm0: lmcpm0 $crn64,($rma+),$cdisp10a8
6051
6052 sem_status
6053 mepcore1_sem_lmcpm0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6054 {
6055 #define FLD(f) abuf->fields.sfmt_lbucpm0.f
6056   sem_status status = SEM_STATUS_NORMAL;
6057   mepcore1_scache* abuf = sem;
6058   unsigned long long written = 0;
6059   PCADDR pc = abuf->addr;
6060   PCADDR npc = pc + 4;
6061
6062 {
6063 current_cpu->check_option_cp (pc);
6064 current_cpu->check_option_cp64 (pc);
6065   {
6066     DI opval = current_cpu->do_lmcp (* FLD (i_rma), pc);
6067     if (UNLIKELY(current_cpu->trace_result_p))
6068       current_cpu->trace_stream << "cr64" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
6069     current_cpu->h_cr64_set (FLD (f_crn), opval);
6070   }
6071   {
6072     SI opval = ({   SI tmp_modulo_mask;
6073   tmp_modulo_mask = ({   SI tmp_temp;
6074   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 12)), current_cpu->h_csr_get (((UINT) 13)));
6075 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6076 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 13)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 12)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6077     if (UNLIKELY(current_cpu->trace_result_p))
6078       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6079     * FLD (i_rma) = opval;
6080   }
6081 }
6082
6083   current_cpu->done_insn (npc, status);
6084   return status;
6085 #undef FLD
6086 }
6087
6088 // ********** sbcpm1: sbcpm1 $crn,($rma+),$cdisp10
6089
6090 sem_status
6091 mepcore1_sem_sbcpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6092 {
6093 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
6094   sem_status status = SEM_STATUS_NORMAL;
6095   mepcore1_scache* abuf = sem;
6096   unsigned long long written = 0;
6097   PCADDR pc = abuf->addr;
6098   PCADDR npc = pc + 4;
6099
6100 {
6101 current_cpu->check_option_cp (pc);
6102 current_cpu->check_write_to_text (* FLD (i_rma));
6103   {
6104     QI opval = ANDSI (current_cpu->h_cr_get (FLD (f_crn)), 255);
6105     if (UNLIKELY(current_cpu->trace_result_p))
6106       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) * FLD (i_rma) << dec << ']' << ":=0x" << hex << (SI) opval << dec << "  ";
6107     current_cpu->SETMEMQI (pc, * FLD (i_rma), opval);
6108   }
6109   {
6110     SI opval = ({   SI tmp_modulo_mask;
6111   tmp_modulo_mask = ({   SI tmp_temp;
6112   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
6113 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6114 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6115     if (UNLIKELY(current_cpu->trace_result_p))
6116       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6117     * FLD (i_rma) = opval;
6118   }
6119 }
6120
6121   current_cpu->done_insn (npc, status);
6122   return status;
6123 #undef FLD
6124 }
6125
6126 // ********** lbcpm1: lbcpm1 $crn,($rma+),$cdisp10
6127
6128 sem_status
6129 mepcore1_sem_lbcpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6130 {
6131 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
6132   sem_status status = SEM_STATUS_NORMAL;
6133   mepcore1_scache* abuf = sem;
6134   unsigned long long written = 0;
6135   PCADDR pc = abuf->addr;
6136   PCADDR npc = pc + 4;
6137
6138 {
6139 current_cpu->check_option_cp (pc);
6140   {
6141     SI opval = EXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_rma)));
6142     if (UNLIKELY(current_cpu->trace_result_p))
6143       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
6144     current_cpu->h_cr_set (FLD (f_crn), opval);
6145   }
6146   {
6147     SI opval = ({   SI tmp_modulo_mask;
6148   tmp_modulo_mask = ({   SI tmp_temp;
6149   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
6150 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6151 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6152     if (UNLIKELY(current_cpu->trace_result_p))
6153       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6154     * FLD (i_rma) = opval;
6155   }
6156 }
6157
6158   current_cpu->done_insn (npc, status);
6159   return status;
6160 #undef FLD
6161 }
6162
6163 // ********** shcpm1: shcpm1 $crn,($rma+),$cdisp10a2
6164
6165 sem_status
6166 mepcore1_sem_shcpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6167 {
6168 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
6169   sem_status status = SEM_STATUS_NORMAL;
6170   mepcore1_scache* abuf = sem;
6171   unsigned long long written = 0;
6172   PCADDR pc = abuf->addr;
6173   PCADDR npc = pc + 4;
6174
6175 {
6176 current_cpu->check_option_cp (pc);
6177 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (1)));
6178   {
6179     HI opval = ANDSI (current_cpu->h_cr_get (FLD (f_crn)), 65535);
6180     if (UNLIKELY(current_cpu->trace_result_p))
6181       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (1)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
6182     current_cpu->SETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1)), opval);
6183   }
6184   {
6185     SI opval = ({   SI tmp_modulo_mask;
6186   tmp_modulo_mask = ({   SI tmp_temp;
6187   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
6188 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6189 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6190     if (UNLIKELY(current_cpu->trace_result_p))
6191       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6192     * FLD (i_rma) = opval;
6193   }
6194 }
6195
6196   current_cpu->done_insn (npc, status);
6197   return status;
6198 #undef FLD
6199 }
6200
6201 // ********** lhcpm1: lhcpm1 $crn,($rma+),$cdisp10a2
6202
6203 sem_status
6204 mepcore1_sem_lhcpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6205 {
6206 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
6207   sem_status status = SEM_STATUS_NORMAL;
6208   mepcore1_scache* abuf = sem;
6209   unsigned long long written = 0;
6210   PCADDR pc = abuf->addr;
6211   PCADDR npc = pc + 4;
6212
6213 {
6214 current_cpu->check_option_cp (pc);
6215   {
6216     SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ANDSI (* FLD (i_rma), INVSI (1))));
6217     if (UNLIKELY(current_cpu->trace_result_p))
6218       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
6219     current_cpu->h_cr_set (FLD (f_crn), opval);
6220   }
6221   {
6222     SI opval = ({   SI tmp_modulo_mask;
6223   tmp_modulo_mask = ({   SI tmp_temp;
6224   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
6225 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6226 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6227     if (UNLIKELY(current_cpu->trace_result_p))
6228       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6229     * FLD (i_rma) = opval;
6230   }
6231 }
6232
6233   current_cpu->done_insn (npc, status);
6234   return status;
6235 #undef FLD
6236 }
6237
6238 // ********** swcpm1: swcpm1 $crn,($rma+),$cdisp10a4
6239
6240 sem_status
6241 mepcore1_sem_swcpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6242 {
6243 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
6244   sem_status status = SEM_STATUS_NORMAL;
6245   mepcore1_scache* abuf = sem;
6246   unsigned long long written = 0;
6247   PCADDR pc = abuf->addr;
6248   PCADDR npc = pc + 4;
6249
6250 {
6251 current_cpu->check_option_cp (pc);
6252 current_cpu->check_write_to_text (ANDSI (* FLD (i_rma), INVSI (3)));
6253   {
6254     SI opval = current_cpu->h_cr_get (FLD (f_crn));
6255     if (UNLIKELY(current_cpu->trace_result_p))
6256       current_cpu->trace_stream << "memory" << '[' <<  "0x" << hex << (UDI) ANDSI (* FLD (i_rma), INVSI (3)) << dec << ']' << ":=0x" << hex << opval << dec << "  ";
6257     current_cpu->SETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3)), opval);
6258   }
6259   {
6260     SI opval = ({   SI tmp_modulo_mask;
6261   tmp_modulo_mask = ({   SI tmp_temp;
6262   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
6263 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6264 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6265     if (UNLIKELY(current_cpu->trace_result_p))
6266       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6267     * FLD (i_rma) = opval;
6268   }
6269 }
6270
6271   current_cpu->done_insn (npc, status);
6272   return status;
6273 #undef FLD
6274 }
6275
6276 // ********** lwcpm1: lwcpm1 $crn,($rma+),$cdisp10a4
6277
6278 sem_status
6279 mepcore1_sem_lwcpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6280 {
6281 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
6282   sem_status status = SEM_STATUS_NORMAL;
6283   mepcore1_scache* abuf = sem;
6284   unsigned long long written = 0;
6285   PCADDR pc = abuf->addr;
6286   PCADDR npc = pc + 4;
6287
6288 {
6289 current_cpu->check_option_cp (pc);
6290   {
6291     SI opval = EXTSISI (current_cpu->GETMEMSI (pc, ANDSI (* FLD (i_rma), INVSI (3))));
6292     if (UNLIKELY(current_cpu->trace_result_p))
6293       current_cpu->trace_stream << "cr" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
6294     current_cpu->h_cr_set (FLD (f_crn), opval);
6295   }
6296   {
6297     SI opval = ({   SI tmp_modulo_mask;
6298   tmp_modulo_mask = ({   SI tmp_temp;
6299   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
6300 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6301 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6302     if (UNLIKELY(current_cpu->trace_result_p))
6303       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6304     * FLD (i_rma) = opval;
6305   }
6306 }
6307
6308   current_cpu->done_insn (npc, status);
6309   return status;
6310 #undef FLD
6311 }
6312
6313 // ********** smcpm1: smcpm1 $crn64,($rma+),$cdisp10a8
6314
6315 sem_status
6316 mepcore1_sem_smcpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6317 {
6318 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
6319   sem_status status = SEM_STATUS_NORMAL;
6320   mepcore1_scache* abuf = sem;
6321   unsigned long long written = 0;
6322   PCADDR pc = abuf->addr;
6323   PCADDR npc = pc + 4;
6324
6325 {
6326 current_cpu->check_option_cp (pc);
6327 current_cpu->check_option_cp64 (pc);
6328 current_cpu->do_smcp (* FLD (i_rma), current_cpu->hardware.h_cr64[FLD (f_crn)], pc);
6329 current_cpu->check_write_to_text (* FLD (i_rma));
6330   {
6331     SI opval = ({   SI tmp_modulo_mask;
6332   tmp_modulo_mask = ({   SI tmp_temp;
6333   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
6334 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6335 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6336     if (UNLIKELY(current_cpu->trace_result_p))
6337       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6338     * FLD (i_rma) = opval;
6339   }
6340 }
6341
6342   current_cpu->done_insn (npc, status);
6343   return status;
6344 #undef FLD
6345 }
6346
6347 // ********** lmcpm1: lmcpm1 $crn64,($rma+),$cdisp10a8
6348
6349 sem_status
6350 mepcore1_sem_lmcpm1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6351 {
6352 #define FLD(f) abuf->fields.sfmt_lbucpm1.f
6353   sem_status status = SEM_STATUS_NORMAL;
6354   mepcore1_scache* abuf = sem;
6355   unsigned long long written = 0;
6356   PCADDR pc = abuf->addr;
6357   PCADDR npc = pc + 4;
6358
6359 {
6360 current_cpu->check_option_cp (pc);
6361 current_cpu->check_option_cp64 (pc);
6362   {
6363     DI opval = current_cpu->do_lmcp (* FLD (i_rma), pc);
6364     if (UNLIKELY(current_cpu->trace_result_p))
6365       current_cpu->trace_stream << "cr64" << '[' << FLD (f_crn) << ']' << ":=0x" << hex << opval << dec << "  ";
6366     current_cpu->h_cr64_set (FLD (f_crn), opval);
6367   }
6368   {
6369     SI opval = ({   SI tmp_modulo_mask;
6370   tmp_modulo_mask = ({   SI tmp_temp;
6371   tmp_temp = ORSI (current_cpu->h_csr_get (((UINT) 14)), current_cpu->h_csr_get (((UINT) 15)));
6372 ; SRLSI (-1, current_cpu->do_ldz (tmp_temp)); });
6373 ; ((EQSI (ANDSI (* FLD (i_rma), tmp_modulo_mask), current_cpu->h_csr_get (((UINT) 15)))) ? (ORSI (ANDSI (* FLD (i_rma), INVSI (tmp_modulo_mask)), current_cpu->h_csr_get (((UINT) 14)))) : (ADDSI (* FLD (i_rma), EXTSISI (FLD (f_cdisp10))))); });
6374     if (UNLIKELY(current_cpu->trace_result_p))
6375       current_cpu->trace_stream << "gpr" << '[' << FLD (f_rm) << ']' << ":=0x" << hex << opval << dec << "  ";
6376     * FLD (i_rma) = opval;
6377   }
6378 }
6379
6380   current_cpu->done_insn (npc, status);
6381   return status;
6382 #undef FLD
6383 }
6384
6385 // ********** bcpeq: bcpeq $cccc,$pcrel17a2
6386
6387 sem_status
6388 mepcore1_sem_bcpeq (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6389 {
6390 #define FLD(f) abuf->fields.sfmt_beq.f
6391   sem_status status = SEM_STATUS_NORMAL;
6392   mepcore1_scache* abuf = sem;
6393   unsigned long long written = 0;
6394   PCADDR pc = abuf->addr;
6395   PCADDR npc = pc + 4;
6396
6397 {
6398 current_cpu->check_option_cp (pc);
6399 if (EQSI (XORSI (FLD (f_rm), current_cpu->hardware.h_ccr[((UINT) 1)]), 0)) {
6400 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
6401   {
6402     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
6403     written |= (1ULL << 6);
6404     if (UNLIKELY(current_cpu->trace_result_p))
6405       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6406     current_cpu->branch (opval, npc, status);
6407   }
6408 }
6409  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
6410   {
6411     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
6412     written |= (1ULL << 6);
6413     if (UNLIKELY(current_cpu->trace_result_p))
6414       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6415     current_cpu->branch (opval, npc, status);
6416   }
6417 }
6418  else {
6419   {
6420     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
6421     written |= (1ULL << 6);
6422     if (UNLIKELY(current_cpu->trace_result_p))
6423       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6424     current_cpu->branch (opval, npc, status);
6425   }
6426 }
6427 }
6428 }
6429
6430   abuf->written = written;
6431   current_cpu->done_cti_insn (npc, status);
6432   return status;
6433 #undef FLD
6434 }
6435
6436 // ********** bcpne: bcpne $cccc,$pcrel17a2
6437
6438 sem_status
6439 mepcore1_sem_bcpne (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6440 {
6441 #define FLD(f) abuf->fields.sfmt_beq.f
6442   sem_status status = SEM_STATUS_NORMAL;
6443   mepcore1_scache* abuf = sem;
6444   unsigned long long written = 0;
6445   PCADDR pc = abuf->addr;
6446   PCADDR npc = pc + 4;
6447
6448 {
6449 current_cpu->check_option_cp (pc);
6450 if (NESI (XORSI (FLD (f_rm), current_cpu->hardware.h_ccr[((UINT) 1)]), 0)) {
6451 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
6452   {
6453     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
6454     written |= (1ULL << 6);
6455     if (UNLIKELY(current_cpu->trace_result_p))
6456       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6457     current_cpu->branch (opval, npc, status);
6458   }
6459 }
6460  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
6461   {
6462     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
6463     written |= (1ULL << 6);
6464     if (UNLIKELY(current_cpu->trace_result_p))
6465       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6466     current_cpu->branch (opval, npc, status);
6467   }
6468 }
6469  else {
6470   {
6471     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
6472     written |= (1ULL << 6);
6473     if (UNLIKELY(current_cpu->trace_result_p))
6474       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6475     current_cpu->branch (opval, npc, status);
6476   }
6477 }
6478 }
6479 }
6480
6481   abuf->written = written;
6482   current_cpu->done_cti_insn (npc, status);
6483   return status;
6484 #undef FLD
6485 }
6486
6487 // ********** bcpat: bcpat $cccc,$pcrel17a2
6488
6489 sem_status
6490 mepcore1_sem_bcpat (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6491 {
6492 #define FLD(f) abuf->fields.sfmt_beq.f
6493   sem_status status = SEM_STATUS_NORMAL;
6494   mepcore1_scache* abuf = sem;
6495   unsigned long long written = 0;
6496   PCADDR pc = abuf->addr;
6497   PCADDR npc = pc + 4;
6498
6499 {
6500 current_cpu->check_option_cp (pc);
6501 if (NESI (ANDSI (FLD (f_rm), current_cpu->hardware.h_ccr[((UINT) 1)]), 0)) {
6502 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
6503   {
6504     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
6505     written |= (1ULL << 6);
6506     if (UNLIKELY(current_cpu->trace_result_p))
6507       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6508     current_cpu->branch (opval, npc, status);
6509   }
6510 }
6511  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
6512   {
6513     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
6514     written |= (1ULL << 6);
6515     if (UNLIKELY(current_cpu->trace_result_p))
6516       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6517     current_cpu->branch (opval, npc, status);
6518   }
6519 }
6520  else {
6521   {
6522     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
6523     written |= (1ULL << 6);
6524     if (UNLIKELY(current_cpu->trace_result_p))
6525       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6526     current_cpu->branch (opval, npc, status);
6527   }
6528 }
6529 }
6530 }
6531
6532   abuf->written = written;
6533   current_cpu->done_cti_insn (npc, status);
6534   return status;
6535 #undef FLD
6536 }
6537
6538 // ********** bcpaf: bcpaf $cccc,$pcrel17a2
6539
6540 sem_status
6541 mepcore1_sem_bcpaf (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6542 {
6543 #define FLD(f) abuf->fields.sfmt_beq.f
6544   sem_status status = SEM_STATUS_NORMAL;
6545   mepcore1_scache* abuf = sem;
6546   unsigned long long written = 0;
6547   PCADDR pc = abuf->addr;
6548   PCADDR npc = pc + 4;
6549
6550 {
6551 current_cpu->check_option_cp (pc);
6552 if (EQSI (ANDSI (FLD (f_rm), current_cpu->hardware.h_ccr[((UINT) 1)]), 0)) {
6553 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
6554   {
6555     USI opval = ANDSI (FLD (f_17s16a2), INVSI (7));
6556     written |= (1ULL << 6);
6557     if (UNLIKELY(current_cpu->trace_result_p))
6558       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6559     current_cpu->branch (opval, npc, status);
6560   }
6561 }
6562  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
6563   {
6564     USI opval = ANDSI (FLD (f_17s16a2), INVSI (3));
6565     written |= (1ULL << 6);
6566     if (UNLIKELY(current_cpu->trace_result_p))
6567       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6568     current_cpu->branch (opval, npc, status);
6569   }
6570 }
6571  else {
6572   {
6573     USI opval = ANDSI (FLD (f_17s16a2), INVSI (1));
6574     written |= (1ULL << 6);
6575     if (UNLIKELY(current_cpu->trace_result_p))
6576       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6577     current_cpu->branch (opval, npc, status);
6578   }
6579 }
6580 }
6581 }
6582
6583   abuf->written = written;
6584   current_cpu->done_cti_insn (npc, status);
6585   return status;
6586 #undef FLD
6587 }
6588
6589 // ********** synccp: synccp
6590
6591 sem_status
6592 mepcore1_sem_synccp (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6593 {
6594 #define FLD(f) abuf->fields.fmt_empty.f
6595   sem_status status = SEM_STATUS_NORMAL;
6596   mepcore1_scache* abuf = sem;
6597   unsigned long long written = 0;
6598   PCADDR pc = abuf->addr;
6599   PCADDR npc = pc + 2;
6600
6601 {
6602 current_cpu->check_option_cp (pc);
6603 ((void) 0); /*nop*/
6604 }
6605
6606   current_cpu->done_insn (npc, status);
6607   return status;
6608 #undef FLD
6609 }
6610
6611 // ********** jsrv: jsrv $rm
6612
6613 sem_status
6614 mepcore1_sem_jsrv (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6615 {
6616 #define FLD(f) abuf->fields.sfmt_jsr.f
6617   sem_status status = SEM_STATUS_NORMAL;
6618   mepcore1_scache* abuf = sem;
6619   unsigned long long written = 0;
6620   PCADDR pc = abuf->addr;
6621   PCADDR npc = pc + 2;
6622
6623 {
6624 current_cpu->cg_profile (pc, * FLD (i_rm));
6625 current_cpu->check_option_cp (pc);
6626 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
6627 {
6628   {
6629     SI opval = ORSI (ADDSI (pc, 8), 1);
6630     written |= (1ULL << 4);
6631     if (UNLIKELY(current_cpu->trace_result_p))
6632       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
6633     current_cpu->h_csr_set (((UINT) 1), opval);
6634   }
6635   {
6636     USI opval = ANDSI (* FLD (i_rm), INVSI (1));
6637     written |= (1ULL << 5);
6638     if (UNLIKELY(current_cpu->trace_result_p))
6639       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6640     current_cpu->branch (opval, npc, status);
6641   }
6642 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (0, 12)));
6643 }
6644 }
6645  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
6646 {
6647   {
6648     SI opval = ORSI (ADDSI (pc, 4), 1);
6649     written |= (1ULL << 4);
6650     if (UNLIKELY(current_cpu->trace_result_p))
6651       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
6652     current_cpu->h_csr_set (((UINT) 1), opval);
6653   }
6654   {
6655     USI opval = ANDSI (* FLD (i_rm), INVSI (1));
6656     written |= (1ULL << 5);
6657     if (UNLIKELY(current_cpu->trace_result_p))
6658       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6659     current_cpu->branch (opval, npc, status);
6660   }
6661 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (0, 12)));
6662 }
6663 }
6664  else {
6665 {
6666   {
6667     SI opval = ORSI (ADDSI (pc, 2), 1);
6668     written |= (1ULL << 4);
6669     if (UNLIKELY(current_cpu->trace_result_p))
6670       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
6671     current_cpu->h_csr_set (((UINT) 1), opval);
6672   }
6673 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1)) {
6674   {
6675     USI opval = ANDSI (* FLD (i_rm), INVSI (3));
6676     written |= (1ULL << 5);
6677     if (UNLIKELY(current_cpu->trace_result_p))
6678       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6679     current_cpu->branch (opval, npc, status);
6680   }
6681 } else {
6682   {
6683     USI opval = ANDSI (* FLD (i_rm), INVSI (7));
6684     written |= (1ULL << 5);
6685     if (UNLIKELY(current_cpu->trace_result_p))
6686       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6687     current_cpu->branch (opval, npc, status);
6688   }
6689 }
6690 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (1, 12)));
6691 }
6692 }
6693 }
6694
6695   abuf->written = written;
6696   current_cpu->done_cti_insn (npc, status);
6697   return status;
6698 #undef FLD
6699 }
6700
6701 // ********** bsrv: bsrv $pcrel24a2
6702
6703 sem_status
6704 mepcore1_sem_bsrv (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6705 {
6706 #define FLD(f) abuf->fields.sfmt_bsr24.f
6707   sem_status status = SEM_STATUS_NORMAL;
6708   mepcore1_scache* abuf = sem;
6709   unsigned long long written = 0;
6710   PCADDR pc = abuf->addr;
6711   PCADDR npc = pc + 4;
6712
6713 {
6714 current_cpu->cg_profile (pc, FLD (f_24s5a2n));
6715 current_cpu->check_option_cp (pc);
6716 if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 6), 1))) {
6717 {
6718   {
6719     SI opval = ORSI (ADDSI (pc, 8), 1);
6720     written |= (1ULL << 4);
6721     if (UNLIKELY(current_cpu->trace_result_p))
6722       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
6723     current_cpu->h_csr_set (((UINT) 1), opval);
6724   }
6725   {
6726     USI opval = ANDSI (FLD (f_24s5a2n), INVSI (1));
6727     written |= (1ULL << 5);
6728     if (UNLIKELY(current_cpu->trace_result_p))
6729       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6730     current_cpu->branch (opval, npc, status);
6731   }
6732 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (0, 12)));
6733 }
6734 }
6735  else if (ANDIF (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 16)), 12), 1), ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1))) {
6736 {
6737   {
6738     SI opval = ORSI (ADDSI (pc, 4), 1);
6739     written |= (1ULL << 4);
6740     if (UNLIKELY(current_cpu->trace_result_p))
6741       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
6742     current_cpu->h_csr_set (((UINT) 1), opval);
6743   }
6744   {
6745     USI opval = ANDSI (FLD (f_24s5a2n), INVSI (1));
6746     written |= (1ULL << 5);
6747     if (UNLIKELY(current_cpu->trace_result_p))
6748       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6749     current_cpu->branch (opval, npc, status);
6750   }
6751 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (0, 12)));
6752 }
6753 }
6754  else {
6755 {
6756   {
6757     SI opval = ORSI (ADDSI (pc, 4), 1);
6758     written |= (1ULL << 4);
6759     if (UNLIKELY(current_cpu->trace_result_p))
6760       current_cpu->trace_stream << "csr" << '[' << ((UINT) 1) << ']' << ":=0x" << hex << opval << dec << "  ";
6761     current_cpu->h_csr_set (((UINT) 1), opval);
6762   }
6763 if (ANDSI (SRLSI (current_cpu->h_csr_get (((UINT) 26)), 5), 1)) {
6764   {
6765     USI opval = ANDSI (FLD (f_24s5a2n), INVSI (3));
6766     written |= (1ULL << 5);
6767     if (UNLIKELY(current_cpu->trace_result_p))
6768       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6769     current_cpu->branch (opval, npc, status);
6770   }
6771 } else {
6772   {
6773     USI opval = ANDSI (FLD (f_24s5a2n), INVSI (7));
6774     written |= (1ULL << 5);
6775     if (UNLIKELY(current_cpu->trace_result_p))
6776       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6777     current_cpu->branch (opval, npc, status);
6778   }
6779 }
6780 current_cpu->hardware.h_csr[((UINT) 16)] = ORSI (ANDSI (current_cpu->hardware.h_csr[((UINT) 16)], INVSI (SLLSI (1, 12))), ANDSI (SLLSI (1, 12), SLLSI (1, 12)));
6781 }
6782 }
6783 }
6784
6785   abuf->written = written;
6786   current_cpu->done_cti_insn (npc, status);
6787   return status;
6788 #undef FLD
6789 }
6790
6791 // ********** sim-syscall: --syscall--
6792
6793 sem_status
6794 mepcore1_sem_sim_syscall (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6795 {
6796 #define FLD(f) abuf->fields.sfmt_sim_syscall.f
6797   sem_status status = SEM_STATUS_NORMAL;
6798   mepcore1_scache* abuf = sem;
6799   unsigned long long written = 0;
6800   PCADDR pc = abuf->addr;
6801   PCADDR npc = pc + 2;
6802
6803 current_cpu->do_syscall (pc, FLD (f_callnum));
6804
6805   current_cpu->done_insn (npc, status);
6806   return status;
6807 #undef FLD
6808 }
6809
6810 // ********** ri-0: --reserved--
6811
6812 sem_status
6813 mepcore1_sem_ri_0 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6814 {
6815 #define FLD(f) abuf->fields.fmt_empty.f
6816   sem_status status = SEM_STATUS_NORMAL;
6817   mepcore1_scache* abuf = sem;
6818   unsigned long long written = 0;
6819   PCADDR pc = abuf->addr;
6820   PCADDR npc = pc + 2;
6821
6822   {
6823     USI opval = current_cpu->ri_exception (pc);
6824     if (UNLIKELY(current_cpu->trace_result_p))
6825       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6826     current_cpu->branch (opval, npc, status);
6827   }
6828
6829   current_cpu->done_cti_insn (npc, status);
6830   return status;
6831 #undef FLD
6832 }
6833
6834 // ********** ri-1: --reserved--
6835
6836 sem_status
6837 mepcore1_sem_ri_1 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6838 {
6839 #define FLD(f) abuf->fields.fmt_empty.f
6840   sem_status status = SEM_STATUS_NORMAL;
6841   mepcore1_scache* abuf = sem;
6842   unsigned long long written = 0;
6843   PCADDR pc = abuf->addr;
6844   PCADDR npc = pc + 2;
6845
6846   {
6847     USI opval = current_cpu->ri_exception (pc);
6848     if (UNLIKELY(current_cpu->trace_result_p))
6849       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6850     current_cpu->branch (opval, npc, status);
6851   }
6852
6853   current_cpu->done_cti_insn (npc, status);
6854   return status;
6855 #undef FLD
6856 }
6857
6858 // ********** ri-2: --reserved--
6859
6860 sem_status
6861 mepcore1_sem_ri_2 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6862 {
6863 #define FLD(f) abuf->fields.fmt_empty.f
6864   sem_status status = SEM_STATUS_NORMAL;
6865   mepcore1_scache* abuf = sem;
6866   unsigned long long written = 0;
6867   PCADDR pc = abuf->addr;
6868   PCADDR npc = pc + 2;
6869
6870   {
6871     USI opval = current_cpu->ri_exception (pc);
6872     if (UNLIKELY(current_cpu->trace_result_p))
6873       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6874     current_cpu->branch (opval, npc, status);
6875   }
6876
6877   current_cpu->done_cti_insn (npc, status);
6878   return status;
6879 #undef FLD
6880 }
6881
6882 // ********** ri-3: --reserved--
6883
6884 sem_status
6885 mepcore1_sem_ri_3 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6886 {
6887 #define FLD(f) abuf->fields.fmt_empty.f
6888   sem_status status = SEM_STATUS_NORMAL;
6889   mepcore1_scache* abuf = sem;
6890   unsigned long long written = 0;
6891   PCADDR pc = abuf->addr;
6892   PCADDR npc = pc + 2;
6893
6894   {
6895     USI opval = current_cpu->ri_exception (pc);
6896     if (UNLIKELY(current_cpu->trace_result_p))
6897       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6898     current_cpu->branch (opval, npc, status);
6899   }
6900
6901   current_cpu->done_cti_insn (npc, status);
6902   return status;
6903 #undef FLD
6904 }
6905
6906 // ********** ri-4: --reserved--
6907
6908 sem_status
6909 mepcore1_sem_ri_4 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6910 {
6911 #define FLD(f) abuf->fields.fmt_empty.f
6912   sem_status status = SEM_STATUS_NORMAL;
6913   mepcore1_scache* abuf = sem;
6914   unsigned long long written = 0;
6915   PCADDR pc = abuf->addr;
6916   PCADDR npc = pc + 2;
6917
6918   {
6919     USI opval = current_cpu->ri_exception (pc);
6920     if (UNLIKELY(current_cpu->trace_result_p))
6921       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6922     current_cpu->branch (opval, npc, status);
6923   }
6924
6925   current_cpu->done_cti_insn (npc, status);
6926   return status;
6927 #undef FLD
6928 }
6929
6930 // ********** ri-5: --reserved--
6931
6932 sem_status
6933 mepcore1_sem_ri_5 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6934 {
6935 #define FLD(f) abuf->fields.fmt_empty.f
6936   sem_status status = SEM_STATUS_NORMAL;
6937   mepcore1_scache* abuf = sem;
6938   unsigned long long written = 0;
6939   PCADDR pc = abuf->addr;
6940   PCADDR npc = pc + 2;
6941
6942   {
6943     USI opval = current_cpu->ri_exception (pc);
6944     if (UNLIKELY(current_cpu->trace_result_p))
6945       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6946     current_cpu->branch (opval, npc, status);
6947   }
6948
6949   current_cpu->done_cti_insn (npc, status);
6950   return status;
6951 #undef FLD
6952 }
6953
6954 // ********** ri-6: --reserved--
6955
6956 sem_status
6957 mepcore1_sem_ri_6 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6958 {
6959 #define FLD(f) abuf->fields.fmt_empty.f
6960   sem_status status = SEM_STATUS_NORMAL;
6961   mepcore1_scache* abuf = sem;
6962   unsigned long long written = 0;
6963   PCADDR pc = abuf->addr;
6964   PCADDR npc = pc + 2;
6965
6966   {
6967     USI opval = current_cpu->ri_exception (pc);
6968     if (UNLIKELY(current_cpu->trace_result_p))
6969       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6970     current_cpu->branch (opval, npc, status);
6971   }
6972
6973   current_cpu->done_cti_insn (npc, status);
6974   return status;
6975 #undef FLD
6976 }
6977
6978 // ********** ri-7: --reserved--
6979
6980 sem_status
6981 mepcore1_sem_ri_7 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
6982 {
6983 #define FLD(f) abuf->fields.fmt_empty.f
6984   sem_status status = SEM_STATUS_NORMAL;
6985   mepcore1_scache* abuf = sem;
6986   unsigned long long written = 0;
6987   PCADDR pc = abuf->addr;
6988   PCADDR npc = pc + 2;
6989
6990   {
6991     USI opval = current_cpu->ri_exception (pc);
6992     if (UNLIKELY(current_cpu->trace_result_p))
6993       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
6994     current_cpu->branch (opval, npc, status);
6995   }
6996
6997   current_cpu->done_cti_insn (npc, status);
6998   return status;
6999 #undef FLD
7000 }
7001
7002 // ********** ri-8: --reserved--
7003
7004 sem_status
7005 mepcore1_sem_ri_8 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7006 {
7007 #define FLD(f) abuf->fields.fmt_empty.f
7008   sem_status status = SEM_STATUS_NORMAL;
7009   mepcore1_scache* abuf = sem;
7010   unsigned long long written = 0;
7011   PCADDR pc = abuf->addr;
7012   PCADDR npc = pc + 2;
7013
7014   {
7015     USI opval = current_cpu->ri_exception (pc);
7016     if (UNLIKELY(current_cpu->trace_result_p))
7017       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7018     current_cpu->branch (opval, npc, status);
7019   }
7020
7021   current_cpu->done_cti_insn (npc, status);
7022   return status;
7023 #undef FLD
7024 }
7025
7026 // ********** ri-9: --reserved--
7027
7028 sem_status
7029 mepcore1_sem_ri_9 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7030 {
7031 #define FLD(f) abuf->fields.fmt_empty.f
7032   sem_status status = SEM_STATUS_NORMAL;
7033   mepcore1_scache* abuf = sem;
7034   unsigned long long written = 0;
7035   PCADDR pc = abuf->addr;
7036   PCADDR npc = pc + 2;
7037
7038   {
7039     USI opval = current_cpu->ri_exception (pc);
7040     if (UNLIKELY(current_cpu->trace_result_p))
7041       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7042     current_cpu->branch (opval, npc, status);
7043   }
7044
7045   current_cpu->done_cti_insn (npc, status);
7046   return status;
7047 #undef FLD
7048 }
7049
7050 // ********** ri-10: --reserved--
7051
7052 sem_status
7053 mepcore1_sem_ri_10 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7054 {
7055 #define FLD(f) abuf->fields.fmt_empty.f
7056   sem_status status = SEM_STATUS_NORMAL;
7057   mepcore1_scache* abuf = sem;
7058   unsigned long long written = 0;
7059   PCADDR pc = abuf->addr;
7060   PCADDR npc = pc + 2;
7061
7062   {
7063     USI opval = current_cpu->ri_exception (pc);
7064     if (UNLIKELY(current_cpu->trace_result_p))
7065       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7066     current_cpu->branch (opval, npc, status);
7067   }
7068
7069   current_cpu->done_cti_insn (npc, status);
7070   return status;
7071 #undef FLD
7072 }
7073
7074 // ********** ri-11: --reserved--
7075
7076 sem_status
7077 mepcore1_sem_ri_11 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7078 {
7079 #define FLD(f) abuf->fields.fmt_empty.f
7080   sem_status status = SEM_STATUS_NORMAL;
7081   mepcore1_scache* abuf = sem;
7082   unsigned long long written = 0;
7083   PCADDR pc = abuf->addr;
7084   PCADDR npc = pc + 2;
7085
7086   {
7087     USI opval = current_cpu->ri_exception (pc);
7088     if (UNLIKELY(current_cpu->trace_result_p))
7089       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7090     current_cpu->branch (opval, npc, status);
7091   }
7092
7093   current_cpu->done_cti_insn (npc, status);
7094   return status;
7095 #undef FLD
7096 }
7097
7098 // ********** ri-12: --reserved--
7099
7100 sem_status
7101 mepcore1_sem_ri_12 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7102 {
7103 #define FLD(f) abuf->fields.fmt_empty.f
7104   sem_status status = SEM_STATUS_NORMAL;
7105   mepcore1_scache* abuf = sem;
7106   unsigned long long written = 0;
7107   PCADDR pc = abuf->addr;
7108   PCADDR npc = pc + 2;
7109
7110   {
7111     USI opval = current_cpu->ri_exception (pc);
7112     if (UNLIKELY(current_cpu->trace_result_p))
7113       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7114     current_cpu->branch (opval, npc, status);
7115   }
7116
7117   current_cpu->done_cti_insn (npc, status);
7118   return status;
7119 #undef FLD
7120 }
7121
7122 // ********** ri-13: --reserved--
7123
7124 sem_status
7125 mepcore1_sem_ri_13 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7126 {
7127 #define FLD(f) abuf->fields.fmt_empty.f
7128   sem_status status = SEM_STATUS_NORMAL;
7129   mepcore1_scache* abuf = sem;
7130   unsigned long long written = 0;
7131   PCADDR pc = abuf->addr;
7132   PCADDR npc = pc + 2;
7133
7134   {
7135     USI opval = current_cpu->ri_exception (pc);
7136     if (UNLIKELY(current_cpu->trace_result_p))
7137       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7138     current_cpu->branch (opval, npc, status);
7139   }
7140
7141   current_cpu->done_cti_insn (npc, status);
7142   return status;
7143 #undef FLD
7144 }
7145
7146 // ********** ri-14: --reserved--
7147
7148 sem_status
7149 mepcore1_sem_ri_14 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7150 {
7151 #define FLD(f) abuf->fields.fmt_empty.f
7152   sem_status status = SEM_STATUS_NORMAL;
7153   mepcore1_scache* abuf = sem;
7154   unsigned long long written = 0;
7155   PCADDR pc = abuf->addr;
7156   PCADDR npc = pc + 2;
7157
7158   {
7159     USI opval = current_cpu->ri_exception (pc);
7160     if (UNLIKELY(current_cpu->trace_result_p))
7161       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7162     current_cpu->branch (opval, npc, status);
7163   }
7164
7165   current_cpu->done_cti_insn (npc, status);
7166   return status;
7167 #undef FLD
7168 }
7169
7170 // ********** ri-15: --reserved--
7171
7172 sem_status
7173 mepcore1_sem_ri_15 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7174 {
7175 #define FLD(f) abuf->fields.fmt_empty.f
7176   sem_status status = SEM_STATUS_NORMAL;
7177   mepcore1_scache* abuf = sem;
7178   unsigned long long written = 0;
7179   PCADDR pc = abuf->addr;
7180   PCADDR npc = pc + 2;
7181
7182   {
7183     USI opval = current_cpu->ri_exception (pc);
7184     if (UNLIKELY(current_cpu->trace_result_p))
7185       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7186     current_cpu->branch (opval, npc, status);
7187   }
7188
7189   current_cpu->done_cti_insn (npc, status);
7190   return status;
7191 #undef FLD
7192 }
7193
7194 // ********** ri-17: --reserved--
7195
7196 sem_status
7197 mepcore1_sem_ri_17 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7198 {
7199 #define FLD(f) abuf->fields.fmt_empty.f
7200   sem_status status = SEM_STATUS_NORMAL;
7201   mepcore1_scache* abuf = sem;
7202   unsigned long long written = 0;
7203   PCADDR pc = abuf->addr;
7204   PCADDR npc = pc + 2;
7205
7206   {
7207     USI opval = current_cpu->ri_exception (pc);
7208     if (UNLIKELY(current_cpu->trace_result_p))
7209       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7210     current_cpu->branch (opval, npc, status);
7211   }
7212
7213   current_cpu->done_cti_insn (npc, status);
7214   return status;
7215 #undef FLD
7216 }
7217
7218 // ********** ri-20: --reserved--
7219
7220 sem_status
7221 mepcore1_sem_ri_20 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7222 {
7223 #define FLD(f) abuf->fields.fmt_empty.f
7224   sem_status status = SEM_STATUS_NORMAL;
7225   mepcore1_scache* abuf = sem;
7226   unsigned long long written = 0;
7227   PCADDR pc = abuf->addr;
7228   PCADDR npc = pc + 2;
7229
7230   {
7231     USI opval = current_cpu->ri_exception (pc);
7232     if (UNLIKELY(current_cpu->trace_result_p))
7233       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7234     current_cpu->branch (opval, npc, status);
7235   }
7236
7237   current_cpu->done_cti_insn (npc, status);
7238   return status;
7239 #undef FLD
7240 }
7241
7242 // ********** ri-21: --reserved--
7243
7244 sem_status
7245 mepcore1_sem_ri_21 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7246 {
7247 #define FLD(f) abuf->fields.fmt_empty.f
7248   sem_status status = SEM_STATUS_NORMAL;
7249   mepcore1_scache* abuf = sem;
7250   unsigned long long written = 0;
7251   PCADDR pc = abuf->addr;
7252   PCADDR npc = pc + 2;
7253
7254   {
7255     USI opval = current_cpu->ri_exception (pc);
7256     if (UNLIKELY(current_cpu->trace_result_p))
7257       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7258     current_cpu->branch (opval, npc, status);
7259   }
7260
7261   current_cpu->done_cti_insn (npc, status);
7262   return status;
7263 #undef FLD
7264 }
7265
7266 // ********** ri-22: --reserved--
7267
7268 sem_status
7269 mepcore1_sem_ri_22 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7270 {
7271 #define FLD(f) abuf->fields.fmt_empty.f
7272   sem_status status = SEM_STATUS_NORMAL;
7273   mepcore1_scache* abuf = sem;
7274   unsigned long long written = 0;
7275   PCADDR pc = abuf->addr;
7276   PCADDR npc = pc + 2;
7277
7278   {
7279     USI opval = current_cpu->ri_exception (pc);
7280     if (UNLIKELY(current_cpu->trace_result_p))
7281       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7282     current_cpu->branch (opval, npc, status);
7283   }
7284
7285   current_cpu->done_cti_insn (npc, status);
7286   return status;
7287 #undef FLD
7288 }
7289
7290 // ********** ri-23: --reserved--
7291
7292 sem_status
7293 mepcore1_sem_ri_23 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7294 {
7295 #define FLD(f) abuf->fields.fmt_empty.f
7296   sem_status status = SEM_STATUS_NORMAL;
7297   mepcore1_scache* abuf = sem;
7298   unsigned long long written = 0;
7299   PCADDR pc = abuf->addr;
7300   PCADDR npc = pc + 2;
7301
7302   {
7303     USI opval = current_cpu->ri_exception (pc);
7304     if (UNLIKELY(current_cpu->trace_result_p))
7305       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7306     current_cpu->branch (opval, npc, status);
7307   }
7308
7309   current_cpu->done_cti_insn (npc, status);
7310   return status;
7311 #undef FLD
7312 }
7313
7314 // ********** ri-26: --reserved--
7315
7316 sem_status
7317 mepcore1_sem_ri_26 (mep_ext1_cpu* current_cpu, mepcore1_scache* sem)
7318 {
7319 #define FLD(f) abuf->fields.fmt_empty.f
7320   sem_status status = SEM_STATUS_NORMAL;
7321   mepcore1_scache* abuf = sem;
7322   unsigned long long written = 0;
7323   PCADDR pc = abuf->addr;
7324   PCADDR npc = pc + 2;
7325
7326   {
7327     USI opval = current_cpu->ri_exception (pc);
7328     if (UNLIKELY(current_cpu->trace_result_p))
7329       current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << "  ";
7330     current_cpu->branch (opval, npc, status);
7331   }
7332
7333   current_cpu->done_cti_insn (npc, status);
7334   return status;
7335 #undef FLD
7336 }
7337