|
|
1.1 ! root 1: ! 2: ! 3: /* ADDA (add address) test */ ! 4: /* */ ! 5: /*Test name = adda */ ! 6: /*Description = */ ! 7: /* This test checks 'adda' instruction as follows: */ ! 8: /*add sum result N Z V C (flags) */ ! 9: /*___ ___ ______ _______________ */ ! 10: /*0x7fffffff 0x7fffffff 0xfffffffe 0 0 1 0 */ ! 11: /*0x80000000 0x80000000 0x00000000 0 1 1 1 */ ! 12: /*0x80000000 0xffffffff 0x7fffffff 0 0 1 1 */ ! 13: /*0x80000001 0x7fffffff 0x00000000 0 1 0 1 */ ! 14: /*0x80000000 0x7fffffff 0xffffffff 1 0 0 0 */ ! 15: /*0xc0000000 0xc0000000 0x80000000 1 0 0 1 */ ! 16: /* Note: the flags should not change. */ ! 17: /* */ ! 18: /* constants definition for 'addx' tests. */ ! 19: /* */ ! 20: ! 21: .set A1B1,0x1111107f/*+127, highest +ve number, byte */ ! 22: .set A1W1,0x11107fff ! 23: .set A1L1,0x7fffffff ! 24: .set A2B1,0x1111107f/* +127 */ ! 25: .set A2W1,0x11107fff ! 26: .set A2L1,A1L1 ! 27: .set RB1,0x111110fe ! 28: .set RW1,0x1110fffe ! 29: .set RL1,0xfffffffe ! 30: .set A1B2,0x11111080/* -128 */ ! 31: .set A1W2,0x11108000 ! 32: .set A1L2,0x80000000 ! 33: .set A2B2,0x11111080/* -128 */ ! 34: .set A2W2,0x11118000 ! 35: .set A2L2,0X80000000 ! 36: .set RB2,0x11111000/* 0 */ ! 37: .set RW2,0x11100000 ! 38: .set RL2,0x00000000 ! 39: .set A1B3,0X80 /* -128 */ ! 40: .set A1W3,0x8000 ! 41: .set A1L3,0x80000000 ! 42: .set A2B3,0xff /* -1 */ ! 43: .set A2W3,0xffff ! 44: .set A2L3,0xffffffff ! 45: .set RB3,0x0000007f ! 46: .set RW3,0X00007fff ! 47: .set RL3,0X7fffffff ! 48: .set A1B4,0x81 /* -127 */ ! 49: .set A1W4,0x8001 ! 50: .set A1L4,0x80000001 ! 51: .set A2B4,0x7f /* 127 */ ! 52: .set A2W4,0x7fff ! 53: .set A2L4,0x7fffffff ! 54: .set RB4,0 /* 0 */ ! 55: .set RW4,RB4 ! 56: .set RL4,RB4 ! 57: .set A1B5,A1B3 /* -128 */ ! 58: .set A1W5,A1W3 ! 59: .set A1L5,A1L3 ! 60: .set A2B5,A2B4 /* 127 */ ! 61: .set A2W5,A2W4 ! 62: .set A2L5,A2L4 ! 63: .set RB5,0xff /* -1 */ ! 64: .set RW5,0xffff ! 65: .set RL5,0xffffffff ! 66: .set A1B6,0xc0 /* -64 */ ! 67: .set A1W6,0xc000 ! 68: .set A1L6,0xc0000000 ! 69: .set A2B6,A1B6 /* -64 */ ! 70: .set A2W6,A1W6 ! 71: .set A2L6,A1L6 ! 72: .set RB6,0x00000080 /* -128 */ ! 73: .set RW6,0x00008000 ! 74: .set RL6,0X80000000 ! 75: ! 76: .set INITB,0x11111055/* initialization values for 3 operand */ ! 77: .set INITW,0x11105555 ! 78: .set INITL,0X55555555 ! 79: ! 80: /* */ ! 81: /* Syst.s - Constants */ ! 82: /* */ ! 83: .set IPL,8 ! 84: .set HIGH,31 ! 85: .set ZERO,0 ! 86: .set ONES,0xffffffff ! 87: .set N,8 ! 88: .set Z,4 ! 89: .set V,2 ! 90: .set C,1 ! 91: .set T,16 ! 92: .set IV,32 ! 93: .set FU,64 ! 94: .set DV,128 ! 95: .set PSWMASK,0x003f ! 96: ! 97: .globl _add_a ! 98: _add_a: ! 99: al1: ! 100: callf $4,_setjmp /* save context for error return */ ! 101: movab al1,_stpc /* save subtest program counter */ ! 102: movl $1,_subtst /* save subtest number */ ! 103: movl $2,_no_opr /* number of operands in use */ ! 104: movl $A1L1,_opr /* first operand */ ! 105: movl $A2L1,_opr + 4 /* second operand */ ! 106: 0: ! 107: movl $A1L1,add /*first operand */ ! 108: movl $A2L1,sum /*second operand */ ! 109: bicpsw $PSWMASK /*PSW = 0 */ ! 110: bispsw $(N|Z|C) /* these flags ON */ ! 111: adda add,sum /* try 'adda' instruction mem to mem */ ! 112: bicpsw $Z ! 113: movl $RL1,r4 ! 114: cmpl $RL1,sum /*sum = expected ? */ ! 115: jeql al1r ! 116: bbs $0,_scoplp,0b /* if set loop on error */ ! 117: movl $1,_ercode /* error code data miscompare */ ! 118: movl sum,_actual /* actual data */ ! 119: movl $RL1,_expected /* expected data */ ! 120: jmp *badrtn ! 121: ! 122: ! 123: /* reverse operands mem to reg */ ! 124: ! 125: al1r: ! 126: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 127: aal1r: callf $4,_setjmp /* save context for error return */ ! 128: movab aal1r,_stpc /* save subtest program counter */ ! 129: movl $2,_subtst /* save subtest number */ ! 130: 0: movl $A2L1,add /*first operand */ ! 131: movl $A1L1,r5 /*second operand */ ! 132: bicpsw $PSWMASK /*PSW = 0 */ ! 133: bispsw $(N|Z|C) /* these flags ON */ ! 134: adda add,r5 /* try 'add' instruction mem to reg */ ! 135: jgtr e2 /*error if N = 0 */ ! 136: jneq e2 /*error if Z = 0 */ ! 137: jvs e2 /*error if V = 1 */ ! 138: jcc e2 /*error if C = 0 */ ! 139: bicpsw $Z ! 140: movl $RL1,r4 ! 141: cmpl $RL1,r5 /*sum = expected ? */ ! 142: jeql al2 /* if correct continue */ ! 143: movl $1,_ercode /* error code data miscompare */ ! 144: bbs $0,_scoplp,0b /* if set loop on error */ ! 145: movl $1,_ercode /* error code data miscompare */ ! 146: movl r5,_actual /* actual data */ ! 147: movl $RL1,_expected /* expected data */ ! 148: jmp *badrtn ! 149: e2: movpsl _actual /* actual = psl */ ! 150: bbs $0,_scoplp,0b /* if set loop on error */ ! 151: movl $2,_ercode /* error code flag failure */ ! 152: jmp *badrtn ! 153: ! 154: al2: ! 155: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 156: aal2: callf $4,_setjmp /* save context for error return */ ! 157: movab aal2,_stpc /* save subtest program counter */ ! 158: movl $3,_subtst /* save subtest number */ ! 159: movl $2,_no_opr /* number of operands in use */ ! 160: movl $A1L2,_opr /* first operand */ ! 161: movl $A2L2,_opr + 4 /* second operand */ ! 162: 0: movl $A1L2,r5 /*first operand */ ! 163: movl $A2L2,sum /*second operand */ ! 164: bicpsw $PSWMASK /*PSW = 0 */ ! 165: bispsw $N /* these flags ON */ ! 166: adda r5,sum /* try 'add' instruction reg to memory */ ! 167: jgtr e3 /*error if N = 0 */ ! 168: jeql e3 /*error if Z = 1 */ ! 169: jvs e3 /*error if V = 1 */ ! 170: jcs e3 /*error if C = 1 */ ! 171: bicpsw $Z ! 172: cmpl $RL2,sum /*sum = expected ? */ ! 173: jeql al2r /* if correct continue */ ! 174: movl $1,_ercode /* error code data miscompare */ ! 175: bbs $0,_scoplp,0b /* if set loop on error */ ! 176: movl sum,_actual /* actual data */ ! 177: movl $RL2,_expected /* expected data */ ! 178: jmp *badrtn ! 179: e3: movpsl _actual /* actual = psl */ ! 180: bbs $0,_scoplp,0b /* if set loop on error */ ! 181: movl $2,_ercode /* error code flag failure */ ! 182: jmp *badrtn ! 183: ! 184: /* reverse operands register to register operation */ ! 185: ! 186: al2r: ! 187: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 188: aal2r: callf $4,_setjmp /* save context for error return */ ! 189: movab aal2r,_stpc /* save subtest program counter */ ! 190: movl $4,_subtst /* save subtest number */ ! 191: 0: movl $A2L2,r5 /*first operand */ ! 192: movl $A1L2,r6 /*second operand */ ! 193: bicpsw $PSWMASK /*PSW = 0 */ ! 194: bispsw $N /* these flags ON */ ! 195: adda r5,r6 /* try 'add' instruction */ ! 196: jgtr e4 /*error if N = 0 */ ! 197: jeql e4 /*error if Z = 1 */ ! 198: jvs e4 /*error if V = 1 */ ! 199: jcs e4 /*error if C = 1 */ ! 200: bicpsw $Z ! 201: movl $RL2,r4 ! 202: cmpl $RL2,r6 /*sum = expected ? */ ! 203: jeql al3 /* if correct continue */ ! 204: movl $1,_ercode /* error code data miscompare */ ! 205: bbs $0,_scoplp,0b /* if set loop on error */ ! 206: movl r6,_actual /* actual data */ ! 207: movl $RL2,_expected /* expected data */ ! 208: jmp *badrtn ! 209: e4: movpsl _actual /* actual = psl */ ! 210: bbs $0,_scoplp,0b /* if set loop on error */ ! 211: movl $2,_ercode /* error code flag failure */ ! 212: jmp *badrtn ! 213: ! 214: ! 215: ! 216: al3: ! 217: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 218: aal3: callf $4,_setjmp /* save context for error return */ ! 219: movab aal3,_stpc /* save subtest program counter */ ! 220: movl $5,_subtst /* save subtest number */ ! 221: movl $2,_no_opr /* number of operands in use */ ! 222: movl $A1L3,_opr /* first operand */ ! 223: movl $A2L3,_opr + 4 /* second operand */ ! 224: 0: movl $A1L3,add /*first operand */ ! 225: movl $A2L3,sum /*second operand */ ! 226: bicpsw $PSWMASK /*PSW = 0 */ ! 227: bispsw $(N|Z) /* these flags ON */ ! 228: adda add,sum /* try 'add' instruction */ ! 229: jgtr e5 /*error if N = 0 */ ! 230: jneq e5 /*error if Z = 0 */ ! 231: jvs e5 /*error if V = 1 */ ! 232: jcs e5 /*error if C = 1 */ ! 233: bicpsw $Z ! 234: movl $RL3,r4 ! 235: cmpl r4,sum /*sum = expected ? */ ! 236: jeql al3r /* if correct continue */ ! 237: movl $1,_ercode /* error code data miscompare */ ! 238: bbs $0,_scoplp,0b /* if set loop on error */ ! 239: movl sum,_actual /* actual data */ ! 240: movl $RL3,_expected /* expected data */ ! 241: jmp *badrtn ! 242: e5: movpsl _actual /* actual = psl */ ! 243: bbs $0,_scoplp,0b /* if set loop on error */ ! 244: movl $2,_ercode /* error code flag failure */ ! 245: jmp *badrtn ! 246: ! 247: ! 248: /* reverse operands */ ! 249: ! 250: al3r: ! 251: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 252: aal3r: callf $4,_setjmp /* save context for error return */ ! 253: movab aal3r,_stpc /* save subtest program counter */ ! 254: movl $6,_subtst /* save subtest number */ ! 255: 0: movl $A2L3,add /*first operand */ ! 256: movl $A1L3,sum /*second operand */ ! 257: bicpsw $PSWMASK /*PSW = 0 */ ! 258: bispsw $(N|Z) /* these flags ON */ ! 259: adda add,sum /* try 'add' instruction */ ! 260: jgtr e6 /*error if N = 0 */ ! 261: jneq e6 /*error if Z = 0 */ ! 262: jvs e6 /*error if V = 1 */ ! 263: jcs e6 /*error if C = 1 */ ! 264: bicpsw $Z ! 265: movl $RL3,r4 ! 266: cmpl $RL3,sum /*sum = expected ? */ ! 267: jeql al4 /* if correct continue */ ! 268: movl $1,_ercode /* error code data miscompare */ ! 269: bbs $0,_scoplp,0b /* if set loop on error */ ! 270: movl sum,_actual /* actual data */ ! 271: movl $RL3,_expected /* expected data */ ! 272: jmp *badrtn ! 273: e6: movpsl _actual /* actual = psl */ ! 274: bbs $0,_scoplp,0b /* if set loop on error */ ! 275: movl $2,_ercode /* error code flag failure */ ! 276: jmp *badrtn ! 277: ! 278: al4: ! 279: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 280: aal4: callf $4,_setjmp /* save context for error return */ ! 281: movab aal4,_stpc /* save subtest program counter */ ! 282: movl $7,_subtst /* save subtest number */ ! 283: movl $2,_no_opr /* number of operands in use */ ! 284: movl $A1L4,_opr /* first operand */ ! 285: movl $A2L4,_opr + 4 /* second operand */ ! 286: 0: movl $A1L4,add /*first operand */ ! 287: movl $A2L4,sum /*second operand */ ! 288: bicpsw $PSWMASK /*PSW = 0 */ ! 289: bispsw $(N|V) /* these flags ON */ ! 290: adda add,sum /* try 'add' instruction */ ! 291: jgtr e7 /*error if N = 0 */ ! 292: jeql e7 /*error if Z = 1 */ ! 293: jvc e7 /*error if V = 0 */ ! 294: jcs e7 /*error if C = 1 */ ! 295: bicpsw $Z ! 296: movl $RL4,r4 ! 297: cmpl $RL4,sum /*sum = expected ? */ ! 298: jeql al4r /* if correct continue */ ! 299: movl $1,_ercode /* error code data miscompare */ ! 300: bbs $0,_scoplp,0b /* if set loop on error */ ! 301: movl sum,_actual /* actual data */ ! 302: movl $RL4,_expected /* expected data */ ! 303: jmp *badrtn ! 304: e7: movpsl _actual /* actual = psl */ ! 305: bbs $0,_scoplp,0b /* if set loop on error */ ! 306: movl $2,_ercode /* error code flag failure */ ! 307: jmp *badrtn ! 308: ! 309: ! 310: /* reverse operands */ ! 311: ! 312: al4r: ! 313: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 314: aal4r: callf $4,_setjmp /* save context for error return */ ! 315: movab aal4r,_stpc /* save subtest program counter */ ! 316: movl $8,_subtst /* save subtest number */ ! 317: 0: movl $A2L4,add /*first operand */ ! 318: movl $A1L4,sum /*second operand */ ! 319: bicpsw $PSWMASK /*PSW = 0 */ ! 320: bispsw $(N|V) /* these flags ON */ ! 321: adda add,sum /* try 'add' instruction */ ! 322: jgtr e8 /*error if N = 0 */ ! 323: jeql e8 /*error if Z = 1 */ ! 324: jvc e8 /*error if V = 0 */ ! 325: jcs e8 /*error if C = 1 */ ! 326: bicpsw $Z ! 327: movl $0,r4 ! 328: cmpl r4,sum /*sum = expected ? */ ! 329: jeql al5 /* if correct continue */ ! 330: movl $1,_ercode /* error code data miscompare */ ! 331: bbs $0,_scoplp,0b /* if set loop on error */ ! 332: movl sum,_actual /* actual data */ ! 333: movl $0,_expected /* expected data */ ! 334: jmp *badrtn ! 335: e8: movpsl _actual /* actual = psl */ ! 336: bbs $0,_scoplp,0b /* if set loop on error */ ! 337: movl $2,_ercode /* error code flag failure */ ! 338: jmp *badrtn ! 339: ! 340: ! 341: ! 342: al5: ! 343: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 344: aal5: callf $4,_setjmp /* save context for error return */ ! 345: movab aal5,_stpc /* save subtest program counter */ ! 346: movl $9,_subtst /* save subtest number */ ! 347: movl $2,_no_opr /* number of operands in use */ ! 348: movl $A1L5,_opr /* first operand */ ! 349: movl $A2L5,_opr + 4 /* second operand */ ! 350: 0: movl $A1L5,add /*first operand */ ! 351: movl $A2L5,sum /*second operand */ ! 352: bicpsw $PSWMASK /*PSW = 0 */ ! 353: bispsw $(V|Z|C) /* these flags ON */ ! 354: adda add,sum /* try 'add' instruction */ ! 355: jlss e9 /*error if N = 1 */ ! 356: jneq e9 /*error if Z = 0 */ ! 357: jvc e9 /*error if V = 0 */ ! 358: jcc e9 /*error if C = 0 */ ! 359: bicpsw $Z ! 360: movl $RL5,r4 ! 361: cmpl $RL5,sum /*sum = expected ? */ ! 362: jeql al5r /* if correct continue */ ! 363: movl $1,_ercode /* error code data miscompare */ ! 364: bbs $0,_scoplp,0b /* if set loop on error */ ! 365: movl sum,_actual /* actual data */ ! 366: movl $RL5,_expected /* expected data */ ! 367: jmp *badrtn ! 368: e9: movpsl _actual /* actual = psl */ ! 369: bbs $0,_scoplp,0b /* if set loop on error */ ! 370: movl $2,_ercode /* error code flag failure */ ! 371: jmp *badrtn ! 372: ! 373: ! 374: /* reverse operands */ ! 375: ! 376: al5r: ! 377: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 378: aal5r: callf $4,_setjmp /* save context for error return */ ! 379: movab aal5r,_stpc /* save subtest program counter */ ! 380: movl $0xa,_subtst /* save subtest number */ ! 381: 0: movl $A2L5,add /*first operand */ ! 382: movl $A1L5,sum /*second operand */ ! 383: bicpsw $PSWMASK /*PSW = 0 */ ! 384: bispsw $(V|Z|C) /* these flags ON */ ! 385: adda add,sum /* try 'add' instruction */ ! 386: jlss e10 /*error if N = 1 */ ! 387: jneq e10 /*error if Z = 0 */ ! 388: jvc e10 /*error if V = 0 */ ! 389: jcc e10 /*error if C = 0 */ ! 390: bicpsw $Z ! 391: movl $RL5,r4 ! 392: cmpl r4,sum /*sum = expected ? */ ! 393: jeql al6 /* if correct continue */ ! 394: movl $1,_ercode /* error code data miscompare */ ! 395: 1: bbs $0,_scoplp,0b /* if set loop on error */ ! 396: movl sum,_actual /* actual data */ ! 397: movl $RL5,_expected /* expected data */ ! 398: jmp *badrtn ! 399: e10: movpsl _actual /* actual = psl */ ! 400: bbs $0,_scoplp,0b /* if set loop on error */ ! 401: movl $2,_ercode /* error code flag failure */ ! 402: jmp *badrtn ! 403: ! 404: al6: ! 405: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 406: aal6: callf $4,_setjmp /* save context for error return */ ! 407: movab aal6,_stpc /* save subtest program counter */ ! 408: movl $0xb,_subtst /* save subtest number */ ! 409: movl $2,_no_opr /* number of operands in use */ ! 410: movl $A1L6,_opr /* first operand */ ! 411: movl $A2L6,_opr + 4 /* second operand */ ! 412: 0: movl $A1L6,add /*first operand */ ! 413: movl $A2L6,sum /*second operand */ ! 414: bicpsw $PSWMASK /*PSW = 0 */ ! 415: bispsw $(Z|V) /* these flags ON */ ! 416: adda add,sum /* try 'add' instruction */ ! 417: jlss e11 /*error if N = 1 */ ! 418: jneq e11 /*error if Z = 0 */ ! 419: jvc e11 /*error if V = 0 */ ! 420: jcs e11 /*error if C = 1 */ ! 421: bicpsw $Z ! 422: movl $RL6,r4 ! 423: cmpl $RL6,sum /*sum = expected ? */ ! 424: jeql al6r /* if correct continue */ ! 425: movl $1,_ercode /* error code data miscompare */ ! 426: 1: bbs $0,_scoplp,0b /* if set loop on error */ ! 427: movl sum,_actual /* actual data */ ! 428: movl $RL6,_expected /* expected data */ ! 429: jmp *badrtn ! 430: e11: movpsl _actual /* actual = psl */ ! 431: bbs $0,_scoplp,0b /* if set loop on error */ ! 432: movl $2,_ercode /* error code flag failure */ ! 433: jmp *badrtn ! 434: ! 435: ! 436: /* reverse operands */ ! 437: ! 438: al6r: ! 439: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 440: aal6r: callf $4,_setjmp /* save context for error return */ ! 441: movab aal6r,_stpc /* save subtest program counter */ ! 442: movl $0xc,_subtst /* save subtest number */ ! 443: 0: movl $A2L6,add /*first operand */ ! 444: movl $A1L6,sum /*second operand */ ! 445: bicpsw $PSWMASK /*PSW = 0 */ ! 446: bispsw $(Z|V) /* these flags ON */ ! 447: adda add,sum /* try 'add' instruction */ ! 448: jlss e12 /*error if N = 1 */ ! 449: jneq e12 /*error if Z = 0 */ ! 450: jvc e12 /*error if V = 0 */ ! 451: jcs e12 /*error if C = 1 */ ! 452: bicpsw $Z ! 453: cmpl $RL6,sum /*sum = expected ? */ ! 454: jeql aldn /* if correct continue */ ! 455: movl $1,_ercode /* error code data miscompare */ ! 456: 1: bbs $0,_scoplp,0b /* if set loop on error */ ! 457: movl sum,_actual /* actual data */ ! 458: movl $RL6,_expected /* expected data */ ! 459: jmp *badrtn ! 460: e12: movpsl _actual /* actual = psl */ ! 461: bbs $0,_scoplp,0b /* if set loop on error */ ! 462: movl $2,_ercode /* error code flag failure */ ! 463: jmp *badrtn ! 464: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 465: jmp *return ! 466: ! 467: /* */ ! 468: /* Varialles */ ! 469: /* */ ! 470: .align 2 ! 471: add1: .space 4 ! 472: add2: .space 4 ! 473: sum: .space 4 ! 474: add: .space 4 ! 475: ! 476: /* End of file */ ! 477: ! 478:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.