|
|
Power 6/32 Unix version 1.2b
/* SHLQ 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 MAXPOSL,0x7fffffff .set MAXNEGL,0x80000000 .set MAXPOSW,0x7fff .set MAXNEGW,0x8000 .set MAXPOSB,0x7f .set MAXNEGB,0x80 .set ZERO,0 .set ONES,0xffffffff .set HIGH,31 /* highest interrupt priority */ .globl _shlq _shlq: callf $4,_setjmp /* save context for error return */ movab _shlq,_stpc /* save subtest starting address */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $32,_opr /* first operand */ movl $0xffffffff,_opr + 4 /* second operand */ 0: bicpsw $(IV|T) /* disable exceptions */ slq: /* SHIFT LEFT QUAD FROM MEMORY TO REGISTER */ movl $1,r1 /* R1 : indicate which part of the test */ movl $0,sloc1 /* set sloc1 */ movl $0xffffffff,sloc0 /* set sloc0 = 0xffffffff */ movl $0xffffffff,r4 movl $0xffffffff,r5 bispsw $(V|N) /* set n,v flags */ bicpsw $(Z|C) /* clear z,c flag */ /* data memory register */ shlq $32,sloc0,r4 /* shift left 32 and put in r4,r5 */ jlss error1 /* error if n flag set */ jvs error1 /* error if v flag set */ jneq error1 /* error if z flag not set */ jcc error1 /* error if c flag not set */ jmp 1f error1: movpsl _actual /* actual = psl maybe is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r5,$0x0 /* check result */ jeql 1f /* if no error 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 no error 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,sloc0 /* check if source get affected */ jeql 1f /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl sloc0,_actual /* actual data */ movl $0xffffffff,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl sloc1,$0 jeql s2 /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl sloc1,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* SHIFT LEFT 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 /* save subtest starting address */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $32,_opr /* first operand */ movl $0,_opr + 4 /* second operand */ 0: movl $0xffffffff,dloc0 /* set dloc0 = dloc1 = 0xffffffff */ movl dloc0,dloc1 movb $32,temp /* set temp = shift count */ bispsw $(V|N) /* set v,n flags */ bicpsw $(Z|C) /* clear z,c flags */ /* memory register memory */ shlq temp,r4,dloc0 /* shift r4,r5 left 32 and put in dloc */ jvs error2 /* error if v flag set */ jlss error2 /* error if n flag set */ jneq error2 /* error if z flag not set */ jcc error2 /* error if c flag not set */ jmp 1f error2: movpsl _actual /* actual = psl maybe 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 dloc0,$0 /* check result */ jeql 1f /* if no error 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 no error 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 r5,$0x0 /* make sure source unchanged */ jeql 1f /* if no error 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 1: bicpsw $Z cmpl r4,$0 jeql s3 /* if no error 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 /* SHIFT LEFT 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 /* save subtest starting address */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $3,_opr /* first operand */ movl $0x55555555,_opr + 4 /* second operand */ 0: movl $0x55555555,sloc0 /* set sloc0 = sloc1 = 0x55555555 */ movl sloc0,sloc1 movl $3,r3 /* set r3 = shift count */ bispsw $(V|Z) /* set z flags */ bicpsw $(C|N) /* clear c,n flags */ /* register memory memory */ shlq r3,sloc0,sloc0 /* shift and put result back in sloc0 */ jgeq error3 /* error if n flag not set */ jvs error3 /* error if v flag set */ jcc error3 /* error if c flags not set */ jeql error3 /* error if z flag still set */ jmp 1f error3: movpsl _actual /* actual = psl maybe is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl sloc0,$0xaaaaaaaa /* check result */ jeql 1f /* if no error 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,$0xaaaaaaa8 jeql s4 /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl sloc1,_actual /* actual data */ movl $0xaaaaaaa8,_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 starting address */ movl $4,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $0,_opr /* first operand */ movl $0x12345678,_opr + 4 /* second operand */ movl $0x9abcdef0,_opr + 8 /* third operand */ 0: movl $0,r10 /* set r10 = r11 = 0 */ movl r10,r11 movl r11,r6 /* set r6 = shift count */ movl $0x12345678,r8 /* set r8 = 0x12345678 */ movl $0x9abcdef0,r9 /* set r9 = 0x9abcdef0 */ bispsw $(N|Z|V|C) /* set n,z,v,c flags */ /* register register register */ shlq r6,r8,r10 /* shift left 0 and put in r10,r11 */ jlss error4 /* error if n flag still set */ jeql error4 /* error if z flag still set */ jvs error4 /* error if v flag still set */ jcc error4 /* error if c flag not set */ jmp 1f error4: movpsl _actual /* actual = psl maybe is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $0x12345678,r10 /* check result */ jeql 1f /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r10,_actual /* actual data */ movl $0x12345678,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $0x9abcdef0,r11 jeql 1f /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r11,_actual /* actual data */ movl $0x9abcdef0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r8,r10 /* make sure source unchanged */ jeql 1f /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r8,_actual /* actual data */ movl r10,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r9,r11 jeql s5 /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r9,_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 /* save subtest starting address */ movl $5,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $64,_opr /* first operand */ movl $0x12345678,_opr + 4 /* second operand */ movl $0x9abcdef0,_opr + 8 /* third operand */ 0: movb $64,temp /* set shift count = 64 */ bispsw $(N|V) /* set n,v flags */ bicpsw $(C|Z) /* clear c,z flag */ /* memory register memory */ shlq temp,r10,sloc0 /* shift r10,11 left 64 and put in sloc0,sloc1 */ jneq error5 /* error if z flag not set */ jcc error5 /* error if c flags not set */ jlss error5 /* error if n,v flags still set */ jvs error5 jmp 1f error5: movpsl _actual /* actual = psl maybe 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 sloc0,$0 /* check result */ jeql 1f /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl sloc0,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl sloc0,sloc1 jeql 1f /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl sloc0,_actual /* actual data */ movl sloc1,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r10,$0x12345678 /* make sure source unchanged */ jeql 1f /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r10,_actual /* actual data */ movl $0x12345678,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r11,$0x9abcdef0 jeql aldn /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r11,_actual /* actual data */ movl $0x9abcdef0,_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.