BSD 4_3_Net_2 release
[unix-history] / usr / src / usr.bin / pascal / pc2 / langpats.c
index 680da0a..e06f19b 100644 (file)
@@ -1,12 +1,39 @@
-/*
- * Copyright (c) 1979, 1984 Regents of the University of California 
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+/*-
+ * Copyright (c) 1979, 1984 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)langpats.c 5.1 (Berkeley) %G%";
-#endif not lint
+static char sccsid[] = "@(#)langpats.c 5.6 (Berkeley) 4/16/91";
+#endif /* not lint */
 
 #include "inline.h"
 
 
 #include "inline.h"
 
@@ -19,31 +46,31 @@ struct pats language_ptab[] = {
 /*
  * General Pascal library routines
  */
 /*
  * General Pascal library routines
  */
-       { "2,_ROUND\n",
+       { 2, "_ROUND\n",
 "      movd    (sp)+,r0\n\
        cvtrdl  r0,r0\n" },
 
 "      movd    (sp)+,r0\n\
        cvtrdl  r0,r0\n" },
 
-       { "2,_TRUNC\n",
+       { 2, "_TRUNC\n",
 "      movd    (sp)+,r0\n\
        cvtdl   r0,r0\n" },
 
 "      movd    (sp)+,r0\n\
        cvtdl   r0,r0\n" },
 
-       { "1,_ACTFILE\n",
+       { 1, "_ACTFILE\n",
 "      movl    (sp)+,r1\n\
        movl    12(r1),r0\n" },
 
 "      movl    (sp)+,r1\n\
        movl    12(r1),r0\n" },
 
-       { "2,_FCALL\n",
+       { 2, "_FCALL\n",
 "      movl    (sp)+,r5\n\
        movl    (sp),r0\n\
        movc3   4(r0),__disply+8,(r5)\n\
        movl    (sp)+,r0\n\
        movc3   4(r0),8(r0),__disply+8\n" },
 
 "      movl    (sp)+,r5\n\
        movl    (sp),r0\n\
        movc3   4(r0),__disply+8,(r5)\n\
        movl    (sp)+,r0\n\
        movc3   4(r0),8(r0),__disply+8\n" },
 
-       { "2,_FRTN\n",
+       { 2, "_FRTN\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r5\n\
        movc3   4(r0),(r5),__disply+8\n" },
 
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r5\n\
        movc3   4(r0),(r5),__disply+8\n" },
 
-       { "3,_FSAV\n",
+       { 3, "_FSAV\n",
 "      movl    (sp)+,r3\n\
        movl    (sp)+,r4\n\
        movl    (sp),r5\n\
 "      movl    (sp)+,r3\n\
        movl    (sp)+,r4\n\
        movl    (sp),r5\n\
@@ -55,7 +82,7 @@ struct pats language_ptab[] = {
 /*
  * Pascal relational comparisons
  */
 /*
  * Pascal relational comparisons
  */
-       { "3,_RELEQ\n",
+       { 3, "_RELEQ\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
@@ -76,7 +103,7 @@ struct pats language_ptab[] = {
        incl    r0\n\
 4:\n" },
 
        incl    r0\n\
 4:\n" },
 
-       { "3,_RELNE\n",
+       { 3, "_RELNE\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
@@ -96,7 +123,7 @@ struct pats language_ptab[] = {
        jneq    2b\n\
 4:\n" },
 
        jneq    2b\n\
 4:\n" },
 
-       { "3,_RELSLT\n",
+       { 3, "_RELSLT\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
@@ -119,7 +146,7 @@ struct pats language_ptab[] = {
        movl    $1,r0\n\
 5:\n" },
 
        movl    $1,r0\n\
 5:\n" },
 
-       { "3,_RELSLE\n",
+       { 3, "_RELSLE\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
@@ -142,7 +169,7 @@ struct pats language_ptab[] = {
        movl    $1,r0\n\
 5:\n" },
 
        movl    $1,r0\n\
 5:\n" },
 
-       { "3,_RELSGT\n",
+       { 3, "_RELSGT\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
@@ -165,7 +192,7 @@ struct pats language_ptab[] = {
        movl    $1,r0\n\
 5:\n" },
 
        movl    $1,r0\n\
 5:\n" },
 
-       { "3,_RELSGE\n",
+       { 3, "_RELSGE\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r3\n\
@@ -191,7 +218,7 @@ struct pats language_ptab[] = {
 /*
  * Pascal set operations.
  */
 /*
  * Pascal set operations.
  */
-       { "4,_ADDT\n",
+       { 4, "_ADDT\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
@@ -201,7 +228,7 @@ struct pats language_ptab[] = {
        bisl3   (r1)+,(r2)+,(r3)+\n\
        sobgtr  r4,1b\n" },
 
        bisl3   (r1)+,(r2)+,(r3)+\n\
        sobgtr  r4,1b\n" },
 
-       { "4,_SUBT\n",
+       { 4, "_SUBT\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
@@ -211,7 +238,7 @@ struct pats language_ptab[] = {
        bicl3   (r2)+,(r1)+,(r3)+\n\
        sobgtr  r4,1b\n" },
 
        bicl3   (r2)+,(r1)+,(r3)+\n\
        sobgtr  r4,1b\n" },
 
-       { "4,_MULT\n",
+       { 4, "_MULT\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
@@ -222,7 +249,7 @@ struct pats language_ptab[] = {
        bicl3   r5,(r2)+,(r3)+\n\
        sobgtr  r4,1b\n" },
 
        bicl3   r5,(r2)+,(r3)+\n\
        sobgtr  r4,1b\n" },
 
-       { "4,_IN\n",
+       { 4, "_IN\n",
 "      movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
        movl    (sp)+,r3\n\
 "      movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
        movl    (sp)+,r3\n\
@@ -238,7 +265,7 @@ struct pats language_ptab[] = {
 /*
  * Pascal runtime checks
  */
 /*
  * Pascal runtime checks
  */
-       { "1,_ASRT\n",
+       { 1, "_ASRT\n",
 "      movl    (sp)+,r0\n\
        tstl    r0\n\
        jneq    1f\n\
 "      movl    (sp)+,r0\n\
        tstl    r0\n\
        jneq    1f\n\
@@ -247,7 +274,7 @@ struct pats language_ptab[] = {
        calls   $2,_ERROR\n\
 1:\n" },
 
        calls   $2,_ERROR\n\
 1:\n" },
 
-       { "2,_ASRTS\n",
+       { 2, "_ASRTS\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        tstl    r0\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        tstl    r0\n\
@@ -257,7 +284,7 @@ struct pats language_ptab[] = {
        calls   $2,_ERROR\n\
 1:\n" },
 
        calls   $2,_ERROR\n\
 1:\n" },
 
-       { "1,_CHR\n",
+       { 1, "_CHR\n",
 "      movl    (sp)+,r0\n\
        cmpl    r0,$127\n\
        jlequ   1f\n\
 "      movl    (sp)+,r0\n\
        cmpl    r0,$127\n\
        jlequ   1f\n\
@@ -266,7 +293,7 @@ struct pats language_ptab[] = {
        calls   $2,_ERROR\n\
 1:\n" },
 
        calls   $2,_ERROR\n\
 1:\n" },
 
-       { "0,_LINO\n",
+       { 0, "_LINO\n",
 "      incl    __stcnt\n\
        cmpl    __stcnt,__stlim\n\
        jlss    1f\n\
 "      incl    __stcnt\n\
        cmpl    __stcnt,__stlim\n\
        jlss    1f\n\
@@ -275,7 +302,7 @@ struct pats language_ptab[] = {
        calls   $2,_ERROR\n\
 1:\n" },
 
        calls   $2,_ERROR\n\
 1:\n" },
 
-       { "1,_NIL\n",
+       { 1, "_NIL\n",
 "      movl    (sp)+,r0\n\
        cmpl    r0,__maxptr\n\
        jgtr    1f\n\
 "      movl    (sp)+,r0\n\
        cmpl    r0,__maxptr\n\
        jgtr    1f\n\
@@ -287,7 +314,7 @@ struct pats language_ptab[] = {
        calls   $2,_ERROR\n\
 2:\n" },
 
        calls   $2,_ERROR\n\
 2:\n" },
 
-       { "2,_RANDOM\n",
+       { 2, "_RANDOM\n",
 "      movd    (sp)+,r0\n\
        emul    __seed,$1103515245,$0,r0\n\
        ediv    $0x7fffffff,r0,r1,r0\n\
 "      movd    (sp)+,r0\n\
        emul    __seed,$1103515245,$0,r0\n\
        ediv    $0x7fffffff,r0,r1,r0\n\
@@ -295,7 +322,7 @@ struct pats language_ptab[] = {
        cvtld   r0,r0\n\
        divd2   $0d2.147483647e+09,r0\n" },
 
        cvtld   r0,r0\n\
        divd2   $0d2.147483647e+09,r0\n" },
 
-       { "3,_RANG4\n",
+       { 3, "_RANG4\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
@@ -309,7 +336,7 @@ struct pats language_ptab[] = {
        calls   $2,_ERROR\n\
 2:\n" },
 
        calls   $2,_ERROR\n\
 2:\n" },
 
-       { "2,_RSNG4\n",
+       { 2, "_RSNG4\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        cmpl    r0,r1\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        cmpl    r0,r1\n\
@@ -319,12 +346,12 @@ struct pats language_ptab[] = {
        calls   $2,_ERROR\n\
 1:\n" },
 
        calls   $2,_ERROR\n\
 1:\n" },
 
-       { "1,_SEED\n",
+       { 1, "_SEED\n",
 "      movl    (sp)+,r1\n\
        movl    __seed,r0\n\
        movl    r1,__seed\n" },
 
 "      movl    (sp)+,r1\n\
        movl    __seed,r0\n\
        movl    r1,__seed\n" },
 
-       { "3,_SUBSC\n",
+       { 3, "_SUBSC\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        movl    (sp)+,r2\n\
@@ -338,7 +365,7 @@ struct pats language_ptab[] = {
        calls   $2,_ERROR\n\
 2:\n" },
 
        calls   $2,_ERROR\n\
 2:\n" },
 
-       { "2,_SUBSCZ\n",
+       { 2, "_SUBSCZ\n",
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        cmpl    r0,r1\n\
 "      movl    (sp)+,r0\n\
        movl    (sp)+,r1\n\
        cmpl    r0,r1\n\
@@ -353,11 +380,11 @@ struct pats language_ptab[] = {
 /*
  * General Pascal library routines
  */
 /*
  * General Pascal library routines
  */
-       { "_ACTFILE\n",
+       { 1, "_ACTFILE\n",
 "      movl    sp@+,a0\n\
        movl    a0@(12),d0\n" },
 
 "      movl    sp@+,a0\n\
        movl    a0@(12),d0\n" },
 
-       { "_ADDT\n",
+       { 4, "_ADDT\n",
 "      movl    sp@+,a0\n\
        movl    sp@+,d0\n\
        movl    sp@+,a1\n\
 "      movl    sp@+,a0\n\
        movl    sp@+,d0\n\
        movl    sp@+,a1\n\
@@ -374,7 +401,7 @@ struct pats language_ptab[] = {
        movl    sp@+,a2\n\
        movl    sp@+,d0\n" },
 
        movl    sp@+,a2\n\
        movl    sp@+,d0\n" },
 
-       { "_SUBT\n",
+       { 4, "_SUBT\n",
 "      movl    sp@+,a0\n\
        movl    sp@+,d0\n\
        movl    sp@+,a1\n\
 "      movl    sp@+,a0\n\
        movl    sp@+,d0\n\
        movl    sp@+,a1\n\
@@ -392,7 +419,7 @@ struct pats language_ptab[] = {
        movl    sp@+,a2\n\
        movl    sp@+,d0\n" },
 
        movl    sp@+,a2\n\
        movl    sp@+,d0\n" },
 
-       { "_MULT\n",
+       { 4, "_MULT\n",
 "      movl    sp@+,a0\n\
        movl    sp@+,d0\n\
        movl    sp@+,a1\n\
 "      movl    sp@+,a0\n\
        movl    sp@+,d0\n\
        movl    sp@+,a1\n\
@@ -409,7 +436,7 @@ struct pats language_ptab[] = {
        movl    sp@+,a2\n\
        movl    sp@+,d0\n" },
 
        movl    sp@+,a2\n\
        movl    sp@+,d0\n" },
 
-       { "_IN\n",
+       { 4, "_IN\n",
 "      movl    sp@+,d0\n\
        movl    sp@+,a0\n\
        movl    sp@+,d1\n\
 "      movl    sp@+,d0\n\
        movl    sp@+,a0\n\
        movl    sp@+,d1\n\
@@ -427,7 +454,7 @@ struct pats language_ptab[] = {
        moveq   #0,d0\n\
 2:\n" },
 
        moveq   #0,d0\n\
 2:\n" },
 
-       { "_RANG4\n",
+       { 3, "_RANG4\n",
 "      movl    sp@+,d0\n\
        movl    sp@+,a0\n\
        movl    sp@+,a1\n\
 "      movl    sp@+,d0\n\
        movl    sp@+,a0\n\
        movl    sp@+,a1\n\
@@ -440,7 +467,7 @@ struct pats language_ptab[] = {
        jbsr    _ERROR\n\
        addqw   #4,sp\n\
 2:\n" },
        jbsr    _ERROR\n\
        addqw   #4,sp\n\
 2:\n" },
-       { "_RSNG4\n",
+       { 2, "_RSNG4\n",
 "      movl    sp@+,a0\n\
        movl    sp@+,a1\n\
        cmpl    a1,a0\n\
 "      movl    sp@+,a0\n\
        movl    sp@+,a1\n\
        cmpl    a1,a0\n\
@@ -450,7 +477,7 @@ struct pats language_ptab[] = {
        addqw   #4,sp\n\
 1:\n" },
 
        addqw   #4,sp\n\
 1:\n" },
 
-       { "_SUBSC\n",
+       { 3, "_SUBSC\n",
 "      movl    sp@+,d0\n\
        movl    sp@+,a0\n\
        movl    sp@+,a1\n\
 "      movl    sp@+,d0\n\
        movl    sp@+,a0\n\
        movl    sp@+,a1\n\
@@ -464,7 +491,7 @@ struct pats language_ptab[] = {
        addqw   #4,sp\n\
 2:\n" },
 
        addqw   #4,sp\n\
 2:\n" },
 
-       { "_SUBSCZ\n",
+       { 2, "_SUBSCZ\n",
 "      movl    sp@+,a0\n\
        movl    sp@+,a1\n\
        cmpl    a1,a0\n\
 "      movl    sp@+,a0\n\
        movl    sp@+,a1\n\
        cmpl    a1,a0\n\
@@ -476,5 +503,173 @@ struct pats language_ptab[] = {
 
 #endif mc68000
 
 
 #endif mc68000
 
-       { "", "" }
+#ifdef tahoe
+       { 2, "_TRUNC\n",
+"      ldd     (sp)\n\
+       movab   8(sp),sp\n\
+       cvdl    r0\n" },
+
+       { 1, "_ACTFILE\n",
+"      movl    (sp)+,r1\n\
+       movl    12(r1),r0\n" },
+
+/*
+ * Pascal set operations.
+ */
+
+       { 4, "_ADDT\n",
+"      movl    (sp)+,r0\n\
+       movl    (sp)+,r1\n\
+       movl    (sp)+,r2\n\
+       movl    (sp)+,r3\n\
+       clrl    r4\n\
+1:\n\
+       orl3    (r1)[r4],(r2)[r4],(r0)[r4]\n\
+       aoblss  r3,r4,1b\n" },
+
+       { 4, "_SUBT\n",
+"      movl    (sp)+,r0\n\
+       movl    (sp)+,r1\n\
+       movl    (sp)+,r2\n\
+       movl    (sp)+,r3\n\
+       decl    r3\n\
+1:\n\
+       mcoml   (r2)[r3],r4\n\
+       andl3   r4,(r1)[r3],(r0)[r3]\n\
+       decl    r3\n\
+       jgeq    1b\n" },
+
+       { 4, "_MULT\n",
+"      movl    (sp)+,r0\n\
+       movl    (sp)+,r1\n\
+       movl    (sp)+,r2\n\
+       movl    (sp)+,r3\n\
+       clrl    r4\n\
+1:\n\
+       andl3   (r1)[r4],(r2)[r4],(r0)[r4]\n\
+       aoblss  r3,r4,1b\n" },
+
+       { 4, "_IN\n",
+"      movl    (sp)+,r1\n\
+       movl    (sp)+,r2\n\
+       movl    (sp)+,r3\n\
+       movl    (sp)+,r4\n\
+       clrl    r0\n\
+       subl2   r2,r1\n\
+       cmpl    r1,r3\n\
+       jgtru   1f\n\
+       shrl    $3,r1,r2\n\
+       movzbl  (r4)[r2],r3\n\
+       andl2   $7,r1\n\
+       jbc     r1,r3,1f\n\
+       incl    r0\n\
+1:\n" },
+
+/*
+ * Pascal runtime checks
+ */
+       { 1, "_ASRT\n",
+"      movl    (sp)+,r0\n\
+       tstl    r0\n\
+       jneq    1f\n\
+       pushl   $0\n\
+       pushl   $_EASRT\n\
+       callf   $12,_ERROR\n\
+1:\n" },
+
+       { 2, "_ASRTS\n",
+"      movl    (sp)+,r0\n\
+       movl    (sp)+,r1\n\
+       tstl    r0\n\
+       jneq    1f\n\
+       pushl   r1\n\
+       pushl   $_EASRTS\n\
+       callf   $12,_ERROR\n\
+1:\n" },
+
+       { 1, "_CHR\n",
+"      movl    (sp)+,r0\n\
+       cmpl    r0,$127\n\
+       jlequ   1f\n\
+       pushl   r0\n\
+       pushl   $_ECHR\n\
+       callf   $12,_ERROR\n\
+1:\n" },
+
+       { 0, "_LINO\n",
+"      incl    __stcnt\n\
+       cmpl    __stcnt,__stlim\n\
+       jlss    1f\n\
+       pushl   __stcnt\n\
+       pushl   $_ELINO\n\
+       callf   $12,_ERROR\n\
+1:\n" },
+
+       { 1, "_NIL\n",
+"      movl    (sp)+,r0\n\
+       cmpl    r0,__maxptr\n\
+       jgtr    1f\n\
+       cmpl    r0,__minptr\n\
+       jgeq    2f\n\
+1:\n\
+       pushl   $0\n\
+       pushl   $_ENIL\n\
+       callf   $12,_ERROR\n\
+2:\n" },
+
+       { 3, "_RANG4\n",
+"      movl    (sp)+,r0\n\
+       movl    (sp)+,r1\n\
+       movl    (sp)+,r2\n\
+       cmpl    r0,r1\n\
+       jlss    1f\n\
+       cmpl    r0,r2\n\
+       jleq    2f\n\
+1:\n\
+       pushl   r0\n\
+       pushl   $_ERANG\n\
+       callf   $12,_ERROR\n\
+2:\n" },
+
+       { 2, "_RSNG4\n",
+"      movl    (sp)+,r0\n\
+       movl    (sp)+,r1\n\
+       cmpl    r0,r1\n\
+       jlequ   1f\n\
+       pushl   r0\n\
+       pushl   $_ERANG\n\
+       callf   $12,_ERROR\n\
+1:\n" },
+
+       { 1, "_SEED\n",
+"      movl    (sp)+,r1\n\
+       movl    __seed,r0\n\
+       movl    r1,__seed\n" },
+
+       { 3, "_SUBSC\n",
+"      movl    (sp)+,r0\n\
+       movl    (sp)+,r1\n\
+       movl    (sp)+,r2\n\
+       cmpl    r0,r1\n\
+       jlss    1f\n\
+       cmpl    r0,r2\n\
+       jleq    2f\n\
+1:\n\
+       pushl   r0\n\
+       pushl   $_ESUBSC\n\
+       callf   $12,_ERROR\n\
+2:\n" },
+
+       { 2, "_SUBSCZ\n",
+"      movl    (sp)+,r0\n\
+       movl    (sp)+,r1\n\
+       cmpl    r0,r1\n\
+       jlequ   1f\n\
+       pushl   r0\n\
+       pushl   $_ESUBSC\n\
+       callf   $12,_ERROR\n\
+1:\n" },
+#endif tahoe
+
+       { 0, "", "" }
 };
 };