|
|
1.1 ! root 1: /* CALLF RET instruction test */ ! 2: /* Privilege registers */ ! 3: ! 4: .set IPL,8 ! 5: .set MAPEN,9 ! 6: .set KSP,19 ! 7: ! 8: /* PSL fields */ ! 9: .set IV,32 ! 10: .set T,16 ! 11: .set N,8 ! 12: .set Z,4 ! 13: .set V,2 ! 14: .set C,1 ! 15: ! 16: /* constants */ ! 17: .set DISABLE,0 ! 18: .set ENABLE,1 ! 19: .set HIGH,31 /* highest interrupt priority */ ! 20: ! 21: .set NOARG1,3 ! 22: .set NOARG2,2 ! 23: .set ARG1,0xf ! 24: .set ARG2,0xff ! 25: .set ARG3,0xfff ! 26: .set R0_12,0x3fff /* mask to save r0 thru r12 */ ! 27: .set R2_12,0x1ffc /* mask to save r2 thru r12 */ ! 28: .set R357911,0xaa8 /* mask to save r3,r5,r7,r9,r11 */ ! 29: .set MASK1,R2_12 /* save r2-r12 */ ! 30: .set MASK2,R357911 /* save r3,5,7,9,11 */ ! 31: ! 32: ! 33: .globl _callfx ! 34: _callfx: ! 35: bicpsw $(IV|T) /* disable exceptions */ ! 36: /* */ ! 37: strt: ! 38: callf $4,_setjmp /* save context for error return */ ! 39: movab strt,_stpc /* save subtest address */ ! 40: movl $1,_subtst /* subtest number */ ! 41: movl $2,_no_opr /* number of operands in use */ ! 42: movl $NOARG1,_opr /* first operand */ ! 43: movl $MASK1,_opr + 4 /* second operand */ ! 44: 0: movab stkbase,sp /* init. stack pointer */ ! 45: movab stkbase,fp /* init. frame pointer */ ! 46: movl fp,bfp /* save fp */ ! 47: movw $MASK1,proc1 /* set entry mask in called procedure */ ! 48: pushl $ARG1 ! 49: pushl $ARG2 ! 50: pushl $ARG3 /* push 3 arguments on stacks */ ! 51: movl $2,r2 /* initialize r2 - r12 */ ! 52: movl $3,r3 ! 53: movl $4,r4 ! 54: movl $5,r5 ! 55: movl $6,r6 ! 56: movl $7,r7 ! 57: movl $0x8,r8 ! 58: movl $0x9,r9 ! 59: movl $0xa,r10 ! 60: movl $0xb,r11 ! 61: movl $0xc,r12 ! 62: movab (r14),estk /* save sp */ ! 63: /* compute expected sp after callf */ ! 64: subl2 $(3*4),estk /* Space for fp,MASK,PC */ ! 65: subl2 $(11*4),estk /* Space for r2-r12 */ ! 66: /* compute expected fp after callf */ ! 67: movl fp,efp ! 68: subl2 $(4*4),efp ! 69: bicpsw $(N|Z|V|C) /* clear all flags */ ! 70: bispsw $(N|V|C) /* set all flags */ ! 71: callf $(4*NOARG1+4),proc1 /* call procedure with 3 arguments */ ! 72: retcall1: ! 73: blss error1 /* error if any of the n,z,v,c flags set */ ! 74: beql error1 ! 75: bvs error1 ! 76: bcs error1 ! 77: jmp 1f ! 78: error1: movpsl _actual /* actual = psl */ ! 79: bbs $0,_scoplp,0b ! 80: movl $2,_ercode /* error code flag miscompare */ ! 81: jmp *badrtn ! 82: 1: cmpl r2,$2 /* check if r2 - r12 get restored properly */ ! 83: beql 1f ! 84: bbs $0,_scoplp,0b ! 85: movl $1,_ercode /* error code data miscompare */ ! 86: movl r2,_actual /* actual data */ ! 87: movl $2,_expected /* expected data */ ! 88: jmp *badrtn ! 89: 1: cmpl r3,$3 ! 90: beql 1f ! 91: bbs $0,_scoplp,0b ! 92: movl $1,_ercode /* error code data miscompare */ ! 93: movl r3,_actual /* actual data */ ! 94: movl $3,_expected /* expected data */ ! 95: jmp *badrtn ! 96: 1: cmpl r4,$4 ! 97: beql 1f ! 98: bbs $0,_scoplp,0b ! 99: movl $1,_ercode /* error code data miscompare */ ! 100: movl r4,_actual /* actual data */ ! 101: movl $4,_expected /* expected data */ ! 102: jmp *badrtn ! 103: 1: cmpl r5,$5 ! 104: beql 1f ! 105: bbs $0,_scoplp,0b ! 106: movl $1,_ercode /* error code data miscompare */ ! 107: movl r5,_actual /* actual data */ ! 108: movl $5,_expected /* expected data */ ! 109: jmp *badrtn ! 110: 1: cmpl r6,$6 ! 111: beql 1f ! 112: bbs $0,_scoplp,0b ! 113: movl $1,_ercode /* error code data miscompare */ ! 114: movl r6,_actual /* actual data */ ! 115: movl $6,_expected /* expected data */ ! 116: jmp *badrtn ! 117: 1: cmpl r7,$7 ! 118: beql 1f ! 119: bbs $0,_scoplp,0b ! 120: movl $1,_ercode /* error code data miscompare */ ! 121: movl r7,_actual /* actual data */ ! 122: movl $7,_expected /* expected data */ ! 123: jmp *badrtn ! 124: 1: cmpl r8,$0x8 ! 125: beql 1f ! 126: bbs $0,_scoplp,0b ! 127: movl $1,_ercode /* error code data miscompare */ ! 128: movl r8,_actual /* actual data */ ! 129: movl $8,_expected /* expected data */ ! 130: jmp *badrtn ! 131: 1: cmpl r9,$0x9 ! 132: beql 1f ! 133: bbs $0,_scoplp,0b ! 134: movl $1,_ercode /* error code data miscompare */ ! 135: movl r9,_actual /* actual data */ ! 136: movl $9,_expected /* expected data */ ! 137: jmp *badrtn ! 138: 1: cmpl r10,$0xa ! 139: beql 1f ! 140: bbs $0,_scoplp,0b ! 141: movl $1,_ercode /* error code data miscompare */ ! 142: movl r10,_actual /* actual data */ ! 143: movl $0xa,_expected /* expected data */ ! 144: jmp *badrtn ! 145: 1: cmpl r11,$0xb ! 146: beql 1f ! 147: bbs $0,_scoplp,0b ! 148: movl $1,_ercode /* error code data miscompare */ ! 149: movl r11,_actual /* actual data */ ! 150: movl $0xb,_expected /* expected data */ ! 151: jmp *badrtn ! 152: 1: cmpl r12,$0xc ! 153: beql 1f ! 154: bbs $0,_scoplp,0b ! 155: movl $1,_ercode /* error code data miscompare */ ! 156: movl r11,_actual /* actual data */ ! 157: movl $0xc,_expected /* expected data */ ! 158: jmp *badrtn ! 159: 1: movab (r14),r0 ! 160: cmpl r0,bfp /* check if sp,fp get restored properly */ ! 161: beql 1f ! 162: bbs $0,_scoplp,0b ! 163: movl $1,_ercode /* error code data miscompare */ ! 164: movl r0,_actual /* actual data */ ! 165: movl bfp,_expected /* expected data */ ! 166: jmp *badrtn ! 167: 1: cmpl fp,bfp ! 168: beql 1f ! 169: bbs $0,_scoplp,0b ! 170: movl $1,_ercode /* error code data miscompare */ ! 171: movl fp,_actual /* actual data */ ! 172: movl bfp,_expected /* expected data */ ! 173: jmp *badrtn ! 174: 1: jmp callp2 /* call procedure no. 2 */ ! 175: ! 176: ! 177: callp2: ! 178: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 179: c2: callf $4,_setjmp /* save context for error return */ ! 180: movab c2,_stpc /* save subtest address */ ! 181: movl $2,_subtst /* subtest number */ ! 182: movl $2,_no_opr /* number of operands in use */ ! 183: movl $NOARG2,_opr /* first operand */ ! 184: movl $MASK2,_opr + 4 /* second operand */ ! 185: 0: movw $MASK2,proc2 /* set entry mask in called procedure */ ! 186: pushl $ARG1 ! 187: pushl $ARG2 ! 188: movl $3,r3 /* init. r3,r5,r7,r9,r11 */ ! 189: movl $5,r5 ! 190: movl $7,r7 ! 191: movl $0x9,r9 ! 192: movl $0xb,r11 ! 193: movab (r14),estk /* save sp */ ! 194: /* compute expected sp after callf */ ! 195: subl2 $(3*4),estk /* Space for fp,MASK,PC */ ! 196: subl2 $(5*4),estk /* Space for r3,5,7,9,11 */ ! 197: /* compute expected fp after callf */ ! 198: movl fp,efp ! 199: subl2 $(3*4),efp ! 200: movab proc2,r12 ! 201: movl $(NOARG2*4+4),r6 /* load reg with argument data */ ! 202: bispsw $(N|V) /* set n,v flags */ ! 203: bicpsw $(Z|C) /* clear z,c flags */ ! 204: callf $(NOARG2*4+4),proc2 /* cll procedure with 2 argu */ ! 205: retcall2: ! 206: jneq error2 /* error if z,c flags clear */ ! 207: jcc error2 ! 208: jlss error2 /* error if n,v flags set */ ! 209: jvs error2 ! 210: jmp 1f ! 211: error2: movpsl _actual /* actual = psl */ ! 212: bbs $0,_scoplp,0b ! 213: movl $2,_ercode /* error code flag miscompare */ ! 214: jmp *badrtn ! 215: 1: cmpl r3,$3 /* check if r3,5,7,9,11 restored properly */ ! 216: beql 1f ! 217: bbs $0,_scoplp,0b ! 218: movl $1,_ercode /* error code data miscompare */ ! 219: movl r3,_actual /* actual data */ ! 220: movl $3,_expected /* expected data */ ! 221: jmp *badrtn ! 222: 1: cmpl r5,$5 ! 223: beql 1f ! 224: bbs $0,_scoplp,0b ! 225: movl $1,_ercode /* error code data miscompare */ ! 226: movl r5,_actual /* actual data */ ! 227: movl $5,_expected /* expected data */ ! 228: jmp *badrtn ! 229: 1: cmpl r7,$7 ! 230: beql 1f ! 231: bbs $0,_scoplp,0b ! 232: movl $1,_ercode /* error code data miscompare */ ! 233: movl r7,_actual /* actual data */ ! 234: movl $7,_expected /* expected data */ ! 235: jmp *badrtn ! 236: 1: cmpl r9,$0x9 ! 237: beql 1f ! 238: bbs $0,_scoplp,0b ! 239: movl $1,_ercode /* error code data miscompare */ ! 240: movl r9,_actual /* actual data */ ! 241: movl $0x9,_expected /* expected data */ ! 242: jmp *badrtn ! 243: 1: cmpl r11,$0xb ! 244: beql 1f ! 245: bbs $0,_scoplp,0b ! 246: movl $1,_ercode /* error code data miscompare */ ! 247: movl r11,_actual /* actual data */ ! 248: movl $0xb,_expected /* expected data */ ! 249: jmp *badrtn ! 250: 1: movab (r14),r0 ! 251: cmpl r0,bfp /* check if sp,fp restored properly */ ! 252: beql 1f ! 253: bbs $0,_scoplp,0b ! 254: movl $1,_ercode /* error code data miscompare */ ! 255: movl r0,_actual /* actual data */ ! 256: movl bfp,_expected /* expected data */ ! 257: jmp *badrtn ! 258: 1: cmpl fp,bfp ! 259: beql 1f ! 260: bbs $0,_scoplp,0b ! 261: movl $1,_ercode /* error code data miscompare */ ! 262: movl fp,_actual /* actual data */ ! 263: movl bfp,_expected /* expected data */ ! 264: jmp *badrtn ! 265: 1: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 266: jmp *return ! 267: ! 268: ! 269: /* TEST DATA */ ! 270: .align 2 ! 271: stack: ! 272: .space 400 /* 400 bytes for the stack */ ! 273: stkbase: ! 274: .long 0 ! 275: prevpc1: ! 276: .long retcall1 ! 277: prevpc2: ! 278: .long retcall2 ! 279: prono: ! 280: .long 0 /* current procedure called : 1/2 */ ! 281: astk: ! 282: .long 0 /* actual sp after callf */ ! 283: estk: ! 284: .long 0 /* expected sp after callf */ ! 285: efp: .long 0 /* expected fp after callf */ ! 286: bfp: .long 0 /* fp before callf */ ! 287: ! 288: temp0: .long 0 ! 289: temp1: .long 0 ! 290: ! 291: /* PROCEDURE 1 */ ! 292: proc1: ! 293: .word 0 /* entry mask */ ! 294: jgeq err1 /* error if any of n,v,c flag clear */ ! 295: jeql err1 ! 296: jvc err1 ! 297: jcc err1 ! 298: jmp 1f ! 299: err1: movpsl _actual /* actal psl MAYBE it is incorrect */ ! 300: bbs $0,_scoplp,0b ! 301: movl $2,_ercode /* error code flag failure */ ! 302: jmp *badrtn ! 303: 1: movab (r14),astk ! 304: cmpl astk,estk /* check if sp decremented properly */ ! 305: jeql 1f ! 306: bbs $0,_scoplp,0b ! 307: movl $1,_ercode /* error code data miscompare */ ! 308: movl astk,_actual /* actual data */ ! 309: movl estk,_expected /* expected data */ ! 310: jmp *badrtn ! 311: 1: cmpl fp,efp /* check if fp decrmented properly */ ! 312: jeql 1f ! 313: bbs $0,_scoplp,0b ! 314: movl $1,_ercode /* error code data miscompare */ ! 315: movl fp,_actual /* actual data */ ! 316: movl efp,_expected /* expected data */ ! 317: jmp *badrtn ! 318: 1: cmpl (fp),bfp /* check previous fp saved on the stack */ ! 319: jeql 1f ! 320: bbs $0,_scoplp,0b ! 321: movl $1,_ercode /* error code data miscompare */ ! 322: movl (fp),_actual /* actual data */ ! 323: movl bfp,_expected /* expected data */ ! 324: jmp *badrtn ! 325: 1: movl fp,temp0 ! 326: subl2 $4,temp0 ! 327: movl *(temp0),temp0 /* get mask/argument longword from stack */ ! 328: movl $MASK1,temp1 ! 329: shll $16,temp1,temp1 ! 330: addl2 $(4*NOARG1+4),temp1 ! 331: cmpl temp0,temp1 /* check mask/argnum longword */ ! 332: jeql 1f ! 333: bbs $0,_scoplp,0b ! 334: movl $1,_ercode /* error code data miscompare */ ! 335: movl temp0,_actual /* actual data */ ! 336: movl temp1,_expected /* expected data */ ! 337: jmp *badrtn ! 338: cmpl -8(fp),prevpc1 /* check saved PC on the stack */ ! 339: jeql 1f ! 340: bbs $0,_scoplp,0b ! 341: movl $1,_ercode /* error code data miscompare */ ! 342: movl -8(fp),_actual /* actual data */ ! 343: movl prevpc1,_expected /* expected data */ ! 344: jmp *badrtn ! 345: 1: cmpl (sp),$2 /* check saved r2 - r12 on stack */ ! 346: jeql 1f ! 347: bbs $0,_scoplp,0b ! 348: movl $1,_ercode /* error code data miscompare */ ! 349: movl (sp),_actual /* actual data */ ! 350: movl $2,_expected /* expected data */ ! 351: jmp *badrtn ! 352: 1: cmpl 4(sp),$3 ! 353: jeql 1f ! 354: bbs $0,_scoplp,0b ! 355: movl $1,_ercode /* error code data miscompare */ ! 356: movl 4(sp),_actual /* actual data */ ! 357: movl $3,_expected /* expected data */ ! 358: jmp *badrtn ! 359: 1: cmpl 8(sp),$4 ! 360: jeql 1f ! 361: bbs $0,_scoplp,0b ! 362: movl $1,_ercode /* error code data miscompare */ ! 363: movl 8(sp),_actual /* actual data */ ! 364: movl $4,_expected /* expected data */ ! 365: jmp *badrtn ! 366: 1: cmpl 12(sp),$5 ! 367: jeql 1f ! 368: bbs $0,_scoplp,0b ! 369: movl $1,_ercode /* error code data miscompare */ ! 370: movl 12(sp),_actual /* actual data */ ! 371: movl $5,_expected /* expected data */ ! 372: jmp *badrtn ! 373: 1: cmpl 16(sp),$6 ! 374: jeql 1f ! 375: bbs $0,_scoplp,0b ! 376: movl $1,_ercode /* error code data miscompare */ ! 377: movl 16(sp),_actual /* actual data */ ! 378: movl $6,_expected /* expected data */ ! 379: jmp *badrtn ! 380: 1: cmpl 20(sp),$7 ! 381: jeql 1f ! 382: bbs $0,_scoplp,0b ! 383: movl $1,_ercode /* error code data miscompare */ ! 384: movl 20(sp),_actual /* actual data */ ! 385: movl $7,_expected /* expected data */ ! 386: jmp *badrtn ! 387: 1: cmpl 24(sp),$0x8 ! 388: jeql 1f ! 389: bbs $0,_scoplp,0b ! 390: movl $1,_ercode /* error code data miscompare */ ! 391: movl 24(sp),_actual /* actual data */ ! 392: movl $8,_expected /* expected data */ ! 393: jmp *badrtn ! 394: 1: cmpl 28(sp),$0x9 ! 395: jeql 1f ! 396: bbs $0,_scoplp,0b ! 397: movl $1,_ercode /* error code data miscompare */ ! 398: movl 28(sp),_actual /* actual data */ ! 399: movl $9,_expected /* expected data */ ! 400: jmp *badrtn ! 401: 1: cmpl 32(sp),$0xa ! 402: jeql 1f ! 403: bbs $0,_scoplp,0b ! 404: movl $1,_ercode /* error code data miscompare */ ! 405: movl 32(sp),_actual /* actual data */ ! 406: movl $0xa,_expected /* expected data */ ! 407: jmp *badrtn ! 408: 1: cmpl 36(sp),$0xb ! 409: jeql 1f ! 410: bbs $0,_scoplp,0b ! 411: movl $1,_ercode /* error code data miscompare */ ! 412: movl 36(sp),_actual /* actual data */ ! 413: movl $0xb,_expected /* expected data */ ! 414: jmp *badrtn ! 415: 1: cmpl 40(sp),$0xc ! 416: jeql 1f ! 417: bbs $0,_scoplp,0b ! 418: movl $1,_ercode /* error code data miscompare */ ! 419: movl 40(sp),_actual /* actual data */ ! 420: movl $0xc,_expected /* expected data */ ! 421: jmp *badrtn ! 422: ! 423: /* all checked out */ ! 424: 1: movl $0,r2 /* zero out r2 - r12 */ ! 425: movl r2,r3 ! 426: movl r2,r4 ! 427: movl r2,r5 ! 428: movl r2,r6 ! 429: movl r2,r7 ! 430: movl r2,r8 ! 431: movl r2,r9 ! 432: movl r2,r10 ! 433: movl r2,r11 ! 434: movl r2,r12 ! 435: bicpsw $(N|Z|V|C) /* clear all flags */ ! 436: ret /* TESTING RET ..... */ ! 437: bbs $0,_scoplp,0b ! 438: movl $3,_ercode /* error code operand was modified did not ret*/ ! 439: jmp *badrtn ! 440: ! 441: ! 442: /* PROCEDURE 2 */ ! 443: .align 2 ! 444: proc2: ! 445: .word 0 /* entry mask */ ! 446: jgeq error4 /* error if n,v flag clear */ ! 447: jvc error4 ! 448: jeql error4 /* error if z,c flag set */ ! 449: jcs error4 ! 450: jmp 1f ! 451: error4: movpsl _actual /* actal psl MAYBE it is incorrect */ ! 452: bbs $0,_scoplp,0b ! 453: movl $2,_ercode /* error code flag failure */ ! 454: jmp *badrtn ! 455: 1: movab (r14),astk ! 456: cmpl astk,estk /* check if sp get decrement */ ! 457: jeql 1f ! 458: bbs $0,_scoplp,0b ! 459: movl $1,_ercode /* error code data miscompare */ ! 460: movl astk,_actual /* actual data */ ! 461: movl estk,_expected /* expected data */ ! 462: jmp *badrtn ! 463: 1: cmpl fp,efp /* check if fp get decrement properly */ ! 464: jeql 1f ! 465: bbs $0,_scoplp,0b ! 466: movl $1,_ercode /* error code data miscompare */ ! 467: movl fp,_actual /* actual data */ ! 468: movl efp,_expected /* expected data */ ! 469: jmp *badrtn ! 470: 1: cmpl (fp),bfp /* check previous fp saved on stack */ ! 471: jeql 1f ! 472: bbs $0,_scoplp,0b ! 473: movl $1,_ercode /* error code data miscompare */ ! 474: movl (fp),_actual /* actual data */ ! 475: movl bfp,_expected /* expected data */ ! 476: jmp *badrtn ! 477: ! 478: 1: movl fp,temp0 ! 479: subl2 $4,temp0 ! 480: movl *(temp0),temp0 /* get mask/argument longword from stack */ ! 481: movl $MASK2,temp1 ! 482: shll $16,temp1,temp1 ! 483: addl2 $(4*NOARG2+4),temp1 ! 484: 1: cmpl temp0,temp1 /* check mask/argnum longword */ ! 485: jeql 1f ! 486: bbs $0,_scoplp,0b ! 487: movl $1,_ercode /* error code data miscompare */ ! 488: movl temp0,_actual /* actual data */ ! 489: movl temp1,_expected /* expected data */ ! 490: jmp *badrtn ! 491: cmpl -8(fp),prevpc2 /* check saved PC on the stack */ ! 492: jeql 1f ! 493: bbs $0,_scoplp,0b ! 494: movl $1,_ercode /* error code data miscompare */ ! 495: movl -8(fp),_actual /* actual data */ ! 496: movl prevpc2,_expected /* expected data */ ! 497: jmp *badrtn ! 498: ! 499: 1: cmpl (sp),$3 /* check saved r3,5,7,9,11 saved on stack */ ! 500: jeql 1f ! 501: bbs $0,_scoplp,0b ! 502: movl $1,_ercode /* error code data miscompare */ ! 503: movl (sp),_actual /* actual data */ ! 504: movl $0x3,_expected /* expected data */ ! 505: jmp *badrtn ! 506: 1: cmpl 4(sp),$5 ! 507: jeql 1f ! 508: bbs $0,_scoplp,0b ! 509: movl $1,_ercode /* error code data miscompare */ ! 510: movl 4(sp),_actual /* actual data */ ! 511: movl $0x5,_expected /* expected data */ ! 512: jmp *badrtn ! 513: 1: cmpl 8(sp),$7 ! 514: jeql 1f ! 515: bbs $0,_scoplp,0b ! 516: movl $1,_ercode /* error code data miscompare */ ! 517: movl 8(sp),_actual /* actual data */ ! 518: movl $0x7,_expected /* expected data */ ! 519: jmp *badrtn ! 520: 1: cmpl 12(sp),$9 ! 521: jeql 1f ! 522: bbs $0,_scoplp,0b ! 523: movl $1,_ercode /* error code data miscompare */ ! 524: movl 12(sp),_actual /* actual data */ ! 525: movl $0x9,_expected /* expected data */ ! 526: jmp *badrtn ! 527: 1: cmpl 16(sp),$0xb ! 528: jeql 1f ! 529: bbs $0,_scoplp,0b ! 530: movl $1,_ercode /* error code data miscompare */ ! 531: movl 16(sp),_actual /* actual data */ ! 532: movl $0xb,_expected /* expected data */ ! 533: jmp *badrtn ! 534: /* all checked out */ ! 535: 1: movl $0,r3 /* zero out r3,5,7,9,11 */ ! 536: movl $0,r5 ! 537: movl $0,r7 ! 538: movl $0,r9 ! 539: movl $0,r11 ! 540: bispsw $(Z|C) /* set z,c flags */ ! 541: bicpsw $(N|V) /* clear n,v flags */ ! 542: ret /* TESTING RET */ ! 543:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.