utah rcsid 1.21 87/07/16 19:39:42: Better handling of stack pushes with the
[unix-history] / usr / src / old / pcc / ccom.vax / table.c
index 576033a..b159569 100644 (file)
@@ -1,5 +1,8 @@
-static char *sccsid ="@(#)table.c      1.5 (Berkeley) %G%";
-# include "mfile2"
+#ifndef lint
+static char *sccsid ="@(#)table.c      1.26 (Berkeley) %G%";
+#endif lint
+
+# include "pass2.h"
 
 # define WPTR TPTRTO|TINT|TLONG|TFLOAT|TDOUBLE|TPOINT|TUNSIGNED|TULONG
 # define AWD SNAME|SOREG|SCON|STARNM|STARREG
 
 # define WPTR TPTRTO|TINT|TLONG|TFLOAT|TDOUBLE|TPOINT|TUNSIGNED|TULONG
 # define AWD SNAME|SOREG|SCON|STARNM|STARREG
@@ -34,7 +37,7 @@ PCONV,        INAREG|INTAREG,
                NAREG|NASL,     RLEFT,
                "",
 
                NAREG|NASL,     RLEFT,
                "",
 
-#ifdef FORT
+#if defined(FORT) || defined(SPRECC)
 SCONV, INTAREG|FORCC,
        SAREG|AWD,      TDOUBLE,
        SANY,   TFLOAT,
 SCONV, INTAREG|FORCC,
        SAREG|AWD,      TDOUBLE,
        SANY,   TFLOAT,
@@ -42,7 +45,7 @@ SCONV,        INTAREG|FORCC,
                "       cvtdf   AL,A1\n",
 
 SCONV, INTAREG|FORCC,
                "       cvtdf   AL,A1\n",
 
 SCONV, INTAREG|FORCC,
-       SAREG|AWD,      ANYSIGNED|TUNSIGNED|TULONG,
+       SAREG|AWD,      ANYSIGNED,
        SANY,   TFLOAT,
                NAREG|NASL,     RESC1|RESCC,
                "       cvtZLf  AL,TA1\n",
        SANY,   TFLOAT,
                NAREG|NASL,     RESC1|RESCC,
                "       cvtZLf  AL,TA1\n",
@@ -60,12 +63,30 @@ SCONV,      INTAREG|FORCC,
                NAREG|NASL,     RESC1|RESCC,
                "       movzZLl AL,A1\n cvtld   A1,A1\n",
 
                NAREG|NASL,     RESC1|RESCC,
                "       movzZLl AL,A1\n cvtld   A1,A1\n",
 
+/* take care of redundant conversions introduced by reclaim() */
+SCONV, INTAREG,
+       STAREG, TWORD,
+       SANY,   TWORD,
+               0,      RLEFT,
+               "",
+
 SCONV, INTAREG|FORCC,
        SAREG|AWD,      TANY,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       ZA\n",
 
 SCONV, INTAREG|FORCC,
        SAREG|AWD,      TANY,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       ZA\n",
 
+SCONV, FORARG,
+       SAREG|AWD,      TWORD,
+       SANY,   TWORD,
+               0,      RNULL,
+               "       pushl   AL\n",
+
+SCONV, FORARG,
+       SAREG|AWD,      TANY,
+       SANY,   TANY,
+               0,      RNULL,
+               "       ZV\n",
 
 INIT,  FOREFF,
        SCON,   TANY,
 
 INIT,  FOREFF,
        SCON,   TANY,
@@ -94,7 +115,7 @@ GOTO,        FOREFF,
                "       jbr     CL\n",
 
 GOTO,  FOREFF,
                "       jbr     CL\n",
 
 GOTO,  FOREFF,
-       AWD,    TANY,
+       SNAME|SOREG,    TANY,
        SANY,   TANY,
                0,      RNOP,
                "       jmp     *AL\n",
        SANY,   TANY,
                0,      RNOP,
                "       jmp     *AL\n",
@@ -160,26 +181,50 @@ OPLOG,    FORCC,
                "       cmpl    AL,AR\nZP",
 
 OPLOG, FORCC,
                "       cmpl    AL,AR\nZP",
 
 OPLOG, FORCC,
-       SAREG|AWD,      TSHORT|TUSHORT,
-       SAREG|AWD,      TSHORT|TUSHORT,
+       SAREG|AWD,      TSHORT,
+       SAREG|AWD,      TSHORT,
                0,      RESCC,
                "       cmpw    AL,AR\nZP",
 
 OPLOG, FORCC,
                0,      RESCC,
                "       cmpw    AL,AR\nZP",
 
 OPLOG, FORCC,
-       SAREG|AWD,      TCHAR|TUCHAR,
-       SAREG|AWD,      TCHAR|TUCHAR,
+       SAREG|AWD,      TUSHORT,
+       SAREG|AWD,      TUSHORT,
+               0,      RESCC,
+               "       cmpw    AL,AR\nZP",
+
+OPLOG, FORCC,
+       SAREG|AWD,      TCHAR,
+       SAREG|AWD,      TCHAR,
                0,      RESCC,
                "       cmpb    AL,AR\nZP",
 
 OPLOG, FORCC,
                0,      RESCC,
                "       cmpb    AL,AR\nZP",
 
 OPLOG, FORCC,
-       SAREG|AWD,      TSHORT|TUSHORT,
-       SSCON,  TANY,
+       SAREG|AWD,      TUCHAR,
+       SAREG|AWD,      TUCHAR,
+               0,      RESCC,
+               "       cmpb    AL,AR\nZP",
+
+OPLOG, FORCC,
+       SAREG|AWD,      TSHORT,
+       SSCON,  ANYSIGNED,
                0,      RESCC,
                "       cmpw    AL,AR\nZP",
 
 OPLOG, FORCC,
                0,      RESCC,
                "       cmpw    AL,AR\nZP",
 
 OPLOG, FORCC,
-       SAREG|AWD,      TCHAR|TUCHAR,
-       SCCON,  TANY,
+       SAREG|AWD,      TUSHORT,
+       SSCON,  ANYUSIGNED,
+               0,      RESCC,
+               "       cmpw    AL,AR\nZP",
+
+OPLOG, FORCC,
+       SAREG|AWD,      TCHAR,
+       SCCON,  ANYSIGNED,
+               0,      RESCC,
+               "       cmpb    AL,AR\nZP",
+
+OPLOG, FORCC,
+       SAREG|AWD,      TUCHAR,
+       SCCON,  ANYUSIGNED,
                0,      RESCC,
                "       cmpb    AL,AR\nZP",
 
                0,      RESCC,
                "       cmpb    AL,AR\nZP",
 
@@ -213,27 +258,11 @@ CCODES,   INAREG|INTAREG,
                NAREG,  RESC1,
                "       movl    $1,A1\nZN",
 
                NAREG,  RESC1,
                "       movl    $1,A1\nZN",
 
-#ifdef FORT
-UNARY CALL,    INTAREG,
-       SCON,   TANY,
-       SANY,   TFLOAT,
-               NAREG|NASL,     RESC1,
-               "       calls   ZC,CL\n",
-
-UNARY CALL,    INTAREG,
-       SCON,   TANY,
-       SANY,   TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TDOUBLE,
-               NAREG|NASL,     RESC1, /* should be register 0 */
-               "       calls   ZC,CL\n",
-
-#else
-
 UNARY CALL,    INTAREG,
        SCON,   TANY,
        SANY,   TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
                NAREG|NASL,     RESC1,
                "       calls   ZC,CL\n",
 UNARY CALL,    INTAREG,
        SCON,   TANY,
        SANY,   TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
                NAREG|NASL,     RESC1,
                "       calls   ZC,CL\n",
-#endif
 
 UNARY CALL,    INTAREG,
        SAREG,  TANY,
 
 UNARY CALL,    INTAREG,
        SAREG,  TANY,
@@ -255,7 +284,7 @@ UNARY CALL, INAREG|INTAREG,
 
 ASG RS,        INAREG|FOREFF|FORCC,
        SAREG,  TWORD,
 
 ASG RS,        INAREG|FOREFF|FORCC,
        SAREG,  TWORD,
-       SCON,   TINT,
+       SCON,   TINT|TUNSIGNED,
                0,      RLEFT|RESCC,
                "       extzv   AR,ZU,AL,AL\n",
 
                0,      RLEFT|RESCC,
                "       extzv   AR,ZU,AL,AL\n",
 
@@ -273,7 +302,7 @@ ASG RS,     INAREG|FOREFF|FORCC,
 
 RS,    INAREG|INTAREG|FORCC,
        SAREG,  TWORD,
 
 RS,    INAREG|INTAREG|FORCC,
        SAREG,  TWORD,
-       SCON,   TINT,
+       SCON,   TINT|TUNSIGNED,
                NAREG|NASL,     RESC1|RESCC,
                "       extzv   AR,ZU,AL,A1\n",
 
                NAREG|NASL,     RESC1|RESCC,
                "       extzv   AR,ZU,AL,A1\n",
 
@@ -315,25 +344,25 @@ LS,       INAREG|INTAREG|FORCC,
 
 INCR,  FOREFF,
        AWD,    TANY,
 
 INCR,  FOREFF,
        AWD,    TANY,
-       SCON,   TANY,
+       SCON|SNAME,     TANY,
                0,      RLEFT,
                "       ZE\n",
 
 DECR,  FOREFF,
        AWD,    TANY,
                0,      RLEFT,
                "       ZE\n",
 
 DECR,  FOREFF,
        AWD,    TANY,
-       SCON,   TANY,
+       SCON|SNAME,     TANY,
                0,      RLEFT,
                "       ZE\n",
 
 INCR,  FOREFF,
        SAREG,  TWORD,
                0,      RLEFT,
                "       ZE\n",
 
 INCR,  FOREFF,
        SAREG,  TWORD,
-       SCON,   TANY,
+       SCON|SNAME,     TANY,
                0,      RLEFT,
                "       ZE\n",
 
 DECR,  FOREFF,
        SAREG,  TWORD,
                0,      RLEFT,
                "       ZE\n",
 
 DECR,  FOREFF,
        SAREG,  TWORD,
-       SCON,   TANY,
+       SCON|SNAME,     TANY,
                0,      RLEFT,
                "       ZE\n",
 
                0,      RLEFT,
                "       ZE\n",
 
@@ -341,25 +370,25 @@ DECR,     FOREFF,
 
 INCR,  INAREG|INTAREG,
        AWD,    TANY,
 
 INCR,  INAREG|INTAREG,
        AWD,    TANY,
-       SCON,   TANY,
+       SCON|SNAME,     TANY,
                NAREG,  RESC1,
                "       ZD\n",
 
 DECR,  INAREG|INTAREG,
        AWD,    TANY,
                NAREG,  RESC1,
                "       ZD\n",
 
 DECR,  INAREG|INTAREG,
        AWD,    TANY,
-       SCON,   TANY,
+       SCON|SNAME,     TANY,
                NAREG,  RESC1,
                "       ZD\n",
 
 INCR,  INAREG|INTAREG,
        SAREG,  TWORD,
                NAREG,  RESC1,
                "       ZD\n",
 
 INCR,  INAREG|INTAREG,
        SAREG,  TWORD,
-       SCON,   TANY,
+       SCON|SNAME,     TANY,
                NAREG,  RESC1,
                "       ZD\n",
 
 DECR,  INAREG|INTAREG,
        SAREG,  TWORD,
                NAREG,  RESC1,
                "       ZD\n",
 
 DECR,  INAREG|INTAREG,
        SAREG,  TWORD,
-       SCON,   TANY,
+       SCON|SNAME,     TANY,
                NAREG,  RESC1,
                "       ZD\n",
 
                NAREG,  RESC1,
                "       ZD\n",
 
@@ -378,15 +407,27 @@ ASSIGN,   INAREG|FOREFF|FORCC,
 ASSIGN,        INAREG|FOREFF|FORCC,
        SAREG|AWD,      TANY,
        SAREG|AWD,      TANY,
 ASSIGN,        INAREG|FOREFF|FORCC,
        SAREG|AWD,      TANY,
        SAREG|AWD,      TANY,
-               0,      RLEFT|RRIGHT|RESCC,
+               0,      RLEFT|RESCC,
                "       ZA\n",
 
                "       ZA\n",
 
-ASSIGN,        INAREG|FOREFF,
+ASSIGN,        FOREFF,
        SFLD,   TANY,
        SAREG|AWD,      TWORD,
        SFLD,   TANY,
        SAREG|AWD,      TWORD,
-               0,      RRIGHT,
+               0,      RNOP,
                "       insv    AR,$H,$S,AL\n",
 
                "       insv    AR,$H,$S,AL\n",
 
+ASSIGN,        INAREG,
+       SFLD,   ANYSIGNED,
+       SAREG|AWD,      TWORD,
+               NAREG,  RESC1,
+               "       insv    AR,$H,$S,AL\n   extv    $H,$S,AL,A1\n",
+
+ASSIGN,        INAREG,
+       SFLD,   ANYUSIGNED,
+       SAREG|AWD,      TWORD,
+               NAREG,  RESC1,
+               "       insv    AR,$H,$S,AL\n   extzv   $H,$S,AL,A1\n",
+
 ASSIGN,        INAREG|FOREFF|FORCC,
        SAREG|AWD,      TWORD,
        SFLD,   ANYSIGNED,
 ASSIGN,        INAREG|FOREFF|FORCC,
        SAREG|AWD,      TWORD,
        SFLD,   ANYSIGNED,
@@ -406,6 +447,18 @@ UNARY MUL, FOREFF,
                0,      RNULL,
                "       HELP HELP HELP\n",
 
                0,      RNULL,
                "       HELP HELP HELP\n",
 
+OREG,  INTEMP,
+       SANY,   TANY,
+       SOREG,  TDOUBLE,
+               2*NTEMP,        RESC1,
+               "       movd    AR,A1\n",
+
+OREG,  INTEMP,
+       SANY,   TANY,
+       SOREG,  TANY,
+               NTEMP,  RESC1,
+               "       movZF   AR,A1\n",
+
 REG,   INTEMP,
        SANY,   TANY,
        SAREG,  TDOUBLE,
 REG,   INTEMP,
        SANY,   TANY,
        SAREG,  TDOUBLE,
@@ -418,8 +471,8 @@ REG,        INTEMP,
                NTEMP,  RESC1,
                "       movZF   AR,A1\n",
 
                NTEMP,  RESC1,
                "       movZF   AR,A1\n",
 
-#ifdef FORT
- REG,  FORARG,
+#if defined(FORT) || defined(SPRECC)
+REG,   FORARG,
        SANY,   TANY,
        SAREG,  TFLOAT,
                0,      RNULL,
        SANY,   TANY,
        SAREG,  TFLOAT,
                0,      RNULL,
@@ -458,56 +511,43 @@ OPLTYPE,  FORARG,
 
 OPLTYPE,       FORARG,
        SANY,   TANY,
 
 OPLTYPE,       FORARG,
        SANY,   TANY,
-       SANY,   TCHAR|TSHORT,
-               0,      RNULL,
-               "       cvtZRl  AR,-(sp)\n",
-
-OPLTYPE,       FORARG,
-       SANY,   TANY,
-       SANY,   TUCHAR|TUSHORT,
-               0,      RNULL,
-               "       movzZRl AR,-(sp)\n",
-
-OPLTYPE,       FORARG,
        SANY,   TANY,
        SANY,   TANY,
-       SANY,   TDOUBLE,
                0,      RNULL,
                0,      RNULL,
-               "       movd    AR,-(sp)\n",
+               "       ZV\n",
 
 
-OPLTYPE,       FORARG,
-       SANY,   TANY,
-       SANY,   TFLOAT,
-               0,      RNULL,
-               "       cvtfd   AR,-(sp)\n",
-
-#ifdef FORT
+#if defined(FORT) || defined(SPRECC)
 UNARY MINUS,   INTAREG|FORCC,
 UNARY MINUS,   INTAREG|FORCC,
-       SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG|TFLOAT|TDOUBLE,
+       SAREG|AWD,      TFLOAT,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mnegZL  TAL,A1\n",
 
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mnegZL  TAL,A1\n",
 
-#else
+#endif
 
 UNARY MINUS,   INTAREG|FORCC,
        SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG|TDOUBLE,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mnegZL  AL,A1\n",
 
 UNARY MINUS,   INTAREG|FORCC,
        SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG|TDOUBLE,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mnegZL  AL,A1\n",
-#endif
 
 COMPL, INTAREG|FORCC,
 
 COMPL, INTAREG|FORCC,
-       SAREG|AWD,      TINT|TUNSIGNED,
+       SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mcomZL  AL,A1\n",
 
 COMPL, INTAREG|FORCC,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mcomZL  AL,A1\n",
 
 COMPL, INTAREG|FORCC,
-       SAREG|AWD,      ANYSIGNED|ANYUSIGNED,
+       SAREG|AWD,      ANYSIGNED,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       cvtZLl  AL,A1\n mcoml   A1,A1\n",
 
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       cvtZLl  AL,A1\n mcoml   A1,A1\n",
 
+COMPL, INTAREG|FORCC,
+       SAREG|AWD,      ANYUSIGNED,
+       SANY,   TANY,
+               NAREG|NASL,     RESC1|RESCC,
+               "       movzZLl AL,A1\n mcoml   A1,A1\n",
+
 AND,   FORCC,
        SAREG|AWD,      TWORD,
        SCON,   TWORD,
 AND,   FORCC,
        SAREG|AWD,      TWORD,
        SCON,   TWORD,
@@ -532,6 +572,85 @@ ASG AND,   INAREG|FOREFF|FORCC,
                0,      RLEFT|RESCC,
                "       bicl2   AR,AL\n",
 
                0,      RLEFT|RESCC,
                "       bicl2   AR,AL\n",
 
+DIV,   INAREG|FOREFF|FORCC,
+       SAREG|AWD,      TUNSIGNED|TULONG,
+       SCON,   ANYUSIGNED,
+               NAREG|NEVEN,    RESC1|RESCC,
+               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,U1\n",
+
+ASG DIV,       INAREG|FOREFF|FORCC,
+       SAREG|AWD,      TUNSIGNED|TULONG,
+       SMCON,  ANYUSIGNED,
+               0,      RLEFT|RESCC,
+               "       ZJ\n",
+
+ASG DIV,       INAREG|FOREFF|FORCC,
+       SAREG|AWD,      TUNSIGNED|TULONG,
+       SCON,   ANYUSIGNED,
+               NAREG|NEVEN,    RLEFT|RESCC,
+               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,AL,U1\n",
+
+ASG DIV,       INAREG|FOREFF|FORCC,
+       SAREG|AWD,      TINT|TLONG,
+       SMCON,  ANYUSIGNED,
+               0,      RLEFT|RESCC,
+               "       ZJ\n",
+
+ASG DIV,       INAREG|FOREFF|FORCC,
+       SAREG|AWD,      TINT|TLONG,
+       SCON,   ANYUSIGNED,
+               NAREG|NEVEN,    RLEFT|RESCC,
+               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,AL,U1\n",
+
+MOD,   INAREG|INTAREG,
+       SAREG|AWD,      TINT|TLONG,
+       SAREG|AWD,      TINT|TLONG,
+               NAREG,  RESC1,
+               "       divl3   AR,AL,A1\n      mull2   AR,A1\n subl3   A1,AL,A1\n",
+
+MOD,   INAREG|FOREFF,
+       SAREG|AWD,      TUNSIGNED|TULONG,
+       SMCON,  ANYUSIGNED,
+               NAREG|NASL,     RLEFT|RESC1,
+               "       ZJ\n",
+
+MOD,   INAREG|FOREFF,
+       SAREG|AWD,      TUNSIGNED|TULONG,
+       SCON,   ANYUSIGNED,
+               NAREG|NEVEN,    RESC1|RESCC,
+               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,U1,A1\n",
+
+/* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */
+ASG MOD,       INAREG|FOREFF|FORCC,
+       SAREG|AWD,      TINT|TLONG|TUNSIGNED|TULONG,
+       SAREG|AWD,      TINT|TLONG,
+               NAREG,  RLEFT|RESCC,
+               "       divl3   AR,AL,A1\n      mull2   AR,A1\n subl2   A1,AL\n",
+
+ASG MOD,       INAREG|FOREFF,
+       SAREG|AWD,      TUNSIGNED|TULONG,
+       SMCON,  ANYUSIGNED,
+               0,      RLEFT|RESCC,
+               "       ZJ\n",
+
+ASG MOD,       INAREG|FOREFF,
+       SAREG|AWD,      TUNSIGNED|TULONG,
+       SCON,   ANYUSIGNED,
+               NAREG|NEVEN,    RLEFT|RESCC,
+               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,AL\n",
+
+ASG MOD,       INAREG|FOREFF,
+       SAREG|AWD,      TINT|TLONG,
+       SMCON,  ANYUSIGNED,
+               0,      RLEFT|RESCC,
+               "       ZJ\n",
+
+ASG MOD,       INAREG|FOREFF,
+       SAREG|AWD,      TINT|TLONG,
+       SCON,   ANYUSIGNED,
+               NAREG|NEVEN,    RLEFT|RESCC,
+               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,AL\n",
+
 ASG OPMUL,     INAREG|FOREFF|FORCC,
        SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
        SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
 ASG OPMUL,     INAREG|FOREFF|FORCC,
        SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
        SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
@@ -550,63 +669,51 @@ OPMUL,    INAREG|INTAREG|FORCC,
                NAREG|NASL|NASR,        RESC1|RESCC,
                "       OL3     AR,AL,A1\n",
 
                NAREG|NASL|NASR,        RESC1|RESCC,
                "       OL3     AR,AL,A1\n",
 
-ASG MOD,       INAREG|INTAREG|FOREFF|FORCC,
-       SAREG,  TINT|TUNSIGNED|TLONG|TULONG,
-       SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
-               NAREG,  RLEFT|RESCC,
-               "       divl3   AR,AL,A1\n      mull2   AR,A1\n subl2   A1,AL\n",
-
-MOD,   INAREG|INTAREG,
-       SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
-       SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
-               NAREG,  RESC1,
-               "       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,
        SAREG,  TPOINT|TINT|TLONG|TUNSIGNED|TULONG,
-       SONE,   TINT|TLONG,
+       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       incZL   AL\n",
 
 ASG PLUS,      INAREG|FOREFF|FORCC,
        AWD,    ANYSIGNED|ANYUSIGNED,
                0,      RLEFT|RESCC,
                "       incZL   AL\n",
 
 ASG PLUS,      INAREG|FOREFF|FORCC,
        AWD,    ANYSIGNED|ANYUSIGNED,
-       SONE,   TINT|TLONG,
+       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       incZL   AL\n",
 
 ASG PLUS,      INAREG|FOREFF|FORCC,
        SAREG,  TSHORT|TCHAR,
                0,      RLEFT|RESCC,
                "       incZL   AL\n",
 
 ASG PLUS,      INAREG|FOREFF|FORCC,
        SAREG,  TSHORT|TCHAR,
-       SONE,   TINT|TLONG,
+       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       incZL   AL\n    cvtZLl  AL,AL\n",
 
 ASG PLUS,      INAREG|FOREFF|FORCC,
        SAREG,  TUSHORT|TUCHAR,
                0,      RLEFT|RESCC,
                "       incZL   AL\n    cvtZLl  AL,AL\n",
 
 ASG PLUS,      INAREG|FOREFF|FORCC,
        SAREG,  TUSHORT|TUCHAR,
-       SONE,   TINT|TLONG,
+       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       incZL   AL\n    movzZLl AL,AL\n",
 
 ASG MINUS,     INAREG|FOREFF|FORCC,
        SAREG,  TPOINT|TINT|TLONG|TUNSIGNED|TULONG,
                0,      RLEFT|RESCC,
                "       incZL   AL\n    movzZLl AL,AL\n",
 
 ASG MINUS,     INAREG|FOREFF|FORCC,
        SAREG,  TPOINT|TINT|TLONG|TUNSIGNED|TULONG,
-       SONE,   TINT|TLONG,
+       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       decZL   AL\n",
 
 ASG MINUS,     INAREG|FOREFF|FORCC,
        AWD,    ANYSIGNED|ANYUSIGNED,
                0,      RLEFT|RESCC,
                "       decZL   AL\n",
 
 ASG MINUS,     INAREG|FOREFF|FORCC,
        AWD,    ANYSIGNED|ANYUSIGNED,
-       SONE,   TINT|TLONG,
+       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       decZL   AL\n",
 
 ASG MINUS,     INAREG|FOREFF|FORCC,
        SAREG,  TSHORT|TCHAR,
                0,      RLEFT|RESCC,
                "       decZL   AL\n",
 
 ASG MINUS,     INAREG|FOREFF|FORCC,
        SAREG,  TSHORT|TCHAR,
-       SONE,   TINT|TLONG,
+       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       decZL   AL\n    cvtZLl  AL,AL\n",
 
 ASG MINUS,     INAREG|FOREFF|FORCC,
        SAREG,  TUSHORT|TUCHAR,
                0,      RLEFT|RESCC,
                "       decZL   AL\n    cvtZLl  AL,AL\n",
 
 ASG MINUS,     INAREG|FOREFF|FORCC,
        SAREG,  TUSHORT|TUCHAR,
-       SONE,   TINT|TLONG,
+       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       decZL   AL\n    movzZLl AL,AL\n",
 
                0,      RLEFT|RESCC,
                "       decZL   AL\n    movzZLl AL,AL\n",
 
@@ -660,25 +767,49 @@ ASG OPSIMP,       INAREG|FOREFF|FORCC,
 
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TSHORT|TUSHORT,
 
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TSHORT|TUSHORT,
-       SAREG|AWD,      TSHORT|TUSHORT,
+       SSOREG, TSHORT|TUSHORT|TINT|TUNSIGNED,
                0,      RLEFT|RESCC,
                "       OW2     AR,AL\n",
 
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TSHORT|TUSHORT,
                0,      RLEFT|RESCC,
                "       OW2     AR,AL\n",
 
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TSHORT|TUSHORT,
-       SSCON,  TWORD,
+       SAREG|SNAME|STARNM,     TSHORT|TUSHORT|TINT|TUNSIGNED,
+               0,      RLEFT|RESCC,
+               "       OW2     AR,AL\n",
+
+ASG OPSIMP,    INAREG|FOREFF|FORCC,
+       AWD,    TSHORT|TUSHORT,
+       SSCON,  ANYFIXED,
+               0,      RLEFT|RESCC,
+               "       OW2     AR,AL\n",
+
+ASG OPSIMP,    INAREG|FOREFF|FORCC,
+       AWD,    TSHORT|TUSHORT,
+       AWD,    TSHORT|TUSHORT,
                0,      RLEFT|RESCC,
                "       OW2     AR,AL\n",
 
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TCHAR|TUCHAR,
                0,      RLEFT|RESCC,
                "       OW2     AR,AL\n",
 
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TCHAR|TUCHAR,
-       SAREG|AWD,      TCHAR|TUCHAR,
+       SSOREG, ANYFIXED,
                0,      RLEFT|RESCC,
                "       OB2     AR,AL\n",
 
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TCHAR|TUCHAR,
                0,      RLEFT|RESCC,
                "       OB2     AR,AL\n",
 
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TCHAR|TUCHAR,
-       SCCON,  TWORD,
+       SAREG|SNAME|STARNM,     ANYFIXED,
+               0,      RLEFT|RESCC,
+               "       OB2     AR,AL\n",
+
+ASG OPSIMP,    INAREG|FOREFF|FORCC,
+       AWD,    TCHAR|TUCHAR,
+       SCCON,  ANYFIXED,
+               0,      RLEFT|RESCC,
+               "       OB2     AR,AL\n",
+
+ASG OPSIMP,    INAREG|FOREFF|FORCC,
+       AWD,    TCHAR|TUCHAR,
+       AWD,    TCHAR|TUCHAR,
                0,      RLEFT|RESCC,
                "       OB2     AR,AL\n",
 
                0,      RLEFT|RESCC,
                "       OB2     AR,AL\n",
 
@@ -728,7 +859,7 @@ ASG OPFLOAT,        INAREG|FOREFF|FORCC,
        SAREG|AWD,      TFLOAT,
        SAREG|AWD,      TFLOAT,
                0,      RLEFT|RESCC,
        SAREG|AWD,      TFLOAT,
        SAREG|AWD,      TFLOAT,
                0,      RLEFT|RESCC,
-#ifdef FORT
+#if defined(FORT) || defined(SPRECC)
                "       OF2     AR,TAL\n",
 #else
                "       OF2     AR,AL\n",
                "       OF2     AR,TAL\n",
 #else
                "       OF2     AR,AL\n",
@@ -746,6 +877,16 @@ ASG OPFLOAT,       INAREG|INTAREG|FOREFF|FORCC,
                NAREG,  RLEFT|RESC1|RESCC,
                "       cvtfd   AL,A1\n OD2     AR,A1\n cvtdf   A1,AL\n",
 
                NAREG,  RLEFT|RESC1|RESCC,
                "       cvtfd   AL,A1\n OD2     AR,A1\n cvtdf   A1,AL\n",
 
+ASG OPFLOAT,   INAREG|FOREFF|FORCC,
+       SAREG|AWD,      ANYFIXED,
+#ifndef SPRECC
+       SAREG|AWD,      TDOUBLE,                /* force FLOAT to register */
+#else
+       SAREG|AWD,      TFLOAT|TDOUBLE,
+#endif
+               NAREG,  RLEFT|RESCC,    /* usable() knows we need a reg pair */
+               "       ZG\n",
+
 OPFLOAT,       INAREG|INTAREG|FORCC,
        STAREG, TDOUBLE,
        SAREG|AWD,      TDOUBLE,
 OPFLOAT,       INAREG|INTAREG|FORCC,
        STAREG, TDOUBLE,
        SAREG|AWD,      TDOUBLE,
@@ -770,7 +911,7 @@ OPFLOAT,    INAREG|INTAREG|FORCC,
                NAREG|NASR,     RESC1|RESCC,
                "       cvtfd   AR,A1\n OD3     A1,AL,A1\n",
 
                NAREG|NASR,     RESC1|RESCC,
                "       cvtfd   AR,A1\n OD3     A1,AL,A1\n",
 
-#ifdef FORT
+#if defined(FORT) || defined(SPRECC)
 OPFLOAT,       INAREG|INTAREG|FORCC,
        STAREG,         TFLOAT,
        SAREG|AWD,      TFLOAT,
 OPFLOAT,       INAREG|INTAREG|FORCC,
        STAREG,         TFLOAT,
        SAREG|AWD,      TFLOAT,