R12_REG, R13_REG, R14_REG, R15_REG, DI_REG, SI_REG
};
-static int const x86_64_int_return_registers[4] =
+static int const x86_64_int_return_registers[2] =
{
- AX_REG, DX_REG, DI_REG, SI_REG
+ AX_REG, DX_REG
};
/* Define the structure for the machine field in struct function. */
return true;
case DX_REG:
return (!TARGET_64BIT || ix86_cfun_abi () != MS_ABI);
- case DI_REG:
- case SI_REG:
- return TARGET_64BIT && ix86_cfun_abi () != MS_ABI;
/* Complex values are returned in %st(0)/%st(1) pair. */
case ST0_REG:
}
ret = construct_container (mode, orig_mode, valtype, true,
- X86_64_REGPARM_MAX, X86_64_SSE_REGPARM_MAX,
+ X86_64_MAX_RETURN_NREGS,
+ X86_64_MAX_SSE_RETURN_NREGS,
x86_64_int_return_registers, 0);
/* For zero sized structures, construct_container returns NULL, but we
#define X86_64_REGPARM_MAX 6
#define X86_64_MS_REGPARM_MAX 4
+/* Maximum numbers of registers used in return values according to x86-64
+ psABI. */
+#define X86_64_MAX_RETURN_NREGS 2
+#define X86_64_MAX_SSE_RETURN_NREGS 2
+
#define X86_32_REGPARM_MAX 3
#define REGPARM_MAX \