Pristine Ack-5.5
[Ack-5.5.git] / mach / sun3 / ce / EM_table
1 #define small(x) ((x)>=1 && (x)<=8)
2
3 /******************************************************************************/
4 /*                                                                            */
5 /*                      Group 1 : Load instructions                           */
6 /*                                                                            */
7 /******************************************************************************/
8
9 /*      a6 : local base.
10  *      sp : stack pointer
11  */
12
13 C_loc           ==>     "pea ($1)".
14
15 C_lol           ==>     "move.l ($1, a6), -(sp)". 
16
17 C_loe..         ==>     "move.l ($1+$2), -(sp)".
18
19 C_lil           ==>     "move.l ([$1,a6]), -(sp)".
20
21 C_lof           ==>     "move.l (sp)+, a0";
22                         "move.l ($1,a0),-(sp)".
23
24 C_lal           ==>     "pea ($1,a6)".
25         
26 C_lae..         ==>     "pea ($1+$2)".
27
28 C_lxl           
29         $1 == 0         ==>     "move.l a6, -(sp)".
30         $1 == 1         ==>     "move.l (8, a6), -(sp)".
31         default         ==>     "move.l (8, a6), a0";
32                                 "move.l #$1-2, d0";
33                                 "1: move.l (8,a0), a0";
34                                 "dbf d0, 1b";
35                                 "move.l a0, -(sp)".
36
37 C_lxa
38         $1 == 0         ==>     "pea (8,a6)".
39         $1 == 1         ==>     "pea ([8,a6],8)".
40         default         ==>     "move.l (8, a6), a0";
41                                 "move.l #$1-2, d0";
42                                 "1: move.l (8,a0), a0";
43                                 "dbf d0, 1b";
44                                 "pea (8,a0)".
45
46 C_loi           
47         $1 == 1         ==>     "move.l (sp)+, a0";
48                                 "clr.l -(sp)";
49                                 "move.b (a0), (3,sp)".
50         $1 == 2         ==>     "move.l (sp)+, a0";
51                                 "clr.l -(sp)";
52                                 "move.w (a0), (2,sp)".
53         $1 == 4         ==>     "move.l (sp)+, a0";
54                                 "move.l (a0),-(sp)".
55         $1 == 8         ==>     "move.l (sp)+, a0";
56                                 "move.l (4,a0),-(sp)";
57                                 "move.l (a0), -(sp)".
58         $1 % 4 == 0     ==>     "move.l (sp)+, a0";
59                                 "move.l #$1/4, d0";
60                                 "add.l #$1, a0";        
61                                 "1:";
62                                 "move.l -(a0), -(sp)";
63                                 "sub.l #1, d0";
64                                 "bne 1b".
65         default         ==>     arg_error( "loi", $1).
66
67
68 C_los           
69         $1 == 4         ==>     "jsr (.los)".
70         default         ==>     arg_error( "los", $1).
71
72 C_ldl           ==>     "move.l ($1+4, a6), -(sp)";
73                         "move.l ($1, a6), -(sp)".
74
75 C_lde..         ==>     "move.l ($1+$2+4), -(sp)";
76                         "move.l ($1+$2), -(sp)".
77
78 C_ldf           ==>     "move.l (sp)+, a0";
79                         "move.l ($1+4,a0),-(sp)";
80                         "move.l ($1,a0), -(sp)".
81
82 C_lpi           ==>     "pea ($1)".
83
84
85 /******************************************************************************/
86 /*                                                                            */
87 /*                      Group 2 : Store instructions                          */
88 /*                                                                            */
89 /******************************************************************************/
90
91 C_stl           ==>     "move.l (sp)+, ($1,a6)".
92
93 C_ste..         ==>     "move.l (sp)+, ($1+$2)".
94
95 C_sil           ==>     "move.l (sp)+, ([$1,a6])".
96
97 C_stf           ==>     "move.l (sp)+, a0";
98                         "move.l (sp)+, ($1,a0)".
99
100 C_sti           
101         $1 == 1         ==>     "move.l (sp)+, a0";     
102                                 "move.l (sp)+, d0";
103                                 "move.b d0, (a0)".
104         $1 == 2         ==>     "move.l (sp)+, a0";
105                                 "move.l (sp)+, d0";
106                                 "move.w d0, (a0)".
107         $1 == 4         ==>     "move.l (sp)+, a0";
108                                 "move.l (sp)+, (a0)".
109         $1 == 8         ==>     "move.l (sp)+, a0";
110                                 "move.l (sp)+, (a0)+";
111                                 "move.l (sp)+, (a0)".
112         $1 % 4 == 0     ==>     "move.l (sp)+, a0";
113                                 "move.l #$1/4, d0";
114                                 "1:move.l (sp)+, (a0)+";
115                                 "sub.l #1, d0";
116                                 "bne 1b".
117         default         ==>     arg_error( "sti", (arith) $1).
118
119
120 C_sts           ==>     "jsr (.sts)".
121
122 C_sdl           ==>     "move.l (sp)+, ($1,a6)";
123                         "move.l (sp)+, ($1+4,a6)".
124
125 C_sde..         ==>     "move.l (sp)+, ($1+$2)";
126                         "move.l (sp)+, ($1+$2+4)".
127
128 C_sdf           ==>     "move.l (sp)+, a0";
129                         "move.l (sp)+, ($1,a0)";
130                         "move.l (sp)+, ($1+4,a0)".
131
132 /******************************************************************************/
133 /*                                                                            */
134 /*              Group 3 : Integer arithmetic                                  */
135 /*                                                                            */
136 /******************************************************************************/
137
138 C_adi           
139         $1 == 4         ==>     "move.l (sp)+, d0";
140                                 "add.l d0, (sp)".
141         default         ==>     arg_error( "adi", $1).
142
143 C_sbi           
144         $1 == 4         ==>     "move.l (sp)+, d0";
145                                 "sub.l d0, (sp)".
146         default         ==>     arg_error( "sbi", $1).
147
148 C_mli
149         $1 == 4         ==>     "move.l (sp)+, d0";
150                                 "muls.l (sp)+, d0";
151                                 "move.l d0,-(sp)".
152         default         ==>     arg_error( "mli", $1).
153
154 C_dvi           
155         $1 == 4         ==>     "move.l (sp)+, d0";
156                                 "move.l (sp)+, d1";
157                                 "divs.l d0, d1";
158                                 "move.l d1,-(sp)".
159         default         ==>     arg_error( "dvi", $1).
160
161 C_rmi   
162         $1 == 4         ==>     "move.l (sp)+, d0";
163                                 "move.l (sp), d1";
164                                 "move.l d0,(sp)";
165                                 "divsl.l (sp)+, d0:d1";
166                                 "move.l d0,-(sp)".
167         default         ==>     arg_error( "rmi", $1).
168
169 C_ngi           
170         $1 == 4         ==>     "neg.l (sp)".
171         default         ==>     arg_error( "ngi", $1).
172
173
174 C_sli           
175         $1 == 4         ==>     "move.l (sp)+, d0";
176                                 "move.l (sp)+, d1";
177                                 "asl.l d0, d1";
178                                 "move.l d1,-(sp)".
179         default         ==>     arg_error( "sli", $1).
180
181 C_sri           
182         $1 == 4         ==>     "move.l (sp)+, d0";
183                                 "move.l (sp)+, d1";
184                                 "asr.l d0, d1";
185                                 "move.l d1,-(sp)".
186         default         ==>     arg_error( "sri", $1).
187
188
189 /******************************************************************************/
190 /*                                                                            */
191 /*              Group 4 : Unsigned arithmetic                                 */
192 /*                                                                            */
193 /******************************************************************************/
194
195
196 C_adu           ==>     C_adi( w).
197
198 C_sbu           ==>     C_sbi( w).
199
200 C_mlu
201         $1 == 4         ==>     "move.l (sp)+, d0";
202                                 "mulu.l (sp)+, d0";
203                                 "move.l d0, -(sp)".
204         default         ==>     arg_error( "mlu", $1).
205
206 C_dvu           
207         $1 == 4         ==>     "move.l (sp)+, d0";
208                                 "move.l (sp)+, d1";
209                                 "divu.l d0, d1";
210                                 "move.l d1, -(sp)".
211         default         ==>     arg_error( "dvu", $1).
212
213 C_rmu           
214         $1 == 4         ==>     "move.l (sp)+, d0";
215                                 "move.l (sp), d1";
216                                 "move.l d0, (sp)";
217                                 "divul.l (sp)+, d0:d1";
218                                 "move.l d0, -(sp)".
219         default         ==>     arg_error( "rmu", $1).
220
221 C_slu           ==>     C_sli( w).
222
223 C_sru
224         $1 == 4         ==>     "move.l (sp)+, d0";
225                                 "move.l (sp)+, d1";
226                                 "lsr.l d0, d1";
227                                 "move.l d1, -(sp)".
228         default         ==>     arg_error( "sru", $1).
229
230
231 /******************************************************************************/
232 /*                                                                            */
233 /*              Group 5 : Floating point arithmetic                           */
234 /*                                                                            */
235 /******************************************************************************/
236
237 C_adf   
238         $1 == 4         ==>     "jsr (adf4)".
239         $1 == 8         ==>     "jsr (adf8)".
240         default         ==>     arg_error( "adf", $1).
241
242 C_sbf   
243         $1 == 4         ==>     "jsr (sbf4)".
244         $1 == 8         ==>     "jsr (sbf8)".
245         default         ==>     arg_error( "sbf", $1).
246
247 C_mlf   
248         $1 == 4         ==>     "jsr (mlf4)".
249         $1 == 8         ==>     "jsr (mlf8)".
250         default         ==>     arg_error( "mlf", $1).
251
252 C_dvf   
253         $1 == 4         ==>     "jsr (dvf4)".
254         $1 == 8         ==>     "jsr (dvf8)".
255         default         ==>     arg_error( "dvf", $1).
256
257 C_ngf   ==>                     "move.l #7,d0";
258                                 "bchg d0,(sp)".
259
260 C_fif   
261         $1 == 4         ==>     "jsr (fif4)".
262         $1 == 8         ==>     "jsr (fif8)".
263         default         ==>     arg_error( "fif", $1).
264
265 C_fef   
266         $1 == 4         ==>     "jsr (fef4)".
267         $1 == 8         ==>     "jsr (fef8)".
268         default         ==>     arg_error( "fef", $1).
269
270 /******************************************************************************/
271 /*                                                                            */
272 /*              Group 6 : Pointer arithmetic                                  */
273 /*                                                                            */
274 /******************************************************************************/
275
276 C_adp           
277         $1 == 0         ==>     .
278         default         ==>     "add.l #$1, (sp)".
279
280 C_ads
281         $1 == 4         ==>     "move.l (sp)+, d0";
282                                 "add.l d0, (sp)".
283         default         ==>     arg_error( "ads", $1).
284
285 C_sbs           
286         $1 == 4         ==>     "move.l (sp)+, d0";
287                                 "sub.l d0, (sp)".
288         default         ==>     arg_error( "sbs", $1).
289
290 /******************************************************************************/
291 /*                                                                            */
292 /*              Group 7 : Increment/decrement/zero                            */
293 /*                                                                            */
294 /******************************************************************************/
295
296 C_inc           ==>     "add.l #1, (sp)".
297
298 C_inl           ==>     "add.l #1, ($1, a6)".
299
300 C_ine..         ==>     "add.l #1, ($1+$2)".
301
302 C_dec           ==>     "sub.l #1, (sp)".
303
304 C_del           ==>     "sub.l #1, ($1, a6)".
305
306 C_dee..         ==>     "sub.l #1, ($1+$2)".
307
308 C_zrl           ==>     "clr.l ($1, a6)".
309
310 C_zre..         ==>     "clr.l ($1+$2)".
311
312 C_zrf           ==>     C_zer( $1).
313
314 C_zer
315         $1 == 4         ==>     "clr.l -(sp)".
316         $1 == 8         ==>     "clr.l -(sp)";
317                                 "clr.l -(sp)".
318         default         ==>     "move.l #$1/4, d0";
319                                 "1:";
320                                 "clr.l -(sp)";
321                                 "sub.l #1, d0";
322                                 "bne 1b".
323
324 /******************************************************************************/
325 /*                                                                            */
326 /*              Group 8 : Convert                                             */
327 /*                                                                            */
328 /******************************************************************************/
329
330 /* cii, ciu, cuu, cui are assumed to be called with legal arguments only */
331
332 C_cii           ==>     "   move.l (sp)+, d0";
333                         "   move.l (sp)+, d1";
334                         "   cmp.l d1, d0";
335                         "   ble 4f";
336                         "   move.l (sp), d0";
337                         "   cmp.l #1, d1";
338                         "   bne 2f";
339                         "   ext.w d0";
340                         "2: ext.l d0";
341                         "   move.l d0,(sp)";
342                         "4:".
343
344 C_cuu           ==>     "lea    (8,sp),sp".
345
346 C_ciu           ==>     C_cuu().
347
348 C_cui           ==>     C_cuu().
349
350 C_cfi           ==>     "jsr (cfi)".
351
352 C_cfu           ==>     "jsr (cfu)".
353
354 C_cff           ==>     "jsr (cff)".
355
356 C_cif           ==>     "jsr (cif)".
357
358 C_cuf           ==>     "jsr (cuf)".
359
360 /******************************************************************************/
361 /*                                                                            */
362 /*              Group 9 : Logical                                             */
363 /*                                                                            */
364 /******************************************************************************/
365
366 C_and           
367         $1 == 4         ==>     "move.l (sp)+, d0";
368                                 "and.l d0, (sp)".
369         default         ==>     "move.l #$1/4, d0";
370                                 "lea ($1, sp), a0";
371                                 "1:";
372                                 "move.l (sp)+, d1";
373                                 "and.l d1, (a0)+";
374                                 "sub.l #1, d0";
375                                 "bne 1b".
376
377 C_ior           
378         $1 == 4         ==>     "move.l (sp)+, d0";
379                                 "or.l d0, (sp)".
380         default         ==>     "move.l #$1/4, d0";
381                                 "lea ($1, sp), a0";
382                                 "1:";
383                                 "move.l (sp)+, d1";
384                                 "or.l d1, (a0)+";
385                                 "sub.l #1, d0";
386                                 "bne 1b".
387
388 C_xor           
389         $1 == 4         ==>     "move.l (sp)+, d0";
390                                 "eor.l d0, (sp)".
391         default         ==>     "move.l #$1/4, d0";
392                                 "lea ($1, sp), a0";
393                                 "1:";
394                                 "move.l (sp)+, d1";
395                                 "eor.l d1, (a0)+";
396                                 "sub.l #1, d0";
397                                 "bne 1b".
398
399 C_com   
400         $1 == 4         ==>     "not.l (sp)".
401         $1 == 8         ==>     "not.l (sp)";
402                                 "not.l (4, sp)".
403         default         ==>     "move.l #$1/4, d0";
404                                 "move.l sp, a0";
405                                 "1:";
406                                 "not.l (a0)+";
407                                 "sub.l #1, d0";
408                                 "bne 1b".
409
410 C_rol
411         $1 == 4         ==>     "move.l (sp)+, d0";
412                                 "move.l (sp)+, d1";
413                                 "rol.l d0, d1";
414                                 "move.l d1, -(sp)".
415         default         ==>     arg_error( "rol", $1).
416
417 C_ror
418         $1 == 4         ==>     "move.l (sp)+, d0";
419                                 "move.l (sp)+, d1";
420                                 "ror.l d0, d1";
421                                 "move.l d1, -(sp)".
422         default         ==>     arg_error( "ror", $1).
423
424
425 /******************************************************************************/
426 /*                                                                            */
427 /*              Group 10 : Sets                                               */
428 /*                                                                            */
429 /******************************************************************************/
430
431 C_inn
432         $1 == 4         ==>     "move.l (sp)+, d0";
433                                 "move.l (sp)+, d1";
434                                 "btst d0, d1";
435                                 "sne d1";
436                                 "and.l #1, d1";
437                                 "move.l d1, -(sp)".
438         default         ==>     "move.l (sp)+, d0";
439                                 "move.l #$1, d1";
440                                 "jsr (.inn)";
441                                 "move.l d0, -(sp)".
442
443 C_inn_narg      ==>     "move.l (sp)+, d1";
444                         "move.l (sp)+, d0";
445                         "jsr (.inn)";
446                         "move.l d0, -(sp)".
447   
448 C_set
449         $1 == 4         ==>     "move.l (sp)+, d0";
450                                 "clr.l d1";
451                                 "bset d0, d1";
452                                 "move.l d1, -(sp)".
453         default         ==>     "move.l (sp)+, d0";
454                                 "move.l #$1, d1";
455                                 "jsr (.set)".
456
457 C_set_narg      ==>     "move.l (sp)+, d1";
458                         "move.l (sp)+, d0";
459                         "jsr (.set)".
460
461 /******************************************************************************/
462 /*                                                                            */
463 /*              Group 11 : Array                                              */
464 /*                                                                            */
465 /******************************************************************************/
466
467 C_lar           ==>     "move.l #$1, d0";
468                         "jsr (.lar)".
469
470 C_lar_narg      ==>     "move.l (sp)+, d0";
471                         "jsr (.lar)".
472
473 C_sar           ==>     "move.l #$1, d0";
474                         "jsr (.sar)".
475
476 C_sar_narg      ==>     "move.l (sp)+, d0";
477                         "jsr (.sar)".
478
479 C_aar           ==>     "move.l #$1, d0";
480                         "jsr (.aar)";
481                         "move.l a0, -(sp)".
482
483 C_aar_narg      ==>     "move.l (sp)+, d0";
484                         "jsr (.aar)";
485                         "move.l a0, -(sp)".
486
487 /******************************************************************************/
488 /*                                                                            */
489 /*              Group 12 : Compare                                            */
490 /*                                                                            */
491 /******************************************************************************/
492
493 C_cmi           
494         $1 == 4         ==>     "clr.l d0";
495                                 "cmp.l (sp)+, (sp)+";
496                                 "beq 2f";
497                                 "blt 1f";
498                                 "add.l #1, d0";
499                                 "bra 2f";
500                                 "1 : sub.l #1, d0";
501                                 "2 : move.l d0, -(sp)".
502         default         ==>     "move.l #$1, d0";
503                                 "jsr (.cmi)";
504                                 "move.l d0, -(sp)".
505
506
507 C_cmu           
508         $1 == 4         ==>     "clr.l d0";
509                                 "cmp.l (sp)+, (sp)+";
510                                 "beq 2f";
511                                 "bcs 1f";
512                                 "add.l #1, d0";
513                                 "bra 2f";
514                                 "1 : sub.l #1, d0";
515                                 "2 : move.l d0, -(sp)".
516
517         default         ==>     "move.l #$1, d0";
518                                 "jsr (.cmu)";
519                                 "move.l d0, -(sp)".
520
521 C_cmu_narg      ==>     "move.l (sp)+, d0";
522                         "jsr (.cmu)";
523                         "move.l d0, -(sp)".
524
525 C_cms           ==>     "move.l #$1, d0";
526                         "jsr (.cms)";
527                         "move.l d0, -(sp)".
528
529 C_cms_narg      ==>     "move.l (sp)+, d0";
530                         "jsr (.cms)";
531                         "move.l d0, -(sp)".
532
533 C_cmp           ==>     C_cmu( (arith)4).
534
535 C_tlt           ==>     "move.l (sp), d0";
536                         "move.l #1, (sp)";
537                         "tst.l d0";
538                         "blt 1f";
539                         "clr.l (sp)";
540                         "1:".
541
542 C_tle           ==>     "move.l (sp), d0";
543                         "move.l #1, (sp)";
544                         "tst.l d0";
545                         "ble 1f";
546                         "clr.l (sp)";
547                         "1:".
548
549 C_teq           ==>     "move.l (sp), d0";
550                         "move.l #1, (sp)";
551                         "tst.l d0";
552                         "beq 1f";
553                         "clr.l (sp)";
554                         "1:".
555
556 C_tne           ==>     "move.l (sp), d0";
557                         "move.l #1, (sp)";
558                         "tst.l d0";
559                         "bne 1f";
560                         "clr.l (sp)";
561                         "1:".
562
563 C_tge           ==>     "move.l (sp), d0";
564                         "move.l #1, (sp)";
565                         "tst.l d0";
566                         "bge 1f";
567                         "clr.l (sp)";
568                         "1:".
569
570 C_tgt           ==>     "move.l (sp), d0";
571                         "move.l #1, (sp)";
572                         "tst.l d0";
573                         "bgt 1f";
574                         "clr.l (sp)";
575                         "1:".
576
577 C_cmf
578         $1 == 4 ==>     "jsr (cmf4)".
579         $1 == 8 ==>     "jsr (cmf8)".
580         default ==>     arg_error("cmf", $1).
581
582 /******************************************************************************/
583 /*                                                                            */
584 /*              Group 13 : Branch                                             */
585 /*                                                                            */
586 /******************************************************************************/
587
588 C_bra           ==>     "bra $1".
589
590 C_blt           ==>     "move.l (sp)+, d0";
591                         "cmp.l (sp)+, d0";
592                         "bgt $1".
593
594 C_ble           ==>     "move.l (sp)+, d0";
595                         "cmp.l (sp)+, d0";
596                         "bge $1".
597
598 C_beq           ==>     "move.l (sp)+, d0";
599                         "cmp.l (sp)+, d0";
600                         "beq $1".       
601
602 C_bne           ==>     "move.l (sp)+, d0";
603                         "cmp.l (sp)+, d0";
604                         "bne $1".
605
606 C_bge           ==>     "move.l (sp)+, d0";
607                         "cmp.l (sp)+, d0";
608                         "ble $1".
609
610 C_bgt           ==>     "move.l (sp)+, d0";
611                         "cmp.l (sp)+, d0";
612                         "blt $1".
613
614 C_zlt           ==>     "tst.l (sp)+";
615                         "blt $1".
616
617 C_zle           ==>     "tst.l (sp)+";
618                         "ble $1".
619
620 C_zeq           ==>     "tst.l (sp)+";
621                         "beq $1".
622
623 C_zne           ==>     "tst.l (sp)+";
624                         "bne $1".
625
626 C_zge           ==>     "tst.l (sp)+";
627                         "bge $1".
628
629 C_zgt           ==>     "tst.l (sp)+";
630                         "bgt $1".
631
632
633 /******************************************************************************/
634 /*                                                                            */
635 /*                      Group 14 : Procedure call instructions                */
636 /*                                                                            */
637 /******************************************************************************/
638
639 C_cai           ==>     "move.l (sp)+, a0";
640                         "jsr (a0)".
641
642 C_cal           ==>     "jsr ($1)".
643
644 C_lfr           
645         $1 == 4         ==>     "move.l d0, -(sp)".
646         $1 == 8         ==>     "move.l d1, -(sp)";
647                                 "move.l d0, -(sp)".
648         default         ==>     arg_error( "lfr", $1).
649
650 C_ret           
651         $1 == 0         ==>     "unlk a6";
652                                 "rts".
653         $1 == 4         ==>     "move.l (sp)+, d0";
654                                 "unlk a6";
655                                 "rts".
656         $1 == 8         ==>     "move.l (sp)+, d0";
657                                 "move.l (sp)+, d1";
658                                 "unlk a6";
659                                 "rts".
660         default         ==>     arg_error( "ret", $1).
661
662 /******************************************************************************/
663 /*                                                                            */
664 /*                      Group 15 : Miscellaneous instructions                 */
665 /*                                                                            */
666 /******************************************************************************/
667
668 C_asp           
669         small( $1)      ==>     "add.l #$1, sp".
670         default         ==>     "lea ($1, sp), sp".
671
672 C_ass           
673         $1 == 4         ==>     "add.l (sp)+, sp".
674         default         ==>     arg_error( "ass", $1).
675
676 C_blm           
677         $1 == 4         ==>     "move.l (sp)+, a0";
678                                 "move.l (sp)+, a1";
679                                 "move.l (a1), (a0)".
680         $1 == 8         ==>     "move.l (sp)+, a0";
681                                 "move.l (sp)+, a1";
682                                 "move.l (a1), (a0)";
683                                 "move.l (4, a1), (4, a0)".
684         default         ==>     "move.l (sp)+, a0";
685                                 "move.l (sp)+, a1";
686                                 "move.l #$1/4, d0";
687                                 "1:";
688                                 "move.l (a1)+, (a0)+";
689                                 "sub.l #1, d0";
690                                 "bne 1b".
691
692 C_bls           
693         $1 == 4         ==>     "move.l (sp)+, d0";
694                                 "move.l (sp)+, a0";
695                                 "move.l (sp)+, a1";
696                                 "asr.l #2, d0";
697                                 "beq 2f";
698                                 "1:";
699                                 "move.l (a1)+, (a0)+";
700                                 "sub.l #1, d0";
701                                 "bne 1b";
702                                 "2:".
703         default         ==>     arg_error( "bls", $1).
704
705
706 C_csa           
707         $1 == 4         ==>     "move.l (sp)+,a0";
708                                 "move.l (sp)+,d0";
709                                 "jmp (.csa)".
710         default         ==>     arg_error( "csa", $1).
711
712 C_csb           
713         $1 == 4         ==>     "move.l (sp)+,a0";
714                                 "move.l (sp)+,d0";
715                                 "jmp (.csb)".
716         default         ==>     arg_error( "csb", $1).
717
718 C_dch           ==>     C_loi( (arith)4).
719
720 C_dup           
721         $1 == 4         ==>     "move.l (sp), -(sp)".
722         $1 == 8         ==>     "move.l (4, sp), -(sp)";
723                                 "move.l (4, sp), -(sp)".
724         default         ==>     "move.l #$1/4, d0";
725                                 "1:";
726                                 "move.l ($1-4, sp), -(sp)";
727                                 "sub.l #1, d0";
728                                 "bne 1b".
729
730 C_dus           
731         $1 == 4         ==>     "move.l (sp)+, d0";
732                                 "lea (0, sp, d0.l*1), a0";
733                                 "asr.l #2, d0";
734                                 "beq 2f";
735                                 "1:";
736                                 "move.l -(a0), -(sp)";
737                                 "sub.l #1, d0";
738                                 "bne 1b";
739                                 "2:".
740         default         ==>     arg_error( "dus", $1).
741
742 C_exg           ==>     "move.l #$1, d0";
743                         "jsr (.exg)".
744
745 C_fil..         ==>     "move.l #$1+$2, (.filn)".
746
747 C_gto..         ==>     "move.l #$1+$2, a0";
748                         "move.l (8, a0), a6";
749                         "move.l (4, a0), sp";
750                         "jmp ([0,a0], 0)".
751
752 C_lim           ==>     "move.l (.trpim), -(sp)".
753
754 C_lin           ==>     "move.l #$1, (.lino)".
755
756 C_lni           ==>     "add.l #1, (.lino)".
757
758 C_lor
759         $1 == 0         ==>     "move.l a6, -(sp)".
760         $1 == 1         ==>     "move.l sp, -(sp)".
761         $1 == 2         ==>     "move.l (.reghp), -(sp)".
762         default         ==>     arg_error( "lor", $1).
763
764 C_lpb           ==>     C_adp( (arith)8).
765
766 C_mon           ==>     "jsr (.mon)".
767
768 C_nop           ==>     .
769
770 C_rck           
771         $1 == 4         ==>     "move.l (sp)+, a0";
772                                 "move.l (sp)+, d0";
773                                 "cmp2.l (a0), d0";
774                                 "bcc 1f";
775                                 "pea (1)";      /* push constant 1 == ERANGE */
776                                 "jsr (.trp)";
777                                 "1: move.l d0, -(sp)".
778         default         ==>     arg_error( "rck", $1).
779
780 C_rtt           ==>     C_ret( (arith)0).
781
782 C_sig           ==>     "move.l (.trppc), a0";
783                         "move.l (sp)+, (.trppc)";
784                         "move.l a0, -(sp)".
785
786 C_sim           ==>     "move.l (sp)+, (.trpim)".
787
788 C_str
789         $1 == 0         ==>     "move.l (sp)+, a6".
790         $1 == 1         ==>     "move.l (sp)+, sp".
791         $1 == 2         ==>     "jsr (.strhp)".
792         default         ==>     arg_error( "str", $1).
793
794 C_trp           ==>     "jsr (.trp)".
795
796 /*****************************************************************************/
797
798 ..icon  
799         $2 == 1         ==>     gen1( (ONE_BYTE) atoi( $1)).
800         $2 == 2         ==>     gen2( (TWO_BYTES) atoi( $1)).
801         $2 == 4         ==>     gen4( (FOUR_BYTES) atol( $1)).
802         default         ==>     arg_error( "icon", $2).
803
804 ..ucon  
805         $2 == 1         ==>     gen1( (ONE_BYTE) atoi( $1)).
806         $2 == 2         ==>     gen2( (TWO_BYTES) atoi( $1)).
807         $2 == 4         ==>     gen4( (FOUR_BYTES) atol( $1)).
808         default         ==>     arg_error( "icon", $2).
809
810 ..fcon                  ==>     con_float($1, $2).
811
812 /*****************************************************************************/
813
814 C_prolog                ==>     .
815
816 C_jump                  ==>     "bra $1".
817
818 C_locals                ==>     "link a6, #-$1".
819
820 C_db_sline              ==>     .