1: /*
   2:  * Copyright (c) 1979, 1984 Regents of the University of California
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)langpats.c	5.2 (Berkeley) 8/22/85";
   9: #endif not lint
  10: 
  11: #include "inline.h"
  12: 
  13: /*
  14:  * Pattern table for Pascal library routines.
  15:  */
  16: struct pats language_ptab[] = {
  17: 
  18: #ifdef vax
  19: /*
  20:  * General Pascal library routines
  21:  */
  22:     { 2, "_ROUND\n",
  23: "	movd	(sp)+,r0\n\
  24: 	cvtrdl	r0,r0\n" },
  25: 
  26:     { 2, "_TRUNC\n",
  27: "	movd	(sp)+,r0\n\
  28: 	cvtdl	r0,r0\n" },
  29: 
  30:     { 1, "_ACTFILE\n",
  31: "	movl	(sp)+,r1\n\
  32: 	movl	12(r1),r0\n" },
  33: 
  34:     { 2, "_FCALL\n",
  35: "	movl	(sp)+,r5\n\
  36: 	movl	(sp),r0\n\
  37: 	movc3	4(r0),__disply+8,(r5)\n\
  38: 	movl	(sp)+,r0\n\
  39: 	movc3	4(r0),8(r0),__disply+8\n" },
  40: 
  41:     { 2, "_FRTN\n",
  42: "	movl	(sp)+,r0\n\
  43: 	movl	(sp)+,r5\n\
  44: 	movc3	4(r0),(r5),__disply+8\n" },
  45: 
  46:     { 3, "_FSAV\n",
  47: "	movl	(sp)+,r3\n\
  48: 	movl	(sp)+,r4\n\
  49: 	movl	(sp),r5\n\
  50: 	movl	r3,(r5)\n\
  51: 	ashl	$3,r4,4(r5)\n\
  52: 	movc3	4(r5),__disply+8,8(r5)\n\
  53: 	movl	(sp)+,r0\n" },
  54: 
  55: /*
  56:  * Pascal relational comparisons
  57:  */
  58:     { 3, "_RELEQ\n",
  59: "	movl	(sp)+,r0\n\
  60: 	movl	(sp)+,r1\n\
  61: 	movl	(sp)+,r3\n\
  62: 	movl	r0,r4\n\
  63: 1:\n\
  64: 	movzwl	$65535,r0\n\
  65: 	cmpl	r4,r0\n\
  66: 	jleq	3f\n\
  67: 	subl2	r0,r4\n\
  68: 	cmpc3	r0,(r1),(r3)\n\
  69: 	jeql	1b\n\
  70: 2:\n\
  71: 	clrl	r0\n\
  72: 	jbr	4f\n\
  73: 3:\n\
  74: 	cmpc3	r4,(r1),(r3)\n\
  75: 	jneq	2b\n\
  76: 	incl	r0\n\
  77: 4:\n" },
  78: 
  79:     { 3, "_RELNE\n",
  80: "	movl	(sp)+,r0\n\
  81: 	movl	(sp)+,r1\n\
  82: 	movl	(sp)+,r3\n\
  83: 	movl	r0,r4\n\
  84: 1:\n\
  85: 	movzwl	$65535,r0\n\
  86: 	cmpl	r4,r0\n\
  87: 	jleq	3f\n\
  88: 	subl2	r0,r4\n\
  89: 	cmpc3	r0,(r1),(r3)\n\
  90: 	jeql	1b\n\
  91: 2:\n\
  92: 	movl	$1,r0\n\
  93: 	jbr	4f\n\
  94: 3:\n\
  95: 	cmpc3	r4,(r1),(r3)\n\
  96: 	jneq	2b\n\
  97: 4:\n" },
  98: 
  99:     { 3, "_RELSLT\n",
 100: "	movl	(sp)+,r0\n\
 101: 	movl	(sp)+,r1\n\
 102: 	movl	(sp)+,r3\n\
 103: 	movl	r0,r4\n\
 104: 	jbr	2f\n\
 105: 1:\n\
 106: 	subl2	r0,r4\n\
 107: 	cmpc3	r0,(r1),(r3)\n\
 108: 	jneq	3f\n\
 109: 2:\n\
 110: 	movzwl	$65535,r0\n\
 111: 	cmpl	r4,r0\n\
 112: 	jgtr	1b\n\
 113: 	cmpc3	r4,(r1),(r3)\n\
 114: 3:\n\
 115: 	jlss	4f\n\
 116: 	clrl	r0\n\
 117: 	jbr	5f\n\
 118: 4:\n\
 119: 	movl	$1,r0\n\
 120: 5:\n" },
 121: 
 122:     { 3, "_RELSLE\n",
 123: "	movl	(sp)+,r0\n\
 124: 	movl	(sp)+,r1\n\
 125: 	movl	(sp)+,r3\n\
 126: 	movl	r0,r4\n\
 127: 	jbr	2f\n\
 128: 1:\n\
 129: 	subl2	r0,r4\n\
 130: 	cmpc3	r0,(r1),(r3)\n\
 131: 	jneq	3f\n\
 132: 2:\n\
 133: 	movzwl	$65535,r0\n\
 134: 	cmpl	r4,r0\n\
 135: 	jgtr	1b\n\
 136: 	cmpc3	r4,(r1),(r3)\n\
 137: 3:\n\
 138: 	jleq	4f\n\
 139: 	clrl	r0\n\
 140: 	jbr	5f\n\
 141: 4:\n\
 142: 	movl	$1,r0\n\
 143: 5:\n" },
 144: 
 145:     { 3, "_RELSGT\n",
 146: "	movl	(sp)+,r0\n\
 147: 	movl	(sp)+,r1\n\
 148: 	movl	(sp)+,r3\n\
 149: 	movl	r0,r4\n\
 150: 	jbr	2f\n\
 151: 1:\n\
 152: 	subl2	r0,r4\n\
 153: 	cmpc3	r0,(r1),(r3)\n\
 154: 	jneq	3f\n\
 155: 2:\n\
 156: 	movzwl	$65535,r0\n\
 157: 	cmpl	r4,r0\n\
 158: 	jgtr	1b\n\
 159: 	cmpc3	r4,(r1),(r3)\n\
 160: 3:\n\
 161: 	jgtr	4f\n\
 162: 	clrl	r0\n\
 163: 	jbr	5f\n\
 164: 4:\n\
 165: 	movl	$1,r0\n\
 166: 5:\n" },
 167: 
 168:     { 3, "_RELSGE\n",
 169: "	movl	(sp)+,r0\n\
 170: 	movl	(sp)+,r1\n\
 171: 	movl	(sp)+,r3\n\
 172: 	movl	r0,r4\n\
 173: 	jbr	2f\n\
 174: 1:\n\
 175: 	subl2	r0,r4\n\
 176: 	cmpc3	r0,(r1),(r3)\n\
 177: 	jneq	3f\n\
 178: 2:\n\
 179: 	movzwl	$65535,r0\n\
 180: 	cmpl	r4,r0\n\
 181: 	jgtr	1b\n\
 182: 	cmpc3	r4,(r1),(r3)\n\
 183: 3:\n\
 184: 	jgeq	4f\n\
 185: 	clrl	r0\n\
 186: 	jbr	5f\n\
 187: 4:\n\
 188: 	movl	$1,r0\n\
 189: 5:\n" },
 190: 
 191: /*
 192:  * Pascal set operations.
 193:  */
 194:     { 4, "_ADDT\n",
 195: "	movl	(sp)+,r0\n\
 196: 	movl	(sp)+,r1\n\
 197: 	movl	(sp)+,r2\n\
 198: 	movl	(sp)+,r4\n\
 199: 	movl	r0,r3\n\
 200: 1:\n\
 201: 	bisl3	(r1)+,(r2)+,(r3)+\n\
 202: 	sobgtr	r4,1b\n" },
 203: 
 204:     { 4, "_SUBT\n",
 205: "	movl	(sp)+,r0\n\
 206: 	movl	(sp)+,r1\n\
 207: 	movl	(sp)+,r2\n\
 208: 	movl	(sp)+,r4\n\
 209: 	movl	r0,r3\n\
 210: 1:\n\
 211: 	bicl3	(r2)+,(r1)+,(r3)+\n\
 212: 	sobgtr	r4,1b\n" },
 213: 
 214:     { 4, "_MULT\n",
 215: "	movl	(sp)+,r0\n\
 216: 	movl	(sp)+,r1\n\
 217: 	movl	(sp)+,r2\n\
 218: 	movl	(sp)+,r4\n\
 219: 	movl	r0,r3\n\
 220: 1:\n\
 221: 	mcoml	(r1)+,r5\n\
 222: 	bicl3	r5,(r2)+,(r3)+\n\
 223: 	sobgtr	r4,1b\n" },
 224: 
 225:     { 4, "_IN\n",
 226: "	movl	(sp)+,r1\n\
 227: 	movl	(sp)+,r2\n\
 228: 	movl	(sp)+,r3\n\
 229: 	movl	(sp)+,r4\n\
 230: 	clrl	r0\n\
 231: 	subl2	r2,r1\n\
 232: 	cmpl	r1,r3\n\
 233: 	jgtru	1f\n\
 234: 	jbc	r1,(r4),1f\n\
 235: 	incl	r0\n\
 236: 1:\n" },
 237: 
 238: /*
 239:  * Pascal runtime checks
 240:  */
 241:     { 1, "_ASRT\n",
 242: "	movl	(sp)+,r0\n\
 243: 	tstl	r0\n\
 244: 	jneq	1f\n\
 245: 	pushl	$0\n\
 246: 	pushl	$_EASRT\n\
 247: 	calls	$2,_ERROR\n\
 248: 1:\n" },
 249: 
 250:     { 2, "_ASRTS\n",
 251: "	movl	(sp)+,r0\n\
 252: 	movl	(sp)+,r1\n\
 253: 	tstl	r0\n\
 254: 	jneq	1f\n\
 255: 	pushl	r1\n\
 256: 	pushl	$_EASRTS\n\
 257: 	calls	$2,_ERROR\n\
 258: 1:\n" },
 259: 
 260:     { 1, "_CHR\n",
 261: "	movl	(sp)+,r0\n\
 262: 	cmpl	r0,$127\n\
 263: 	jlequ	1f\n\
 264: 	pushl	r0\n\
 265: 	pushl	$_ECHR\n\
 266: 	calls	$2,_ERROR\n\
 267: 1:\n" },
 268: 
 269:     { 0, "_LINO\n",
 270: "	incl	__stcnt\n\
 271: 	cmpl	__stcnt,__stlim\n\
 272: 	jlss	1f\n\
 273: 	pushl	__stcnt\n\
 274: 	pushl	$_ELINO\n\
 275: 	calls	$2,_ERROR\n\
 276: 1:\n" },
 277: 
 278:     { 1, "_NIL\n",
 279: "	movl	(sp)+,r0\n\
 280: 	cmpl	r0,__maxptr\n\
 281: 	jgtr	1f\n\
 282: 	cmpl	r0,__minptr\n\
 283: 	jgeq	2f\n\
 284: 1:\n\
 285: 	pushl	$0\n\
 286: 	pushl	$_ENIL\n\
 287: 	calls	$2,_ERROR\n\
 288: 2:\n" },
 289: 
 290:     { 2, "_RANDOM\n",
 291: "	movd	(sp)+,r0\n\
 292: 	emul	__seed,$1103515245,$0,r0\n\
 293: 	ediv	$0x7fffffff,r0,r1,r0\n\
 294: 	movl	r0,__seed\n\
 295: 	cvtld	r0,r0\n\
 296: 	divd2	$0d2.147483647e+09,r0\n" },
 297: 
 298:     { 3, "_RANG4\n",
 299: "	movl	(sp)+,r0\n\
 300: 	movl	(sp)+,r1\n\
 301: 	movl	(sp)+,r2\n\
 302: 	cmpl	r0,r1\n\
 303: 	jlss	1f\n\
 304: 	cmpl	r0,r2\n\
 305: 	jleq	2f\n\
 306: 1:\n\
 307: 	pushl	r0\n\
 308: 	pushl	$_ERANG\n\
 309: 	calls	$2,_ERROR\n\
 310: 2:\n" },
 311: 
 312:     { 2, "_RSNG4\n",
 313: "	movl	(sp)+,r0\n\
 314: 	movl	(sp)+,r1\n\
 315: 	cmpl	r0,r1\n\
 316: 	jlequ	1f\n\
 317: 	pushl	r0\n\
 318: 	pushl	$_ERANG\n\
 319: 	calls	$2,_ERROR\n\
 320: 1:\n" },
 321: 
 322:     { 1, "_SEED\n",
 323: "	movl	(sp)+,r1\n\
 324: 	movl	__seed,r0\n\
 325: 	movl	r1,__seed\n" },
 326: 
 327:     { 3, "_SUBSC\n",
 328: "	movl	(sp)+,r0\n\
 329: 	movl	(sp)+,r1\n\
 330: 	movl	(sp)+,r2\n\
 331: 	cmpl	r0,r1\n\
 332: 	jlss	1f\n\
 333: 	cmpl	r0,r2\n\
 334: 	jleq	2f\n\
 335: 1:\n\
 336: 	pushl	r0\n\
 337: 	pushl	$_ESUBSC\n\
 338: 	calls	$2,_ERROR\n\
 339: 2:\n" },
 340: 
 341:     { 2, "_SUBSCZ\n",
 342: "	movl	(sp)+,r0\n\
 343: 	movl	(sp)+,r1\n\
 344: 	cmpl	r0,r1\n\
 345: 	jlequ	1f\n\
 346: 	pushl	r0\n\
 347: 	pushl	$_ESUBSC\n\
 348: 	calls	$2,_ERROR\n\
 349: 1:\n" },
 350: #endif vax
 351: 
 352: #ifdef mc68000
 353: /*
 354:  * General Pascal library routines
 355:  */
 356:     { 1, "_ACTFILE\n",
 357: "	movl	sp@+,a0\n\
 358: 	movl	a0@(12),d0\n" },
 359: 
 360:     { 4, "_ADDT\n",
 361: "	movl	sp@+,a0\n\
 362: 	movl	sp@+,d0\n\
 363: 	movl	sp@+,a1\n\
 364: 	movl	sp@+,d1\n\
 365: 	movl	a0,sp@-\n\
 366: 	movl	a2,sp@-\n\
 367: 	movl	d0,a2\n\
 368: 	subql	#1,d1\n\
 369: 1:\n\
 370: 	movl	a2@+,d0\n\
 371: 	orl	a1@+,d0\n\
 372: 	movl	d0,a0@+\n\
 373: 	dbra	d1,1b\n\
 374: 	movl	sp@+,a2\n\
 375: 	movl	sp@+,d0\n" },
 376: 
 377:     { 4, "_SUBT\n",
 378: "	movl	sp@+,a0\n\
 379: 	movl	sp@+,d0\n\
 380: 	movl	sp@+,a1\n\
 381: 	movl	sp@+,d1\n\
 382: 	movl	a0,sp@-\n\
 383: 	movl	a2,sp@-\n\
 384: 	movl	d0,a2\n\
 385: 	subql	#1,d1\n\
 386: 1:\n\
 387: 	movl	a1@+,d0\n\
 388: 	notl	d0\n\
 389: 	andl	a2@+,d0\n\
 390: 	movl	d0,a0@+\n\
 391: 	dbra	d1,1b\n\
 392: 	movl	sp@+,a2\n\
 393: 	movl	sp@+,d0\n" },
 394: 
 395:     { 4, "_MULT\n",
 396: "	movl	sp@+,a0\n\
 397: 	movl	sp@+,d0\n\
 398: 	movl	sp@+,a1\n\
 399: 	movl	sp@+,d1\n\
 400: 	movl	a0,sp@-\n\
 401: 	movl	a2,sp@-\n\
 402: 	movl	d0,a2\n\
 403: 	subql	#1,d1\n\
 404: 1:\n\
 405: 	movl	a2@+,d0\n\
 406: 	andl	a1@+,d0\n\
 407: 	movl	d0,a0@+\n\
 408: 	dbra	d1,1b\n\
 409: 	movl	sp@+,a2\n\
 410: 	movl	sp@+,d0\n" },
 411: 
 412:     { 4, "_IN\n",
 413: "	movl	sp@+,d0\n\
 414: 	movl	sp@+,a0\n\
 415: 	movl	sp@+,d1\n\
 416: 	movl	sp@+,a1\n\
 417: 	subl	a0,d0\n\
 418: 	cmpl	d1,d0\n\
 419: 	jhi	1f\n\
 420: 	movl	d0,d1\n\
 421: 	lsrl	#3,d1\n\
 422: 	btst	d0,a1@(0,d1:l)\n\
 423: 	jeq	1f\n\
 424: 	moveq	#1,d0\n\
 425: 	jra	2f\n\
 426: 1:\n\
 427: 	moveq	#0,d0\n\
 428: 2:\n" },
 429: 
 430:     { 3, "_RANG4\n",
 431: "	movl	sp@+,d0\n\
 432: 	movl	sp@+,a0\n\
 433: 	movl	sp@+,a1\n\
 434: 	cmpl	a0,d0\n\
 435: 	jlt	1f\n\
 436: 	cmpl	a1,d0\n\
 437: 	jle	2f\n\
 438: 1:\n\
 439: 	pea	_ERANG\n\
 440: 	jbsr	_ERROR\n\
 441: 	addqw	#4,sp\n\
 442: 2:\n" },
 443:     { 2, "_RSNG4\n",
 444: "	movl	sp@+,a0\n\
 445: 	movl	sp@+,a1\n\
 446: 	cmpl	a1,a0\n\
 447: 	jls	1f\n\
 448: 	pea	_ERANG\n\
 449: 	jbsr	_ERROR\n\
 450: 	addqw	#4,sp\n\
 451: 1:\n" },
 452: 
 453:     { 3, "_SUBSC\n",
 454: "	movl	sp@+,d0\n\
 455: 	movl	sp@+,a0\n\
 456: 	movl	sp@+,a1\n\
 457: 	cmpl	a0,d0\n\
 458: 	jlt	1f\n\
 459: 	cmpl	a1,d0\n\
 460: 	jle	2f\n\
 461: 1:\n\
 462: 	pea	_ESUBSC\n\
 463: 	jbsr	_ERROR\n\
 464: 	addqw	#4,sp\n\
 465: 2:\n" },
 466: 
 467:     { 2, "_SUBSCZ\n",
 468: "	movl	sp@+,a0\n\
 469: 	movl	sp@+,a1\n\
 470: 	cmpl	a1,a0\n\
 471: 	jls	1f\n\
 472: 	pea	_ESUBSC\n\
 473: 	jbsr	_ERROR\n\
 474: 	addqw	#4,sp\n\
 475: 1:\n" },
 476: 
 477: #endif mc68000
 478: 
 479:     { 0, "", "" }
 480: };

Defined variables

language_ptab defined in line 16; never used
sccsid defined in line 8; never used
Last modified: 1985-08-23
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1521
Valid CSS Valid XHTML 1.0 Strict