|
|
Power 6/32 Unix version 1.2b
/* PUSHW instruction 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 NEGW,0xffff8000 .set MAXNEGW,0x8000ffff .set HIGH,31 /* highest interrupt priority */ .globl _pushwd _pushwd: callf $4,_setjmp /* save context for error return */ movab _pushwd,_stpc /* save starting address of subtest */ movl $1,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl negval,_opr /* first operans */ 0: bicpsw $(IV|T) /* disable exceptions */ pushmw: /* PUSH MEMORY ON STACK */ movab stk,r14 /* initialize stack pointer */ movab stk,r10 bispsw $(Z|V) /* set z,v flags */ bicpsw $(C|N) /* clear c,n flag */ pushw negval /* push negative value on stack */ jgeq error1 /* error if n flag not set */ jcc error1 /* error if c flag not set */ jeql error1 /* error if z flag set */ jvs error1 /* error if v flag set */ jmp 1f error1: movpsl _actual /* actual = psl maybe incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: movab (r14),r13 decl r10 decl r10 decl r10 decl r10 cmpl r13,r10 /* check if stack get decrement */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r13,_actual /* actual data */ movl r10,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $NEGW,(r14) /* check if value get put on stack */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl (r14),_actual /* actual data */ movl $NEGW,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl negval,$MAXNEGW /* check if source get affected */ jeql p2 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl negval,_actual /* actual data */ movl $MAXNEGW,_expected /* expected data */ jmp *badrtn p2: bbs $0,_force_lp,0b /* if set loop on last subtest */ ap2: callf $4,_setjmp /* save context for error return */ movab ap2,_stpc /* save starting address of subtest */ movl $2,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl posval,_opr /* first operans */ 0: bispsw $(Z|V|N) /* set z,v,n flags */ bicpsw $C /* clear c flag */ pushw posval jcc error2 /* error if c flag not set */ jlss error2 /* error if n flag set */ jeql error2 /* error if z flag set */ jvs error2 /* error if v flag set */ jmp 1f error2: movpsl _actual /* actual = psl maybe incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: movab (r14),r13 decl r10 decl r10 decl r10 decl r10 cmpl r13,r10 /* check if stack get decrement */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r13,_actual /* actual data */ movl r10,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl result,(r14) /* check if value get put on stack */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl (r14),_actual /* actual data */ movl result,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl posval,$0x7fffaaaa /* check if source get affected */ jeql pushrw bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code data miscompare */ movl posval,_actual /* actual data */ movl $0x7fffaaaa,_expected /* expected data */ jmp *badrtn pushrw: /* PUSH REGISTER ON STACK */ bbs $0,_force_lp,0b /* if set loop on last subtest */ ap3: callf $4,_setjmp /* save context for error return */ movab ap3,_stpc /* save starting address of subtest */ movl $3,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl tstdat,_opr /* first operans */ 0: movl tstdat,r3 /* move test data to r3 */ bispsw $(Z|V) /* set z,v flags */ bicpsw $(C|N) /* clear n,c flag */ pushw r3 /* push r3 on stack */ jgeq error3 /* error if n flag not set */ jeql error3 /* error if z flag set */ jvs error3 /* error if v flag set */ jcc error3 /* error if c flag not set */ jmp 1f error3: movpsl _actual /* actual = psl maybe incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: movab (r14),r13 decl r10 decl r10 decl r10 decl r10 cmpl r13,r10 /* check if stack get decrement */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r13,_actual /* actual data */ movl r10,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl tstdat,(r14) /* check if value get pushed */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl (r14),_actual /* actual data */ movl tstdat,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r3,tstdat /* make sure source unchanged */ jeql zflag bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r3,_actual /* actual data */ movl tstdat,_expected /* expected data */ jmp *badrtn zflag: /* check z flag */ bbs $0,_force_lp,0b /* if set loop on last subtest */ ap4: callf $4,_setjmp /* save context for error return */ movab ap4,_stpc /* save starting address of subtest */ movl $4,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x0,_opr /* first operans */ 0: movl $0x0,r11 bispsw $(N|V) /* set n,v flags */ bicpsw $(C|Z) /* clear z,c flag */ pushw r11 /* push r11 on stack */ jlss error4 /* error if n flag set */ jvs error4 /* error if v flag set */ jneq error4 /* error if z flag not set */ jcc error4 /* error if c flag not set */ jmp 1f error4: movpsl _actual /* actual = psl maybe incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: movab (r14),r13 decl r10 decl r10 decl r10 decl r10 cmpl r13,r10 /* check if stack get decrement */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r13,_actual /* actual data */ movl r10,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0,(r14) /* compare r14 to 0 */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl (r14),_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0,r11 /* compare source to 0 */ jeql p5 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r11,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn p5: /* check z flag */ bbs $0,_force_lp,0b /* if set loop on last subtest */ ap5: callf $4,_setjmp /* save context for error return */ movab ap5,_stpc /* save starting address of subtest */ movl $5,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x2233,_opr /* first operans */ 0: bispsw $(N|V) /* set n,v flags */ bicpsw $(C|Z) /* clear z,c flag */ pushw $0x2233 /* push literal */ jlss error5 /* error if n flag set */ jvs error5 /* error if v flag set */ jeql error5 /* error if z flag set */ jcc error5 /* error if c flag not set */ jmp 1f error5: movpsl _actual /* actual = psl maybe incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: movab (r14),r13 decl r10 decl r10 decl r10 decl r10 cmpl r13,r10 /* check if stack get decrement */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r13,_actual /* actual data */ movl r10,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0x2233,(r14) /* compare r14 to literal */ jeql aldn bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl (r14),_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* good, return to monitor */ /* test data */ .align 2 .space 40 /* STACK AREA */ stk: .long 0 negval: .long MAXNEGW tstdat: .long 0xffff7bcd posval: .long 0x7fffaaaa result: .long 0x7fff
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.