|
|
Power 6/32 Unix version 1.2b
/* CALLF RET 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 */ .set NOARG1,3 .set NOARG2,2 .set ARG1,0xf .set ARG2,0xff .set ARG3,0xfff .set R0_12,0x3fff /* mask to save r0 thru r12 */ .set R2_12,0x1ffc /* mask to save r2 thru r12 */ .set R357911,0xaa8 /* mask to save r3,r5,r7,r9,r11 */ .set MASK1,R2_12 /* save r2-r12 */ .set MASK2,R357911 /* save r3,5,7,9,11 */ .globl _callfx _callfx: bicpsw $(IV|T) /* disable exceptions */ /* */ strt: callf $4,_setjmp /* save context for error return */ movab strt,_stpc /* save subtest address */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $NOARG1,_opr /* first operand */ movl $MASK1,_opr + 4 /* second operand */ 0: movab stkbase,sp /* init. stack pointer */ movab stkbase,fp /* init. frame pointer */ movl fp,bfp /* save fp */ movw $MASK1,proc1 /* set entry mask in called procedure */ pushl $ARG1 pushl $ARG2 pushl $ARG3 /* push 3 arguments on stacks */ movl $2,r2 /* initialize r2 - r12 */ movl $3,r3 movl $4,r4 movl $5,r5 movl $6,r6 movl $7,r7 movl $0x8,r8 movl $0x9,r9 movl $0xa,r10 movl $0xb,r11 movl $0xc,r12 movab (r14),estk /* save sp */ /* compute expected sp after callf */ subl2 $(3*4),estk /* Space for fp,MASK,PC */ subl2 $(11*4),estk /* Space for r2-r12 */ /* compute expected fp after callf */ movl fp,efp subl2 $(4*4),efp bicpsw $(N|Z|V|C) /* clear all flags */ bispsw $(N|V|C) /* set all flags */ callf $(4*NOARG1+4),proc1 /* call procedure with 3 arguments */ retcall1: blss error1 /* error if any of the n,z,v,c flags set */ beql error1 bvs error1 bcs error1 jmp 1f error1: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b movl $2,_ercode /* error code flag miscompare */ jmp *badrtn 1: cmpl r2,$2 /* check if r2 - r12 get restored properly */ beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r2,_actual /* actual data */ movl $2,_expected /* expected data */ jmp *badrtn 1: cmpl r3,$3 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $3,_expected /* expected data */ jmp *badrtn 1: cmpl r4,$4 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $4,_expected /* expected data */ jmp *badrtn 1: cmpl r5,$5 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r5,_actual /* actual data */ movl $5,_expected /* expected data */ jmp *badrtn 1: cmpl r6,$6 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r6,_actual /* actual data */ movl $6,_expected /* expected data */ jmp *badrtn 1: cmpl r7,$7 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r7,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn 1: cmpl r8,$0x8 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r8,_actual /* actual data */ movl $8,_expected /* expected data */ jmp *badrtn 1: cmpl r9,$0x9 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r9,_actual /* actual data */ movl $9,_expected /* expected data */ jmp *badrtn 1: cmpl r10,$0xa beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r10,_actual /* actual data */ movl $0xa,_expected /* expected data */ jmp *badrtn 1: cmpl r11,$0xb beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r11,_actual /* actual data */ movl $0xb,_expected /* expected data */ jmp *badrtn 1: cmpl r12,$0xc beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r11,_actual /* actual data */ movl $0xc,_expected /* expected data */ jmp *badrtn 1: movab (r14),r0 cmpl r0,bfp /* check if sp,fp get restored properly */ beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r0,_actual /* actual data */ movl bfp,_expected /* expected data */ jmp *badrtn 1: cmpl fp,bfp beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl fp,_actual /* actual data */ movl bfp,_expected /* expected data */ jmp *badrtn 1: jmp callp2 /* call procedure no. 2 */ callp2: bbs $0,_force_lp,0b /* if set loop on last subtest */ c2: callf $4,_setjmp /* save context for error return */ movab c2,_stpc /* save subtest address */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $NOARG2,_opr /* first operand */ movl $MASK2,_opr + 4 /* second operand */ 0: movw $MASK2,proc2 /* set entry mask in called procedure */ pushl $ARG1 pushl $ARG2 movl $3,r3 /* init. r3,r5,r7,r9,r11 */ movl $5,r5 movl $7,r7 movl $0x9,r9 movl $0xb,r11 movab (r14),estk /* save sp */ /* compute expected sp after callf */ subl2 $(3*4),estk /* Space for fp,MASK,PC */ subl2 $(5*4),estk /* Space for r3,5,7,9,11 */ /* compute expected fp after callf */ movl fp,efp subl2 $(3*4),efp movab proc2,r12 movl $(NOARG2*4+4),r6 /* load reg with argument data */ bispsw $(N|V) /* set n,v flags */ bicpsw $(Z|C) /* clear z,c flags */ callf $(NOARG2*4+4),proc2 /* cll procedure with 2 argu */ retcall2: jneq error2 /* error if z,c flags clear */ jcc error2 jlss error2 /* error if n,v flags set */ jvs error2 jmp 1f error2: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b movl $2,_ercode /* error code flag miscompare */ jmp *badrtn 1: cmpl r3,$3 /* check if r3,5,7,9,11 restored properly */ beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $3,_expected /* expected data */ jmp *badrtn 1: cmpl r5,$5 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r5,_actual /* actual data */ movl $5,_expected /* expected data */ jmp *badrtn 1: cmpl r7,$7 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r7,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn 1: cmpl r9,$0x9 beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r9,_actual /* actual data */ movl $0x9,_expected /* expected data */ jmp *badrtn 1: cmpl r11,$0xb beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r11,_actual /* actual data */ movl $0xb,_expected /* expected data */ jmp *badrtn 1: movab (r14),r0 cmpl r0,bfp /* check if sp,fp restored properly */ beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl r0,_actual /* actual data */ movl bfp,_expected /* expected data */ jmp *badrtn 1: cmpl fp,bfp beql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl fp,_actual /* actual data */ movl bfp,_expected /* expected data */ jmp *badrtn 1: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* TEST DATA */ .align 2 stack: .space 400 /* 400 bytes for the stack */ stkbase: .long 0 prevpc1: .long retcall1 prevpc2: .long retcall2 prono: .long 0 /* current procedure called : 1/2 */ astk: .long 0 /* actual sp after callf */ estk: .long 0 /* expected sp after callf */ efp: .long 0 /* expected fp after callf */ bfp: .long 0 /* fp before callf */ temp0: .long 0 temp1: .long 0 /* PROCEDURE 1 */ proc1: .word 0 /* entry mask */ jgeq err1 /* error if any of n,v,c flag clear */ jeql err1 jvc err1 jcc err1 jmp 1f err1: movpsl _actual /* actal psl MAYBE it is incorrect */ bbs $0,_scoplp,0b movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: movab (r14),astk cmpl astk,estk /* check if sp decremented properly */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl astk,_actual /* actual data */ movl estk,_expected /* expected data */ jmp *badrtn 1: cmpl fp,efp /* check if fp decrmented properly */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl fp,_actual /* actual data */ movl efp,_expected /* expected data */ jmp *badrtn 1: cmpl (fp),bfp /* check previous fp saved on the stack */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl (fp),_actual /* actual data */ movl bfp,_expected /* expected data */ jmp *badrtn 1: movl fp,temp0 subl2 $4,temp0 movl *(temp0),temp0 /* get mask/argument longword from stack */ movl $MASK1,temp1 shll $16,temp1,temp1 addl2 $(4*NOARG1+4),temp1 cmpl temp0,temp1 /* check mask/argnum longword */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl temp0,_actual /* actual data */ movl temp1,_expected /* expected data */ jmp *badrtn cmpl -8(fp),prevpc1 /* check saved PC on the stack */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl -8(fp),_actual /* actual data */ movl prevpc1,_expected /* expected data */ jmp *badrtn 1: cmpl (sp),$2 /* check saved r2 - r12 on stack */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl (sp),_actual /* actual data */ movl $2,_expected /* expected data */ jmp *badrtn 1: cmpl 4(sp),$3 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 4(sp),_actual /* actual data */ movl $3,_expected /* expected data */ jmp *badrtn 1: cmpl 8(sp),$4 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 8(sp),_actual /* actual data */ movl $4,_expected /* expected data */ jmp *badrtn 1: cmpl 12(sp),$5 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 12(sp),_actual /* actual data */ movl $5,_expected /* expected data */ jmp *badrtn 1: cmpl 16(sp),$6 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 16(sp),_actual /* actual data */ movl $6,_expected /* expected data */ jmp *badrtn 1: cmpl 20(sp),$7 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 20(sp),_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn 1: cmpl 24(sp),$0x8 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 24(sp),_actual /* actual data */ movl $8,_expected /* expected data */ jmp *badrtn 1: cmpl 28(sp),$0x9 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 28(sp),_actual /* actual data */ movl $9,_expected /* expected data */ jmp *badrtn 1: cmpl 32(sp),$0xa jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 32(sp),_actual /* actual data */ movl $0xa,_expected /* expected data */ jmp *badrtn 1: cmpl 36(sp),$0xb jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 36(sp),_actual /* actual data */ movl $0xb,_expected /* expected data */ jmp *badrtn 1: cmpl 40(sp),$0xc jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 40(sp),_actual /* actual data */ movl $0xc,_expected /* expected data */ jmp *badrtn /* all checked out */ 1: movl $0,r2 /* zero out r2 - r12 */ movl r2,r3 movl r2,r4 movl r2,r5 movl r2,r6 movl r2,r7 movl r2,r8 movl r2,r9 movl r2,r10 movl r2,r11 movl r2,r12 bicpsw $(N|Z|V|C) /* clear all flags */ ret /* TESTING RET ..... */ bbs $0,_scoplp,0b movl $3,_ercode /* error code operand was modified did not ret*/ jmp *badrtn /* PROCEDURE 2 */ .align 2 proc2: .word 0 /* entry mask */ jgeq error4 /* error if n,v flag clear */ jvc error4 jeql error4 /* error if z,c flag set */ jcs error4 jmp 1f error4: movpsl _actual /* actal psl MAYBE it is incorrect */ bbs $0,_scoplp,0b movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: movab (r14),astk cmpl astk,estk /* check if sp get decrement */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl astk,_actual /* actual data */ movl estk,_expected /* expected data */ jmp *badrtn 1: cmpl fp,efp /* check if fp get decrement properly */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl fp,_actual /* actual data */ movl efp,_expected /* expected data */ jmp *badrtn 1: cmpl (fp),bfp /* check previous fp saved on stack */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl (fp),_actual /* actual data */ movl bfp,_expected /* expected data */ jmp *badrtn 1: movl fp,temp0 subl2 $4,temp0 movl *(temp0),temp0 /* get mask/argument longword from stack */ movl $MASK2,temp1 shll $16,temp1,temp1 addl2 $(4*NOARG2+4),temp1 1: cmpl temp0,temp1 /* check mask/argnum longword */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl temp0,_actual /* actual data */ movl temp1,_expected /* expected data */ jmp *badrtn cmpl -8(fp),prevpc2 /* check saved PC on the stack */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl -8(fp),_actual /* actual data */ movl prevpc2,_expected /* expected data */ jmp *badrtn 1: cmpl (sp),$3 /* check saved r3,5,7,9,11 saved on stack */ jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl (sp),_actual /* actual data */ movl $0x3,_expected /* expected data */ jmp *badrtn 1: cmpl 4(sp),$5 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 4(sp),_actual /* actual data */ movl $0x5,_expected /* expected data */ jmp *badrtn 1: cmpl 8(sp),$7 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 8(sp),_actual /* actual data */ movl $0x7,_expected /* expected data */ jmp *badrtn 1: cmpl 12(sp),$9 jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 12(sp),_actual /* actual data */ movl $0x9,_expected /* expected data */ jmp *badrtn 1: cmpl 16(sp),$0xb jeql 1f bbs $0,_scoplp,0b movl $1,_ercode /* error code data miscompare */ movl 16(sp),_actual /* actual data */ movl $0xb,_expected /* expected data */ jmp *badrtn /* all checked out */ 1: movl $0,r3 /* zero out r3,5,7,9,11 */ movl $0,r5 movl $0,r7 movl $0,r9 movl $0,r11 bispsw $(Z|C) /* set z,c flags */ bicpsw $(N|V) /* clear n,v flags */ ret /* TESTING RET */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.