1/* speed test for basic CPU operations */ 2 3 4/* Marco Bucci <marco.bucci@inwind.it> */ 5 6/* This code was developed with the Code Warrior integrate ppc assembler. 7 * Macros are use to hide illegal constructs whether you are using a 8 * "normal" assembler or the "C integrated" assembler. 9 */ 10 11#if 0 12 13 14 .text 15 .align 4 16 17 .globl b_call_reg 18 .globl _b_call_reg 19 .globl b_call_imm 20 .globl _b_call_imm 21 .globl b_add 22 .globl _b_add 23 .globl b_load 24 .globl _b_load 25 26.set fsize, 64 27.set lrsave, 4 28 29#else 30 31#define fsize 64 32#define lrsave 4 33 34#endif 35 36 37 38 39#if 0 40.if 0 41#endif 42asm void b_null(void) 43{ 44#if 0 45.endif 46#endif 47 48#if 0 49b_null: 50#endif 51 52 blr 53 54#if 0 55.if 0 56#endif 57} 58#if 0 59.endif 60#endif 61 62 63/* actually the same as the following. How to get "b_null" address? 64 * I didnt find the right sintax or the right way. 65 * I should take the current PC, then the difference to "b_null" 66 * (making the difference beween the labels), perform the sum and go?! 67 */ 68#if 0 69.if 0 70#endif 71asm void b_call_reg(long n) 72{ 73#if 0 74.endif 75#endif 76 77#if 0 78b_call_reg: 79_b_call_reg: 80#endif 81 82 mflr %r0 83 stw %r31,-4(%r1) 84 stw %r30,-8(%r1) 85 stw %r0,lrsave(%r1) 86 stwu %r1,-fsize(%r1) 87 mr %r30,%r3 88 li %r31,0 89 90 b L1 91L0: 92 bl b_null 93 bl b_null 94 bl b_null 95 bl b_null 96 bl b_null 97 98 addi %r31,%r31,5 99L1: 100 cmpw %r31,%r30 101 blt L0 102 103 104 lwz %r0,lrsave+fsize(%r1) 105 mtlr %r0 106 lwz %r31,-4+fsize(%r1) 107 lwz %r30,-8+fsize(%r1) 108 addi %r1,%r1,fsize 109 blr 110 111#if 0 112.if 0 113#endif 114} 115#if 0 116.endif 117#endif 118 119 120 121 122#if 0 123.if 0 124#endif 125asm void b_call_imm(long n) 126{ 127#if 0 128.endif 129#endif 130 131#if 0 132b_call_imm: 133_b_call_imm: 134#endif 135 136 mflr %r0 137 stw %r31,-4(%r1) 138 stw %r30,-8(%r1) 139 stw %r0,lrsave(%r1) 140 stwu %r1,-fsize(%r1) 141 mr %r30,%r3 142 li %r31,0 143 144 b L3 145L2: 146 bl b_null 147 bl b_null 148 bl b_null 149 bl b_null 150 bl b_null 151 152 addi %r31,%r31,5 153L3: 154 cmpw %r31,%r30 155 blt L2 156 157 158 lwz %r0,lrsave+fsize(%r1) 159 mtlr %r0 160 lwz %r31,-4+fsize(%r1) 161 lwz %r30,-8+fsize(%r1) 162 addi %r1,%r1,fsize 163 blr 164 165#if 0 166.if 0 167#endif 168} 169#if 0 170.endif 171#endif 172 173 174 175#if 0 176.if 0 177#endif 178asm void b_add(long n) 179{ 180#if 0 181.endif 182#endif 183 184#if 0 185b_add: 186_b_add: 187#endif 188 189 mflr %r0 190 stw %r31,-4(%r1) 191 stw %r30,-8(%r1) 192 stw %r0,lrsave(%r1) 193 stwu %r1,-fsize(%r1) 194 mr %r30,%r3 195 li %r31,0 196 197 b L5 198L4: 199 addi %r3,%r3,5 200 addi %r4,%r4,5 201 addi %r5,%r5,5 202 addi %r6,%r6,5 203 addi %r7,%r7,5 204 205 addi %r3,%r3,5 206 addi %r4,%r4,5 207 addi %r5,%r5,5 208 addi %r6,%r6,5 209 addi %r7,%r7,5 210 211 addi %r31,%r31,10 212L5: 213 cmpw %r31,%r30 214 blt L4 215 216 217 lwz %r0,lrsave+fsize(%r1) 218 mtlr %r0 219 lwz %r31,-4+fsize(%r1) 220 lwz %r30,-8+fsize(%r1) 221 addi %r1,%r1,fsize 222 blr 223 224#if 0 225.if 0 226#endif 227} 228#if 0 229.endif 230#endif 231 232 233 234#if 0 235.if 0 236#endif 237asm void b_load(long n) 238{ 239#if 0 240.endif 241#endif 242 243#if 0 244b_load: 245_b_load: 246#endif 247 248 mflr %r0 249 stw %r31,-4(%r1) 250 stw %r30,-8(%r1) 251 stw %r0,lrsave(%r1) 252 stwu %r1,-fsize(%r1) 253 mr %r30,%r3 254 li %r31,0 255 256 b L7 257L6: 258 lwz %r3,4(%r1) 259 lwz %r4,8(%r1) 260 lwz %r5,12(%r1) 261 lwz %r6,16(%r1) 262 lwz %r7,20(%r1) 263 264 lwz %r3,24(%r1) 265 lwz %r4,28(%r1) 266 lwz %r5,32(%r1) 267 lwz %r6,36(%r1) 268 lwz %r7,40(%r1) 269 270 271 addi %r31,%r31,10 272L7: 273 cmpw %r31,%r30 274 blt L6 275 276 277 lwz %r0,lrsave+fsize(%r1) 278 mtlr %r0 279 lwz %r31,-4+fsize(%r1) 280 lwz %r30,-8+fsize(%r1) 281 addi %r1,%r1,fsize 282 blr 283 284#if 0 285.if 0 286#endif 287} 288#if 0 289.endif 290#endif 291