From 6ca6328e299787984b2d7f3760c17dd226277723 Mon Sep 17 00:00:00 2001 From: herman ten brugge Date: Sat, 23 Aug 2025 14:48:34 +0200 Subject: [PATCH] Fix long double to long long for x86_64 --- tcctok.h | 3 +++ x86_64-gen.c | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/tcctok.h b/tcctok.h index 7815ce37..c1a35724 100644 --- a/tcctok.h +++ b/tcctok.h @@ -290,6 +290,9 @@ DEF(TOK___fixdfdi, "__fixdfdi") DEF(TOK___fixxfdi, "__fixxfdi") #endif +#if defined TCC_TARGET_X86_64 + DEF(TOK___fixxfdi, "__fixxfdi") +#endif #if defined TCC_TARGET_I386 || defined TCC_TARGET_X86_64 DEF(TOK_alloca, "alloca") diff --git a/x86_64-gen.c b/x86_64-gen.c index c3d7c5c3..c679db28 100644 --- a/x86_64-gen.c +++ b/x86_64-gen.c @@ -2153,6 +2153,15 @@ void gen_cvt_ftoi(int t) ft = vtop->type.t; bt = ft & VT_BTYPE; if (bt == VT_LDOUBLE) { + if (t != VT_INT) { + vpush_helper_func(TOK___fixxfdi); + vswap(); + gfunc_call(1); + vpushi(0); + vtop->r = REG_IRET; + vtop->r2 = REG_IRE2; + return; + } gen_cvt_ftof(VT_DOUBLE); bt = VT_DOUBLE; }