ack/mach/vax4/ce/EM_table
1991-11-01 11:53:42 +00:00

782 lines
16 KiB
Plaintext

/******************************************************************************/
/* */
/* 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".
C_db_sline ==> "calls ~0, ___u_LiB".