/* speed test for basic CPU operations */ /* Marco Bucci */ /* 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, 4 #else #define fsize 64 #define lrsave 4 #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