|
|
Power 6/32 Unix version 1.2b
/* SHAR 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 HIGH,31 /* highest interrupt priority */ /* */ /* SHIFT RIGHT LONG FROM MEMORY TO REGISTER */ .globl _shar _shar: callf $4,_setjmp /* save context for error return */ movab _shar,_stpc /* save subtest address */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ movl $1,_opr /* first operand */ movl $0x55555555,_opr + 4 /* second operand */ 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ movl $(0x55555555>>1),r12 /* set r12 = 0xaaaaaaaa */ bispsw $(V|Z|N) /* set v,z,n flag */ bicpsw $C /* clear c flag */ /* data memory register */ shar $1,srcloc,r11 /* shift left 1 and put in r11 */ jlss error1 /* error if n flag set */ jvs error1 /* error if v flag set */ jeql error1 /* error if z flag set */ jcc error1 /* error if c flag not set */ jmp 1f error1: movpsl _actual /* actual = psl MAYBE it is 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 subtest address */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ movl $1,_opr /* first operand */ movl $0x80000000,_opr + 4 /* second operand */ 0: movl $0x80000000,r11 movb $1,temp /* set temp = shift count */ bispsw $(V|Z) /* set v,z flags */ bicpsw $(N|C) /* clear c,n flag */ /* memory register memory */ shar temp,r11,dstloc /* shift r11 left 1 and put in dstloc */ jgeq error2 /* error if n flag not set */ jcc error2 /* error if c flag not set */ jeql error2 /* error if z flag set */ jvs error2 /* error if v flag set */ jmp 1f error2: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dstloc,$0xc0000000 /* 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 $0xc0000000,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r11,$0x80000000 /* 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 $0x80000000,_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 subtest address */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ movl $0xffffffe4,_opr /* first operand */ movl srcloc,_opr + 4 /* second operand */ 0: movl $0xffffffe4,r11 /* set r11[0:4] = shift count = 4 */ bispsw $(N|V|Z) /* set n,v,z flag */ bicpsw $C /* clear c flag */ /* register memory memory */ shar r11,srcloc,srcloc /* shift and put result back in srcloc */ jlss error3 /* error if n,z,v flag still set */ jeql error3 jvs error3 jcc error3 /* error if c flag not set */ jmp 1f error3: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl srcloc,$0x5555555 /* 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 $0x55555555,_expected /* expected data */ jmp *badrtn /* SPECIAL CASES */ /* shift count = 0 */ 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 subtest address */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ movl $0,_opr /* first operand */ movl $0x55555555,_opr + 4 /* second operand */ 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ movl $-1,r11 bispsw $(N|Z|V) /* set n,z,v flags */ bicpsw $C /* clear C flag */ /* data memory register */ shar $0,srcloc,r11 /* shift left 0 and put in r11 */ jlss error4 /* error if n,z,v flag still set */ jeql error4 jvs error4 jcc error4 /* error if c flag not set */ jmp 1f error4: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $0x55555555,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 $0x55555555,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0x55555555,srcloc /* check if source get affected */ jeql s5 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 = MAX COUNT = 31 */ 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 subtest address */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands */ movl $-1,_opr /* first operand */ movl $-1,_opr + 4 /* second operand */ 0: movb $-1,r11 /* set shift count = 31 */ bispsw $(Z|V) /* set z,v flag */ bicpsw $(N|C) /* clear n,c flag */ shar r11,r11,r11 /* shift r11 left 31 and put back in r11 */ jgeq error5 /* error if n,c flag not set */ jcc error5 jeql error5 /* error if z,v flag set */ jvs error5 jmp 1f error5: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: bicpsw $Z cmpl r11,$0xffffffff /* check result */ jeql aldn bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r11,_actual /* actual data */ movl $0x55555555,_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.