|
|
Power 6/32 Unix version 1.2b
/* SHRQ 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 */ .globl _shrq _shrq: callf $4,_setjmp /* save context for error return */ movab _shrq,_stpc /* starting address of subtest */ movl $1,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $32,_opr /* first operand */ movl $0,_opr + 4 /* second operand */ movl $0xffffffff,_opr + 8 /* third operand */ 0: bicpsw $(IV|T) /* disable exceptions */ /* */ srq: /* SHIFT RIGHT QUAD FROM MEMORY TO REGISTER */ movl $0,sloc0 /* set sloc0 */ movl $0xffffffff,sloc1 /* set sloc1 = 0xffffffff */ movl $0xffffffff,r4 movl $0xffffffff,r5 bispsw $(V|N|C) /* set n,v,c flags */ bicpsw $Z /* clear z flag */ shrq $32,sloc0,r4 /* shift right 32 and put in r4,r5 */ jneq error1 /* error if z flag not set */ jcc error1 /* error if c flag not set */ jvs error1 /* error if v flag set */ jlss error1 /* error if n 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: bicpsw $Z cmpl r5,$0 /* check result */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r5,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r4,$0 jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0xffffffff,sloc1 /* check if source get affected */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl sloc1,_actual /* actual data */ movl $0xffffffff,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl sloc0,$0 jeql s2 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl sloc0,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* SHIFT RIGHT QUAD 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 /* starting address of subtest */ movl $2,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $30,_opr /* first operand */ movl $0xffffffff,_opr + 4 /* second operand */ movl $0xffffffff,_opr + 8 /* third operand */ 0: movl $0xffffffff,dloc0 /* set dloc0 = dloc1 = 0xffffffff */ movl dloc0,dloc1 movb $30,temp /* set temp = shift count */ bispsw $(N|V|C) /* set n,v,c flags */ bicpsw $Z /* clear z flag */ shrq temp,r4,dloc0 /* shift r4,r5 left 32 and put in dloc */ jneq error2 /* error if z flag not set */ jcc error2 /* error if c flag not set */ jvs error2 /* error if v flag set */ jlss error2 /* error if n 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: cmpl dloc0,$0 /* check result */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dloc0,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl dloc1,dloc0 jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dloc1,_actual /* actual data */ movl dloc0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r4,$0 /* make sure source unchanged */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r4,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r5,$0 jeql s3 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r5,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* SHIFT RIGHT QUAD 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 /* starting address of subtest */ movl $3,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $3,_opr /* first operand */ movl $0x55555555,_opr + 4 /* second operand */ movl $0x55555555,_opr + 8 /* third operand */ 0: movl $0x55555555,sloc0 /* set sloc0 = sloc1 = 0x55555555 */ movl sloc0,sloc1 movb $3,r3 /* set r3 = shift count */ bispsw $(Z|V|C) /* set v,z,c flags */ bicpsw $N shrq r3,sloc0,sloc0 /* shift and put result back in sloc0 */ jlss error3 /* error if n flag still set */ jvs error3 /* error if v flag still set */ jeql error3 /* error if z flag still 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: cmpl sloc0,$0xaaaaaaa /* check result */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl sloc0,_actual /* actual data */ movl $0xaaaaaaaa,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl sloc1,$0xaaaaaaaa jeql s4 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl sloc1,_actual /* actual data */ movl $0xaaaaaaaa,_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 /* starting address of subtest */ movl $4,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $0,_opr /* first operand */ movl $0xfedcba98,_opr + 4 /* second operand */ movl $0x76543210,_opr + 8 /* third operand */ 0: movl $0,r10 /* set r10 = r11 = 0 */ movl r10,r11 movl r11,r6 /* set r6 = shift count */ movl $0xfedcba98,r4 /* set r4 = 0xfedcba98 */ movl $0x76543210,r5 /* set r8 = 0x76543210 */ bispsw $(C|Z|V) /* set c,z,v flags */ bicpsw $N shrq r6,r4,r10 /* shift right 0 and put in r10,r11 */ jgeq error4 /* error if n flag not set */ jcc error4 /* error if c flag not set */ jeql error4 /* error if z flag still set */ jvs error4 /* error if v flag still 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: cmpl $0xfedcba98,r10 /* check result */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r10,_actual /* actual data */ movl $0xfedcba98,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0x76543210,r11 jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r11,_actual /* actual data */ movl $0x76543210,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r4,r10 /* make sure source unchanged */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r4,_actual /* actual data */ movl r10,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r5,r11 jeql s5 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r5,_actual /* actual data */ movl r11,_expected /* expected data */ jmp *badrtn /* shift count = 64 */ s5: bbs $0,_force_lp,0b /* if set loop on last subtest */ as5: callf $4,_setjmp /* save context for error return */ movab as5,_stpc /* starting address of subtest */ movl $5,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $64,_opr /* first operand */ movl $0xfedcba98,_opr + 4 /* second operand */ movl $0x76543210,_opr + 8 /* third operand */ 0: movl $0xffffffff,r4 movl r4,r5 movb $64,temp /* set shift count = 64 */ bispsw $(N|V|C) /* set n,c,v flags */ bicpsw $Z /* clear z flag */ shrq temp,r10,r4 /* shift r10,r11 left 64 and put in r4,r5*/ jneq error5 /* error if z flag not set */ jcc error5 /* error if c flag not set */ jlss error5 /* error if v,n flag 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: bicpsw $Z cmpl r4,$0 /* check result */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r4,r5 jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r5,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r10,$0xfedcba98 /* make sure source unchanged */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r10,_actual /* actual data */ movl $0xfedcba98,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r11,$0x76543210 jeql s6 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r11,_actual /* actual data */ movl $0x76543210,_expected /* expected data */ jmp *badrtn /* SHIFT RIGHT QUAD FROM DATA TO MEMORY */ s6: bbs $0,_force_lp,0b /* if set loop on last subtest */ as6: callf $4,_setjmp /* save context for error return */ movab as6,_stpc /* starting address of subtest */ movl $6,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $32,_opr /* first operand */ movl $0xffffffff,_opr + 4 /* second operand */ movl $0,_opr + 8 /* third operand */ 0: movl $0xffffffff,dloc0 /* set dloc0 = dloc1 = 0xffffffff */ movl dloc0,dloc1 movb $32,temp /* set temp = shift count */ bispsw $(N|V|C) /* set n,v,c flags */ bicpsw $Z /* clear z flag */ shrq temp,$0xffffffff,dloc0 /* shift data left 32 and put in dloc */ jeql error6 /* error if z flag set */ jcc error6 /* error if c flag not set */ jvs error6 /* error if v flag set */ jlss error6 /* error if n flag set */ 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 dloc0,$0 /* check result */ jeql 1f /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dloc0,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl dloc1,$0xffffffff jeql aldn /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dloc1,_actual /* actual data */ movl $0xffffffff,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* test data */ .align 2 /* align on longword */ sloc0: .long 0 sloc1: .long 0 dloc0: .long 0 dloc1: .long 0 temp: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.