1: # include "pass2.h"
   2: 
   3: # define AWD SNAME|SOREG|SCON|STARNM|STARREG|SAREG
   4: # define LWD SNAME|SOREG|SCON|SAREG
   5: 
   6: struct optab  table[] = {
   7: 
   8: ASSIGN, INAREG|FOREFF|FORCC,
   9:     AWD,    TPOINT|TINT|TUNSIGNED|TCHAR|TUCHAR,
  10:     SZERO,  TANY,
  11:         0,  RLEFT|RRIGHT|RESCC,
  12:         "	clrZB	AL\n",
  13: 
  14: ASSIGN, INAREG|FOREFF|FORCC,
  15:     AWD,    TINT|TUNSIGNED,
  16:     AWD,    TCHAR,
  17:         NAREG|NASR, RLEFT|RESC1|RESCC,
  18:         "	movb	AR,A1\n	mov	A1,AL\n",
  19: 
  20: ASSIGN, INAREG|FOREFF|FORCC,
  21:     AWD,    TINT|TUNSIGNED,
  22:     AWD,    TUCHAR,
  23:         0,  RLEFT|RESCC,
  24:         "	movb	AR,AL\n	bic	$!377,AL\n",
  25: 
  26: ASSIGN, INAREG|FOREFF|FORCC,
  27:     AWD,    TPOINT|TINT|TUNSIGNED|TCHAR|TUCHAR,
  28:     AWD,    TPOINT|TINT|TUNSIGNED|TCHAR|TUCHAR,
  29:         0,  RLEFT|RRIGHT|RESCC,
  30:         "	movZB	AR,AL\n",
  31: 
  32: ASSIGN, INAREG|FOREFF,
  33:     LWD,    TLONG|TULONG,
  34:     SZERO,  TANY,
  35:         0,  RLEFT|RRIGHT,
  36:         "	clr	AL\n	clr	UL\n",
  37: 
  38: ASSIGN, INAREG|FOREFF,
  39:     LWD,    TLONG|TULONG,
  40:     LWD,    TLONG|TULONG,
  41:         0,  RLEFT|RRIGHT,
  42:         "	mov	AR,AL\n	mov	UR,UL\n",
  43: 
  44: ASSIGN, FOREFF|INAREG,
  45:     STARNM,     TLONG|TULONG,
  46:     LWD,    TLONG|TULONG,
  47:         NAREG|NASL, RRIGHT,
  48:         "	mov	ZU,A1\n	mov	AR,(A1)+\n	mov	UR,(A1)\n",
  49: 
  50: ASSIGN, FOREFF,
  51:     STARNM, TLONG|TULONG,
  52:     AWD,    TUNSIGNED|TPOINT,
  53:         NAREG|NASL, RRIGHT,
  54:         "	mov	ZU,A1\n	clr	(A1)+\n	mov	AR,(A1)\n",
  55: 
  56: ASSIGN, FOREFF,
  57:     STARNM, TLONG|TULONG,
  58:     AWD,    TINT,
  59:         NAREG|NASL, RRIGHT,
  60:         "	mov	ZU,A1\n	mov	AR,2(A1)\n	sxt	(A1)\n",
  61: 
  62:     /* PANIC! */
  63: ASSIGN, FOREFF|INAREG,
  64:     STARNM, TLONG|TULONG,
  65:     AWD,    TUNSIGNED|TPOINT,
  66:         NAREG|NASL|NASR,    RESC1,
  67:         "\tmov\tAR,-(sp)\n\tmov\tZU,A1\n\tclr\t(A1)+\n\tmov\t(sp)+,(A1)\
  68: 		\nF\tmov\t(A1),U1\nF\tclr\tA1\n",
  69: 
  70: ASSIGN, FOREFF|INAREG,
  71:     STARNM, TLONG|TULONG,
  72:     AWD,    TINT,
  73:         NAREG|NASL|NASR,    RESC1,
  74:         "\tmov\tAR,-(sp)\n\tmov\tZU,A1\n\tmov\t(sp)+,2(A1)\nF\tmov\t2(A1),U1\
  75: 		\n\tsxt\t(A1)\nF\tsxt\tA1\n",
  76: 
  77: ASSIGN, FOREFF|INAREG,
  78:     STARNM, TLONG|TULONG,
  79:     SAREG,  TLONG|TULONG,
  80:         0,  RRIGHT,
  81:         "	mov	AR,AL\n	mov	ZU,AR\n	mov	UR,2(AR)\nF	mov	(AR),AR\n",
  82: 
  83: ASSIGN, INAREG|FOREFF,
  84:     LWD,    TLONG|TULONG,
  85:     AWD,    TCHAR,
  86:         NAREG,  RESC1,
  87:         "	movb	AR,U1\n	mov	U1,UL\n	sxt	AL\nF	sxt	A1\n",
  88: 
  89: ASSIGN, INAREG|FOREFF,
  90:     LWD,    TLONG|TULONG,
  91:     AWD,    TUCHAR,
  92:         0,  RLEFT,
  93:         "	movb	AR,UL\n	bic	$!377,UL\n	clr	AL\n",
  94: 
  95: ASSIGN, INAREG|FOREFF,
  96:     LWD,    TLONG|TULONG,
  97:     AWD,    TINT,
  98:         0,  RLEFT,
  99:         "	mov	AR,UL\n	sxt	AL\n",
 100: 
 101: ASSIGN, INAREG|FOREFF,
 102:     LWD,    TLONG|TULONG,
 103:     AWD,    TUNSIGNED|TPOINT,
 104:         0,  RLEFT,
 105:         "	mov	AR,UL\n	clr	AL\n",
 106: 
 107: ASSIGN, INBREG|INTBREG|FOREFF,
 108:     AWD,    TDOUBLE,
 109:     SBREG,  TDOUBLE,
 110:         0,  RRIGHT,
 111:         "	movf	AR,AL\n",
 112: 
 113: ASSIGN, INBREG|INTBREG|FOREFF,
 114:     AWD,    TFLOAT,
 115:     SBREG,  TDOUBLE,
 116:         0,  RRIGHT,
 117:         "	movfo	AR,AL\n",
 118: 
 119: ASSIGN, INAREG|FOREFF,
 120:     SFLD,   TANY,
 121:     SZERO,  TANY,
 122:         0,  RRIGHT,
 123:         "	bic	$M.,AL\n",
 124: 
 125: ASSIGN, INTAREG|INAREG|FOREFF,
 126:     SFLD,   TANY,
 127:     STAREG, TANY,
 128:         0,  RRIGHT,
 129:         "F\tmov\tAR,-(sp)\n\tash\t$H.,AR\n\tbic\t$!M.,AR\n\tbic\t$M.,AL\n\tbis\tAR,AL\nF\tmov\t(sp)+,AR\n",
 130: 
 131: ASSIGN, INAREG|FOREFF,
 132:     SFLD,   TANY,
 133:     AWD,    TANY,
 134:         NAREG,  RRIGHT,
 135:         "\tmov\tAR,A1\n\tash\t$H.,A1\n\tbic\t$!M.,A1\n\tbic\t$M.,AL\n\tbis\tA1,AL\n",
 136: 
 137: ASSIGN, FOREFF,
 138:     AWD,    TFLOAT,
 139:     AWD,    TFLOAT,
 140:         NBREG,  RESC1,
 141:         "	movof	AR,A1\n	movfo	A1,AL\n",
 142: 
 143: /* put this here so UNARY MUL nodes match OPLTYPE when appropriate */
 144: UNARY MUL,  INTAREG|INAREG,
 145:     SANY,   TANY,
 146:     STARNM, TLONG|TULONG,
 147:         NAREG|NASR, RESC1,
 148:         "	mov	AL,U1\n	mov	(U1)+,A1\n	mov	(U1),U1\n",
 149: 
 150: OPLTYPE,    FOREFF,
 151:     SANY,   TANY,
 152:     LWD,    TANY,
 153:         0,  RRIGHT,
 154:         "",   /* this entry throws away computations which don't do anything */
 155: OPLTYPE,    INTAREG|INAREG,
 156:     SANY,   TANY,
 157:     SZERO,  TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 158:         NAREG|NASR, RESC1,
 159:         "	clr	A1\n",
 160: 
 161: OPLTYPE,    INTAREG|INAREG,
 162:     SANY,   TANY,
 163:     SZERO,  TLONG|TULONG,
 164:         NAREG|NASR, RESC1,
 165:         "	clr	A1\n	clr	U1\n",
 166: 
 167: OPLTYPE,    INTAREG|INAREG,
 168:     SANY,   TANY,
 169:     SANY,   TINT|TUNSIGNED|TPOINT|TCHAR,
 170:         NAREG|NASR, RESC1,
 171:         "	movZB	AR,A1\n",
 172: 
 173: OPLTYPE,    INTEMP,
 174:     SANY,   TANY,
 175:     SANY,   TINT|TUNSIGNED|TPOINT,
 176:         NTEMP,  RESC1,
 177:         "	mov	AR,A1\n",
 178: 
 179: OPLTYPE,    FORCC,
 180:     SANY,   TANY,
 181:     SANY,   TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 182:         0,  RESCC,
 183:         "	tstZB	AR\n",
 184: 
 185: 
 186: OPLTYPE,    FORARG,
 187:     SANY,   TANY,
 188:     SANY,   TINT|TUNSIGNED|TPOINT,
 189:         0,  RNULL,
 190:         "	mov	AR,Z-\n",
 191: 
 192: OPLTYPE,    INTAREG|INAREG,
 193:     SANY,   TANY,
 194:     AWD,    TUCHAR,
 195:         NAREG|NASR, RESC1,
 196:         "	movb	AR,A1\n	bic	$!377,A1\n",
 197: 
 198: OPLTYPE,    INTAREG|INAREG,
 199:     SANY,   TANY,
 200:     LWD,    TLONG|TULONG,
 201:         NAREG,  RESC1,
 202:         "	mov	UR,U1\n	mov	AR,A1\n",
 203: 
 204: OPLTYPE,    INTAREG|INAREG,  /* for use when there are no free regs */
 205:     SANY,   TANY,
 206:     LWD,    TLONG|TULONG,
 207:         NAREG|NASR, RESC1,
 208:         "	mov	AR,-(sp)\n	mov	UR,U1\n	mov	(sp)+,A1\n",
 209: 
 210: OPLTYPE,    INTEMP,
 211:     SANY,   TANY,
 212:     LWD,    TLONG|TULONG,
 213:         2*NTEMP,    RESC1,
 214:         "	mov	AR,A1\n	mov	UR,U1\n",
 215: 
 216: OPLTYPE,    FORCC,
 217:     SANY,   TANY,
 218:     LWD,    TLONG|TULONG,
 219:         0,  RESCC,
 220:         "ZA",
 221: 
 222: OPLTYPE, FORARG,
 223:     SANY,   TANY,
 224:     LWD,    TLONG|TULONG,
 225:         0,  RNULL,
 226:         "	mov	UR,Z-\n	mov	AR,Z-\n",
 227: 
 228: UNARY MUL,  FORARG,
 229:     STARNM, TANY,
 230:     SANY,   TLONG|TULONG,
 231:         NAREG|NASR, RNULL,
 232:         "	mov	AL,A1\n	mov	2(A1),Z-\n	mov	(A1),Z-\n",
 233: 
 234: OPLTYPE, FORARG,
 235:     SANY,   TANY,
 236:     SBREG,  TDOUBLE,
 237:         0,  RNULL,
 238:         "	movf	AR,Z4\n",
 239: 
 240: OPLTYPE,    INTBREG|INBREG,
 241:     SANY,   TANY,
 242:     AWD,    TDOUBLE,
 243:         NBREG,  RESC1,
 244:         "	movf	AR,A1\n",
 245: 
 246: OPLTYPE,    INTEMP,
 247:     SANY,   TANY,
 248:     SBREG,  TDOUBLE,
 249:         4*NTEMP,    RESC1,
 250:         "	movf	AR,A1\n",
 251: 
 252: OPLTYPE,    FORCC,
 253:     SANY,   TANY,
 254:     AWD,    TDOUBLE,
 255:         0,  RESCC,
 256:         "	tstf	AR\n	cfcc\n",
 257: 
 258: OPLTYPE,    INTBREG|INBREG,
 259:     SANY,   TANY,
 260:     AWD,    TFLOAT,
 261:         NBREG,  RESC1,
 262:         "	movof	AR,A1\n",
 263: 
 264: OPLTYPE,    FORCC,
 265:     SANY,   TANY,
 266:     AWD,    TFLOAT,
 267:         NBREG,  RESCC,
 268:         "	movof	AR,A1\n	cfcc\n",
 269: 
 270: 
 271: OPLOG,  FORCC,
 272:     AWD,    TPOINT|TINT|TUNSIGNED,
 273:     AWD,    TPOINT|TINT|TUNSIGNED,
 274:         0,  RESCC,
 275:         "	cmp	AL,AR\nZI",
 276: 
 277: OPLOG,  FORCC,
 278:     AWD,    TCHAR|TUCHAR,
 279:     AWD,    TCHAR|TUCHAR,
 280:         0,  RESCC,
 281:         "	cmpb	AL,AR\nZI",
 282: 
 283: OPLOG,  FORCC,
 284:     AWD,    TCHAR|TUCHAR,
 285:     SSCON,  TINT,               /* look for constants between -128 and 127 */
 286:         0,  RESCC,
 287:         "	cmpb	AL,AR\nZI",
 288: 
 289: OPLOG,  FORCC,
 290:     LWD,    TLONG|TULONG,
 291:     LWD,    TLONG|TULONG,
 292:         0,  RESCC,
 293:         "ZCZI",
 294: 
 295: OPLOG,  FORCC,
 296:     SBREG,  TDOUBLE,
 297:     AWD,    TFLOAT,
 298:         NBREG,  RESCC,
 299:         "	movof	AR,A1\n	cmpf	A1,AL\n	cfcc\nZF",
 300: 
 301: OPLOG,  FORCC,
 302:     SBREG,  TDOUBLE,
 303:     SBREG|AWD,  TDOUBLE,
 304:         0,  RESCC,
 305:         "	cmpf	AR,AL\n	cfcc\nZF",
 306: 
 307: CCODES, INTAREG|INAREG,
 308:     SANY,   TANY,
 309:     SANY,   TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 310:         NAREG,  RESC1,
 311:         "	mov	$1,A1\nZN",
 312: 
 313: CCODES, INTAREG|INAREG,
 314:     SANY,   TANY,
 315:     SANY,   TLONG|TULONG,
 316:         NAREG,  RESC1,
 317:         "	clr	A1\n	mov	$1,U1\nZN",
 318: 
 319: UNARY MINUS,    INTAREG|INAREG,
 320:     STAREG, TINT|TUNSIGNED,
 321:     SANY,   TANY,
 322:         0,  RLEFT,
 323:         "	neg	AL\n",
 324: 
 325: UNARY MINUS,    INTAREG|INAREG,
 326:     STAREG, TLONG|TULONG,
 327:     SANY,   TANY,
 328:         0,  RLEFT,
 329:         "	neg	AL\n	neg	UL\n	sbc	AL\n",
 330: 
 331: UNARY MINUS,    INTBREG|INBREG,
 332:     STBREG, TDOUBLE,
 333:     SANY,   TANY,
 334:         0,  RLEFT,
 335:         "	negf	AL\n",
 336: 
 337: COMPL,  INTAREG|INAREG,
 338:     STAREG, TINT|TUNSIGNED,
 339:     SANY,   TANY,
 340:         0,  RLEFT,
 341:         "	com	AL\n",
 342: 
 343: INCR,   INTAREG|INAREG|FOREFF,
 344:     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 345:     SONE,   TANY,
 346:         NAREG,  RESC1,
 347:         "F	movZB	AL,A1\n	incZB	AL\n",
 348: 
 349: DECR,   INTAREG|INAREG|FOREFF,
 350:     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 351:     SONE,   TANY,
 352:         NAREG,  RESC1,
 353:         "F	movZB	AL,A1\n	decZB	AL\n",
 354: 
 355: INCR,   INTAREG|INAREG|FOREFF,
 356:     AWD,    TINT|TUNSIGNED|TPOINT,
 357:     SCON,   TANY,
 358:         NAREG,  RESC1,
 359:         "F	mov	AL,A1\n	add	AR,AL\n",
 360: 
 361: DECR,   INTAREG|INAREG|FOREFF,
 362:     AWD,    TINT|TUNSIGNED|TPOINT,
 363:     SCON,   TANY,
 364:         NAREG,  RESC1,
 365:         "F	mov	AL,A1\n	sub	AR,AL\n",
 366: 
 367: INCR,   INTAREG|INAREG|FOREFF,
 368:     LWD,    TLONG|TULONG,
 369:     SCON,   TANY,
 370:         NAREG,  RESC1,
 371:         "F	mov	AL,A1\nF	mov	UL,U1\n	add	AR,AL\n	add	UR,UL\n	adc	AL\n",
 372: 
 373: DECR,   INTAREG|INAREG|FOREFF,
 374:     LWD,    TLONG|TULONG,
 375:     SCON,   TANY,
 376:         NAREG,  RESC1,
 377:         "F	mov	AL,A1\nF	mov	UL,U1\n	sub	AR,AL\n	sub	UR,UL\n	sbc	AL\n",
 378: 
 379: COMPL,  INTAREG|INAREG,
 380:     STAREG, TLONG|TULONG,
 381:     SANY,   TANY,
 382:         0,  RLEFT,
 383:         "	com	AL\n	com	UL\n",
 384: 
 385: AND,    FORCC,
 386:     AWD,    TINT|TUNSIGNED|TPOINT,
 387:     SCON,   TANY,
 388:         0,  RESCC,
 389:         "	bit	AL,$Z~\n",
 390: 
 391: ASG MUL,    INAREG,
 392:     STAREG, TINT|TUNSIGNED|TPOINT,
 393:     AWD,    TINT|TUNSIGNED|TPOINT,
 394:         NAREG,  RLEFT,
 395:         "	mul	AR,AL\n",
 396: 
 397: ASG DIV,    INAREG,
 398:     STAREG, TINT|TUNSIGNED|TPOINT,
 399:     AWD,    TINT|TUNSIGNED|TPOINT,
 400:         NAREG,  RESC1,
 401:         "ZV	div	AR,r0\n",  /* since lhs must be in r1 */
 402: 
 403: ASG MOD,    INAREG,
 404:     STAREG, TINT|TUNSIGNED|TPOINT,
 405:     AWD,    TINT|TUNSIGNED|TPOINT,
 406:         NAREG,  RLEFT,
 407:         "ZV	div	AR,r0\n",  /* since lhs must be in r1 */
 408: 
 409: ASG PLUS,   INAREG|FORCC,
 410:     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 411:     SONE,   TINT,
 412:         0,  RLEFT|RESCC,
 413:         "	incZB	AL\n",
 414: 
 415: ASG PLUS,   INAREG|FORCC,
 416:     AWD,    TINT|TUNSIGNED|TPOINT,
 417:     AWD,    TINT|TUNSIGNED|TPOINT,
 418:         0,  RLEFT|RESCC,
 419:         "	add	AR,AL\n",
 420: 
 421: ASG MINUS,  INAREG|FORCC,
 422:     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 423:     SONE,   TINT,
 424:         0,  RLEFT|RESCC,
 425:         "	decZB	AL\n",
 426: 
 427: ASG MINUS,  INAREG|FORCC,
 428:     AWD,    TINT|TUNSIGNED|TPOINT,
 429:     AWD,    TINT|TUNSIGNED|TPOINT,
 430:         0,  RLEFT|RESCC,
 431:         "	sub	AR,AL\n",
 432: 
 433: ASG OR,     INAREG|FORCC,
 434:     AWD,    TINT|TUNSIGNED|TPOINT,
 435:     AWD,    TINT|TUNSIGNED|TPOINT,
 436:         0,  RLEFT|RESCC,
 437:         "	bis	AR,AL\n",
 438: 
 439: /* AND transformed to "pdp11 bic" in first pass. */
 440: ASG AND,    INAREG|FORCC,
 441:     AWD,    TINT|TUNSIGNED|TPOINT,
 442:     AWD,    TINT|TUNSIGNED|TPOINT,
 443:         0,  RLEFT|RESCC,
 444:         "	bic	AR,AL\n",
 445: 
 446: ASG ER,     INAREG|FORCC,
 447:     AWD,    TINT|TUNSIGNED|TPOINT,
 448:     SAREG,  TINT|TUNSIGNED|TPOINT,
 449:         0,  RLEFT|RESCC,
 450:         "	xor	AR,AL\n",
 451: 
 452: ASG OPSHFT,     INAREG,
 453:     SAREG,  TINT|TUNSIGNED|TPOINT,
 454:     SONE,   TINT,
 455:         0,  RLEFT,
 456:         "	OI	AL\nZH",
 457: 
 458: ASG LS,     INAREG,
 459:     SAREG,  TINT|TUNSIGNED|TPOINT,
 460:     AWD,    TINT|TUNSIGNED|TPOINT,
 461:         0,  RLEFT,
 462:         "	ash	AR,AL\n",
 463: 
 464: ASG RS,     INAREG,
 465:     SAREG,  TINT|TUNSIGNED|TPOINT,
 466:     SCON,   TANY,
 467:         0,  RLEFT,
 468:         "	ash	$ZM,AL\nZH",
 469: 
 470: ASG RS,     INAREG,
 471:     SAREG,  TINT|TUNSIGNED|TPOINT,
 472:     STAREG, TINT|TUNSIGNED|TPOINT,
 473:         0,  RLEFT,
 474:         "	neg	AR\n	ash	AR,AL\nZH",
 475: 
 476: ASG RS,     INAREG,
 477:     SAREG,  TINT|TUNSIGNED|TPOINT,
 478:     AWD,    TINT|TUNSIGNED|TPOINT,
 479:         NAREG|NASR, RLEFT,
 480:         "	mov	AR,A1\n	neg	A1\n	ash	A1,AL\nZH",
 481: 
 482: ASG RS,     INAREG,
 483:     SAREG,  TINT,
 484:     AWD,    TINT,
 485:         0,  RLEFT,
 486:         "	mov	AR,-(sp)\n	neg	(sp)\n	ash	(sp)+,AL\nZH",
 487: 
 488: ASG RS,     INAREG,
 489:     SAREG,  TINT|TUNSIGNED|TPOINT,
 490:     AWD,    TINT|TUNSIGNED|TPOINT,
 491:         NTEMP,  RLEFT,
 492:         "	mov	AR,A1\n	neg	A1\n	ash	A1,AL\nZH",
 493: 
 494: ASG OR,     INAREG|FORCC,
 495:     AWD,    TCHAR|TUCHAR,
 496:     AWD,    TCHAR|TUCHAR,
 497:         0,  RLEFT|RESCC,
 498:         "	bisb	AR,AL\n",
 499: 
 500: /* AND transformed to "pdp11 bic" in first pass. */
 501: ASG AND,    INAREG|FORCC,
 502:     AWD,    TCHAR|TUCHAR,
 503:     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 504:         0,  RLEFT|RESCC,
 505:         "	bicb	AR,AL\n",
 506: 
 507: ASG PLUS,   INAREG,
 508:     LWD,    TLONG|TULONG,
 509:     SCCON,  TINT|TLONG|TULONG,
 510:         0,  RLEFT,
 511:         "	add	UR,UL\n	adc	AL\n",
 512: 
 513: ASG PLUS,   INAREG,
 514:     STARNM, TLONG|TULONG,
 515:     LWD,    TLONG|TULONG,
 516:         NAREG,  RLEFT,
 517:         "	mov	ZU,A1\n	add	AR,(A1)+\n	add	UR,(A1)\n	adc	-(A1)\n",
 518: 
 519: ASG PLUS,   INAREG,
 520:     LWD,    TLONG|TULONG,
 521:     LWD,    TLONG|TULONG,
 522:         0,  RLEFT,
 523:         "	add	AR,AL\n	add	UR,UL\n	adc	AL\n",
 524: 
 525: ASG PLUS,   INAREG,
 526:     AWD,    TPOINT,
 527:     LWD,    TLONG|TULONG,
 528:         0,  RLEFT,
 529:         "	add	UR,AL\n",
 530: 
 531: ASG MINUS,  INAREG,
 532:     LWD,    TLONG|TULONG,
 533:     SCCON,  TINT|TLONG|TULONG,
 534:         0,  RLEFT,
 535:         "	sub	UR,UL\n	sbc	AL\n",
 536: 
 537: ASG MINUS,  INAREG,
 538:     STARNM, TLONG|TULONG,
 539:     LWD,    TLONG|TULONG,
 540:         NAREG,  RLEFT,
 541:         "	mov	ZU,A1\n	sub	AR,(A1)+\n	sub	UR,(A1)\n	sbc	-(A1)\n",
 542: 
 543: ASG MINUS,  INAREG,
 544:     LWD,    TLONG|TULONG,
 545:     LWD,    TLONG|TULONG,
 546:         0,  RLEFT,
 547:         "	sub	AR,AL\n	sub	UR,UL\n	sbc	AL\n",
 548: 
 549: ASG MINUS,  INAREG,
 550:     AWD,    TPOINT,
 551:     LWD,    TLONG|TULONG,
 552:         0,  RLEFT,
 553:         "	sub	UR,AL\n",
 554: 
 555: ASG OR,     INAREG,
 556:     LWD,    TLONG|TULONG,
 557:     LWD,    TLONG|TULONG,
 558:         0,  RLEFT,
 559:         "	bis	AR,AL\n	bis	UR,UL\n",
 560: 
 561: /* AND transformed to "pdp11 bic" in first pass. */
 562: ASG AND,    INAREG,
 563:     LWD,    TLONG|TULONG,
 564:     LWD,    TLONG|TULONG,
 565:         0,  RLEFT,
 566:         "	bic	AR,AL\n	bic	UR,UL\n",
 567: 
 568: ASG ER,     INAREG,
 569:     LWD,    TLONG|TULONG,
 570:     SAREG,  TLONG|TULONG,
 571:         0,  RLEFT,
 572:         "	xor	AR,AL\n	xor	UR,UL\n",
 573: 
 574:     /* table entries for ^ which correspond to the usual way of doing busingess
 575: 		(rhs in a temp register */
 576: 
 577: ASG ER, INAREG|INTAREG,
 578:     STAREG, TLONG|TULONG,
 579:     LWD,    TLONG|TULONG,
 580:         0,  RLEFT,
 581:         "\tmov\tAL,-(sp)\n\tmov\tUR,AL\n\txor\tAL,UL\n\tmov\tAR,AL\n\txor\tAL,(sp)\n\tmov\t(sp)+,AL\n",
 582: 
 583: ASG ER, INAREG|INTAREG,
 584:     STAREG, TINT|TUNSIGNED|TPOINT,
 585:     AWD,    TINT|TUNSIGNED|TPOINT,
 586:         0,  RLEFT,
 587:         "\tmov\tAL,-(sp)\n\tmov\tAR,AL\n\txor\tAL,(sp)\n\tmov\t(sp)+,AL\n",
 588: 
 589: ASG LS,     INAREG,
 590:     SAREG,  TLONG|TULONG,
 591:     AWD,    TINT|TUNSIGNED|TPOINT,
 592:         0,  RLEFT,
 593:         "	ashc	AR,AL\n",
 594: 
 595: ASG RS,     INAREG,
 596:     SAREG,  TLONG|TULONG,
 597:     SCON,   TANY,
 598:         0,  RLEFT,
 599:         "	ashc	$ZM,AL\nZH",
 600: 
 601: ASG RS,     INAREG,
 602:     SAREG,  TLONG|TULONG,
 603:     STAREG, TINT|TUNSIGNED|TPOINT,
 604:         0,  RLEFT,
 605:         "	neg	AR\n	ashc	AR,AL\nZH",
 606: 
 607: ASG RS,     INAREG,
 608:     SAREG,  TLONG|TULONG,
 609:     AWD,    TINT|TUNSIGNED|TPOINT,
 610:         NAREG|NASR, RLEFT,
 611:         "	mov	AR,A1\n	neg	A1\n	ashc	A1,AL\nZH",
 612: 
 613: ASG RS,     INAREG,
 614:     SAREG,  TLONG|TULONG,
 615:     AWD,    TINT|TUNSIGNED|TPOINT,
 616:         NTEMP,  RLEFT,
 617:         "	mov	AR,A1\n	neg	A1\n	ashc	A1,AL\nZH",
 618: 
 619: ASG OPFLOAT,    INBREG|INTBREG,
 620:     STBREG, TDOUBLE,
 621:     SBREG|AWD,  TDOUBLE,
 622:         0,  RLEFT|RESCC,
 623:         "	OF	AR,AL\n",
 624: 
 625: ASG OPFLOAT,    INBREG|INTBREG,
 626:     STBREG, TDOUBLE,
 627:     AWD,    TFLOAT,
 628:         NBREG|NBSR, RLEFT|RESCC,
 629:         "	movof	AR,A1\n	OF	A1,AL\n",
 630: 
 631: ASG OPFLOAT,    FORCC,
 632:     STBREG, TDOUBLE,
 633:     SBREG|AWD,  TDOUBLE,
 634:         0,  RESCC,
 635:         "	OF	AR,AL\n	cfcc\n",
 636: 
 637: ASG OPFLOAT,    FORCC,
 638:     STBREG, TDOUBLE,
 639:     AWD,    TFLOAT,
 640:         NBREG|NBSR, RESCC,
 641:         "	movof	AR,A1\n	OF	A1,AL\n	cfcc\n",
 642: 
 643: UNARY CALL, INTAREG,
 644:     SAREG|SNAME|SOREG|SCON, TANY,
 645:     SANY,   TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR|TLONG|TULONG,
 646:         NAREG|NASL, RESC1, /* should be register 0 */
 647:         "	jsr	pc,*AL\n",
 648: 
 649: UNARY CALL, INTBREG,
 650:     SAREG|SNAME|SOREG|SCON, TANY,
 651:     SANY,   TDOUBLE|TFLOAT,
 652:         NBREG,  RESC1, /* should be register FR0 */
 653:         "	jsr	pc,*AL\n",
 654: 
 655: SCONV,  INTAREG,
 656:     STAREG, TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 657:     SANY,   TUCHAR,
 658:         0,  RLEFT,
 659:         "	bic	$!377,AL\n",
 660: 
 661: SCONV,  INTAREG,
 662:     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 663:     SANY,   TCHAR|TINT,
 664:         NAREG|NASL, RESC1,
 665:         "	movZB	AL,A1\n",
 666: 
 667: SCONV,  INAREG|INTAREG,
 668:     LWD,    TLONG|TULONG,
 669:     SANY,   TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 670:         0,  RLEFT,
 671:         "ZT",
 672: 
 673: SCONV,  INTAREG,
 674:     AWD,    TUCHAR,
 675:     SANY,   TLONG|TULONG,
 676:         NAREG|NASL, RESC1,
 677:         "	movb	AL,U1\n	bic	$!377,U1\n	clr	A1\n",
 678: 
 679: SCONV,  INTAREG,
 680:     AWD,    TINT,
 681:     SANY,   TLONG|TULONG,
 682:         NAREG|NASL, RESC1,
 683:         "	mov	AL,U1\n	sxt	A1\n",
 684: 
 685: SCONV,  INTAREG,
 686:     AWD,    TUNSIGNED|TPOINT,
 687:     SANY,   TLONG|TULONG,
 688:         NAREG|NASL, RESC1,
 689:         "	mov	AL,U1\n	clr	A1\n",
 690: 
 691: SCONV,  INTAREG,
 692:     SBREG,  TDOUBLE,
 693:     SANY,   TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
 694:         NAREG,  RESC1,
 695:         "	movfi	AL,A1\n",
 696: 
 697: SCONV,  INTAREG,
 698:     STBREG, TDOUBLE,
 699:     SANY,   TLONG|TULONG,
 700:         NAREG,  RESC1,
 701:         "	setl\n	movfi	AL,-(sp)\n	seti\n	mov	(sp)+,A1\n	mov	(sp)+,U1\n",
 702: 
 703: SCONV,  FORARG,
 704:     STBREG, TDOUBLE,
 705:     SANY,   TLONG|TULONG,
 706:         0,  RNULL,
 707:         "	setl\n	movfi	AL,Z4\n	seti\n",
 708: 
 709: SCONV,  INTBREG,
 710:     SAREG,  TLONG,
 711:     SANY,   TANY,
 712:         NBREG,  RESC1,
 713:         "\tmov\tUL,-(sp)\n\tmov\tAL,-(sp)\n\tsetl\n\tmovif\t(sp)+,A1\n\tseti\n",
 714: 
 715: SCONV,  INTBREG,
 716:     LWD,    TLONG,
 717:     SANY,   TANY,
 718:         NBREG,  RESC1,
 719:         "\tsetl\n\tmovif\tAL,A1\n\tseti\n",
 720: 
 721: SCONV,  INTBREG,
 722:     AWD,    TINT,
 723:     SANY,   TANY,
 724:         NBREG,  RESC1,
 725:         "	movif	AL,A1\n",
 726: 
 727: SCONV,  INTBREG,
 728:     SAREG,  TULONG,
 729:     SANY,   TANY,
 730:         NBREG,  RESC1,
 731:         "\tmov\tUL,-(sp)\n\tmov\tAL,-(sp)\n\tsetl\n\tmovif\t(sp)+,A1\n\tseti\n\tcfcc\n\tbpl\t1f\n\taddf\t$050200,A1\n1:\n",
 732: 
 733: SCONV,  INTBREG,
 734:     LWD,    TULONG,
 735:     SANY,   TANY,
 736:         NBREG,  RESC1,
 737:         "\tsetl\n\tmovif\tAL,A1\n\tseti\n\tcfcc\n\tbpl\t1f\n\taddf\t$050200,A1\n1:\n",
 738: 
 739: SCONV,  INTBREG,
 740:     STAREG, TUNSIGNED|TPOINT,
 741:     SANY,   TANY,
 742:         NBREG,  RESC1,
 743:         "\tmovif\tAL,A1\n\tcfcc\n\tbpl\t1f\n\taddf\t$044200,A1\n1:\n",
 744: 
 745: PCONV,  INTAREG,
 746:     AWD,    TCHAR|TUCHAR,
 747:     SANY,   TPOINT,
 748:         NAREG|NASL, RESC1,
 749:         "	movb	AL,A1\n",
 750: 
 751: PCONV,  INAREG|INTAREG,
 752:     LWD,    TLONG|TULONG,
 753:     SANY,   TPOINT,
 754:         0,  RLEFT,
 755:         "ZT",
 756: 
 757: STARG,  FORARG,
 758:     SNAME|SOREG,    TANY,
 759:     SANY,   TANY,
 760:         0,  RNULL,
 761:         "ZS",
 762: 
 763: STASG,  FOREFF,
 764:     SNAME|SOREG,    TANY,
 765:     SCON|SAREG, TANY,
 766:         0,  RNOP,
 767:         "ZS",
 768: 
 769: STASG,  INTAREG|INAREG,
 770:     SNAME|SOREG,    TANY,
 771:     STAREG, TANY,
 772:         0,  RRIGHT,
 773:         "ZS",
 774: 
 775: STASG, INAREG|INTAREG,
 776:     SNAME|SOREG,    TANY,
 777:     SCON|SAREG, TANY,
 778:         NAREG,  RESC1,
 779:         "ZS	mov	AR,A1\n",
 780: 
 781: INIT,   FOREFF,
 782:     SCON,   TANY,
 783:     SANY,   TINT|TUNSIGNED|TPOINT,
 784:         0,  RNOP,
 785:         "	CL\n",
 786: 
 787: INIT,   FOREFF,
 788:     SCON,   TANY,
 789:     SANY,   TLONG|TULONG,
 790:         0,  RNOP,
 791:         "ZL",
 792: 
 793: INIT,   FOREFF,
 794:     SCON,   TANY,
 795:     SANY,   TCHAR|TUCHAR,
 796:         0,  RNOP,
 797:         "	.byte	CL\n",
 798: 
 799:     /* for the use of fortran only */
 800: 
 801: GOTO,   FOREFF,
 802:     SCON,   TANY,
 803:     SANY,   TANY,
 804:         0,  RNOP,
 805:         "	jbr	CL\n",
 806: 
 807: GOTO,   FOREFF,
 808:     SNAME,  TLONG|TULONG,
 809:     SANY,   TANY,
 810:         0,  RNOP,
 811:         "	jmp	*UL\n",
 812: 
 813: GOTO,   FOREFF,
 814:     SNAME,  TINT|TUNSIGNED|TCHAR|TUCHAR|TPOINT,
 815:     SANY,   TANY,
 816:         0,  RNOP,
 817:         "	jmp	*AL\n",
 818: 
 819:     /* Default actions for hard trees ... */
 820: 
 821: # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
 822: 
 823: UNARY MUL, DF( UNARY MUL ),
 824: 
 825: INCR, DF(INCR),
 826: 
 827: DECR, DF(INCR),
 828: 
 829: ASSIGN, DF(ASSIGN),
 830: 
 831: STASG, DF(STASG),
 832: 
 833: OPLEAF, DF(NAME),
 834: 
 835: OPLOG,  FORCC,
 836:     SANY,   TANY,
 837:     SANY,   TANY,
 838:         REWRITE,    BITYPE,
 839:         "",
 840: 
 841: OPLOG,  DF(NOT),
 842: 
 843: COMOP, DF(COMOP),
 844: 
 845: INIT, DF(INIT),
 846: 
 847: OPUNARY, DF(UNARY MINUS),
 848: 
 849: 
 850: ASG OPANY, DF(ASG PLUS),
 851: 
 852: OPANY, DF(BITYPE),
 853: 
 854: FREE,   FREE,   FREE,   FREE,   FREE,   FREE,   FREE,   FREE,   "help; I'm in trouble\n" };

Defined variables

table defined in line 6; never used

Defined macros

AWD defined in line 3; used 75 times
DF defined in line 821; used 12 times
LWD defined in line 4; used 38 times
Last modified: 1991-07-30
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1711
Valid CSS Valid XHTML 1.0 Strict