diff options
author | Kai Tietz <kai.tietz@onevision.com> | 2008-07-07 19:22:48 +0000 |
---|---|---|
committer | Kai Tietz <ktietz@gcc.gnu.org> | 2008-07-07 21:22:48 +0200 |
commit | 8432ea85051b1ea9502b73c009856890189609a6 (patch) | |
tree | 290b8bff389689fdebb864d0e9fa1614c2209890 | |
parent | 10465436b53ca9071b1e7d660f23fc54f743e931 (diff) | |
download | gcc-8432ea85051b1ea9502b73c009856890189609a6.zip gcc-8432ea85051b1ea9502b73c009856890189609a6.tar.gz gcc-8432ea85051b1ea9502b73c009856890189609a6.tar.bz2 |
i386.c (is_va_list_char_pointer): New.
2008-07-07 Kai Tietz <kai.tietz@onevision.com>
* config/i386/i386.c (is_va_list_char_pointer): New.
(ix86_va_start): Replace compare with ms_va_list_type_node
by is_va_list_char_pointer.
(ix86_gimplify_va_arg): Likewise.
From-SVN: r137593
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 21 |
2 files changed, 24 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7c37e08..e2a48fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-07-07 Kai Tietz <kai.tietz@onevision.com> + + * config/i386/i386.c (is_va_list_char_pointer): New. + (ix86_va_start): Replace compare with ms_va_list_type_node + by is_va_list_char_pointer. + (ix86_gimplify_va_arg): Likewise. + 2008-07-07 Martin Jambor <mjambor@suse.cz> * cgraph.c (cgraph_edge_max_uid): New variable. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7bedb76..26999e71 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5408,6 +5408,21 @@ ix86_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode, setup_incoming_varargs_64 (&next_cum); } +/* Checks if TYPE is of kind va_list char *. */ + +static bool +is_va_list_char_pointer (tree type) +{ + tree canonic; + + /* For 32-bit it is always true. */ + if (!TARGET_64BIT) + return true; + canonic = ix86_canonical_va_list_type (type); + return (canonic == ms_va_list_type_node + || (DEFAULT_ABI == MS_ABI && canonic == va_list_type_node)); +} + /* Implement va_start. */ static void @@ -5419,8 +5434,7 @@ ix86_va_start (tree valist, rtx nextarg) tree type; /* Only 64bit target needs something special. */ - if (!TARGET_64BIT || - ix86_canonical_va_list_type (TREE_TYPE (valist)) == ms_va_list_type_node) + if (!TARGET_64BIT || is_va_list_char_pointer (TREE_TYPE (valist))) { std_expand_builtin_va_start (valist, nextarg); return; @@ -5499,8 +5513,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) enum machine_mode nat_mode; /* Only 64bit target needs something special. */ - if (!TARGET_64BIT || - ix86_canonical_va_list_type (TREE_TYPE (valist)) == ms_va_list_type_node) + if (!TARGET_64BIT || is_va_list_char_pointer (TREE_TYPE (valist))) return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); f_gpr = TYPE_FIELDS (TREE_TYPE (sysv_va_list_type_node)); |