# define AWD SNAME|SOREG|SCON|STARNM|STARREG|SAREG
# define LWD SNAME|SOREG|SCON|SAREG
ASSIGN
, INAREG
|FOREFF
|FORCC
,
AWD
, TPOINT
|TINT
|TUNSIGNED
|TCHAR
|TUCHAR
,
ASSIGN
, INAREG
|FOREFF
|FORCC
,
NAREG
|NASR
, RLEFT
|RESC1
|RESCC
,
" movb AR,A1\n mov A1,AL\n",
ASSIGN
, INAREG
|FOREFF
|FORCC
,
" movb AR,AL\n bic $!377,AL\n",
ASSIGN
, INAREG
|FOREFF
|FORCC
,
AWD
, TPOINT
|TINT
|TUNSIGNED
|TCHAR
|TUCHAR
,
AWD
, TPOINT
|TINT
|TUNSIGNED
|TCHAR
|TUCHAR
,
" mov AR,AL\n mov UR,UL\n",
" mov ZU,A1\n mov AR,(A1)+\n mov UR,(A1)\n",
" mov ZU,A1\n clr (A1)+\n mov AR,(A1)\n",
" mov ZU,A1\n mov AR,2(A1)\n sxt (A1)\n",
"\tmov\tAR,-(sp)\n\tmov\tZU,A1\n\tclr\t(A1)+\n\tmov\t(sp)+,(A1)\
\nF\tmov\t(A1),U1\nF\tclr\tA1\n",
"\tmov\tAR,-(sp)\n\tmov\tZU,A1\n\tmov\t(sp)+,2(A1)\nF\tmov\t2(A1),U1\
\n\tsxt\t(A1)\nF\tsxt\tA1\n",
" mov AR,AL\n mov ZU,AR\n mov UR,2(AR)\nF mov (AR),AR\n",
" movb AR,U1\n mov U1,UL\n sxt AL\nF sxt A1\n",
" movb AR,UL\n bic $!377,UL\n clr AL\n",
ASSIGN
, INBREG
|INTBREG
|FOREFF
,
ASSIGN
, INBREG
|INTBREG
|FOREFF
,
ASSIGN
, INTAREG
|INAREG
|FOREFF
,
"F\tmov\tAR,-(sp)\n\tash\t$H.,AR\n\tbic\t$!M.,AR\n\tbic\t$M.,AL\n\tbis\tAR,AL\nF\tmov\t(sp)+,AR\n",
"\tmov\tAR,A1\n\tash\t$H.,A1\n\tbic\t$!M.,A1\n\tbic\t$M.,AL\n\tbis\tA1,AL\n",
" movof AR,A1\n movfo A1,AL\n",
/* put this here so UNARY MUL nodes match OPLTYPE when appropriate */
UNARY MUL
, INTAREG
|INAREG
,
" mov AL,U1\n mov (U1)+,A1\n mov (U1),U1\n",
"", /* this entry throws away computations which don't do anything */
SZERO
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
SANY
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
,
SANY
, TINT
|TUNSIGNED
|TPOINT
,
SANY
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
SANY
, TINT
|TUNSIGNED
|TPOINT
,
" movb AR,A1\n bic $!377,A1\n",
" mov UR,U1\n mov AR,A1\n",
OPLTYPE
, INTAREG
|INAREG
, /* for use when there are no free regs */
" mov AR,-(sp)\n mov UR,U1\n mov (sp)+,A1\n",
" mov AR,A1\n mov UR,U1\n",
" mov UR,Z-\n mov AR,Z-\n",
" mov AL,A1\n mov 2(A1),Z-\n mov (A1),Z-\n",
AWD
, TPOINT
|TINT
|TUNSIGNED
,
AWD
, TPOINT
|TINT
|TUNSIGNED
,
SCCON
, TINT
, /* look for constants between -128 and 127 */
" movof AR,A1\n cmpf A1,AL\n cfcc\nZF",
" cmpf AR,AL\n cfcc\nZF",
SANY
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
" clr A1\n mov $1,U1\nZN",
UNARY MINUS
, INTAREG
|INAREG
,
UNARY MINUS
, INTAREG
|INAREG
,
" neg AL\n neg UL\n sbc AL\n",
UNARY MINUS
, INTBREG
|INBREG
,
INCR
, INTAREG
|INAREG
|FOREFF
,
AWD
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
"F movZB AL,A1\n incZB AL\n",
DECR
, INTAREG
|INAREG
|FOREFF
,
AWD
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
"F movZB AL,A1\n decZB AL\n",
INCR
, INTAREG
|INAREG
|FOREFF
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
"F mov AL,A1\n add AR,AL\n",
DECR
, INTAREG
|INAREG
|FOREFF
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
"F mov AL,A1\n sub AR,AL\n",
INCR
, INTAREG
|INAREG
|FOREFF
,
"F mov AL,A1\nF mov UL,U1\n add AR,AL\n add UR,UL\n adc AL\n",
DECR
, INTAREG
|INAREG
|FOREFF
,
"F mov AL,A1\nF mov UL,U1\n sub AR,AL\n sub UR,UL\n sbc AL\n",
AWD
, TINT
|TUNSIGNED
|TPOINT
,
STAREG
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
STAREG
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
"ZV div AR,r0\n", /* since lhs must be in r1 */
STAREG
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
"ZV div AR,r0\n", /* since lhs must be in r1 */
AWD
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
/* AND transformed to "pdp11 bic" in first pass. */
AWD
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
SAREG
, TINT
|TUNSIGNED
|TPOINT
,
SAREG
, TINT
|TUNSIGNED
|TPOINT
,
SAREG
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
SAREG
, TINT
|TUNSIGNED
|TPOINT
,
SAREG
, TINT
|TUNSIGNED
|TPOINT
,
STAREG
, TINT
|TUNSIGNED
|TPOINT
,
" neg AR\n ash AR,AL\nZH",
SAREG
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
" mov AR,A1\n neg A1\n ash A1,AL\nZH",
" mov AR,-(sp)\n neg (sp)\n ash (sp)+,AL\nZH",
SAREG
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
" mov AR,A1\n neg A1\n ash A1,AL\nZH",
/* AND transformed to "pdp11 bic" in first pass. */
AWD
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
SICON
, TINT
|TLONG
|TULONG
,
" mov ZU,A1\n add AR,(A1)+\n add UR,(A1)\n adc -(A1)\n",
" add AR,AL\n add UR,UL\n adc AL\n",
SICON
, TINT
|TLONG
|TULONG
,
" mov ZU,A1\n sub AR,(A1)+\n sub UR,(A1)\n sbc -(A1)\n",
" sub AR,AL\n sub UR,UL\n sbc AL\n",
" bis AR,AL\n bis UR,UL\n",
/* AND transformed to "pdp11 bic" in first pass. */
" bic AR,AL\n bic UR,UL\n",
" xor AR,AL\n xor UR,UL\n",
/* table entries for ^ which correspond to the usual way of doing busingess
(rhs in a temp register */
"\tmov\tAL,-(sp)\n\tmov\tUR,AL\n\txor\tAL,UL\n\tmov\tAR,AL\n\txor\tAL,(sp)\n\tmov\t(sp)+,AL\n",
STAREG
, TINT
|TUNSIGNED
|TPOINT
,
AWD
, TINT
|TUNSIGNED
|TPOINT
,
"\tmov\tAL,-(sp)\n\tmov\tAR,AL\n\txor\tAL,(sp)\n\tmov\t(sp)+,AL\n",
AWD
, TINT
|TUNSIGNED
|TPOINT
,
STAREG
, TINT
|TUNSIGNED
|TPOINT
,
" neg AR\n ashc AR,AL\nZH",
AWD
, TINT
|TUNSIGNED
|TPOINT
,
" mov AR,A1\n neg A1\n ashc A1,AL\nZH",
AWD
, TINT
|TUNSIGNED
|TPOINT
,
" mov AR,A1\n neg A1\n ashc A1,AL\nZH",
ASG OPFLOAT
, INBREG
|INTBREG
,
ASG OPFLOAT
, INBREG
|INTBREG
,
" movof AR,A1\n OF A1,AL\n",
" movof AR,A1\n OF A1,AL\n cfcc\n",
SAREG
|SNAME
|SOREG
|SCON
, TANY
,
SANY
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
|TLONG
|TULONG
,
NAREG
|NASL
, RESC1
, /* should be register 0 */
SAREG
|SNAME
|SOREG
|SCON
, TANY
,
NBREG
, RESC1
, /* should be register FR0 */
STAREG
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
AWD
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
SANY
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
" movb AL,U1\n bic $!377,U1\n clr A1\n",
SANY
, TINT
|TUNSIGNED
|TPOINT
|TCHAR
|TUCHAR
,
" setl\n movfi AL,-(sp)\n seti\n mov (sp)+,A1\n mov (sp)+,U1\n",
" setl\n movfi AL,Z4\n seti\n",
"\tmov\tUL,-(sp)\n\tmov\tAL,-(sp)\n\tsetl\n\tmovif\t(sp)+,A1\n\tseti\n",
"\tsetl\n\tmovif\tAL,A1\n\tseti\n",
"\tmov\tUL,-(sp)\n\tmov\tAL,-(sp)\n\tsetl\n\tmovif\t(sp)+,A1\n\tseti\n\tcfcc\n\tbpl\t1f\n\taddf\t$050200,A1\n1:\n",
"\tsetl\n\tmovif\tAL,A1\n\tseti\n\tcfcc\n\tbpl\t1f\n\taddf\t$050200,A1\n1:\n",
STAREG
, TUNSIGNED
|TPOINT
,
"\tmovif\tAL,A1\n\tcfcc\n\tbpl\t1f\n\taddf\t$044200,A1\n1:\n",
SANY
, TINT
|TUNSIGNED
|TPOINT
,
/* for the use of fortran only */
SNAME
, TINT
|TUNSIGNED
|TCHAR
|TUCHAR
|TPOINT
,
/* 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" };