static char *sccsid
="@(#)table.c 1.1 (Berkeley) %G%";
# define WPTR TPTRTO|TINT|TLONG|TFLOAT|TDOUBLE|TPOINT|TUNSIGNED|TULONG
# define AWD SNAME|SOREG|SCON|STARNM|STARREG
# define ANYSIGNED TPOINT|TINT|TLONG|TSHORT|TCHAR
# define ANYUSIGNED TUNSIGNED|TULONG|TUSHORT|TUCHAR
# define ANYFIXED ANYSIGNED|ANYUSIGNED
# define TWORD TINT|TUNSIGNED|TPOINT|TLONG|TULONG
# define NIAWD SNAME|SCON|STARNM
SAREG
|AWD
, TUCHAR
|TUSHORT
,
/* the following entry is to fix a problem with
the manner that the first pass handles the
type of a shift expression */
SAREG
|AWD
, TINT
|TUNSIGNED
,
SAREG
|AWD
, ANYSIGNED
|TUNSIGNED
|TULONG
|TFLOAT
,
SAREG
|AWD
, TUCHAR
|TUSHORT
,
" movzZLl AL,A1\n cvtlf A1,TA1\n",
SAREG
|AWD
, ANYSIGNED
|TUNSIGNED
|TULONG
|TFLOAT
,
SAREG
|AWD
, TUCHAR
|TUSHORT
,
" movzZLl AL,A1\n cvtld A1,A1\n",
SAREG
|AWD
, TFLOAT
|TDOUBLE
,
SAREG
|SNAME
|SCON
|STARNM
, TANY
,
SAREG
|SNAME
|SCON
|STARNM
, TANY
,
/* for the use of fortran only */
" pushl AR\nZS movl (sp)+,AR\n",
" extv $H,$S,AR,-(sp)\n",
" extzv $H,$S,AR,-(sp)\n",
SAREG
|AWD
, TSHORT
|TUSHORT
,
SAREG
|AWD
, TSHORT
|TUSHORT
,
SAREG
|AWD
, TSHORT
|TUSHORT
,
" cvtfd AR,A1\n cmpd AL,A1\nZP",
" cvtfd AL,A1\n cmpd A1,AR\nZP",
SANY
, TWORD
|TCHAR
|TUCHAR
|TSHORT
|TUSHORT
|TFLOAT
|TDOUBLE
,
NAREG
|NASL
, RESC1
, /* should be register 0 */
SANY
, TWORD
|TCHAR
|TUCHAR
|TSHORT
|TUSHORT
|TFLOAT
|TDOUBLE
,
NAREG
|NASL
, RESC1
, /* should be 0 */
UNARY CALL
, INAREG
|INTAREG
,
NAREG
|NASL
, RESC1
, /* really reg 0 */
UNARY CALL
, INAREG
|INTAREG
,
NAREG
|NASL
, RESC1
, /* really reg 0 */
ASG RS
, INAREG
|FOREFF
|FORCC
,
ASG RS
, INAREG
|FOREFF
|FORCC
,
" subl3 AR,$32,A1\n extzv AR,A1,AL,AL\n",
ASG RS
, INAREG
|FOREFF
|FORCC
,
" subl3 AR,$32,A1\n extzv AR,A1,AL,AL\n",
RS
, INAREG
|INTAREG
|FORCC
,
ASG LS
, INAREG
|FOREFF
|FORCC
,
SAREG
|NIAWD
, ANYSIGNED
|ANYUSIGNED
,
ASG LS
, INAREG
|FOREFF
|FORCC
,
SSOREG
, ANYSIGNED
|ANYUSIGNED
,
ASG LS
, INAREG
|FOREFF
|FORCC
,
SOREG
, ANYSIGNED
|ANYUSIGNED
,
" ZB AR,A1\n ashl A1,AL,AL\n",
LS
, INAREG
|INTAREG
|FORCC
,
SAREG
|NIAWD
, ANYSIGNED
|ANYUSIGNED
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
LS
, INAREG
|INTAREG
|FORCC
,
SSOREG
, ANYSIGNED
|ANYUSIGNED
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
LS
, INAREG
|INTAREG
|FORCC
,
SOREG
, ANYSIGNED
|ANYUSIGNED
,
" ZB AR,A1\n ashl A1,AL,A1\n",
/* jwf INCR and DECR for SAREG TCHAR|TSHORT matched by ASG PLUS etc */
ASSIGN
, INAREG
|FOREFF
|FORCC
,
ASSIGN
, INAREG
|FOREFF
|FORCC
,
ASSIGN
, INAREG
|FOREFF
|FORCC
,
/* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
UNARY MINUS
, INTAREG
|FORCC
,
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
|TDOUBLE
,
SAREG
|AWD
, TINT
|TUNSIGNED
,
SAREG
|AWD
, ANYSIGNED
|ANYUSIGNED
,
" cvtZLl AL,A1\n mcoml A1,A1\n",
SAREG
|AWD
, TSHORT
|TUSHORT
,
ASG AND
, INAREG
|FOREFF
|FORCC
,
ASG OPMUL
, INAREG
|FOREFF
|FORCC
,
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
OPMUL
, INAREG
|INTAREG
|FORCC
,
STAREG
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
OPMUL
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
ASG MOD
, INAREG
|INTAREG
|FOREFF
|FORCC
,
SAREG
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
" divl3 AR,AL,A1\n mull2 AR,A1\n subl2 A1,AL\n",
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
SAREG
|AWD
, TINT
|TUNSIGNED
|TLONG
|TULONG
,
" divl3 AR,AL,A1\n mull2 AR,A1\n subl3 A1,AL,A1\n",
ASG PLUS
, INAREG
|FOREFF
|FORCC
,
SAREG
, TPOINT
|TINT
|TLONG
|TUNSIGNED
|TULONG
,
ASG PLUS
, INAREG
|FOREFF
|FORCC
,
AWD
, ANYSIGNED
|ANYUSIGNED
,
ASG PLUS
, INAREG
|FOREFF
|FORCC
,
" incZL AL\n cvtZLl AL,AL\n",
ASG PLUS
, INAREG
|FOREFF
|FORCC
,
" incZL AL\n movzZLl AL,AL\n",
ASG MINUS
, INAREG
|FOREFF
|FORCC
,
SAREG
, TPOINT
|TINT
|TLONG
|TUNSIGNED
|TULONG
,
ASG MINUS
, INAREG
|FOREFF
|FORCC
,
AWD
, ANYSIGNED
|ANYUSIGNED
,
ASG MINUS
, INAREG
|FOREFF
|FORCC
,
" decZL AL\n cvtZLl AL,AL\n",
ASG MINUS
, INAREG
|FOREFF
|FORCC
,
" decZL AL\n movzZLl AL,AL\n",
PLUS
, INAREG
|INTAREG
|FORCC
,
PLUS
, INAREG
|INTAREG
|FORCC
,
" incZL AL\n cvtZLl AL,AL\n",
PLUS
, INAREG
|INTAREG
|FORCC
,
" incZL AL\n movzZLl AL,AL\n",
MINUS
, INAREG
|INTAREG
|FORCC
,
MINUS
, INAREG
|INTAREG
|FORCC
,
" decZL AL\n cvtZLl AL,AL\n",
MINUS
, INAREG
|INTAREG
|FORCC
,
" decZL AL\n movzZLl AL,AL\n",
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
SAREG
, TSHORT
|TUSHORT
|TCHAR
|TUCHAR
,
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
SAREG
|AWD
, TSHORT
|TUSHORT
,
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
" OW2 AR,AL\n cvtZLl AL,AL\n",
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
" OW2 AR,AL\n movzZLl AL,AL\n",
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
" OB2 AR,AL\n cvtZLl AL,AL\n",
ASG OPSIMP
, INAREG
|FOREFF
|FORCC
,
" OB2 AR,AL\n movzZLl AL,AL\n",
OPSIMP
, INAREG
|INTAREG
|FORCC
,
OPSIMP
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
ASG OPFLOAT
, INAREG
|FOREFF
|FORCC
,
ASG OPFLOAT
, INAREG
|FOREFF
|FORCC
,
ASG OPFLOAT
, INAREG
|FOREFF
|FORCC
,
" cvtfd AR,A1\n OD2 A1,AL\n",
ASG OPFLOAT
, INAREG
|INTAREG
|FOREFF
|FORCC
,
NAREG
, RLEFT
|RESC1
|RESCC
,
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
" cvtfd AL,A1\n OD2 AR,A1\n",
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
/* Default actions for hard trees ... */
# define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
UNARY MUL
, DF( UNARY MUL
),
OPUNARY
, DF(UNARY MINUS
),
FREE
, FREE
, FREE
, FREE
, FREE
, FREE
, FREE
, FREE
, "help; I'm in trouble\n" };