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; }