From 09919777ba20c5489d8cd3686febdce74464fae3 Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Fri, 17 Oct 2014 13:47:51 +0200 Subject: [PATCH] Add fix for XMM register handling in function calls for x64. --- x86_64-gen.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/x86_64-gen.c b/x86_64-gen.c index f85cd01..620e1ab 100644 --- a/x86_64-gen.c +++ b/x86_64-gen.c @@ -750,7 +750,12 @@ void gfunc_prolog(CType *func_type) bt = type->t & VT_BTYPE; if (reg_param_index < REGN) { /* save arguments passed by register */ - gen_modrm64(0x89, arg_regs[reg_param_index], VT_LOCAL, NULL, addr); + if ((bt == VT_FLOAT) || (bt == VT_DOUBLE)) { + o(0xd60f66); /* movq */ + gen_modrm(reg_param_index, VT_LOCAL, NULL, addr); + } else { + gen_modrm64(0x89, arg_regs[reg_param_index], VT_LOCAL, NULL, addr); + } } if (bt == VT_STRUCT || bt == VT_LDOUBLE) { sym_push(sym->v & ~SYM_FIELD, type, VT_LOCAL | VT_LVAL | VT_REF, addr);