|
|
Power 6/32 Unix version 1.2b
/* TESTB (test byte) test */ /*Test name = tstb */ /*Description = */ /* This test checks "tstb" 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_b _tst_b: callf $4,_setjmp /* save context for error return */ movab _tst_b,_stpc /* save address of subtest start */ movl $1,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCB1,_opr /* first operand */ 0: movl $SRCB1,r1 /*r1 = source */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ tstb r1 /*execute "tstb" */ 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 /* if correct continue */ error1: movpsl _actual /* actual = psl incorrect for some reason */ 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 /* save address of subtest start */ movl $2,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCB2,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCB2,r1 /*r1 = source */ bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ tstb r1 /*execute "tstb" */ 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 /* if correct continue */ error2: movpsl _actual /* actual = psl incorrect for some reason */ 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 /* save address of subtest start */ movl $3,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCB3,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCB3,r1 /*r1 = source */ bispsw $(Z|N|V|C) /*turn zero, neg, overflow, & carry ON */ tstb r1 /*execute "tstb" */ 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 tstbm error3: movpsl _actual /* actual = psl incorrect for some reason */ 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 r1 */ /* */ tstbm: bbs $0,_force_lp,0b /* if set loop on last subtest */ at4: callf $4,_setjmp /* save context for error return */ movab at4,_stpc /* save address of subtest start */ movl $4,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCB1,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCB1,tmloc /*tmloc = source */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ tstb tmloc+3 /*execute "tstb" */ 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 incorrect for some reason */ 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 /* save address of subtest start */ movl $5,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCB2,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCB2,tmloc /*tmloc = source */ bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ tstb tmloc /*execute "tstb" */ 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 incorrect for some reason */ 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 /* save address of subtest start */ movl $6,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $SRCB3,_opr /* first operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRCB3,tmloc /*tmloc = source */ bispsw $(Z|N|V|C) /*turn zero, neg, overflow, & carry ON */ tstb tmloc+3 /*execute "tstb" */ 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 incorrect for some reason */ 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.