sparc: add float/double swapping functions.

Change-Id: I07590af796d689b5e97c03a97727edfd58f5a811
Reviewed-on: https://review.haiku-os.org/c/1183
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
This commit is contained in:
PulkoMandy 2019-03-09 17:42:22 +01:00 committed by waddlesplash
parent c3ba570c08
commit 464b202703
2 changed files with 34 additions and 0 deletions

View File

@ -13,6 +13,8 @@ for architectureObject in [ MultiArchSubDirSetup sparc ] {
SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) generic ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) generic ] ;
MergeObject <$(architecture)>os_arch_$(TARGET_ARCH).o : MergeObject <$(architecture)>os_arch_$(TARGET_ARCH).o :
byteorder.S
stack_frame.c stack_frame.c
system_time.c system_time.c
thread.c thread.c

View File

@ -0,0 +1,32 @@
/*
* Copyright 2019, Adrien Destugues, pulkomandy@pulkomandy.tk
* Distributed under the terms of the MIT License.
*/
#include <asm_defs.h>
.text
// These function use the unused parameters slots on the stack (reserved for
// arguments that are in fact passed in registers) for temporary storage.
// %o0 is corrupt, but it is a scratch register so this should be fine.
/* float __swap_float(float value)
*/
FUNCTION(__swap_float):
add %sp, 2175, %o0
st %d0, [%o0]
lda [%o0] 0x88, %d0
return
FUNCTION_END(__swap_float)
/* double __swap_double(double value)
*/
FUNCTION(__swap_double):
add %sp, 2175, %o0
std %d0, [%o0]
ldda [%o0] 0x88, %d0
return
FUNCTION_END(__swap_double)