From 4257fdded3b89b739fe4ee8a56593494c5a69720 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 18 Nov 2024 11:07:44 +0100 Subject: [BOX32] Fixed long double handling on printf like functions --- src/libtools/myalign32.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/libtools') diff --git a/src/libtools/myalign32.c b/src/libtools/myalign32.c index f38776b6..8776731f 100755 --- a/src/libtools/myalign32.c +++ b/src/libtools/myalign32.c @@ -21,6 +21,7 @@ void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack) const char* p = fmt; int state = 0; double d; + long double ld; while(*p) { switch(state) { @@ -109,7 +110,10 @@ void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack) st+=3; mystack+=2; #else LD2D((void*)st, &d); - *(long double*)mystack = (long double)d; + ld = d; + if(((uintptr_t)mystack)&0xf) // align the long double + mystack++; + memcpy(mystack, &ld, 16); st+=3; mystack+=2; #endif state = 0; @@ -927,7 +931,10 @@ void myStackAlignW32(const char* fmt, uint32_t* st, uint64_t* mystack) st+=3; mystack+=2; #else LD2D((void*)st, &d); - *(long double*)mystack = (long double)d; + if(((uintptr_t)mystack)&0xf) // align the long double + mystack++; + ld = d; + memcpy(mystack, &ld, 16); st+=3; mystack+=2; #endif state = 0; -- cgit 1.4.1