|
|
Power 6/32 Unix version 1.2b
/* BBSSI (branch on bit set & set interlocked) test */ /* */ /* This test checks 'bbssi' instruction as follows: */ /* (1) forward/backward branch on bit set conditon */ /* (2) no branch on bit off condition & bit is set */ /* (3) no effect on condition codes */ /* */ /* */ /* Syst.s - Constants */ /* */ .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 T,16 .set IV,32 .set FU,64 .set DV,128 .set PSWMASK,0xf .globl _bbssi _bbssi: callf $4,_setjmp /* save context for error return */ movab _bbssi,_stpc /* save subtest program counter */ movl $1,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0xfffffffe,_opr /* first operand */ 0: movl $0xfffffffe,r3 /* All bits are set except bit 0 */ bicpsw $PSWMASK bispsw $(V|Z|C) /*these flags ON */ bbssi $0,r3,erc0 /*should not branch as bit 0 is OFF */ jneq errorc /*Z changed - error */ jlss errorc /*N changed - error */ jvc errorc /*V changed - error */ jcc errorc /*C changed - error */ cmpl $0xffffffff,r3 /*check that bit is set */ jeql nxt1 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $0xffffffff,_expected /* expected */ jmp *badrtn /*error - bit did not get set */ erc0: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare*/ movl r3,_actual /* actual data */ movl $0xffffffff,_expected /* expected */ jmp *badrtn /*error - branch taken with bit off; */ errorc: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ movl r3,_actual /* actual data */ movl $0xffffffff,_expected /* expected */ jmp *badrtn /*error - error in flags */ .space 12 /*dangerous area - don't come in */ nxt1: bbs $0,_force_lp,0 /* if set loop on last subtest */ nxt: callf $4,_setjmp /* save context for error return */ movab nxt,_stpc /* save subtest program counter */ movl $2,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $1,_opr /* first operand */ 0: movl $1,r3 /* All bit off except bit 0 */ bispsw $(Z|N|V|C) /*these flags ON */ bbssi $0,r3,nxt2 /*now branch forward as bit in ON */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r3,_actual /* actual data */ movl $1,_expected /* expected */ jmp *badrtn /*error - did not branch with bit set; */ .space 400 nxt2: movl $3,r1 /* subtest number */ cmpl $1,r3 /* Check if bit is set */ jeql nxt3 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $1,_expected /* expected */ jmp *badrtn /*error - bit did not get set */ nxt3: bbs $0,_force_lp,0 /* if set loop on last subtest */ nx: callf $4,_setjmp /* save context for error return */ movab nx,_stpc /* save subtest program counter */ movl $3,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x7fffffff,_opr /* first operand */ 0: movl $0x7fffffff,r3 /* All bits are set except bit 31 */ bicpsw $PSWMASK bispsw $(V|N|C) /*these flags ON */ bbssi $31,r3,erc1 /*should not branch as bit 31 is OFF */ jeql errord /*Z changed - error */ jgeq errord /*N changed - error */ jvc errord /*V changed - error */ jcc errord /*C changed - error */ cmpl $0xffffffff,r3 /*check that bit is set */ jeql nxt4 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $0x7fffffff,_expected /* expected */ jmp *badrtn /*error - bit did not get set */ erc1: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r3,_actual /* actual data */ movl $0x7fffffff,_expected /* expected */ jmp *badrtn /*error - branch taken with bit off; */ errord: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ movl r3,_actual /* actual data */ movl $0x7fffffff,_expected /* expected */ jmp *badrtn /*error - error in flags */ nxt4: bbs $0,_force_lp,0 /* if set loop on last subtest */ n: callf $4,_setjmp /* save context for error return */ movab n,_stpc /* save subtest program counter */ movl $4,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x80000000,_opr /* first operand */ 0: movl $0x80000000,r3 /* All bit off except bit 31 */ bispsw $(Z|N|V|C) /*these flags ON */ bbssi $31,r3,nxt5 /*now branch forward as bit in ON */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand misompare */ movl r3,_actual /* actual data */ movl $0x80000000,_expected /* expected */ jmp *badrtn /*error - did not branch with bit set; */ .space 400 nxt5: cmpl $0x80000000,r3 /* Check if bit still set ? */ jeql nxt6 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $0x80000000,_expected /* expected */ jmp *badrtn /*error - bit did not get set */ /* */ /* Now use memory location (tloc) instead of register */ /* */ nxt6: bbs $0,_force_lp,0 /* if set loop on last subtest */ txn: callf $4,_setjmp /* save context for error return */ movab txn,_stpc /* save subtest program counter */ movl $5,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0xfffffffe,_opr /* first operand */ 0: movl $0xfffffffe,tloc /* All bits are set except bit 0 */ bicpsw $PSWMASK bispsw $(V|Z|C) /*these flags ON */ bbssi $0,tloc,erc2 /*should not branch as bit 0 is OFF */ jneq errore /*Z changed - error */ jlss errore /*N changed - error */ jvc errore /*V changed - error */ jcc errore /*C changed - error */ cmpl $0xffffffff,tloc /* Check that bit is set */ jeql nxt7 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl tloc,_actual /* actual data */ movl $0xffffffff,_expected /* expected */ jmp *badrtn /*error - bit did not get set */ erc2: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl tloc,_actual /* actual data */ movl $0xffffffff,_expected /* expected */ jmp *badrtn /*error - branch taken with bit off; */ errore: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error flag miscompare */ movl tloc,_actual /* actual data */ movl $0xffffffff,_expected /* expected */ jmp *badrtn /*error - error in flags */ nxt7: bbs $0,_force_lp,0 /* if set loop on last subtest */ tx: callf $4,_setjmp /* save context for error return */ movab tx,_stpc /* save subtest program counter */ movl $6,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $1,_opr /* first operand */ 0: movl $1,tloc /* All bit off except bit 0 */ bbssi $0,tloc,nxt8 /*now branch forward as bit in ON */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl tloc,_actual /* actual data */ movl $1,_expected /* expected */ jmp *badrtn /*error - did not branch with bit set; */ .space 400 nxt8: cmpl $1,tloc /* Check if bit is set */ jeql nxt9 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl tloc,_actual /* actual data */ movl $1,_expected /* expected */ jmp *badrtn /*error - bit did not get set */ nxt9: bbs $0,_force_lp,0 /* if set loop on last subtest */ tx9: callf $4,_setjmp /* save context for error return */ movab tx9,_stpc /* save subtest program counter */ movl $7,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x7fffffff,_opr /* first operand */ 0: movl $0x7fffffff,tloc /* All bits are set except bit 31 */ bicpsw $PSWMASK bispsw $(V|N|C) /*these flags ON */ bbssi $31,tloc,erc3 /*should not branch as bit 31 is OFF */ jeql errorf /*Z changed - error */ jgeq errorf /*N changed - error */ jvc errorf /*V changed - error */ jcc errorf /*C changed - error */ cmpl $0xffffffff,tloc /* Check that bit is set */ jeql nxt10 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl tloc,_actual /* actual data */ movl $0xffffffff,_expected /* expected */ jmp *badrtn /*error - bit did not get set */ erc3: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl tloc,_actual /* actual data */ movl $0x7ffffffff,_expected /* expected */ jmp *badrtn /*error - branch taken with bit off; */ errorf: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error flag miscompare */ movl tloc,_actual /* actual data */ movl $0xffffffff,_expected /* expected */ jmp *badrtn /*error - error in flags */ nxt10: bbs $0,_force_lp,0 /* if set loop on last subtest */ tx10: callf $4,_setjmp /* save context for error return */ movab tx10,_stpc /* save subtest program counter */ movl $8,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x8000000,_opr /* first operand */ 0: movl $0x80000000,tloc /* All bit off except bit 31 */ bbssi $31,tloc,nxt11 /*now branch forward as bit in ON */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl tloc,_actual /* actual data */ movl $8000000,_expected /* expected */ jmp *badrtn /*error - did not branch with bit set; */ .space 400 nxt11: movl $0xd,r1 /* subtest number */ cmpl $0x80000000,tloc /* Check if bit still set ? */ jeql nxt12 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl tloc,_actual /* actual data */ movl $0x80000000,_expected /* expected */ jmp *badrtn /*error - bit did not get set */ nxt12: bbs $0,_force_lp,0 /* if set loop on last subtest */ movl $0,_ercode /* no error all done */ jmp *return /*good , goto monitor */ /* */ /* Variables */ /* */ .align 2 tloc: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.