|
|
Power 6/32 Unix version 1.2b
/* BBC (branch on bit clear) test */ /* */ /*Test name = bbc */ /*Description = */ /* This test checks 'bbc' instruction as follows: */ /* (1) forward/backward branch on bit set conditon */ /* (2) no branch on bit off condition */ /* (3) no effect on condition codes */ /* */ /* */ /* */ /* constants */ /* */ .set P1,0x80808101 /*bits 0,8,15,23,31 ON*/ .set P2,0x7f7f7efe /*same bits OFF */ .set BIT0,0 .set BIT8,8 .set BIT15,15 .set BIT23,23 .set BIT31,31 /* */ /* 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,0x003f .globl _bbc _bbc: callf $4,_setjmp /* save context for error return */ movab _bbc,_stpc /* save address of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT0,_opr /* first operand */ movl $P2,_opr + 4 /* second operand */ movl $0,_actual /* no data for this test it is zero */ movl $0,_expected /* no data for this test it is zero */ 0: movl $P2,r0 /*bits 0,8,15,23,31 OFF */ bicpsw $PSWMASK bispsw $(N|Z|V|C) /*these flags ON */ bbs $BIT0,r0,erc0 /*should not branch as bit 0 is OFF data reg*/ bbc $BIT0,r0,fs0 /*branch forward on bit clear data reg */ movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure bad jump action */ jmp *badrtn /* no actual or expected data */ bs0: bbc $BIT0,r0,flgs0 /*branch to flag test */ jmp error1 bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 erc0: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fs0: bbc $BIT0,r0,bs0 /*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 flgs0: jneq errs1 /*Z != 1 - error */ jlss errs1 /*N != 0 - error */ jvs errs1 /*V != 0 - error */ jcc errs1 /*C != 1 - error */ jmp bn2 /* no errors - continue */ errs1: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn bn2: bbs $0,_force_lp,0b /* if set loop on last subtest */ b2: callf $4,_setjmp /* save context for error return */ movab b2,_stpc /* save address of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT31,_opr /* first operand */ movl $P2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,r0 /*bits 0,8,15,23,31 OFF */ movl $BIT31,r6 bicpsw $PSWMASK bbs r6,r0,erc31 /*should not branch as bit 31 is OFF reg reg */ bbc r6,r0,fs31 /*branch forward on bit clear reg reg */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bs31: bbc $BIT31,r0,flgc31 /*branch to flag test */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 erc31: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fs31: bbc $BIT31,r0,bs31 /*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 flgc31: jneq errs2 /*Z != 1 - error */ jlss errs2 /*N != 0 - error */ jvs errs2 /*V != 0 - error */ jcc errs2 /*C != 1 - error */ jmp bn3 /* no errors - continue */ errs2: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn bn3: bbs $0,_force_lp,0b /* if set loop on last subtest */ b3: callf $4,_setjmp /* save context for error return */ movab b3,_stpc /* save address of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT8,_opr /* first operand */ movl $P2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,tloc /*bits 0,8,15,23,31 OFF */ bbs $BIT8,tloc,erc8 /* should not branch as bit 8 is off data mem*/ bbc $BIT8,tloc,fs8 /*branch forward on bit clear data mem */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bs8: bbc $BIT8,r0,s15 /*next test */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 erc8: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fs8: bbc $BIT8,r0,bs8 /*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 s15: bbs $0,_force_lp,0b /* if set loop on last subtest */ b4: callf $4,_setjmp /* save context for error return */ movab b4,_stpc /* save address of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT15,_opr /* first operand */ movl $P2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,tloc /*bits 0,8,15,23,31 OFF */ movl $BIT15,r0 bbs r0,tloc,erc15 /*should not branch as bit 15 is OFF reg mem*/ bbc r0,tloc,bs15 bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bs15: bbc $BIT15,r0,s23 /*next test */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 erc15: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fs15: bbc $BIT15,r0,bs15 /*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 s23: bbs $0,_force_lp,0b /* if set loop on last subtest */ b5: callf $4,_setjmp /* save context for error return */ movab b5,_stpc /* save address of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT23,_opr /* first operand */ movl $P2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,r0 /*bits 0,8,15,23,31 OFF */ bbs $BIT23,r0,erc23 /*should not branch as bit 23 is OFF */ bbc $BIT23,r0,fs23 /*branch forward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bs23: bbc $BIT23,r0,sm0 /*next test */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 erc23: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fs23: bbc $BIT23,r0,bs23 /*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 /* */ /* now use memory location(tloc) instead of register */ /* */ sm0: bbs $0,_force_lp,0b /* if set loop on last subtest */ b6: callf $4,_setjmp /* save context for error return */ movab b6,_stpc /* save address of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT0,_opr /* first operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,tloc /*bits 0,8,15,23,31 OFF */ bicpsw $PSWMASK bispsw $(N|Z|V|C) /*these flags ON */ bbs $BIT0,tloc,ercm0/*should not branch as bit 0 is OFF */ bbc $BIT0,tloc,fsm0 /*branch forward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bsm0: bbc $BIT0,tloc,flgsm0 /*branch to flag test */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 ercm0: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fsm0: bbc $BIT0,tloc,bsm0 /*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 flgsm0: jneq errs3 /*Z changed - error */ jlss errs3 /*N changed - error */ jvs errs3 /*V changed - error */ jcc errs3 /*C changed - error */ jmp bn7 /* no errors - continue */ errs3: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn bn7: bbs $0,_force_lp,0b /* if set loop on last subtest */ b7: callf $4,_setjmp /* save context for error return */ movab b7,_stpc /* save address of subtest */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT31,_opr /* first operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,tloc /*bits 0,8,15,23,31 OFF */ bicpsw $PSWMASK bbs $BIT31,tloc,ercm31 /*should not branch as bit 31 is OFF */ bbc $BIT31,tloc,fsm31 /*branch forward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bsm31: bbc $BIT31,tloc,flgcm31/*branch to flag test */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 ercm31: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fsm31: bbc $BIT31,tloc,bsm31 /*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 flgcm31: jneq errs4 /*Z changed - error */ jlss errs4 /*N changed - error */ jvs errs4 /*V changed - error */ jcc errs4 /*C changed - error */ jmp bn8 /* no errors - continue */ errs4: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn bn8: bbs $0,_force_lp,0b /* if set loop on last subtest */ b8: callf $4,_setjmp /* save context for error return */ movab b8,_stpc /* save address of subtest */ movl $8,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT8,_opr /* first operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,tloc /*bits 0,8,15,23,31 OFF */ bbs $BIT8,tloc,ercm8 /*should not branch as bit 8 is OFF */ bbc $BIT8,tloc,fsm8 /*branch forward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bsm8: bbc $BIT8,tloc,sm15 /*next test */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 ercm8: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fsm8: bbc $BIT8,tloc,bsm8 /*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 sm15: bbs $0,_force_lp,0b /* if set loop on last subtest */ b9: callf $4,_setjmp /* save context for error return */ movab b9,_stpc /* save address of subtest */ movl $9,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT15,_opr /* first operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,tloc /*bits 0,8,15,23,31 OFF */ bbs $BIT15,tloc,ercm15/*should not branch as bit 15 is OFF */ bbc $BIT15,tloc,fsm15/*branch forward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bsm15: bbc $BIT15,tloc,sm23/*next test */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 ercm15: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fsm15: bbc $BIT15,tloc,bsm15/*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 sm23: bbs $0,_force_lp,0b /* if set loop on last subtest */ b10: callf $4,_setjmp /* save context for error return */ movab b10,_stpc /* save address of subtest */ movl $0xa,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $BIT23,_opr /* first operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $P2,tloc /*bits 0,8,15,23,31 OFF */ bbs $BIT23,tloc,ercm23 /*should not branch as bit 23 is OFF */ bbc $BIT23,tloc,fsm23 /*branch forward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 bsm23: bbc $BIT23,tloc,last bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 ercm23: bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 .space 110 /*dangerous area - don't come in */ fsm23: bbc $BIT23,tloc,bsm23/*branch backward on bit clear */ bbs $0,_scoplp,0b /* if set loop on error */ jmp error1 last: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return error1: movl $1,_ercode /* error code data miscompare bad branch action */ jmp *badrtn /* no actual or expected data */ /* */ /* Variables */ /* */ .align 2 tloc: .space 4 /* End of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.