|
|
Power 6/32 Unix version 1.2b
/* SHAL instruction test */ # R2 = error code # 1 : error in flags # 2 : result is not as expected # 3 : source 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 _shiftal _shiftal: callf $4,_setjmp /* save context for error return */ movab _shiftal,_stpc /* save starting address of subtest */ movl $1,_subtst /* subtst 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 */ /* */ shftl: /* SHIFT LEFT LONG FROM MEMORY TO REGISTER */ movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ movl $(0x55555555<<1),r4 /* set r4 = 0xaaaaaaaa */ bispsw $Z /* set z flag */ bicpsw $(N|V|C) /* clear n,v,c flag */ /* data memory register */ shal $1,srcloc,r3 /* shift left 1 and put in r3 */ jgeq error1 /* error if n flag not set */ jvc error1 /* error if v flag not set */ jcc error1 /* error if c flag not set */ jeql error1 /* error if z flag not clear */ 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 r3,r4 /* 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 r3,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0x55555555,srcloc /* check if source get affected */ jeql s2 /* if correct continue */ 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 LEFT 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 /* subtst number */ movl $2,_no_opr /* number of operands in use */ movl $1,_opr /* first operand */ movl $0x55555555,_opr + 4 /* second operand */ 0: movb $1,temp /* set temp = shift count */ bispsw $(N|Z) /* set n,z flags */ bicpsw $(V|C) /* clear c,v flag */ /* memory register memory entry point */ shal temp,r3,dstloc /* shift r3 left 1 and put in dstloc */ jlss error2 /* error if n,z flag still set */ jeql error2 jvc error2 /* error if v,c flag clear */ jcc 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,$0x55555554 /* 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 dstloc,_actual /* actual data */ movl $0x55555554,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r3,$0xaaaaaaaa /* make sure source unchanged */ jeql s3 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r3,_actual /* actual data */ movl $0xaaaaaaaa,_expected /* expected data */ jmp *badrtn /* SHIFT LEFT 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 /* subtst number */ movl $2,_no_opr /* number of operands in use */ movl $0xffffffe4,_opr /* first operand */ movl srcloc,_opr + 4 /* second operand */ 0: movl $0xffffffe4,r3 /* set r3[0:4] = shift count = 4 */ bispsw $(N|Z) /* set n,z flag */ bicpsw $(V|C) /* clear v,c flag */ /* register memory memory entry point */ shal r3,srcloc,srcloc /* shift and put result back in srcloc */ jlss error3 /* error if n,z flag still set */ jeql error3 jcc error3 /* error if c,v flags not set */ jvc 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,$0x55555550 /* check result */ jeql s4 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl srcloc,_actual /* actual data */ movl $0x55555550,_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 starting address of subtest */ movl $4,_subtst /* subtst number */ movl $2,_no_opr /* number of operands in use */ movl $0,_opr /* first operand */ movl $0x55555555,_opr + 4 /* second operand */ 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ movl $-1,r3 bispsw $(N|Z|V) /* set n,z,v flags */ bicpsw $C /* clear C flag */ /* shift zero entry point */ shal $0,srcloc,r3 /* shift left 0 and put in r3 */ 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 incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $0x55555555,r3 /* 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 r3,_actual /* actual data */ movl $0x55555555,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0x55555555,srcloc /* check if source get affected */ jeql s5 /* if correct continue */ 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 starting address of subtest */ movl $5,_subtst /* subtst number */ movl $2,_no_opr /* number of operands in use */ movl $-1,_opr /* first operand */ movl $-1,_opr + 4 /* second operand */ 0: movb $-1,r3 /* set shift count = 31 */ bispsw $(Z|V) /* set z,v flag */ bicpsw $(N|C) /* clear n,c flag */ /* register register register */ shal r3,r3,r3 /* shift r3 left 31 and put back in r3 */ 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 incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: bicpsw $Z cmpl r3,$0x80000000 /* check result */ jeql aldn /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $0x80000000,_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.