From d9984eae9d9cc85dbd12f0fc6c2d3415226111b0 Mon Sep 17 00:00:00 2001 From: hjl Date: Sun, 22 Feb 2009 01:10:29 +0000 Subject: [PATCH] 2008-02-21 H.J. Lu * config/i386/i386.c (classify_argument): Don't allow COImode and OImode. (function_arg_advance_32): Don't allow OImode. (function_arg_32): Likewise. (function_value_32): Likewise. (return_in_memory_32): Likewise. (function_arg_64): Remove OImode comment. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144367 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/i386/i386.c | 28 +++++++++++++++++++--------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f033765..1961e74 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2008-02-21 H.J. Lu + * config/i386/i386.c (classify_argument): Don't allow COImode + and OImode. + (function_arg_advance_32): Don't allow OImode. + (function_arg_32): Likewise. + (function_value_32): Likewise. + (return_in_memory_32): Likewise. + (function_arg_64): Remove OImode comment. + +2008-02-21 H.J. Lu + PR target/39261 * config/i386/i386.c (ix86_expand_vector_init_one_nonzero): Use ix86_expand_vector_set for V4DImode in 64bit mode only. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index f179450..120ab15 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5115,9 +5115,11 @@ classify_argument (enum machine_mode mode, const_tree type, case TImode: classes[0] = classes[1] = X86_64_INTEGER_CLASS; return 2; - case CTImode: case COImode: case OImode: + /* OImode shouldn't be used directly. */ + gcc_unreachable (); + case CTImode: return 0; case SFmode: if (!(bit_offset % 64)) @@ -5468,6 +5470,10 @@ function_arg_advance_32 (CUMULATIVE_ARGS *cum, enum machine_mode mode, } break; + case OImode: + /* OImode shouldn't be used directly. */ + gcc_unreachable (); + case DFmode: if (cum->float_in_sse < 2) break; @@ -5476,7 +5482,6 @@ function_arg_advance_32 (CUMULATIVE_ARGS *cum, enum machine_mode mode, break; /* FALLTHRU */ - case OImode: case V8SFmode: case V8SImode: case V32QImode: @@ -5673,7 +5678,9 @@ function_arg_32 (CUMULATIVE_ARGS *cum, enum machine_mode mode, break; case OImode: - /* In 32bit, we pass OImode in ymm registers. */ + /* OImode shouldn't be used directly. */ + gcc_unreachable (); + case V8SFmode: case V8SImode: case V32QImode: @@ -5738,9 +5745,6 @@ function_arg_64 (CUMULATIVE_ARGS *cum, enum machine_mode mode, case V16HImode: case V4DFmode: case V4DImode: - /* In 64bit, we pass TImode in interger registers and OImode on - stack. */ - /* Unnamed 256bit vector mode parameters are passed on stack. */ if (!named) return NULL; @@ -6020,8 +6024,7 @@ function_value_32 (enum machine_mode orig_mode, enum machine_mode mode, regno = TARGET_SSE ? FIRST_SSE_REG : 0; /* 32-byte vector modes in %ymm0. */ - else if (mode == OImode - || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 32)) + else if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 32) regno = TARGET_AVX ? FIRST_SSE_REG : 0; /* Floating point return values in %st(0) (unless -mno-fp-ret-in-387). */ @@ -6041,6 +6044,9 @@ function_value_32 (enum machine_mode orig_mode, enum machine_mode mode, regno = FIRST_SSE_REG; } + /* OImode shouldn't be used directly. */ + gcc_assert (mode != OImode); + return gen_rtx_REG (orig_mode, regno); } @@ -6163,7 +6169,7 @@ return_in_memory_32 (const_tree type, enum machine_mode mode) if (MS_AGGREGATE_RETURN && AGGREGATE_TYPE_P (type) && size <= 8) return 0; - if (VECTOR_MODE_P (mode) || mode == TImode || mode == OImode) + if (VECTOR_MODE_P (mode) || mode == TImode) { /* User-created vectors small enough to fit in EAX. */ if (size < 8) @@ -6188,6 +6194,10 @@ return_in_memory_32 (const_tree type, enum machine_mode mode) if (size > 12) return 1; + + /* OImode shouldn't be used directly. */ + gcc_assert (mode != OImode); + return 0; } -- 2.7.4