|
|
Power 6/32 Unix version 1.2b
/* SHRL instruction test */ # R2 = error code # 1 : error in flags # 2 : result incorrect # 3 : operand get modified .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 */ .globl _shrl _shrl: callf $4,_setjmp /* save context for error return */ movab _shrl,_stpc /* save starting address of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $1,_opr /* first operand */ movl $0x55555555,_opr + 4 /* second operand */ 0: bicpsw $(IV|T) /* disable exceptions */ /* */ shftr: /* SHIFT RIGHT LONG FROM MEMORY TO REGISTER */ movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ movl $(0x55555555/2),r12 /* set r12 = 0x2aaaaaaa */ bispsw $(Z|V|N) /* set n,z,v flags */ bicpsw $C shrl $1,srcloc,r11 /* shift right 1 and put in r11 */ jcc error1 /* error if c flag clear */ jlss error1 /* error if n flag still set */ jeql error1 /* error if z flag still set */ jvs error1 /* error if v flag still 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: cmpl r11,r12 /* check result */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r11,_actual /* actual data */ movl r12,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0x55555555,srcloc /* check if source get affected */ jeql s2 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl srcloc,_actual /* actual data */ movl $0x55555555,_expected /* expected data */ jmp *badrtn /* SHIFT RIGHT LONG FROM REGISTER TO MEMORY */ s2: bbs $0,_force_lp,0b /* if set loop on last subtest */ as2: callf $4,_setjmp /* save context for error return */ movab as2,_stpc /* save starting address of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $1,_opr /* first operand */ movl r11,_opr + 4 /* second operand */ 0: movb $1,temp /* set temp = shift count */ bispsw $(Z|V|N) /* set n,z,v flags */ bicpsw $C shrl temp,r11,dstloc /* shift r11 right 1 and put in dstloc */ jcc error2 /* error if c flags clear */ jlss error2 /* error if n flag still set */ jeql error2 /* error if z flag still set */ jvs error2 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: cmpl dstloc,$0x15555555 /* check result */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dstloc,_actual /* actual data */ movl $0x1555555,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r11,r12 /* make sure source unchanged */ jeql s3 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r11,_actual /* actual data */ movl r12,_expected /* expected data */ jmp *badrtn /* SHIFT RIGHT LONG FROM MEMORY TO MEMORY */ s3: bbs $0,_force_lp,0b /* if set loop on last subtest */ as3: callf $4,_setjmp /* save context for error return */ movab as3,_stpc /* save starting address of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl r11,_opr /* first operand */ movl $0xf,_opr + 4 /* second operand */ 0: movl $0xf,srcloc /* set srcloc = 0xf */ movb $4,r11 /* set r11 = shift count */ bispsw $(C|V|N) /* set n,c,v flags */ bicpsw $Z /* clear z flag */ shrl r11,srcloc,srcloc /* shift and put result back in srcloc */ jcc error3 /* error if c flags clear */ jneq error3 /* error if z flag clear */ jlss error3 /* error if n flag still set */ jvs error3 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: cmpl srcloc,$0x0 /* check result */ jeql s4 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl srcloc,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* REGISTER, REGISTER, REGISTER */ s4: bbs $0,_force_lp,0b /* if set loop on last subtest */ as4: callf $4,_setjmp /* save context for error return */ movab as4,_stpc /* save starting address of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $4,_opr /* first operand */ movl $0xf,_opr + 4 /* second operand */ 0: movl $0xf,r12 /* set r12 = 0xf */ movb $4,r11 /* set r11 = shift count */ bispsw $(C|V|N) /* set n,c,v flags */ bicpsw $Z /* clear z flag */ shrl r11,r12,r13 /* shift register to register */ jcc error4 /* error if c flags clear */ jneq error4 /* error if z flag clear */ jlss error4 /* error if n flag still set */ jvs error4 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: cmpl r13,$0x0 /* check result */ jeql s5 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r13,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* REGISTER, IMM. DATA, REGISTER */ s5: bbs $0,_force_lp,0b /* if set loop on last subtest */ as5: callf $4,_setjmp /* save context for error return */ movab as5,_stpc /* save starting address of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $4,_opr /* first operand */ movl $0xf,_opr + 4 /* second operand */ 0: movb $4,r11 /* set r11 = shift count */ bispsw $(C|V|N) /* set n,c,v flags */ bicpsw $Z /* clear z flag */ shrl r11,$0xf,r13 /* shift imm. data to register */ jcc error5 /* error if c flags clear */ jneq error5 /* error if z flag clear */ jlss error5 /* error if n flag still set */ jvs error5 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: cmpl r13,$0x0 /* check result */ jeql s6 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r13,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* SPECIAL CASES */ /* shift count = 0 */ s6: bbs $0,_force_lp,0b /* if set loop on last subtest */ as6: callf $4,_setjmp /* save context for error return */ movab as6,_stpc /* save starting address of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $4,_opr /* first operand */ movl $0xf,_opr + 4 /* second operand */ 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ bispsw $(C|V|N) /* set n,c,v flags */ bicpsw $Z /* clear z flag */ shrl $0,srcloc,r11 /* shift right 0 and put in r11 */ jlss error6 /* error if n flag still set */ jeql error6 /* error if z flag still set */ jvs error6 /* error if v flag still set */ jcc error6 /* error if c flag clear */ jmp 1f error6: 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: cmpl srcloc,r11 /* check result */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r11,_actual /* actual data */ movl srcloc,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0x55555555,srcloc /* check if source get affected */ jeql s7 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl srcloc,_actual /* actual data */ movl $0x55555555,_expected /* expected data */ jmp *badrtn /* shift count > 32 */ s7: bbs $0,_force_lp,0b /* if set loop on last subtest */ as7: callf $4,_setjmp /* save context for error return */ movab as7,_stpc /* save starting address of subtest */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $33,_opr /* first operand */ movl r11,_opr + 4 /* second operand */ 0: movb $33,temp /* set shift count = 33 */ bispsw $(C|V|N) /* set n,z,v flags */ bicpsw $Z /* clear z flag */ shll temp,r11,r13 /* shift r11 left 33 and put in r13 */ jneq error7 /* error if z flag not set */ jlss error7 /* error if n flag still set */ jvs error7 jcc error7 /* error if c flags clear */ jmp 1f error7: 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: cmpl r13,$0 /* check result */ 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 $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r11,$0x55555555 /* make sure source unchanged */ jeql s8 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r11,_actual /* actual data */ movl $0x55555555,_expected /* expected data */ jmp *badrtn /* check overflow flag */ s8: bbs $0,_force_lp,0b /* if set loop on last subtest */ as8: callf $4,_setjmp /* save context for error return */ movab as8,_stpc /* save starting address of subtest */ movl $8,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $8,_opr /* first operand */ movl $0xffffffff,_opr + 4 /* second operand */ 0: movb $8,r3 /* set r3 = shift count */ movl $0xffffffff,srcloc /* set srcloc = 0xffffffff */ bispsw $(Z|C|N) /* set n,z,c flags */ bicpsw $V /* clear v flag */ shrl r3,srcloc,srcloc /* shift right 8 and put in srcloc */ jcc error8 /* error if c flag not set */ jvs error8 /* error if v flag still set */ jlss error8 /* error if n flag still set */ jeql error8 /* error if z flag still set */ jmp 1f error8: 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: cmpl srcloc,$0xffffff /* check result */ jeql aldn bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl srcloc,_actual /* actual data */ movl $0xffffff,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* test data */ .align 2 srcloc: .long 0 dstloc: .long 0 temp: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.