static char sccsid
[] = "@(#)table.c 1.5 (Berkeley) %G%";
/* special shapes (SSOREG,SZERO etc.) shouldn't be or-ed */
# define AWD SNAME|SOREG|SCON|STARNM|STARREG
# define ANYSIGNED TPOINT|TINT|TSHORT|TCHAR
# define ANYUSIGNED TUNSIGNED|TUSHORT|TUCHAR
# define ANYFIXED ANYSIGNED|ANYUSIGNED
# define TWORD TINT|TUNSIGNED|TPOINT
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
,
SCONV
, INAREG
|INTAREG
|FORCC
,
" ldd AL\n cvdf\n stf TA1\n",
SCONV
, INAREG
|INTAREG
|FORCC
,
SCONV
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, TINT
|TUNSIGNED
,
" cvlZR AL\n stZR TA1\n",
SCONV
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, TFLOAT
|TDOUBLE
,
SCONV
, INAREG
|INTAREG
|FORCC
,
/* for the use of fortran only */
" pushl AR\nZS movl (sp)+,AR\n",
" movzwl AL,A1\n cmpw A1,AR\nZP",
SAREG
|AWD
, TSHORT
|TUSHORT
,
SAREG
|AWD
, TSHORT
|TUSHORT
,
SAREG
|AWD
, TSHORT
|TUSHORT
,
" movzbl AL,A1\n cmpb A1,AR\nZP",
UNARY CALL
, INAREG
|INTAREG
,
NAREG
|NASL
, RESC1
, /* should be register 0 */
UNARY CALL
, INAREG
|INTAREG
,
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 */
FORTCALL
, INAREG
|INTAREG
,
" ldf AR\n CLf\n stf TA1\n",
ASG OPSHFT
, INAREG
|FOREFF
|FORCC
,
ASG OPSHFT
, INAREG
|FOREFF
|FORCC
,
ASG OPSHFT
, INAREG
|FOREFF
|FORCC
,
" ZB AR,A1\n ZH A1,AL,AL\n",
OPSHFT
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
OPSHFT
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
OPSHFT
, INAREG
|INTAREG
|FORCC
,
" ZB AR,A1\n ZH 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
,
SAREG
|SNAME
|SOREG
, TDOUBLE
,
ASSIGN
, INAREG
|FOREFF
|FORCC
,
ASSIGN
, INAREG
|FOREFF
|FORCC
,
ASSIGN
, INAREG
|FOREFF
|FORCC
,
SAREG
|SNAME
|SOREG
, TDOUBLE
,
SAREG
|SNAME
|SOREG
, TDOUBLE
,
" movl UR,UL\n movl AR,AL\n",
ASSIGN
, INAREG
|FOREFF
|FORCC
,
ASSIGN
, INAREG
|FOREFF
|FORCC
,
ASSIGN
, INAREG
|FOREFF
|FORCC
,
" andl2 N,AL\n orl2 ZF,AL\n",
" shll $H,AR,A1\n andl2 M,A1\n andl2 N,AL\n\
/* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
" movl UR,U1\n movl AR,A1\n",
" pushl $0\n pushl AR\n",
" pushl UR\n pushl AR\n",
SAREG
|SNAME
|SOREG
|SCON
, TDOUBLE
,
" movl AR,A1\n movl UR,U1\n",
" pushl $0\n pushl $0\n",
" pushl UR\n pushl AR\n",
" pushl $0\n pushl AR\n",
UNARY MINUS
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, ANYSIGNED
|TUNSIGNED
,
UNARY MINUS
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, TFLOAT
|TDOUBLE
,
COMPL
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, ANYSIGNED
|TUNSIGNED
,
COMPL
, INAREG
|INTAREG
|FORCC
,
" cvtZLl AL,A1\n mcoml A1,A1\n",
SAREG
|AWD
, TSHORT
|TUSHORT
,
SAREG
|AWD
, TSHORT
|TUSHORT
,
SAREG
|AWD
, TSHORT
|TUSHORT
,
ASG DIV
, INAREG
|FOREFF
|FORCC
, /* should have been done in mip */
ASG DIV
, INAREG
|FOREFF
|FORCC
,
SAREG
|AWD
, TUCHAR
|TUSHORT
,
SAREG
|AWD
, TUCHAR
|TUSHORT
,
2*NAREG
, RLEFT
|RESC1
|RESCC
,
"ZX OL2 A2,A1\n cvtlZL A1,AL\n",
ASG DIV
, INAREG
|FOREFF
|FORCC
,
3*NAREG
|NEVEN
, RLEFT
|RESCC
,
"ZM OE AR,A1,A2,A3\n movl A2,AL\n",
DIV
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, TUCHAR
|TUSHORT
,
SAREG
|AWD
, TUCHAR
|TUSHORT
,
DIV
, INAREG
|INTAREG
|FORCC
,
3*NAREG
|NEVEN
, RESC2
|RESCC
,
"ZM OE AR,A1,A2,A3\n movl A3,AL\n",
ASG MUL
, INAREG
|FOREFF
|FORCC
,
"ZX OL2 A2,A1\n cvtlb A1,AL\n",
ASG MUL
, INAREG
|FOREFF
|FORCC
,
SAREG
|AWD
, TUNSIGNED
|TINT
,
NAREG
|NEVEN
, RLEFT
|RESCC
,
" emul AR,AL,$0,A1\n movl U1,AL\n",
ASG MUL
, INAREG
|FOREFF
|FORCC
,
SAREG
|AWD
, TUNSIGNED
|TINT
,
NAREG
|NEVEN
, RLEFT
|RESCC
,
" emul AR,AL,$0,A1\n movl U1,AL\n",
ASG OPMUL
, INAREG
|FOREFF
|FORCC
,
MUL
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, TUNSIGNED
|TINT
,
NAREG
|NEVEN
, RLEFT
|RESCC
,
" emul AR,AL,$0,A1\n movl U1,AL\n",
MUL
, INAREG
|INTAREG
|FORCC
,
NAREG
|NEVEN
, RLEFT
|RESCC
,
" emul AR,AL,$0,A1\n movl U1,AL\n",
OPMUL
, INAREG
|INTAREG
|FORCC
,
MUL
, INAREG
|INTAREG
|FORCC
,
MUL
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, TUNSIGNED
|TINT
,
NAREG
|NEVEN
, RESC1
|RESCC
,
" emul AR,AL,$0,A1\n movl U1,A1\n",
MUL
, INAREG
|INTAREG
|FORCC
,
SAREG
|AWD
, TUNSIGNED
|TINT
,
NAREG
|NEVEN
, RESC1
|RESCC
,
" emul AR,AL,$0,A1\n movl U1,A1\n",
OPMUL
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
ASG PLUS
, INAREG
|FOREFF
|FORCC
,
ASG PLUS
, INAREG
|FOREFF
|FORCC
,
ASG MINUS
, INAREG
|FOREFF
|FORCC
,
ASG MINUS
, INAREG
|FOREFF
|FORCC
,
PLUS
, INAREG
|INTAREG
|FORCC
,
MINUS
, INAREG
|INTAREG
|FORCC
,
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
,
OPSIMP
, INAREG
|INTAREG
|FORCC
,
OPSIMP
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
ASG OPSIMP
, INAREG
|FOREFF
,
SAREG
|AWD
, TFLOAT
|TDOUBLE
,
ASG MUL
, INAREG
|FOREFF
|FORCC
,
ASG MUL
, INAREG
|FOREFF
|FORCC
,
SAREG
|SNAME
|SOREG
, TDOUBLE
,
ASG MUL
, INAREG
|FOREFF
|FORCC
,
ASG OPFLOAT
, INAREG
|FOREFF
|FORCC
,
" ldf AL\n OF AR\n stf TAL\n",
ASG OPFLOAT
, INAREG
|FOREFF
|FORCC
,
" ldd AL\n OD AR\n std AL\n",
#if defined(FORT) || defined(SPRECC)
OPSIMP
, INAREG
|INTAREG
|FORCC
,
OPSIMP
, INAREG
|INTAREG
|FORCC
,
" movl UL,U1\n movl AL,A1\n",
MUL
, INAREG
|INTAREG
|FORCC
,
MUL
, INAREG
|INTAREG
|FORCC
,
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
" ldf AL\n OF AR\n stf TA1\n",
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
"\tclrl\tA1\n\tclrl\tU1\n\tldd\tA1\n\tOD\tAR\n\tstd\tA1\n",
OPFLOAT
, INAREG
|INTAREG
|FORCC
,
NAREG
|NASL
|NASR
, RESC1
|RESCC
,
" ldd AL\n OD AR\n std 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" };