/* speed test for basic CPU operations  */


/* Marco Bucci <marco.bucci@inwind.it> */

/* This code was developed with the Code Warrior integrate ppc assembler.
 * Macros are use to hide illegal constructs whether you are using a 
 * "normal" assembler or the "C integrated" assembler.
 */

#if 0


	.text
	.align 4
	
	.globl b_call_reg
	.globl _b_call_reg
	.globl b_call_imm
	.globl _b_call_imm
	.globl b_add
	.globl _b_add
	.globl b_load
	.globl _b_load

.set fsize, 64
.set lrsave, 8

#else

#define fsize 64
#define lrsave 8

#endif




#if 0
.if 0
#endif
asm void b_null(void)
{
#if 0
.endif
#endif

#if 0
b_null:
#endif

	blr

#if 0
.if 0
#endif
}
#if 0
.endif
#endif


/* actually the same as the following. How to get "b_null" address?
 * I didnt find the right sintax or the right way.
 * I should take the current PC, then the difference to "b_null"
 * (making the difference beween the labels), perform the sum and go?! 
 */  
#if 0
.if 0
#endif
asm void b_call_reg(long n)
{
#if 0
.endif
#endif

#if 0
b_call_reg:
_b_call_reg:
#endif

	mflr	r0
	stw		r31,-4(r1)
	stw		r30,-8(r1)
	stw		r0,lrsave(r1)
	stwu	r1,-fsize(r1)
	mr		r30,r3
	li		r31,0
	
	b		L1
L0:
	bl		b_null
	bl		b_null
	bl		b_null
	bl		b_null
	bl		b_null

	addi       r31,r31,5
L1:
	cmpw       r31,r30
	blt        L0
	
	
	lwz        r0,lrsave+fsize(r1)
	mtlr       r0
	lwz        r31,-4+fsize(r1)
	lwz        r30,-8+fsize(r1)
	addi       r1,r1,fsize
	blr

#if 0
.if 0
#endif
}
#if 0
.endif
#endif




#if 0
.if 0
#endif
asm void b_call_imm(long n)
{
#if 0
.endif
#endif

#if 0
b_call_imm:
_b_call_imm:
#endif

	mflr	r0
	stw		r31,-4(r1)
	stw		r30,-8(r1)
	stw		r0,lrsave(r1)
	stwu	r1,-fsize(r1)
	mr		r30,r3
	li		r31,0
	
	b		L3
L2:
	bl		b_null
	bl		b_null
	bl		b_null
	bl		b_null
	bl		b_null

	addi       r31,r31,5
L3:
	cmpw       r31,r30
	blt        L2
	
	
	lwz        r0,lrsave+fsize(r1)
	mtlr       r0
	lwz        r31,-4+fsize(r1)
	lwz        r30,-8+fsize(r1)
	addi       r1,r1,fsize
	blr

#if 0
.if 0
#endif
}
#if 0
.endif
#endif



#if 0
.if 0
#endif
asm void b_add(long n)
{
#if 0
.endif
#endif

#if 0
b_add:
_b_add:
#endif

	mflr	r0
	stw		r31,-4(r1)
	stw		r30,-8(r1)
	stw		r0,lrsave(r1)
	stwu	r1,-fsize(r1)
	mr		r30,r3
	li		r31,0
	
	b		L5
L4:
	addi	r3,r3,5
	addi	r4,r4,5
	addi	r5,r5,5
	addi	r6,r6,5
	addi	r7,r7,5

	addi	r3,r3,5
	addi	r4,r4,5
	addi	r5,r5,5
	addi	r6,r6,5
	addi	r7,r7,5

	addi       r31,r31,10
L5:
	cmpw       r31,r30
	blt        L4
	
	
	lwz        r0,lrsave+fsize(r1)
	mtlr       r0
	lwz        r31,-4+fsize(r1)
	lwz        r30,-8+fsize(r1)
	addi       r1,r1,fsize
	blr

#if 0
.if 0
#endif
}
#if 0
.endif
#endif



#if 0
.if 0
#endif
asm void b_load(long n)
{
#if 0
.endif
#endif

#if 0
b_load:
_b_load:
#endif

	mflr	r0
	stw		r31,-4(r1)
	stw		r30,-8(r1)
	stw		r0,lrsave(r1)
	stwu	r1,-fsize(r1)
	mr		r30,r3
	li		r31,0
	
	b		L7
L6:
	lwz		r3,4(r1)
	lwz		r4,8(r1)
	lwz		r5,12(r1)
	lwz		r6,16(r1)
	lwz		r7,20(r1)

	lwz		r3,24(r1)
	lwz		r4,28(r1)
	lwz		r5,32(r1)
	lwz		r6,36(r1)
	lwz		r7,40(r1)


	addi       r31,r31,10
L7:
	cmpw       r31,r30
	blt        L6
	
	
	lwz        r0,lrsave+fsize(r1)
	mtlr       r0
	lwz        r31,-4+fsize(r1)
	lwz        r30,-8+fsize(r1)
	addi       r1,r1,fsize
	blr

#if 0
.if 0
#endif
}
#if 0
.endif
#endif
