1/* 2** Copyright 2003, Axel D�fler, axeld@pinc-software.de. All rights reserved. 3** Distributed under the terms of the OpenBeOS License. 4*/ 5 6#define FUNCTION(x) .global x; .type x,@function; x 7 8.text 9 10/* float __swap_float(float value) 11 * f1 12 */ 13FUNCTION(__swap_float): 14 // push a stack frame 15 stwu %r1, -32(%r1) 16 mflr %r0 17 stw %r0, 36(%r1) 18 19 // %f1 -> %r3 20 stfs %f1, 20(%r1) 21 lwz %r3, 20(%r1) 22 23 // let __swap_int32 convert %r3 24 bl __swap_int32 25 26 // %r3 -> %f1 27 stw %r3, 20(%r1) 28 lfs %f1, 20(%r1) 29 30 // pop the stack frame 31 lwz %r0, 36(%r1) 32 mtlr %r0 33 addi %r1, %r1, 32 34 blr 35 36/* double __swap_double(double value) 37 * f1 38 */ 39FUNCTION(__swap_double): 40 // push a stack frame 41 stwu %r1, -32(%r1) 42 mflr %r0 43 stw %r0, 36(%r1) 44 45 // %f1 -> (%r3:%r4) 46 stfd %f1, 20(%r1) 47 lwz %r3, 20(%r1) 48 lwz %r4, 24(%r1) 49 50 // let __swap_int64 convert %r3:%r4 51 bl __swap_int64 52 53 // (%r3:%r4) -> %f1 54 stw %r3, 20(%r1) 55 stw %r4, 24(%r1) 56 lfd %f1, 20(%r1) 57 58 // pop the stack frame 59 lwz %r0, 36(%r1) 60 mtlr %r0 61 addi %r1, %r1, 32 62 blr 63