|
|
Power 6/32 Unix version 1.2b
/* AOBLSS istruction test */ /* Privilege registers */ .set IPL,8 .set MAPEN,9 .set KSP,19 /* PSL fields */ .set IV,32 .set T,16 .set N,8 .set Z,4 .set V,2 .set C,1 /* constants */ .set DISABLE,0 .set ENABLE,1 .set HIGH,31 /* highest interrupt priority */ .set LIMIT,0xffffff .globl _aoblss _aoblss: callf $4,_setjmp /* save context for error return */ movab _aoblss,_stpc /* save address of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $-1,_opr /* first operand */ movl $-3,_opr + 4 /* second operand */ 0: bicpsw $(IV|T) /* disable exceptions */ movl $-1,limit /* set limit = -1 */ movl $-3,index /* set index = -3 */ bispsw $(Z|V|C) /* set z,v,c flags */ bicpsw $N /* clear n flag */ aoblss limit,index,loop0 /* data memory entry point */ movl $1,_ercode /* error code data miscompare did not branch */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl index,_actual /* actual data */ movl $-2,_expected /* expected data */ jmp *badrtn error1: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn error2: movl $3,_ercode /* error code operand was modified */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl index,_actual /* actual data */ movl $-2,_expected /* expected data */ jmp *badrtn .space 100 /* reserve 100 bytes */ loop0: jlss error1 jcc error1 jvs error1 jeql error1 cmpl $-2,index /* check index value */ jneq error2 bicpsw $Z cmpl $-1,limit /* make sure limit unchanged */ jneq error2 /* INDEX = LIMIT */ bbs $0,_force_lp,0b /* if set loop on last subtest */ a2: callf $4,_setjmp /* save context for error return */ movab a2,_stpc /* save address of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $0,_opr /* first operand */ movl $-1,_opr + 4 /* second operand */ 0: movl $0,r3 /* set limit in r3 = 0 */ movl $-1,r4 /* set index = -1 */ bispsw $(N|V|C) /* set n,v,c flags */ bicpsw $Z /* clear z flag */ aoblss r3,r4,loop1 /* register register entry point */ jneq error3 jcs error3 jlss error3 jvs error3 bicpsw $Z cmpl $0,r4 /* check index value */ jneq error4 jmp here .space 90 /* reserve 100 bytes */ loop1: movl $1,_ercode /* error code data miscompare did not branch */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r4,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn error3: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn error4: movl $3,_ercode /* error code operand was modified */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r4,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* INDEX > LIMIT */ here: bbs $0,_force_lp,0b /* if set loop on last subtest */ a3: callf $4,_setjmp /* save context for error return */ movab a3,_stpc /* save address of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $-1,_opr /* first operand */ movl $-1,_opr + 4 /* second operand */ 0: movl $-1,r3 /* set limit in r3 = -1 */ movl $-1,index /* set index = -1 */ bispsw $(N|Z|V|C) /* set all flags */ aoblss r3,index,loop2 /* regiser to memory entry point */ jgeq error5 jvs error5 jeql error5 jcs error5 cmpl $0,index /* check index value */ jneq error6 jmp nxt .space 90 /* reserve 100 bytes */ loop2: movl $1,_ercode /* error code data miscompare did not branch */ 1: bbs $0,_scoplp,0b /* if set scope loop on error */ movl index,_actual /* actual data */ movl $-0,_expected /* expected data */ jmp *badrtn error5: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn error6: movl $3,_ercode /* error code operand was modified */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl index,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* CHECK C FLAG */ nxt: bbs $0,_force_lp,0b /* if set loop on last subtest */ a4: callf $4,_setjmp /* save context for error return */ movab a4,_stpc /* save address of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $5,_opr /* first operand */ movl $0x7fffffff,_opr + 4 /* second operand */ 0: movl $5,limit /* set limit in limit = 5 */ movl $0x7fffffff,r4 /* set index to max. positive no */ bispsw $(Z|N|C) /* set n,z,c flags */ bicpsw $V /* clear n flags */ aoblss limit,r4,loop3 /* memory to register entry point */ jvs error7 jeql error7 jgeq error7 jcs error7 cmpl $0x80000000,r4 /* check index value */ jneq error8 bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return .space 100 loop3: movl $1,_ercode /* error code data miscompare did not branch */ 1: bbs $0,_scoplp,0b /* if set scope loop on error */ movl r4,_actual /* actual data */ movl $0x80000000,_expected /* expected data */ jmp *badrtn error7: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn error8: movl $3,_ercode /* error code operand was modified */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r4,_actual /* actual data */ movl $0x80000000,_expected /* expected data */ jmp *badrtn /* test data */ .align 2 limit: .long 0 index: .long 0 add: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.