|
|
Power 6/32 Unix version 1.2b
/* TESTW (test word) test */ /*Test name = tstw */ /*Description = */ /* This test checks "tstw" instruction to see that */ /* (1)Z, V, & C flags are set to zero (src < 0) & N = 1 */ /* (2)N, V, & C flags are set to zero (src = 0) & Z = 1 */ /* (3)all the flags are zero (src > 0). */ /* Register 1 (r1) & memory location tmloc(lebel) are used as */ /* src(source). */ /* */ /* Constants definition */ /* */ .set IPL,8 .set HIGH,31 .set ZERO,0 .set ONES,0xffffffff .set N,8 .set Z,4 .set V,2 .set C,1 .set PSWMASK,0x003f .set SRCB1,0xff .set SRCW1,0xffff .set SRCL1,0xffffffff .set SRCB2,0 .set SRCW2,0 .set SRCL2,0 .set SRCB3,1 .set SRCW3,1 .set SRCL3,1 .globl _tst_w _tst_w: callf $4,_setjmp /* save context for error return */ movab _tst_w,_stpc /* starting address of subtest */ movl $1,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCW1,_opr /* first operand */ 0: movl $SRCW1,r3 /*r3 = source */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ tstw r3 /*execute "tstw" */ beql error1 /*error if Z = 1 */ blss error1 /*error if N = 1 */ bvs error1 /*error if V = 1 */ bcc error1 /*error if C = 0 */ jmp t2 error1: movpsl _actual /* actual = psl is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now try src = 0 */ /* */ t2: bbs $0,_force_lp,0b /* if set loop on last subtest */ at2: callf $4,_setjmp /* save context for error return */ movab at2,_stpc /* starting address of subtest */ movl $2,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCW2,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCW2,r3 /*r3 = source */ bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ tstw r3 /*execute "tstw" */ bneq error2 /*error if Z = 0 */ blss error2 /*error if N = 1 */ bvs error2 /*error if V = 1 */ bcc error2 /*error if C = 0 */ jmp t3 error2: movpsl _actual /* actual = psl is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now try src > 0 */ /* */ t3: bbs $0,_force_lp,0b /* if set loop on last subtest */ at3: callf $4,_setjmp /* save context for error return */ movab at3,_stpc /* starting address of subtest */ movl $3,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCW3,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCW3,r3 /*r3 = source */ bispsw $(Z|N|V|C) /*turn zero, neg, overflow, & carry ON */ tstw r3 /*execute "tstw" */ beql error3 /*error if Z = 1 */ blss error3 /*error if N = 1 */ bvs error3 /*error if V = 1 */ bcc error3 /*error if C = 0 */ jmp tstwm error3: movpsl _actual /* actual = psl is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now use memory location(tmloc) instead of r3 */ /* */ tstwm: bbs $0,_force_lp,0b /* if set loop on last subtest */ at4: callf $4,_setjmp /* save context for error return */ movab at4,_stpc /* starting address of subtest */ movl $4,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCW1,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCW1,tmloc /*tmloc = source */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ tstw tmloc+2 /*execute "tstw" */ beql error4 /*error if Z = 1 */ bgeq error4 /*error if N = 0 */ bvs error4 /*error if V = 1 */ bcc error4 /*error if C = 0 */ jmp t5 error4: movpsl _actual /* actual = psl is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now try src = 0 */ /* */ t5: bbs $0,_force_lp,0b /* if set loop on last subtest */ at5: callf $4,_setjmp /* save context for error return */ movab at5,_stpc /* starting address of subtest */ movl $5,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCW2,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ tstw $SRCW2 /*execute "tstw" immediate data */ bneq error5 /*error if Z = 0 */ blss error5 /*error if N = 1 */ bvs error5 /*error if V = 1 */ bcc error5 /*error if C = 0 */ jmp t6 error5: movpsl _actual /* actual = psl is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now try src > 0 */ /* */ t6: bbs $0,_force_lp,0b /* if set loop on last subtest */ at6: callf $4,_setjmp /* save context for error return */ movab at6,_stpc /* starting address of subtest */ movl $6,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCW3,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCW3,tmloc /*tmloc = source */ bispsw $(Z|N|V|C) /*turn zero, neg, overflow, & carry ON */ tstw tmloc+2 /*execute "tstw" */ beql error6 /*error if Z = 1 */ blss error6 /*error if N = 1 */ bvs error6 /*error if V = 1 */ bcc error6 /*error if C = 0 */ jmp aldn error6: movpsl _actual /* actual = psl is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* good, return to monitor */ /* */ /* Variables */ /* */ .align 2 tmloc: .space 4
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.