779 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			779 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
/******************************************************************************/
 | 
						|
/*                                                                            */
 | 
						|
/*			Group 1 : Load instructions			      */
 | 
						|
/*							 		      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
 | 
						|
C_loc		==>	"pushl ~$1".
 | 
						|
 | 
						|
C_ldc		==>	"movq ~$1, -(sp)".
 | 
						|
 | 
						|
C_lol		
 | 
						|
	$1 < 0 	==> 	"pushl $1(fp)".
 | 
						|
	default		==> 	"pushl $1+4(ap)".
 | 
						|
 | 
						|
C_loe..		==> 	"pushl $1 + $2". 
 | 
						|
 | 
						|
C_lil		
 | 
						|
	$1 < 0	==> 	"movl $1(fp), r0";
 | 
						|
				"pushl (r0)".
 | 
						|
	default		==> 	"movl $1+4(ap), r0";
 | 
						|
				"pushl (r0)".
 | 
						|
 | 
						|
C_lof		==> 	"movl (sp)+, r0";
 | 
						|
			"pushl $1(r0)".
 | 
						|
 | 
						|
C_lal	
 | 
						|
	$1 < 0	==> 	"pushal $1(fp)".
 | 
						|
	default		==> 	"pushal $1+4(ap)".
 | 
						|
	
 | 
						|
C_lae..		==> 	"pushal $1 + $2".
 | 
						|
 | 
						|
C_lxl		
 | 
						|
  	$1 == 0	==>	"pushl fp".
 | 
						|
  	$1 == 1	==>	"pushl 4(ap)".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .lxl";
 | 
						|
				"pushl r0".
 | 
						|
 | 
						|
C_lxa
 | 
						|
  	$1 == 0 	==>	"addl3 ~4, ap, -(sp)".
 | 
						|
  	$1 == 1 	==>	"movl 4(ap), r0";
 | 
						|
				"jsb .lpb";
 | 
						|
				"pushl r0".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .lxa";
 | 
						|
				"pushl r0".
 | 
						|
 | 
						|
C_loi		
 | 
						|
  	$1 == 1	==>	"movl (sp)+, r0";
 | 
						|
				"clrl -(sp)";
 | 
						|
				"movb (r0), (sp)".
 | 
						|
  	$1 == 2	==>	"movl (sp)+, r0";
 | 
						|
				"clrl -(sp)";
 | 
						|
				"movw (r0), (sp)".
 | 
						|
  	$1 == 4	==>	"movl (sp)+, r0";
 | 
						|
				"pushl (r0)".
 | 
						|
  	$1 == 8	==>	"movl (sp)+, r0";
 | 
						|
				"movq (r0), -(sp)".
 | 
						|
  	$1 % 4 == 0	==>	"movl (sp)+, r0";
 | 
						|
				"movl ~$1/4, r1";
 | 
						|
				"addl2 ~$1, r0";	
 | 
						|
				"2:";
 | 
						|
				"pushl -(r0)";
 | 
						|
				"sobgtr r1, 2b".
 | 
						|
	default		==> 	arg_error( "loi", $1).
 | 
						|
 | 
						|
 | 
						|
C_los		==> 	"movl ~$1, r0";
 | 
						|
			"jsb .los".
 | 
						|
 | 
						|
 | 
						|
C_los_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .los".
 | 
						|
 | 
						|
C_ldl		
 | 
						|
	$1 < 0	==> 	"movq $1(fp), -(sp)".
 | 
						|
	default		==> 	"movq $1+4(ap), -(sp)".
 | 
						|
 | 
						|
C_lde..		==> 	"movq $1 + $2, -(sp)".
 | 
						|
		
 | 
						|
C_ldf		==> 	"movl (sp)+, r0";
 | 
						|
			"movq $1(r0), -(sp)".
 | 
						|
 | 
						|
C_lpi		==> 	"pushal $1".
 | 
						|
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*                                                                            */
 | 
						|
/*			Group 2 : Store instructions			      */
 | 
						|
/*							 		      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_stl		
 | 
						|
	$1 < 0 	==> 	"movl (sp)+, $1(fp)".
 | 
						|
	default		==> 	"movl (sp)+, $1+4(ap)".
 | 
						|
 | 
						|
C_ste..		==> 	"movl (sp)+, $1 + $2".
 | 
						|
 | 
						|
C_sil		
 | 
						|
	$1 < 0 	==> 	"movl $1(fp) , r0";
 | 
						|
				"movl (sp)+, (r0)".
 | 
						|
	default		==> 	"movl $1+4(ap), r0";
 | 
						|
				"movl (sp)+, (r0)".
 | 
						|
 | 
						|
C_stf		==> 	"movl (sp)+, r0";
 | 
						|
			"movl (sp)+, $1(r0)".
 | 
						|
 | 
						|
C_sti		
 | 
						|
			
 | 
						|
  	$1 == 1	==>	"movl (sp)+, r0";	
 | 
						|
				"movl (sp)+, r1";
 | 
						|
				"movb r1, (r0)".
 | 
						|
  	$1 == 2	==>	"movl (sp)+, r0";
 | 
						|
				"movl (sp)+, r1";
 | 
						|
				"movw r1, (r0)".
 | 
						|
  	$1 == 4	==>	"movl (sp)+, r0";
 | 
						|
				"movl (sp)+, (r0)".
 | 
						|
  	$1 == 8	==>	"movl (sp)+, r0";
 | 
						|
				"movq (sp)+, (r0)".
 | 
						|
  	$1 % 4 == 0  ==>	"movl (sp)+, r0";
 | 
						|
				"movl ~$1/4, r1";
 | 
						|
				"2:";
 | 
						|
				"movl (sp)+, (r0)+";
 | 
						|
				"sobgtr r1, 2b".
 | 
						|
	default		==> 	arg_error( "sti", (arith) $1).
 | 
						|
 | 
						|
 | 
						|
C_sts		==> 	"movl ~$1, r0";
 | 
						|
			"jsb .sts".
 | 
						|
 | 
						|
C_sts_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .sts".
 | 
						|
 | 
						|
C_sdl		
 | 
						|
	$1 < 0  	==> 	"movq (sp)+, $1(fp)".
 | 
						|
	default		==> 	"movq (sp)+, $1+4(ap)".
 | 
						|
 | 
						|
C_sde..		==> 	"movq (sp)+, $1 + $2".
 | 
						|
 | 
						|
C_sdf		==> 	"movl (sp)+, r0";
 | 
						|
			"movq (sp)+, $1(r0)".
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 3 : Integer arithmetic				      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_adi		
 | 
						|
	$1 == 4	==>	"addl2 (sp)+, (sp)".
 | 
						|
	default		==> 	arg_error( "adi", $1).
 | 
						|
 | 
						|
C_sbi
 | 
						|
	$1 == 4	==> 	"subl2 (sp)+, (sp)".
 | 
						|
	default		==> 	arg_error( "sbi", $1).
 | 
						|
 | 
						|
C_mli
 | 
						|
	$1 == 4	==> 	"mull2 (sp)+, (sp)".
 | 
						|
	default		==>	arg_error( "mli", $1).
 | 
						|
 | 
						|
C_dvi		
 | 
						|
	$1 == 4	==> 	"divl2 (sp)+, (sp)".
 | 
						|
	default		==> 	arg_error( "dvi", $1).
 | 
						|
 | 
						|
C_rmi	
 | 
						|
	$1 == 4	==> 	"divl3 (sp), 4(sp), r0";
 | 
						|
				"mull2 (sp)+, r0";
 | 
						|
				"subl2 r0, (sp)".
 | 
						|
	default		==>	arg_error( "rmi", $1).
 | 
						|
 | 
						|
C_ngi		
 | 
						|
	$1 == 4	==> 	"mnegl (sp), (sp)".
 | 
						|
	default 	==>	arg_error( "ngi", $1).
 | 
						|
 | 
						|
 | 
						|
C_sli		
 | 
						|
	$1 == 4	==> 	"clrl r0";
 | 
						|
				"cvtlb (sp)+, r0";
 | 
						|
				"ashl r0, (sp), (sp)".
 | 
						|
	default		==> 	arg_error( "sli", $1).
 | 
						|
 | 
						|
C_sri		
 | 
						|
	$1 == 4	==> 	"mnegl (sp)+, r0";
 | 
						|
				"clrl r1";
 | 
						|
				"cvtlb r0, r1";
 | 
						|
				"ashl r1, (sp), (sp)".
 | 
						|
	default		==>	arg_error( "sri", $1).
 | 
						|
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 4 : Unsigned arithmetic 				      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
 | 
						|
C_adu		==> 	C_adi( w).
 | 
						|
 | 
						|
C_sbu		==> 	C_sbi( w).
 | 
						|
 | 
						|
C_mlu		==> 	C_mli( w).
 | 
						|
 | 
						|
C_dvu		
 | 
						|
	$1 == 4	==> 	"jsb .dvu4";
 | 
						|
				"pushl r0".
 | 
						|
	default		==> 	arg_error( "dvu", $1).
 | 
						|
 | 
						|
C_rmu		
 | 
						|
	$1 == 4	==> 	"jsb .rmu4";
 | 
						|
				"pushl r0".
 | 
						|
	default		==> 	arg_error( "rmu", $1).
 | 
						|
 | 
						|
C_slu		==> 	C_sli( w).
 | 
						|
 | 
						|
C_sru		==> 	"movl ~$1, r0";
 | 
						|
			"jsb .sru".
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 5 : Floating point arithmetic 			      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_adf		
 | 
						|
	$1 == 4	==>	"addf2 (sp)+, (sp)".
 | 
						|
	$1 == 8	==>	"addd2 (sp)+, (sp)".
 | 
						|
	default		==> 	arg_error( "adf", $1).
 | 
						|
 | 
						|
C_sbf
 | 
						|
	$1 == 4	==> 	"subf2 (sp)+, (sp)".
 | 
						|
	$1 == 8	==> 	"subd2 (sp)+, (sp)".
 | 
						|
	default		==> 	arg_error( "sbf", $1).
 | 
						|
 | 
						|
C_mlf
 | 
						|
	$1 == 4	==> 	"mulf2 (sp)+, (sp)".
 | 
						|
	$1 == 8	==> 	"muld2 (sp)+, (sp)".
 | 
						|
	default		==>	arg_error( "mlf", $1).
 | 
						|
 | 
						|
C_dvf		
 | 
						|
	$1 == 4	==> 	"divf2 (sp)+, (sp)".
 | 
						|
	$1 == 8	==> 	"divd2 (sp)+, (sp)".
 | 
						|
	default		==> 	arg_error( "dvf", $1).
 | 
						|
 | 
						|
C_ngf		
 | 
						|
	$1 == 4	==> 	"mnegf (sp), (sp)".
 | 
						|
	$1 == 8	==> 	"mnegd (sp), (sp)".
 | 
						|
	default 	==>	arg_error( "ngf", $1).
 | 
						|
 | 
						|
C_fif	==>		"movl ~$1,r0";
 | 
						|
			"jsb .fif".
 | 
						|
 | 
						|
C_fef	==>		"movl ~$1,r0";
 | 
						|
			"jsb .fef".
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 6 : Pointer arithmetic 				      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_adp		==> 	"addl2 ~$1, (sp)".
 | 
						|
 | 
						|
C_ads
 | 
						|
  	$1 == 4	==>	"addl2 (sp)+, (sp)".
 | 
						|
  	default	==>	arg_error( "ads", $1).
 | 
						|
 | 
						|
C_sbs		
 | 
						|
  	$1 == 4	==>	"subl2 (sp)+, (sp)".
 | 
						|
  	default		==>	arg_error( "sbs", $1).
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 7 : Increment/decrement/zero			      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_inc		==> 	"incl (sp)".
 | 
						|
 | 
						|
C_inl		
 | 
						|
	$1 < 0 	==> 	"incl $1(fp)".
 | 
						|
	default 	==>	"incl $1+4(ap)".
 | 
						|
 | 
						|
C_ine..		==> 	"incl $1 + $2".
 | 
						|
 | 
						|
C_dec		==> 	"decl (sp)".
 | 
						|
 | 
						|
C_del		
 | 
						|
	$1 < 0	==> 	"decl $1(fp)".
 | 
						|
	default		==> 	"decl $1+4(ap)".
 | 
						|
 | 
						|
C_dee..		==> 	"decl $1 + $2".
 | 
						|
 | 
						|
C_zrl		
 | 
						|
	$1 < 0	==> 	"clrl $1(fp)".
 | 
						|
	default		==> 	"clrl $1+4(ap)".
 | 
						|
 | 
						|
C_zre..		==> 	"clrl $1 + $2".
 | 
						|
 | 
						|
C_zrf
 | 
						|
  	$1 == 4	==>	"clrl -(sp)".
 | 
						|
  	$1 == 8	==>	"clrq -(sp)".
 | 
						|
  	default		==>	arg_error( "zrf", $1).
 | 
						|
 | 
						|
C_zer
 | 
						|
  	$1 == 4	==>	"clrl -(sp)".
 | 
						|
  	$1 == 8	==>	"clrq -(sp)".
 | 
						|
  	default		==>	"movl ~$1/4, r0";
 | 
						|
				"1:";
 | 
						|
				"clrl -(sp)";
 | 
						|
				"sobgtr r0, 1b".
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 8 : Convert 					      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_cii		==> 	"jsb .cii".
 | 
						|
 | 
						|
C_cui		==> 	C_cuu().
 | 
						|
 | 
						|
C_cfi		==> 	"jsb .cfi".
 | 
						|
 | 
						|
C_cif		==> 	"jsb .cif".
 | 
						|
 | 
						|
C_cuf		==> 	"jsb .cuf".
 | 
						|
 | 
						|
C_cff		==> 	"jsb .cff".
 | 
						|
 | 
						|
C_ciu		==> 	C_cuu().
 | 
						|
 | 
						|
C_cuu		==> 	"addl2 ~8,sp".
 | 
						|
 | 
						|
C_cfu		==> 	"jsb .cfu".
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 9 : Logical 	 				      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_and		
 | 
						|
  	$1 == 4	==>	"mcoml (sp), (sp)";
 | 
						|
				"bicl2 (sp)+, (sp)".
 | 
						|
  	default		==>	"movl ~$1/4, r0";
 | 
						|
				"addl3 ~$1, sp, r1";
 | 
						|
				"1:";
 | 
						|
				"mcoml (sp), (sp)";
 | 
						|
				"bicl2 (sp)+, (r1)+";
 | 
						|
				"sobgtr r0, 1b".
 | 
						|
 | 
						|
C_ior		
 | 
						|
  	$1 == 4	==>	"bisl2 (sp)+, (sp)".
 | 
						|
  	default		==>	"movl ~$1/4, r0";
 | 
						|
				"addl3 ~$1, sp, r1";
 | 
						|
				"1:";
 | 
						|
				"bisl2 (sp)+, (r1)+";
 | 
						|
				"sobgtr r0, 1b".
 | 
						|
 | 
						|
C_xor		
 | 
						|
  	$1 == 4	==>	"xorl2 (sp)+, (sp)".
 | 
						|
	default		==>	"movl ~$1/4, r0";
 | 
						|
				"addl3 ~$1, sp, r1";
 | 
						|
				"1:";
 | 
						|
				"xorl2 (sp)+, (r1)+";
 | 
						|
				"sobgtr r0, 1b".
 | 
						|
 | 
						|
C_com	
 | 
						|
  	$1 == 4	==>	"mcoml (sp), (sp)".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .com".
 | 
						|
 | 
						|
C_rol	
 | 
						|
  	$1 == 4	==>	"clrl r0";
 | 
						|
				"cvtlb (sp)+, r0";
 | 
						|
				"rotl r0, (sp), (sp)".
 | 
						|
  	default		==>	arg_error( "rol", $1).
 | 
						|
 | 
						|
C_ror	
 | 
						|
  	$1 == 4	==>	"mnegl (sp)+, r0";
 | 
						|
				"clrl r1";
 | 
						|
				"cvtlb r0, r1";
 | 
						|
				"rotl r1, (sp), (sp)".
 | 
						|
  	default		==>	arg_error( "rol", $1).
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 10 : Sets 	 				      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_inn
 | 
						|
  	$1 == 4	==>	"mnegl (sp)+, r0";
 | 
						|
				"clrl r1";
 | 
						|
				"cvtlb r0, r1";
 | 
						|
				"ashl r1, (sp), (sp)";
 | 
						|
				"bicl2 ~~1, (sp)".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .inn";
 | 
						|
				"pushl r1".
 | 
						|
 | 
						|
C_inn_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .inn";
 | 
						|
			"pushl r1".
 | 
						|
  
 | 
						|
C_set
 | 
						|
  	$1 == 4	==>	"clrl r0";
 | 
						|
				"cvtlb (sp)+, r0";
 | 
						|
				"ashl r0, ~1, -(sp)".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .setx".
 | 
						|
 | 
						|
C_set_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .setx".
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 11 : Array 	 				      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_lar		
 | 
						|
  	$1 == 4	==>	"jsb .lar4".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .lar".
 | 
						|
 | 
						|
C_lar_narg		==> 	"movl (sp)+, r0";
 | 
						|
				"jsb .lar".
 | 
						|
 | 
						|
C_sar		
 | 
						|
  	$1 == 4	==>	"jsb .sar4".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .sar".
 | 
						|
 | 
						|
C_sar_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .sar".
 | 
						|
 | 
						|
C_aar		
 | 
						|
  	$1 == 4	==>	"jsb .aar4";
 | 
						|
				"pushl r0".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .aar";
 | 
						|
				"pushl r0".
 | 
						|
 | 
						|
C_aar_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .aar";
 | 
						|
			"pushl r0".
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 12 : Compare 	 				      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_cmi		
 | 
						|
  	$1 == 4	==>	/* bug : "subl2 (sp)+, (sp)". */
 | 
						|
			"clrl r0";
 | 
						|
		  	"cmpl (sp)+, (sp)+";
 | 
						|
			"beql 2f";
 | 
						|
			"bgtr 1f";
 | 
						|
			"incl r0";
 | 
						|
			"br 2f";
 | 
						|
			"1 : decl r0";
 | 
						|
			"2 : pushl r0".
 | 
						|
  	default		==>	arg_error( "cmi", $1).
 | 
						|
 | 
						|
 | 
						|
C_cmu		
 | 
						|
  	$1 == 4	==>	/* bug : "subl2 (sp)+, (sp)". */
 | 
						|
			"clrl r0";
 | 
						|
		  	"cmpl (sp)+, (sp)+";
 | 
						|
			"beql 2f";
 | 
						|
			"bgtru 1f";
 | 
						|
			"incl r0";
 | 
						|
			"br 2f";
 | 
						|
			"1 : decl r0";
 | 
						|
			"2 : pushl r0".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .cmu";
 | 
						|
				"pushl r0".
 | 
						|
 | 
						|
C_cmu_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .cmu";
 | 
						|
			"pushl r0".
 | 
						|
 | 
						|
C_cms		==> 	"movl ~$1, r0";
 | 
						|
			"jsb .cms";
 | 
						|
			"pushl r0".
 | 
						|
 | 
						|
C_cms_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .cms";
 | 
						|
			"pushl r0".
 | 
						|
 | 
						|
C_cmp		==> 	/* bug : "subl2 (sp)+, (sp)". */
 | 
						|
			"clrl r0";
 | 
						|
		  	"cmpl (sp)+, (sp)+";
 | 
						|
			"beql 2f";
 | 
						|
			"bgtru 1f";
 | 
						|
			"incl r0";
 | 
						|
			"br 2f";
 | 
						|
			"1 : decl r0";
 | 
						|
			"2 : pushl r0".
 | 
						|
C_cmf
 | 
						|
	$1==4	==>	"clrl r0";
 | 
						|
			"cmpf (sp)+, (sp)+";
 | 
						|
                        "beql 2f";
 | 
						|
                        "bgtr 1f";
 | 
						|
                        "incl r0";
 | 
						|
                        "br 2f";
 | 
						|
                        "1 : decl r0";
 | 
						|
                        "2 : pushl r0".
 | 
						|
	$1==8	==>	"clrl r0";
 | 
						|
			"cmpd (sp)+, (sp)+";
 | 
						|
                        "beql 2f";
 | 
						|
                        "bgtr 1f";
 | 
						|
                        "incl r0";
 | 
						|
                        "br 2f";
 | 
						|
                        "1 : decl r0";
 | 
						|
                        "2 : pushl r0".
 | 
						|
	default	==>	arg_error("cmf", $1).
 | 
						|
 | 
						|
C_tlt		==> 	"movl (sp)+, r0";
 | 
						|
			"pushl ~1";
 | 
						|
			"tstl r0";
 | 
						|
			"blss 1f";
 | 
						|
			"clrl (sp)";
 | 
						|
			"1:".
 | 
						|
 | 
						|
C_tle		==> 	"movl (sp)+, r0";
 | 
						|
			"pushl ~1";
 | 
						|
			"tstl r0";
 | 
						|
			"bleq 1f";
 | 
						|
			"clrl (sp)";
 | 
						|
			"1:".
 | 
						|
 | 
						|
C_teq		==> 	"movl (sp)+, r0";
 | 
						|
			"pushl ~1";
 | 
						|
			"tstl r0";
 | 
						|
			"beql 1f";
 | 
						|
			"clrl (sp)";
 | 
						|
			"1:".
 | 
						|
 | 
						|
C_tne		==> 	"movl (sp)+, r0";
 | 
						|
			"pushl ~1";
 | 
						|
			"tstl r0";
 | 
						|
			"bneq 1f";
 | 
						|
			"clrl (sp)";
 | 
						|
			"1:".
 | 
						|
 | 
						|
C_tge		==> 	"movl (sp)+, r0";
 | 
						|
			"pushl ~1";
 | 
						|
			"tstl r0";
 | 
						|
			"bgeq 1f";
 | 
						|
			"clrl (sp)";
 | 
						|
			"1:".
 | 
						|
 | 
						|
C_tgt		==> 	"movl (sp)+, r0";
 | 
						|
			"pushl ~1";
 | 
						|
			"tstl r0";
 | 
						|
			"bgtr 1f";
 | 
						|
			"clrl (sp)";
 | 
						|
			"1:".
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*									      */
 | 
						|
/*		Group 13 : Branch 	 				      */
 | 
						|
/*									      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_bra		==> 	"jmp $1".
 | 
						|
 | 
						|
C_blt		==> 	"movl (sp)+, r0";
 | 
						|
			"cmpl (sp)+, r0";
 | 
						|
			"jlss $1".
 | 
						|
 | 
						|
C_ble		==> 	"movl (sp)+, r0";
 | 
						|
			"cmpl (sp)+, r0";
 | 
						|
			"jleq $1".
 | 
						|
 | 
						|
C_beq		==> 	"movl (sp)+, r0";
 | 
						|
			"cmpl (sp)+, r0";
 | 
						|
			"jeql $1".	
 | 
						|
 | 
						|
C_bne		==> 	"movl (sp)+, r0";
 | 
						|
			"cmpl (sp)+, r0";
 | 
						|
			"jneq $1".
 | 
						|
 | 
						|
C_bge		==> 	"movl (sp)+, r0";
 | 
						|
			"cmpl (sp)+, r0";
 | 
						|
			"jgeq $1".
 | 
						|
 | 
						|
C_bgt		==> 	"movl (sp)+, r0";
 | 
						|
			"cmpl (sp)+, r0";
 | 
						|
			"jgtr $1".
 | 
						|
 | 
						|
C_zlt		==> 	"tstl (sp)+";
 | 
						|
			"jlss $1".
 | 
						|
 | 
						|
C_zle		==> 	"tstl (sp)+";
 | 
						|
			"jleq $1".
 | 
						|
 | 
						|
C_zeq		==> 	"tstl (sp)+";
 | 
						|
			"jeql $1".
 | 
						|
 | 
						|
C_zne		==> 	"tstl (sp)+";
 | 
						|
			"jneq $1".
 | 
						|
 | 
						|
C_zge		==> 	"tstl (sp)+";
 | 
						|
			"jgeq $1".
 | 
						|
 | 
						|
C_zgt		==> 	"tstl (sp)+";
 | 
						|
			"jgtr $1".
 | 
						|
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*                                                                            */
 | 
						|
/*			Group 14 : Procedure call instructions		      */
 | 
						|
/*							 		      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_cai		==> 	"movl (sp)+, r0";
 | 
						|
			"calls ~0, (r0)".
 | 
						|
 | 
						|
C_cal		==> 	"calls ~0, $1".
 | 
						|
 | 
						|
C_lfr		
 | 
						|
  	$1 == 4	==>	"pushl r0".
 | 
						|
  	$1 == 8	==>	"movq r0, -(sp)".
 | 
						|
  	default		==>	arg_error( "lfr", $1).
 | 
						|
 | 
						|
C_ret		
 | 
						|
	$1 == 0	==>	"ret".
 | 
						|
  	$1 == 4	==>	"movl (sp)+, r0";
 | 
						|
				"ret".
 | 
						|
  	$1 == 8	==>	"movq (sp)+, r0";
 | 
						|
				"ret".
 | 
						|
  	default		==>	arg_error( "ret", $1).
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
/*                                                                            */
 | 
						|
/*			Group 15 : Miscellaneous instructions		      */
 | 
						|
/*							 		      */
 | 
						|
/******************************************************************************/
 | 
						|
 | 
						|
C_asp		==> 	"addl2 ~$1, sp".
 | 
						|
 | 
						|
C_ass		
 | 
						|
  	$1 == 4	==>	"addl2 (sp)+, sp".
 | 
						|
  	default		==>	"movl ~$1, r2";
 | 
						|
				"jsb .ass".
 | 
						|
 | 
						|
C_ass_narg	==> 	"movl (sp)+, r2";
 | 
						|
			"jsb .ass".
 | 
						|
 | 
						|
C_blm		
 | 
						|
  	$1 == 4	==>	"movl (sp)+, r0";
 | 
						|
				"movl (sp)+, r1";
 | 
						|
				"movl (r1), (r0)".
 | 
						|
  	$1 == 8	==>	"movl (sp)+, r0";
 | 
						|
				"movl (sp)+, r1";
 | 
						|
				"movq (r1), (r0)".
 | 
						|
  	default		==>	"movl (sp)+, r0";
 | 
						|
				"movl (sp)+, r1";
 | 
						|
				"movl ~$1/4, r2";
 | 
						|
				"1:";
 | 
						|
				"movl (r1)+, (r0)+";
 | 
						|
				"sobgtr r2, 1b".
 | 
						|
 | 
						|
C_bls		
 | 
						|
  	$1 == 4	==>	"movl ~4, r0";
 | 
						|
				"jsb .bls".
 | 
						|
  	default		==>	arg_error( "bls", $1).
 | 
						|
 | 
						|
 | 
						|
C_csa		
 | 
						|
	$1 == 4	==>	"jmp .csa4".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jmp .csa".
 | 
						|
 | 
						|
C_csb		
 | 
						|
	$1 == 4	==>	"jmp .csb4".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jmp .csb".
 | 
						|
 | 
						|
C_dch		==> 	"movl (sp)+, r0";
 | 
						|
			"pushl (r0)".
 | 
						|
 | 
						|
C_dup		
 | 
						|
  	$1 == 4	==>	"pushl (sp)".
 | 
						|
  	$1 == 8	==>	"movq (sp), -(sp)".
 | 
						|
  	default		==>	"movl ~$1/4, r0";
 | 
						|
				"addl3 ~$1, sp, r1";
 | 
						|
				"1:";
 | 
						|
				"pushl -(r1)";
 | 
						|
				"sobgtr r0, 1b".
 | 
						|
 | 
						|
C_dus		
 | 
						|
  	$1 == 4	==>	"movl (sp)+, r0";
 | 
						|
				"addl3 r0, sp, r1";
 | 
						|
				"ashl ~-2, r0, r0";
 | 
						|
				"1:";
 | 
						|
				"pushl -(r1)";
 | 
						|
				"sobgtr r0, 1b".
 | 
						|
  	default		==>	arg_error( "dus", $1).
 | 
						|
 | 
						|
C_exg		==>	"movl ~$1, r0";
 | 
						|
			"jsb .exg".
 | 
						|
 | 
						|
C_fil..		==> 	"moval $1 + $2, hol0 + 4".
 | 
						|
 | 
						|
C_gto..		==> 	"pushal $1+$2";
 | 
						|
			"jmp .gto".
 | 
						|
 | 
						|
C_lim		==> 	"pushl .trpim".
 | 
						|
 | 
						|
C_lin		==> 	"movl ~$1, hol0".
 | 
						|
 | 
						|
C_lni		==> 	"incl hol0".
 | 
						|
 | 
						|
C_lor
 | 
						|
  	$1 == 0	==>	"pushl fp".
 | 
						|
  	$1 == 1	==>	"pushl sp".
 | 
						|
  	$1 == 2	==>	"pushl .reghp".
 | 
						|
	default		==>	arg_error( "lor", $1).
 | 
						|
 | 
						|
C_lpb		==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .lpb";
 | 
						|
			"pushl r0".
 | 
						|
 | 
						|
C_mon		==> 	"jsb .mon".
 | 
						|
 | 
						|
C_nop		==> 	.
 | 
						|
 | 
						|
C_rck		
 | 
						|
  	$1 == 4	==>	"jsb .rck4".
 | 
						|
  	default		==>	"movl ~$1, r0";
 | 
						|
				"jsb .rck".
 | 
						|
 | 
						|
C_rck_narg	==> 	"movl (sp)+, r0";
 | 
						|
			"jsb .rck".
 | 
						|
 | 
						|
C_rtt		==> 	"ret".
 | 
						|
 | 
						|
C_sig		==> 	"jsb .sig".
 | 
						|
 | 
						|
C_sim		==> 	"jsb .sim".
 | 
						|
 | 
						|
C_str
 | 
						|
  	$1 == 0	==>	"movl (sp)+, fp".
 | 
						|
  	$1 == 1	==>	"movl (sp)+, sp".
 | 
						|
  	$1 == 2	==>	"jsb .strhp".
 | 
						|
	default		==>	arg_error( "str", $1).
 | 
						|
 | 
						|
C_trp		==> 	"jsb .trp".
 | 
						|
 | 
						|
/*****************************************************************************/
 | 
						|
 | 
						|
..icon	$2 == 1  ==>	gen1( (char) atoi( $1)).
 | 
						|
	$2 == 2  ==> gen2( (short) atoi( $1)).
 | 
						|
	$2 == 4  ==> gen4( (long) atol( $1)).
 | 
						|
	default     ==> arg_error( "icon", $2).
 | 
						|
..ucon	$2 == 1  ==>	gen1( (char) atoi( $1)).
 | 
						|
	$2 == 2  ==> gen2( (short) atoi( $1)).
 | 
						|
	$2 == 4  ==> gen4( (long) atol( $1)).
 | 
						|
	default     ==> arg_error( "icon", $2).
 | 
						|
..fcon                 ==>     con_float($1, $2).
 | 
						|
 | 
						|
/*****************************************************************************/
 | 
						|
 | 
						|
C_prolog		==>		text2( 0x0).
 | 
						|
 | 
						|
C_jump 			==>		"jmp $1".
 | 
						|
 | 
						|
C_locals		
 | 
						|
  $1 == 0	==>		.
 | 
						|
  $1 == 4       ==>             "clrq -(sp)".
 | 
						|
  $1 == 8       ==>             "clrq -(sp)".
 | 
						|
  default	==>		"subl2 ~$1, sp".
 |