|
|
Power 6/32 Unix version 1.2b
# include "mfile2"
/* special shapes (SSOREG,SZERO etc.) shouldn't be or-ed */
# define WPTR TPTRTO|TINT|TFLOAT|TDOUBLE|TPOINT|TUNSIGNED
# define AWD SNAME|SOREG|SCON|STARNM|STARREG
/* tbl */
# define ANYSIGNED TPOINT|TINT|TSHORT|TCHAR
# define ANYUSIGNED TUNSIGNED|TUSHORT|TUCHAR
# define ANYFIXED ANYSIGNED|ANYUSIGNED
# define TWORD TINT|TUNSIGNED|TPOINT
# define NIAWD SNAME|SCON|STARNM
/* tbl */
struct optab table[] = {
PCONV, INAREG|INTAREG,
SAREG|AWD, TCHAR|TSHORT,
SANY, TPOINT,
NAREG|NASL, RESC1,
" cvtZLl AL,A1\n",
PCONV, INAREG|INTAREG,
SAREG|AWD, TUCHAR|TUSHORT,
SANY, TPOINT,
NAREG|NASL, RESC1,
" movzZLl AL,A1\n",
/* the following entry is to fix a problem with
the manner that the first pass handles the
type of a shift expression */
PCONV, INAREG|INTAREG,
SAREG|AWD, TINT|TUNSIGNED,
SANY, TPOINT,
NAREG|NASL, RLEFT,
"",
SCONV, INTAREG|FORCC,
SAREG, TDOUBLE,
SANY, TFLOAT|TDOUBLE,
0, RLEFT,
"",
SCONV, INTAREG|FORCC,
SAREG|AWD, TFLOAT,
SANY, TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" clrl U1\n movl AL,A1\n",
/* casts to shorter types */
SCONV, INTAREG|FORCC,
SAREG|SCON, TANY,
SANY, ANYUSIGNED,
NAREG|NASL, RESC1|RESCC,
" movzZRl AL,A1\n",
SCONV, INTAREG|FORCC,
SNAME, TANY,
SANY, ANYUSIGNED,
NAREG|NASL, RESC1|RESCC,
" movzZRl ZU,A1\n",
SCONV, INTAREG|FORCC,
SSOREG, TANY,
SANY, ANYUSIGNED,
NAREG|NASL, RESC1|RESCC,
" movzZRl ZU,A1\n",
SCONV, INTAREG|FORCC,
SAREG|SCON, TANY,
SANY, TANY,
NAREG|NASL, RESC1|RESCC,
" cvtZRl AL,A1\n",
SCONV, INTAREG|FORCC,
SNAME, TANY,
SANY, TANY,
NAREG|NASL, RESC1|RESCC,
" cvtZRl ZU,A1\n",
SCONV, INTAREG|FORCC,
SSOREG, TANY,
SANY, TANY,
NAREG|NASL, RESC1|RESCC,
" cvtZRl ZU,A1\n",
INIT, FOREFF,
SCON, TANY,
SANY, TWORD,
0, RNOP,
" .long CL\n",
INIT, FOREFF,
SCON, TANY,
SANY, TSHORT|TUSHORT,
0, RNOP,
" .word CL\n",
INIT, FOREFF,
SCON, TANY,
SANY, TCHAR|TUCHAR,
0, RNOP,
" .byte CL\n",
/* for the use of fortran only */
GOTO, FOREFF,
SCON, TANY,
SANY, TANY,
0, RNOP,
" jbr CL\n",
GOTO, FOREFF,
AWD, TANY,
SANY, TANY,
0, RNOP,
" jmp *AL\n",
GOTO, FOREFF,
SAREG, TANY,
SANY, TANY,
0, RNOP,
" jmp (AL)\n",
STARG, FORARG,
SCON|SOREG, TANY,
SANY, TANY,
NTEMP+2*NAREG, RESC3,
"ZS",
STASG, FORARG,
SNAME|SOREG, TANY,
SCON|SAREG, TANY,
0, RNULL,
" ZT\nZS",
STASG, FOREFF,
SNAME|SOREG, TANY,
SCON|SAREG, TANY,
0, RNOP,
"ZS",
STASG, INAREG,
SNAME|SOREG, TANY,
SCON, TANY,
NAREG, RESC1,
"ZS movl AR,A1\n",
STASG, INAREG,
SNAME|SOREG, TANY,
SAREG, TANY,
0, RRIGHT,
" pushl AR\nZS movl (sp)+,AR\n",
OPLOG, FORCC,
SAREG|AWD, TWORD,
SAREG|AWD, TWORD,
0, RESCC,
" cmpl AL,AR\nZP",
OPLOG, FORCC,
SAREG|AWD, TSHORT|TUSHORT,
SAREG|AWD, TSHORT|TUSHORT,
0, RESCC,
" cmpw AL,AR\nZP",
OPLOG, FORCC,
SAREG|AWD, TCHAR|TUCHAR,
SAREG|AWD, TCHAR|TUCHAR,
0, RESCC,
" cmpb AL,AR\nZP",
OPLOG, FORCC,
SAREG|AWD, TSHORT|TUSHORT,
SSCON, TANY,
0, RESCC,
" cmpw AL,AR\nZP",
OPLOG, FORCC,
SAREG|AWD, TCHAR|TUCHAR,
SCCON, TANY,
0, RESCC,
" cmpb AL,AR\nZP",
CCODES, INAREG|INTAREG,
SANY, TANY,
SANY, TANY,
NAREG, RESC1,
" movl $1,A1\nZN",
UNARY CALL, INTAREG,
SCON, TANY,
SANY, TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
NAREG|NASL, RESC1, /* should be register 0 */
" ZC,CL\n",
UNARY CALL, INTAREG,
SAREG, TANY,
SANY, TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
NAREG|NASL, RESC1, /* should be 0 */
" ZC,(AL)\n",
UNARY CALL, INAREG|INTAREG,
SNAME, TANY,
SANY, TANY,
NAREG|NASL, RESC1, /* really reg 0 */
" ZC,*AL\n",
UNARY CALL, INAREG|INTAREG,
SSOREG, TANY,
SANY, TANY,
NAREG|NASL, RESC1, /* really reg 0 */
" ZC,*AL\n",
ASG OPSHFT, INAREG|FOREFF|FORCC,
SAREG|AWD, TWORD,
SAREG|SCON, ANYFIXED,
0, RLEFT|RESCC,
" ZH AR,AL,AL\n",
ASG OPSHFT, INAREG|FOREFF|FORCC,
SAREG|AWD, TWORD,
NIAWD, TCHAR,
0, RLEFT|RESCC,
" ZH AR,AL,AL\n",
ASG OPSHFT, INAREG|FOREFF|FORCC,
SAREG|AWD, TWORD,
SSOREG, TCHAR,
0, RLEFT|RESCC,
" ZH AR,AL,AL\n",
ASG OPSHFT, INAREG|FOREFF|FORCC,
SAREG|AWD, TWORD,
AWD, ANYFIXED,
NAREG, RLEFT|RESCC,
" ZB AR,A1\n ZH A1,AL,AL\n",
OPSHFT, INAREG|INTAREG|FORCC,
SAREG|AWD, TWORD,
SAREG|SCON, ANYFIXED,
NAREG|NASL|NASR, RESC1|RESCC,
" ZH AR,AL,A1\n",
OPSHFT, INAREG|INTAREG|FORCC,
SAREG|AWD, TWORD,
NIAWD, TCHAR|TUCHAR,
NAREG|NASL|NASR, RESC1|RESCC,
" ZH AR,AL,A1\n",
OPSHFT, INAREG|INTAREG|FORCC,
SAREG|AWD, TWORD,
SSOREG, TCHAR,
NAREG|NASL|NASR, RESC1|RESCC,
" ZH AR,AL,A1\n",
OPSHFT, INAREG|INTAREG|FORCC,
SAREG|AWD, TWORD,
AWD, ANYFIXED,
NAREG|NASR, RESC1|RESCC,
" ZB AR,A1\n ZH A1,AL,A1\n",
INCR, FOREFF,
AWD, TWORD,
SCON, TANY,
0, RLEFT,
" ZE\n",
DECR, FOREFF,
AWD, TWORD,
SCON, TANY,
0, RLEFT,
" ZE\n",
INCR, FOREFF,
SAREG, TWORD,
SCON, TANY,
0, RLEFT,
" ZE\n",
DECR, FOREFF,
SAREG, TWORD,
SCON, TANY,
0, RLEFT,
" ZE\n",
/* jwf INCR and DECR for SAREG TCHAR|TSHORT matched by ASG PLUS etc */
INCR, INAREG|INTAREG,
AWD, TANY,
SCON, TANY,
NAREG, RESC1,
" ZD\n",
DECR, INAREG|INTAREG,
AWD, TANY,
SCON, TANY,
NAREG, RESC1,
" ZD\n",
INCR, INAREG|INTAREG,
SAREG, TWORD,
SCON, TANY,
NAREG, RESC1,
" ZD\n",
DECR, INAREG|INTAREG,
SAREG, TWORD,
SCON, TANY,
NAREG, RESC1,
" ZD\n",
ASSIGN, INAREG|FOREFF|FORCC,
SAREG|SNAME|SOREG, TDOUBLE,
SAREG|SNAME|SOREG, TDOUBLE,
0, RLEFT|RRIGHT|RESCC,
" movl UR,UL\n movl AR,AL\n",
ASSIGN, INAREG|FOREFF|FORCC,
SAREG|AWD, TANY,
SAREG|AWD, TANY,
0, RLEFT|RRIGHT|RESCC,
" ZA\n",
ASSIGN, INAREG|FOREFF,
SFLD, TANY,
SZERO, TANY,
0, RRIGHT,
" andl2 N,AL\n",
ASSIGN, INAREG|FOREFF,
SFLD, TANY,
SCON, TANY,
0, RRIGHT,
" andl2 N,AL\n orl2 ZF,AL\n",
ASSIGN, INAREG|FOREFF,
SFLD, TANY,
SAREG|AWD, TWORD,
NAREG|NASL, RRIGHT,
" shll $H,AR,A1\n andl2 M,A1\n andl2 N,AL\n\
orl2 A1,AL\n",
/* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
UNARY MUL, FOREFF,
SCC, TANY,
SCC, TANY,
0, RNULL,
" help help help\n",
REG, INTEMP,
SANY, TANY,
SAREG, TDOUBLE,
2*NTEMP, RESC1,
" movl UR,U1\n movl AR,A1\n",
REG, INTEMP,
SANY, TANY,
SAREG, TANY,
NTEMP, RESC1,
" movl AR,A1\n",
#ifdef FORT
REG, FORARG,
SANY, TANY,
SAREG, TFLOAT,
0, RNULL,
" pushl $0\n pushl AR\n",
REG, FORARG,
SANY, TANY,
SAREG, TDOUBLE,
0, RNULL,
" pushl UR\n pushl AR\n",
#endif
OPLEAF, FOREFF,
SANY, TANY,
SAREG|AWD, TANY,
0, RLEFT,
"",
OPLTYPE, INAREG|INTAREG,
SANY, TANY,
SAREG|SNAME|SCON|SOREG, TDOUBLE,
2*NAREG|NASR, RESC1,
" movl UR,U1\n movl AR,A1\n",
OPLTYPE, INAREG|INTAREG,
SANY, TANY,
SAREG|AWD, TFLOAT,
2*NAREG|NASR, RESC1,
" clrl U1\n movl AR,A1\n",
OPLTYPE, INAREG|INTAREG,
SANY, TANY,
SANY, TANY,
NAREG|NASR, RESC1,
" ZA\n",
OPLTYPE, FORCC,
SANY, TANY,
SANY, TANY,
0, RESCC,
" tstZR AR\n",
OPLTYPE, FORARG,
SANY, TANY,
SANY, TWORD,
0, RNULL,
" pushl AR\n",
OPLTYPE, FORARG,
SANY, TANY,
SANY, TCHAR|TSHORT,
0, RNULL,
" pushZR AR\n",
OPLTYPE, FORARG,
SANY, TANY,
SANY, TUCHAR|TUSHORT,
0, RNULL,
" movzZRl AR,-(sp)\n",
OPLTYPE, FORARG,
SANY, TANY,
SANY, TDOUBLE,
0, RNULL,
" pushl UR\n pushl AR\n",
OPLTYPE, FORARG,
SANY, TANY,
SANY, TFLOAT,
0, RNULL,
" pushl $0\n pushl AR\n",
UNARY MINUS, INTAREG|FORCC,
SAREG|AWD, ANYSIGNED|TUNSIGNED,
SANY, TANY,
NAREG|NASL, RESC1|RESCC,
" mnegZL AL,A1\n",
COMPL, INTAREG|FORCC,
SAREG|AWD, ANYSIGNED|TUNSIGNED,
SANY, TANY,
NAREG|NASL, RESC1|RESCC,
" mcomZL AL,A1\n",
COMPL, INTAREG|FORCC,
SAREG|AWD, ANYFIXED,
SANY, TANY,
NAREG|NASL, RESC1|RESCC,
" cvtZLl AL,A1\n mcoml A1,A1\n",
AND, FORCC,
SAREG|AWD, TWORD,
SAREG|AWD, TWORD,
0, RESCC,
" bitl AR,AL\n",
AND, FORCC,
SAREG|AWD, TSHORT|TUSHORT,
SSCON, TWORD,
0, RESCC,
" bitw AR,AL\n",
AND, FORCC,
SAREG|AWD, TSHORT|TUSHORT,
SAREG|AWD, TSHORT|TUSHORT,
0, RESCC,
" bitw AR,AL\n",
AND, FORCC,
SAREG|AWD, TCHAR|TUCHAR,
SCCON, TWORD,
0, RESCC,
" bitb AR,AL\n",
AND, FORCC,
SAREG|AWD, TCHAR|TUCHAR,
SAREG|AWD, TCHAR|TUCHAR,
0, RESCC,
" bitb AR,AL\n",
ASG DIV, INAREG|FOREFF|FORCC, /* should have been done in mip */
SAREG|AWD, ANYFIXED,
SONE, TWORD,
0, RLEFT|RESCC,
" tstZL AL\n",
ASG DIV, INAREG|FOREFF|FORCC,
SAREG|AWD, TUNSIGNED,
SAREG|AWD, TWORD,
2*NAREG|NEVEN, RLEFT|RESCC,
"ZM ediv AR,A1,A2,U2\n movl A2,AL\n",
ASG DIV, INAREG|FOREFF|FORCC,
SAREG|AWD, TUSHORT|TUCHAR,
SAREG|AWD, TWORD,
NAREG|NASL, RLEFT|RESC1|RESCC,
" movzZLl AL,A1\n divl2 AR,A1\n cvtlZL A1,AL\n",
DIV, INAREG|INTAREG|FORCC,
SAREG|AWD, TUSHORT|TUCHAR,
SAREG|AWD, TWORD,
NAREG|NASL, RESC1|RESCC,
" movzZLl AL,A1\n divl2 AR,A1\n",
DIV, INAREG|INTAREG|FORCC,
SAREG|AWD, TUNSIGNED,
SAREG|AWD, TWORD,
2*NAREG|NEVEN, RESC2|RESCC,
"ZM ediv AR,A1,A2,U2\n",
ASG MOD, INAREG|FOREFF,
SAREG|AWD, ANYFIXED,
SONE, TWORD,
0, RLEFT,
" clrZL AL\n",
MOD, INAREG|INTAREG,
STAREG, TWORD,
SONE, TWORD,
0, RLEFT,
" clrl AL\n",
MOD, INAREG|INTAREG,
SAREG|AWD, ANYFIXED,
SONE, TWORD,
0, RESC1,
" clrl A1\n",
ASG MOD, INAREG|FOREFF,
SAREG|AWD, TWORD,
SAREG|AWD, TWORD,
2*NAREG|NEVEN, RLEFT,
"ZM ediv AR,A1,A2,U2\n movl U2,AL\n",
MOD, INAREG|INTAREG,
SAREG|AWD, TWORD,
SAREG|AWD, TWORD,
2*NAREG|NEVEN, RESC3,
"ZM ediv AR,A1,A2,U2\n",
ASG OPMUL, INAREG|FOREFF|FORCC,
SAREG|AWD, TWORD,
SAREG|AWD, TWORD,
0, RLEFT|RESCC,
" OL2 AR,AL\n",
OPMUL, INAREG|INTAREG|FORCC,
STAREG, TWORD,
SAREG|AWD, TWORD,
0, RLEFT|RESCC,
" OL2 AR,AL\n",
OPMUL, INAREG|INTAREG|FORCC,
SAREG|AWD, TWORD,
SAREG|AWD, TWORD,
NAREG|NASL|NASR, RESC1|RESCC,
" OL3 AR,AL,A1\n",
ASG PLUS, INAREG|FOREFF|FORCC,
SAREG, TWORD,
SONE, TINT,
0, RLEFT|RESCC,
" incZL AL\n",
ASG PLUS, INAREG|FOREFF|FORCC,
AWD, ANYFIXED,
SONE, TINT,
0, RLEFT|RESCC,
" incZL AL\n",
/*
ASG PLUS, INAREG|FOREFF|FORCC,
SAREG, TSHORT|TCHAR,
SONE, TINT,
0, RLEFT|RESCC,
" incZL AL\n cvtZLl AL,AL\n",
ASG PLUS, INAREG|FOREFF|FORCC,
SAREG, TUSHORT|TUCHAR,
SONE, TINT,
0, RLEFT|RESCC,
" incZL AL\n movzZLl AL,AL\n",
*/
ASG MINUS, INAREG|FOREFF|FORCC,
SAREG, TWORD,
SONE, TINT,
0, RLEFT|RESCC,
" decZL AL\n",
ASG MINUS, INAREG|FOREFF|FORCC,
AWD, ANYFIXED,
SONE, TINT,
0, RLEFT|RESCC,
" decZL AL\n",
/*
ASG MINUS, INAREG|FOREFF|FORCC,
SAREG, TSHORT|TCHAR,
SONE, TINT,
0, RLEFT|RESCC,
" decZL AL\n cvtZLl AL,AL\n",
ASG MINUS, INAREG|FOREFF|FORCC,
SAREG, TUSHORT|TUCHAR,
SONE, TINT,
0, RLEFT|RESCC,
" decZL AL\n movzZLl AL,AL\n",
*/
PLUS, INAREG|INTAREG|FORCC,
STAREG, TWORD,
SONE, TWORD,
0, RLEFT|RESCC,
" incZL AL\n",
/*
PLUS, INAREG|INTAREG|FORCC,
STAREG, TSHORT|TCHAR,
SONE, TWORD,
0, RLEFT|RESCC,
" incZL AL\n cvtZLl AL,AL\n",
PLUS, INAREG|INTAREG|FORCC,
STAREG, TUSHORT|TUCHAR,
SONE, TWORD,
0, RLEFT|RESCC,
" incZL AL\n movzZLl AL,AL\n",
*/
MINUS, INAREG|INTAREG|FORCC,
STAREG, TWORD,
SONE, TWORD,
0, RLEFT|RESCC,
" decZL AL\n",
/*
MINUS, INAREG|INTAREG|FORCC,
STAREG, TSHORT|TCHAR,
SONE, TWORD,
0, RLEFT|RESCC,
" decZL AL\n cvtZLl AL,AL\n",
MINUS, INAREG|INTAREG|FORCC,
STAREG, TUSHORT|TUCHAR,
SONE, TWORD,
0, RLEFT|RESCC,
" decZL AL\n movzZLl AL,AL\n",
*/
ASG OPSIMP, INAREG|FOREFF|FORCC,
SAREG|AWD, TWORD,
SAREG|AWD, TWORD,
0, RLEFT|RESCC,
" OL2 AR,AL\n",
ASG OPSIMP, INAREG|FOREFF|FORCC,
SAREG, TWORD,
SAREG, TSHORT|TUSHORT|TCHAR|TUCHAR,
0, RLEFT|RESCC,
" OL2 AR,AL\n",
ASG OPSIMP, INAREG|FOREFF|FORCC,
AWD, TSHORT|TUSHORT,
SAREG|AWD, TSHORT|TUSHORT,
0, RLEFT|RESCC,
" OW2 AR,AL\n",
ASG OPSIMP, INAREG|FOREFF|FORCC,
AWD, TSHORT|TUSHORT,
SSCON, TWORD,
0, RLEFT|RESCC,
" OW2 AR,AL\n",
ASG OPSIMP, INAREG|FOREFF|FORCC,
AWD, TCHAR|TUCHAR,
SAREG|AWD, TCHAR|TUCHAR,
0, RLEFT|RESCC,
" OB2 AR,AL\n",
ASG OPSIMP, INAREG|FOREFF|FORCC,
AWD, TCHAR|TUCHAR,
SCCON, TWORD,
0, RLEFT|RESCC,
" OB2 AR,AL\n",
/*
ASG OPSIMP, INAREG|FOREFF|FORCC,
SAREG, TSHORT,
SAREG|AWD, ANYFIXED,
0, RLEFT|RESCC,
" OW2 AR,AL\n cvtZLl AL,AL\n",
ASG OPSIMP, INAREG|FOREFF|FORCC,
SAREG, TUSHORT,
SAREG|AWD, ANYFIXED,
0, RLEFT|RESCC,
" OW2 AR,AL\n movzZLl AL,AL\n",
ASG OPSIMP, INAREG|FOREFF|FORCC,
SAREG, TCHAR,
SAREG|AWD, ANYFIXED,
0, RLEFT|RESCC,
" OB2 AR,AL\n cvtZLl AL,AL\n",
ASG OPSIMP, INAREG|FOREFF|FORCC,
SAREG, TUCHAR,
SAREG|AWD, ANYFIXED,
0, RLEFT|RESCC,
" OB2 AR,AL\n movzZLl AL,AL\n",
*/
OPSIMP, INAREG|INTAREG|FORCC,
STAREG, ANYFIXED,
SAREG|AWD, TWORD,
0, RLEFT|RESCC,
" OL2 AR,AL\n",
OPSIMP, INAREG|INTAREG|FORCC,
SAREG|AWD, TWORD,
SAREG|AWD, TWORD,
NAREG|NASL|NASR, RESC1|RESCC,
" OL3 AR,AL,A1\n",
/* Default actions for hard trees ... */
# define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
UNARY MUL, DF( UNARY MUL ),
INCR, DF(INCR),
DECR, DF(INCR),
ASSIGN, DF(ASSIGN),
STASG, DF(STASG),
FLD, DF(FLD),
OPLEAF, DF(NAME),
OPLOG, FORCC,
SANY, TANY,
SANY, TANY,
REWRITE, BITYPE,
"",
OPLOG, DF(NOT),
COMOP, DF(COMOP),
INIT, DF(INIT),
OPUNARY, DF(UNARY MINUS),
ASG OPANY, DF(ASG PLUS),
OPANY, DF(BITYPE),
FREE, FREE, FREE, FREE, FREE, FREE, FREE, FREE, "help; I'm in trouble\n" };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.