date and time created 88/10/19 11:45:49 by bostic
[unix-history] / usr / src / old / pcc / ccom.vax / table.c
index 16b2460..a3b01ce 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid ="@(#)table.c      1.21 (Berkeley) %G%";
+static char *sccsid ="@(#)table.c      1.33 (Berkeley) %G%";
 #endif lint
 
 # include "pass2.h"
 #endif lint
 
 # include "pass2.h"
@@ -16,18 +16,6 @@ static char *sccsid ="@(#)table.c    1.21 (Berkeley) %G%";
 
 struct optab  table[] = {
 
 
 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                 */
        /* the following entry is to fix a problem with
           the manner that the first pass handles the
           type of a shift expression                 */
@@ -49,20 +37,8 @@ SCONV,       INTAREG|FORCC,
        SANY,   TFLOAT,
                NAREG|NASL,     RESC1|RESCC,
                "       cvtZLf  AL,TA1\n",
        SANY,   TFLOAT,
                NAREG|NASL,     RESC1|RESCC,
                "       cvtZLf  AL,TA1\n",
-
-SCONV, INTAREG|FORCC,
-       SAREG|AWD,      TUCHAR|TUSHORT,
-       SANY,   TFLOAT,
-               NAREG|NASL,     RESC1|RESCC,
-               "       movzZLl AL,A1\n cvtlf   A1,TA1\n",
 #endif
 
 #endif
 
-SCONV, INTAREG|FORCC,
-       SAREG|AWD,      TUCHAR|TUSHORT,
-       SANY,   TFLOAT|TDOUBLE,
-               NAREG|NASL,     RESC1|RESCC,
-               "       movzZLl AL,A1\n cvtld   A1,A1\n",
-
 /* take care of redundant conversions introduced by reclaim() */
 SCONV, INTAREG,
        STAREG, TWORD,
 /* take care of redundant conversions introduced by reclaim() */
 SCONV, INTAREG,
        STAREG, TWORD,
@@ -70,12 +46,23 @@ SCONV,      INTAREG,
                0,      RLEFT,
                "",
 
                0,      RLEFT,
                "",
 
+SCONV, INTAREG,
+       STAREG, TDOUBLE,
+       SANY,   TDOUBLE,
+               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,      TANY,
+       SANY,   TANY,
+               NAREG|NASL,     RNULL,
+               "       ZV\n",
 
 INIT,  FOREFF,
        SCON,   TANY,
 
 INIT,  FOREFF,
        SCON,   TANY,
@@ -95,6 +82,7 @@ INIT, FOREFF,
                0,      RNOP,
                "       .byte   CL\n",
 
                0,      RNOP,
                "       .byte   CL\n",
 
+#ifdef FORT
        /* for the use of fortran only */
 
 GOTO,  FOREFF,
        /* for the use of fortran only */
 
 GOTO,  FOREFF,
@@ -102,6 +90,7 @@ GOTO,        FOREFF,
        SANY,   TANY,
                0,      RNOP,
                "       jbr     CL\n",
        SANY,   TANY,
                0,      RNOP,
                "       jbr     CL\n",
+#endif
 
 GOTO,  FOREFF,
        SNAME|SOREG,    TANY,
 
 GOTO,  FOREFF,
        SNAME|SOREG,    TANY,
@@ -193,29 +182,12 @@ OPLOG,    FORCC,
                0,      RESCC,
                "       cmpb    AL,AR\nZP",
 
                0,      RESCC,
                "       cmpb    AL,AR\nZP",
 
+/* optim2() handles degenerate comparisons with constants */
 OPLOG, FORCC,
 OPLOG, FORCC,
-       SAREG|AWD,      TSHORT,
-       SSCON,  ANYSIGNED,
+       SAREG|AWD,      TCHAR|TUCHAR|TSHORT|TUSHORT,
+       SCON,   ANYFIXED,
                0,      RESCC,
                0,      RESCC,
-               "       cmpw    AL,AR\nZP",
-
-OPLOG, FORCC,
-       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",
+               "       cmpZL   AL,AR\nZP",
 
 OPLOG, FORCC,
        SAREG|AWD,      TDOUBLE,
 
 OPLOG, FORCC,
        SAREG|AWD,      TDOUBLE,
@@ -224,11 +196,13 @@ OPLOG,    FORCC,
                "       cmpd    AL,AR\nZP",
 
 OPLOG, FORCC,
                "       cmpd    AL,AR\nZP",
 
 OPLOG, FORCC,
-       SAREG|AWD,      TDOUBLE,
        SAREG|AWD,      TFLOAT,
        SAREG|AWD,      TFLOAT,
-               NAREG|NASR,     RESCC,
-               "       cvtfd   AR,A1\n cmpd    AL,A1\nZP",
+       SAREG|AWD,      TFLOAT,
+               0,      RESCC,
+               "       cmpf    AL,AR\nZP",
 
 
+#ifdef FORT
+/* this really ought to be taken care of farther upstream... XXX */
 OPLOG, FORCC,
        SAREG|AWD,      TFLOAT,
        SAREG|AWD,      TDOUBLE,
 OPLOG, FORCC,
        SAREG|AWD,      TFLOAT,
        SAREG|AWD,      TDOUBLE,
@@ -236,10 +210,11 @@ OPLOG,    FORCC,
                "       cvtfd   AL,A1\n cmpd    A1,AR\nZP",
 
 OPLOG, FORCC,
                "       cvtfd   AL,A1\n cmpd    A1,AR\nZP",
 
 OPLOG, FORCC,
+       SAREG|AWD,      TDOUBLE,
        SAREG|AWD,      TFLOAT,
        SAREG|AWD,      TFLOAT,
-       SAREG|AWD,      TFLOAT,
-               0,      RESCC,
-               "       cmpf    AL,AR\nZP",
+               NAREG|NASR,     RESCC,
+               "       cvtfd   AR,A1\n cmpd    AL,A1\nZP",
+#endif
 
 CCODES,        INAREG|INTAREG,
        SANY,   TANY,
 
 CCODES,        INAREG|INTAREG,
        SANY,   TANY,
@@ -332,66 +307,34 @@ LS,       INAREG|INTAREG|FORCC,
                "       ZB      AR,A1\n ashl    A1,AL,A1\n",
 
 INCR,  FOREFF,
                "       ZB      AR,A1\n ashl    A1,AL,A1\n",
 
 INCR,  FOREFF,
-       AWD,    TANY,
-       SCON,   TANY,
-               0,      RLEFT,
-               "       ZE\n",
-
-DECR,  FOREFF,
-       AWD,    TANY,
-       SCON,   TANY,
-               0,      RLEFT,
-               "       ZE\n",
-
-INCR,  FOREFF,
-       SAREG,  TWORD,
-       SCON,   TANY,
+       SAREG|AWD,      TANY,
+       SCON|SNAME,     TANY,
                0,      RLEFT,
                "       ZE\n",
 
 DECR,  FOREFF,
                0,      RLEFT,
                "       ZE\n",
 
 DECR,  FOREFF,
-       SAREG,  TWORD,
-       SCON,   TANY,
+       SAREG|AWD,      TANY,
+       SCON|SNAME,     TANY,
                0,      RLEFT,
                "       ZE\n",
 
                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,
 INCR,  INAREG|INTAREG,
-       SAREG,  TWORD,
-       SCON,   TANY,
+       SAREG|AWD,      TANY,
+       SCON|SNAME,     TANY,
                NAREG,  RESC1,
                "       ZD\n",
 
 DECR,  INAREG|INTAREG,
                NAREG,  RESC1,
                "       ZD\n",
 
 DECR,  INAREG|INTAREG,
-       SAREG,  TWORD,
-       SCON,   TANY,
+       SAREG|AWD,      TANY,
+       SCON|SNAME,     TANY,
                NAREG,  RESC1,
                "       ZD\n",
 
 ASSIGN,        INAREG|FOREFF|FORCC,
                NAREG,  RESC1,
                "       ZD\n",
 
 ASSIGN,        INAREG|FOREFF|FORCC,
-       SAREG|AWD,      TDOUBLE,
-       SAREG|AWD,      TUCHAR|TUSHORT,
-               NAREG|NASR,     RLEFT|RESCC,
-               "       movzZRl AR,A1\n cvtld   A1,AL\n",
-
-ASSIGN,        INAREG|FOREFF|FORCC,
-       SAREG|AWD,      TFLOAT,
+       SAREG|AWD,      TFLOAT|TDOUBLE,
        SAREG|AWD,      TUCHAR|TUSHORT,
                NAREG|NASR,     RLEFT|RESCC,
        SAREG|AWD,      TUCHAR|TUSHORT,
                NAREG|NASR,     RLEFT|RESCC,
-               "       movzZRl AR,A1\n cvtlf   A1,AL\n",
+               "       ZA\n",
 
 ASSIGN,        INAREG|FOREFF|FORCC,
        SAREG|AWD,      TANY,
 
 ASSIGN,        INAREG|FOREFF|FORCC,
        SAREG|AWD,      TANY,
@@ -440,19 +383,19 @@ OREG,     INTEMP,
        SANY,   TANY,
        SOREG,  TDOUBLE,
                2*NTEMP,        RESC1,
        SANY,   TANY,
        SOREG,  TDOUBLE,
                2*NTEMP,        RESC1,
-               "       movd    AR,A1\n",
+               "       movq    AR,A1\n",
 
 OREG,  INTEMP,
        SANY,   TANY,
        SOREG,  TANY,
                NTEMP,  RESC1,
 
 OREG,  INTEMP,
        SANY,   TANY,
        SOREG,  TANY,
                NTEMP,  RESC1,
-               "       movZF   AR,A1\n",
+               "       movZR   AR,A1\n",
 
 REG,   INTEMP,
        SANY,   TANY,
        SAREG,  TDOUBLE,
                2*NTEMP,        RESC1,
 
 REG,   INTEMP,
        SANY,   TANY,
        SAREG,  TDOUBLE,
                2*NTEMP,        RESC1,
-               "       movd    AR,A1\n",
+               "       movq    AR,A1\n",
 
 REG,   INTEMP,
        SANY,   TANY,
 
 REG,   INTEMP,
        SANY,   TANY,
@@ -471,7 +414,7 @@ REG,        FORARG,
        SANY,   TANY,
        SAREG,  TDOUBLE,
                0,      RNULL,
        SANY,   TANY,
        SAREG,  TDOUBLE,
                0,      RNULL,
-               "       movZR   AR,-(sp)\n",
+               "       mov   AR,-(sp)\n",
 #endif
 
 OPLEAF,        FOREFF,
 #endif
 
 OPLEAF,        FOREFF,
@@ -494,33 +437,9 @@ OPLTYPE,   FORCC,
 
 OPLTYPE,       FORARG,
        SANY,   TANY,
 
 OPLTYPE,       FORARG,
        SANY,   TANY,
-       SANY,   TWORD,
-               0,      RNULL,
-               "       pushl   AR\n",
-
-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,   TDOUBLE,
-               0,      RNULL,
-               "       movd    AR,-(sp)\n",
-
-OPLTYPE,       FORARG,
        SANY,   TANY,
        SANY,   TANY,
-       SANY,   TFLOAT,
                0,      RNULL,
                0,      RNULL,
-               "       cvtfd   AR,-(sp)\n",
+               "       ZV\n",
 
 #if defined(FORT) || defined(SPRECC)
 UNARY MINUS,   INTAREG|FORCC,
 
 #if defined(FORT) || defined(SPRECC)
 UNARY MINUS,   INTAREG|FORCC,
@@ -532,40 +451,28 @@ UNARY MINUS,      INTAREG|FORCC,
 #endif
 
 UNARY MINUS,   INTAREG|FORCC,
 #endif
 
 UNARY MINUS,   INTAREG|FORCC,
-       SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG|TDOUBLE,
+       SAREG|AWD,      TWORD|TDOUBLE,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mnegZL  AL,A1\n",
 
 COMPL, INTAREG|FORCC,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mnegZL  AL,A1\n",
 
 COMPL, INTAREG|FORCC,
-       SAREG|AWD,      TINT|TUNSIGNED|TLONG|TULONG,
+       SAREG|AWD,      TWORD,
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mcomZL  AL,A1\n",
 
        SANY,   TANY,
                NAREG|NASL,     RESC1|RESCC,
                "       mcomZL  AL,A1\n",
 
-COMPL, INTAREG|FORCC,
-       SAREG|AWD,      ANYSIGNED|ANYUSIGNED,
-       SANY,   TANY,
-               NAREG|NASL,     RESC1|RESCC,
-               "       cvtZLl  AL,A1\n mcoml   A1,A1\n",
-
 AND,   FORCC,
 AND,   FORCC,
-       SAREG|AWD,      TWORD,
-       SCON,   TWORD,
-               0,      RESCC,
-               "       bitl    ZZ,AL\n",
-
-AND,   FORCC,
-       SAREG|AWD,      TSHORT|TUSHORT,
-       SSCON,  TWORD,
-               0,      RESCC,
-               "       bitw    ZZ,AL\n",
+       SAREG|AWD,      TCHAR|TSHORT,
+       SCON,   ANYFIXED,
+               NAREG|NASL,     RESCC,
+               "       ZZ\n",
 
 AND,   FORCC,
 
 AND,   FORCC,
-       SAREG|AWD,      TCHAR|TUCHAR,
-       SCCON,  TWORD,
+       SAREG|AWD,      TWORD|ANYUSIGNED,
+       SCON,   ANYFIXED,
                0,      RESCC,
                0,      RESCC,
-               "       bitb    ZZ,AL\n",
+               "       ZZ\n",
 
 ASG AND,       INAREG|FOREFF|FORCC,
        SAREG,  TWORD,
 
 ASG AND,       INAREG|FOREFF|FORCC,
        SAREG,  TWORD,
@@ -573,32 +480,23 @@ ASG AND,  INAREG|FOREFF|FORCC,
                0,      RLEFT|RESCC,
                "       bicl2   AR,AL\n",
 
                0,      RLEFT|RESCC,
                "       bicl2   AR,AL\n",
 
+/* General cases for DIV and ASG DIV are handled below with OPMUL */
+/* Some special cases are handled in optim2() */
+
 DIV,   INAREG|FOREFF|FORCC,
        SAREG|AWD,      TUNSIGNED|TULONG,
 DIV,   INAREG|FOREFF|FORCC,
        SAREG|AWD,      TUNSIGNED|TULONG,
-       SCON,   TANY,
+       SCON,   ANYUSIGNED,
                NAREG|NEVEN,    RESC1|RESCC,
                "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,U1\n",
 
 ASG DIV,       INAREG|FOREFF|FORCC,
                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,  TANY,
-               0,      RLEFT|RESCC,
-               "       ZJ\n",
-
-ASG DIV,       INAREG|FOREFF|FORCC,
-       SAREG|AWD,      TUNSIGNED|TULONG,
-       SCON,   TANY,
-               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,
+       SAREG|AWD,      TINT|TLONG|TUNSIGNED|TULONG,
        SMCON,  ANYUSIGNED,
                0,      RLEFT|RESCC,
                "       ZJ\n",
 
 ASG DIV,       INAREG|FOREFF|FORCC,
        SMCON,  ANYUSIGNED,
                0,      RLEFT|RESCC,
                "       ZJ\n",
 
 ASG DIV,       INAREG|FOREFF|FORCC,
-       SAREG|AWD,      TINT|TLONG,
+       SAREG|AWD,      TINT|TLONG|TUNSIGNED|TULONG,
        SCON,   ANYUSIGNED,
                NAREG|NEVEN,    RLEFT|RESCC,
                "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,AL,U1\n",
        SCON,   ANYUSIGNED,
                NAREG|NEVEN,    RLEFT|RESCC,
                "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,AL,U1\n",
@@ -611,83 +509,35 @@ MOD,      INAREG|INTAREG,
 
 MOD,   INAREG|FOREFF,
        SAREG|AWD,      TUNSIGNED|TULONG,
 
 MOD,   INAREG|FOREFF,
        SAREG|AWD,      TUNSIGNED|TULONG,
-       SMCON,  TANY,
+       SMCON,  ANYUSIGNED,
                NAREG|NASL,     RLEFT|RESC1,
                "       ZJ\n",
 
                NAREG|NASL,     RLEFT|RESC1,
                "       ZJ\n",
 
-MOD,   FORCC,
-       SAREG|AWD,      TUNSIGNED|TULONG,
-       SMCON,  TANY,
-               NAREG|NASL,     RESCC,
-               "       ZJ\n    tstl    A1\n",
-
 MOD,   INAREG|FOREFF,
        SAREG|AWD,      TUNSIGNED|TULONG,
 MOD,   INAREG|FOREFF,
        SAREG|AWD,      TUNSIGNED|TULONG,
-       SCON,   TANY,
-               NAREG|NEVEN,    RESC1|RESCC,
+       SCON,   ANYUSIGNED,
+               NAREG|NEVEN,    RESC1,
                "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,U1,A1\n",
 
                "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,U1,A1\n",
 
-MOD,   FORCC,
-       SAREG|AWD,      TUNSIGNED|TULONG,
-       SCON,   TANY,
-               NAREG|NEVEN,    RESC1|RESCC,
-               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,U1,A1\n   tstl    A1\n",
-
-ASG MOD,       INAREG|INTAREG|FOREFF|FORCC,
-       SAREG,  TINT|TLONG,
+/* 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,      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,  TANY,
-               0,      RLEFT|RESCC,
-               "       ZJ\n",
-
-ASG MOD,       FORCC,
-       SAREG|AWD,      TUNSIGNED|TULONG,
-       SMCON,  TANY,
-               0,      RLEFT|RESCC,
-               "       ZJ\n    tstl    AL\n",
-
-ASG MOD,       INAREG|FOREFF,
-       SAREG|AWD,      TUNSIGNED|TULONG,
-       SCON,   TANY,
-               NAREG|NEVEN,    RLEFT|RESCC,
-               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,AL\n",
-
-ASG MOD,       FORCC,
-       SAREG|AWD,      TUNSIGNED|TULONG,
-       SCON,   TANY,
-               NAREG|NEVEN,    RLEFT|RESCC,
-               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,AL\n   tstl    AL\n",
-
-
-ASG MOD,       INAREG|FOREFF,
-       SAREG|AWD,      TINT|TLONG,
+       SAREG|AWD,      TINT|TLONG|TUNSIGNED|TULONG,
        SMCON,  ANYUSIGNED,
        SMCON,  ANYUSIGNED,
-               0,      RLEFT|RESCC,
+               0,      RLEFT,
                "       ZJ\n",
 
                "       ZJ\n",
 
-ASG MOD,       FORCC,
-       SAREG|AWD,      TINT|TLONG,
-       SMCON,  ANYUSIGNED,
-               0,      RLEFT|RESCC,
-               "       ZJ\n    tstl    AL\n",
-
 ASG MOD,       INAREG|FOREFF,
 ASG MOD,       INAREG|FOREFF,
-       SAREG|AWD,      TINT|TLONG,
+       SAREG|AWD,      TINT|TLONG|TUNSIGNED|TULONG,
        SCON,   ANYUSIGNED,
        SCON,   ANYUSIGNED,
-               NAREG|NEVEN,    RLEFT|RESCC,
+               NAREG|NEVEN,    RLEFT,
                "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,AL\n",
 
                "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,AL\n",
 
-ASG MOD,       FORCC,
-       SAREG|AWD,      TINT|TLONG,
-       SCON,   ANYUSIGNED,
-               NAREG|NEVEN,    RLEFT|RESCC,
-               "       movl    AL,A1\n clrl    U1\n    ediv    AR,A1,A1,AL\n   tstl    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,
@@ -707,110 +557,44 @@ OPMUL,   INAREG|INTAREG|FORCC,
                "       OL3     AR,AL,A1\n",
 
 ASG PLUS,      INAREG|FOREFF|FORCC,
                "       OL3     AR,AL,A1\n",
 
 ASG PLUS,      INAREG|FOREFF|FORCC,
-       SAREG,  TPOINT|TINT|TLONG|TUNSIGNED|TULONG,
-       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
-               0,      RLEFT|RESCC,
-               "       incZL   AL\n",
-
-ASG PLUS,      INAREG|FOREFF|FORCC,
-       AWD,    ANYSIGNED|ANYUSIGNED,
-       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
+       SAREG|AWD,      ANYFIXED,
+       SONE,   TANY,
                0,      RLEFT|RESCC,
                "       incZL   AL\n",
 
                0,      RLEFT|RESCC,
                "       incZL   AL\n",
 
-ASG PLUS,      INAREG|FOREFF|FORCC,
-       SAREG,  TSHORT|TCHAR,
-       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
-               0,      RLEFT|RESCC,
-               "       incZL   AL\n    cvtZLl  AL,AL\n",
-
-ASG PLUS,      INAREG|FOREFF|FORCC,
-       SAREG,  TUSHORT|TUCHAR,
-       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
-               0,      RLEFT|RESCC,
-               "       incZL   AL\n    movzZLl AL,AL\n",
-
 ASG MINUS,     INAREG|FOREFF|FORCC,
 ASG MINUS,     INAREG|FOREFF|FORCC,
-       SAREG,  TPOINT|TINT|TLONG|TUNSIGNED|TULONG,
-       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
-               0,      RLEFT|RESCC,
-               "       decZL   AL\n",
-
-ASG MINUS,     INAREG|FOREFF|FORCC,
-       AWD,    ANYSIGNED|ANYUSIGNED,
-       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
+       SAREG|AWD,      ANYFIXED,
+       SONE,   TANY,
                0,      RLEFT|RESCC,
                "       decZL   AL\n",
 
                0,      RLEFT|RESCC,
                "       decZL   AL\n",
 
-ASG MINUS,     INAREG|FOREFF|FORCC,
-       SAREG,  TSHORT|TCHAR,
-       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
-               0,      RLEFT|RESCC,
-               "       decZL   AL\n    cvtZLl  AL,AL\n",
-
-ASG MINUS,     INAREG|FOREFF|FORCC,
-       SAREG,  TUSHORT|TUCHAR,
-       SONE,   TINT|TUNSIGNED|TLONG|TULONG,
-               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, 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, 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|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,
 ASG OPSIMP,    INAREG|FOREFF|FORCC,
        AWD,    TSHORT|TUSHORT,
-       SSOREG, TSHORT|TUSHORT|TINT|TUNSIGNED,
+       SAREG|SNAME|STARNM,     TSHORT|TUSHORT|TINT|TUNSIGNED|TLONG|TULONG,
                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,
-       SAREG|SNAME|STARNM,     TSHORT|TUSHORT|TINT|TUNSIGNED,
+       SSOREG, TSHORT|TUSHORT|TINT|TUNSIGNED|TLONG|TULONG,
                0,      RLEFT|RESCC,
                "       OW2     AR,AL\n",
 
                0,      RLEFT|RESCC,
                "       OW2     AR,AL\n",
 
@@ -850,30 +634,6 @@ ASG OPSIMP,        INAREG|FOREFF|FORCC,
                0,      RLEFT|RESCC,
                "       OB2     AR,AL\n",
 
                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,
 OPSIMP,        INAREG|INTAREG|FORCC,
        STAREG, ANYFIXED,
        SAREG|AWD,      TWORD,
@@ -902,12 +662,6 @@ ASG OPFLOAT,       INAREG|FOREFF|FORCC,
                "       OF2     AR,AL\n",
 #endif
 
                "       OF2     AR,AL\n",
 #endif
 
-ASG OPFLOAT,   INAREG|FOREFF|FORCC,
-       SAREG|AWD,      TDOUBLE,
-       SAREG|AWD,      TFLOAT,
-               NAREG|NASR,     RLEFT|RESCC,
-               "       cvtfd   AR,A1\n OD2     A1,AL\n",
-
 ASG OPFLOAT,   INAREG|INTAREG|FOREFF|FORCC,
        SAREG|AWD,      TFLOAT,
        SAREG|AWD,      TDOUBLE,
 ASG OPFLOAT,   INAREG|INTAREG|FOREFF|FORCC,
        SAREG|AWD,      TFLOAT,
        SAREG|AWD,      TDOUBLE,
@@ -936,18 +690,6 @@ OPFLOAT,   INAREG|INTAREG|FORCC,
                NAREG|NASL|NASR,        RESC1|RESCC,
                "       OD3     AR,AL,A1\n",
 
                NAREG|NASL|NASR,        RESC1|RESCC,
                "       OD3     AR,AL,A1\n",
 
-OPFLOAT,       INAREG|INTAREG|FORCC,
-       SAREG|AWD,      TFLOAT,
-       SAREG|AWD,      TDOUBLE,
-               NAREG|NASL,     RESC1|RESCC,
-               "       cvtfd   AL,A1\n OD2     AR,A1\n",
-
-OPFLOAT,       INAREG|INTAREG|FORCC,
-       SAREG|AWD,      TDOUBLE,
-       SAREG|AWD,      TFLOAT,
-               NAREG|NASR,     RESC1|RESCC,
-               "       cvtfd   AR,A1\n OD3     A1,AL,A1\n",
-
 #if defined(FORT) || defined(SPRECC)
 OPFLOAT,       INAREG|INTAREG|FORCC,
        STAREG,         TFLOAT,
 #if defined(FORT) || defined(SPRECC)
 OPFLOAT,       INAREG|INTAREG|FORCC,
        STAREG,         TFLOAT,
@@ -962,6 +704,21 @@ OPFLOAT,   INAREG|INTAREG|FORCC,
                "       OF3     AR,AL,TA1\n",
 #endif
 
                "       OF3     AR,AL,TA1\n",
 #endif
 
+#ifdef FORT
+/* perform some implicit conversions XXX SHOULD FIX f77 FRONT END */
+OPFLOAT,       INAREG|INTAREG|FORCC,
+       SAREG|AWD,      TFLOAT,
+       SAREG|AWD,      TDOUBLE,
+               NAREG|NASL,     RESC1|RESCC,
+               "       cvtfd   AL,A1\n OD2     AR,A1\n",
+
+OPFLOAT,       INAREG|INTAREG|FORCC,
+       SAREG|AWD,      TDOUBLE,
+       SAREG|AWD,      TFLOAT,
+               NAREG|NASR,     RESC1|RESCC,
+               "       cvtfd   AR,A1\n OD3     A1,AL,A1\n",
+#endif
+
        /* Default actions for hard trees ... */
 
 # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
        /* Default actions for hard trees ... */
 
 # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
@@ -994,7 +751,6 @@ INIT, DF(INIT),
 
 OPUNARY, DF(UNARY MINUS),
 
 
 OPUNARY, DF(UNARY MINUS),
 
-
 ASG OPANY, DF(ASG PLUS),
 
 OPANY, DF(BITYPE),
 ASG OPANY, DF(ASG PLUS),
 
 OPANY, DF(BITYPE),