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: };