From 40c0c3cf73f72f33767cfe1d35c82a2533667ba3 Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Wed, 14 Jul 1999 23:04:45 +0000 Subject: [PATCH] emit-rtl.c (gen_realpart): Issue an error for cases GCC can not handle at this time instead of silently... * emit-rtl.c (gen_realpart): Issue an error for cases GCC can not handle at this time instead of silently generating incorrect code. (gen_imagpart): Likewise. From-SVN: r28105 --- gcc/ChangeLog | 4 ++++ gcc/emit-rtl.c | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62228a9..d854d08 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ Wed Jul 14 23:28:06 1999 Jeffrey A Law (law@cygnus.com) + * emit-rtl.c (gen_realpart): Issue an error for cases GCC can not + handle at this time instead of silently generating incorrect code. + (gen_imagpart): Likewise. + * reload.c (find_reloads): Emit a USE for a pseudo register without a hard register if we could not create an optional reload for the pseudo. diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 0b310f2..4519a23 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -966,6 +966,11 @@ gen_realpart (mode, x) { if (GET_CODE (x) == CONCAT && GET_MODE (XEXP (x, 0)) == mode) return XEXP (x, 0); + else if (WORDS_BIG_ENDIAN + && GET_MODE_BITSIZE (mode) < BITS_PER_WORD + && REG_P (x) + && REGNO (x) < FIRST_PSEUDO_REGISTER) + fatal ("Unable to access real part of complex value in a hard register on this target"); else if (WORDS_BIG_ENDIAN) return gen_highpart (mode, x); else @@ -984,6 +989,11 @@ gen_imagpart (mode, x) return XEXP (x, 1); else if (WORDS_BIG_ENDIAN) return gen_lowpart (mode, x); + else if (!WORDS_BIG_ENDIAN + && GET_MODE_BITSIZE (mode) < BITS_PER_WORD + && REG_P (x) + && REGNO (x) < FIRST_PSEUDO_REGISTER) + fatal ("Unable to access imaginary part of complex value in a hard register on this target"); else return gen_highpart (mode, x); } -- 2.7.4