From 36b7d827dbcae9727c83ca10424d657109caa12b Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Fri, 24 Jul 2015 21:03:45 +0200 Subject: [PATCH] i386.c (ix86_call_abi_override): Call ix86_function_abi. * config/i386/i386.c (ix86_call_abi_override): Call ix86_function_abi. (ix86_function_abi): Cleanup. From-SVN: r226187 --- gcc/ChangeLog | 5 +++ gcc/config/i386/i386.c | 93 ++++++++++++++++++------------------------ 2 files changed, 45 insertions(+), 53 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0bf256ac185..773babe6d3c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-07-24 Uros Bizjak + + * config/i386/i386.c (ix86_call_abi_override): Call ix86_function_abi. + (ix86_function_abi): Cleanup. + 2015-07-24 Michael Darling PR other/66259 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d6b4508c880..468cb1921a9 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -6316,37 +6316,6 @@ ix86_reg_parm_stack_space (const_tree fndecl) return 0; } -/* Returns value SYSV_ABI, MS_ABI dependent on fntype, specifying the - call abi used. */ -enum calling_abi -ix86_function_type_abi (const_tree fntype) -{ - if (fntype != NULL_TREE && TYPE_ATTRIBUTES (fntype) != NULL_TREE) - { - enum calling_abi abi = ix86_abi; - if (abi == SYSV_ABI) - { - if (lookup_attribute ("ms_abi", TYPE_ATTRIBUTES (fntype))) - { - if (TARGET_X32) - { - static bool warned = false; - if (!warned) - { - error ("X32 does not support ms_abi attribute"); - warned = true; - } - } - abi = MS_ABI; - } - } - else if (lookup_attribute ("sysv_abi", TYPE_ATTRIBUTES (fntype))) - abi = SYSV_ABI; - return abi; - } - return ix86_abi; -} - /* We add this as a workaround in order to use libc_has_function hook in i386.md. */ bool @@ -6355,6 +6324,45 @@ ix86_libc_has_function (enum function_class fn_class) return targetm.libc_has_function (fn_class); } +/* Returns value SYSV_ABI, MS_ABI dependent on fntype, + specifying the call abi used. */ +enum calling_abi +ix86_function_type_abi (const_tree fntype) +{ + enum calling_abi abi = ix86_abi; + + if (fntype == NULL_TREE || TYPE_ATTRIBUTES (fntype) == NULL_TREE) + return abi; + + if (abi == SYSV_ABI + && lookup_attribute ("ms_abi", TYPE_ATTRIBUTES (fntype))) + { + if (TARGET_X32) + error ("X32 does not support ms_abi attribute"); + + abi = MS_ABI; + } + else if (abi == MS_ABI + && lookup_attribute ("sysv_abi", TYPE_ATTRIBUTES (fntype))) + abi = SYSV_ABI; + + return abi; +} + +static enum calling_abi +ix86_function_abi (const_tree fndecl) +{ + return fndecl ? ix86_function_type_abi (TREE_TYPE (fndecl)) : ix86_abi; +} + +/* Returns value SYSV_ABI, MS_ABI dependent on cfun, + specifying the call abi used. */ +enum calling_abi +ix86_cfun_abi (void) +{ + return cfun ? cfun->machine->call_abi : ix86_abi; +} + static bool ix86_function_ms_hook_prologue (const_tree fn) { @@ -6369,24 +6377,6 @@ ix86_function_ms_hook_prologue (const_tree fn) return false; } -static enum calling_abi -ix86_function_abi (const_tree fndecl) -{ - if (! fndecl) - return ix86_abi; - return ix86_function_type_abi (TREE_TYPE (fndecl)); -} - -/* Returns value SYSV_ABI, MS_ABI dependent on cfun, specifying the - call abi used. */ -enum calling_abi -ix86_cfun_abi (void) -{ - if (! cfun) - return ix86_abi; - return cfun->machine->call_abi; -} - /* Write the extra assembler code needed to declare a function properly. */ void @@ -6439,10 +6429,7 @@ extern void init_regs (void); void ix86_call_abi_override (const_tree fndecl) { - if (fndecl == NULL_TREE) - cfun->machine->call_abi = ix86_abi; - else - cfun->machine->call_abi = ix86_function_type_abi (TREE_TYPE (fndecl)); + cfun->machine->call_abi = ix86_function_abi (fndecl); } /* 64-bit MS and SYSV ABI have different set of call used registers. Avoid