|
|
Power 6/32 Unix version 1.2b
/* AOBLEQ 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 _aobleq _aobleq: bicpsw $(IV|T) /* disable exceptions */ /* */ addob: /* INDEX < LIMIT */ callf $4,_setjmp /* save context for error return */ movab addob,_stpc /* save subtest address */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ movl $-1,_opr /* first operand */ movl $-3,_opr + 4 /* second operand */ 0: 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 */ aobleq limit,index,loop0 /* memory 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 changed */ 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 subtest address */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ 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 */ aobleq r3,r4,loop1 /* register register entry point */ 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 changed */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r4,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn .space 100 /* reserve 100 bytes */ loop1: jneq error3 jcs error3 jlss error3 jvs error3 cmpl $0,r4 /* check index value */ jneq error4 /* 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 subtest address */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ 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 */ aobleq r3,index,loop2 /* register memory entry point */ jgeq error5 jeql error5 jvs 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 branch */ 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 changed */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl index,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* CHECK V 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 subtest address */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ movl $5,_opr /* first operand */ movl $0x7fffffff,_opr + 4 /* second operand */ 0: movl $5,limit /* set limit in limit = 5 */ movl $0x7fffffff,r4 /* set r4 to max. positive no */ bispsw $(Z|C|N) /* set z,c,n flags */ bicpsw $(V|N) /* clear v flags */ aobleq 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 /* stop test */ .space 100 loop3: movl $1,_ercode /* error code data miscompare did branch */ 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 changed */ 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.