public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Michael Meissner <meissner@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc(refs/users/meissner/heads/work071)] Revert patches.
Date: Wed, 20 Oct 2021 21:21:41 +0000 (GMT)	[thread overview]
Message-ID: <20211020212141.8DB2B3858D39@sourceware.org> (raw)

https://gcc.gnu.org/g:791797cc1855c096000e61b0b54c74e27de40614

commit 791797cc1855c096000e61b0b54c74e27de40614
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Wed Oct 20 17:20:58 2021 -0400

    Revert patches.
    
    2021-10-20  Michael Meissner  <meissner@the-meissners.org>
    
    gcc/
    
            Revert patches.
            * config/rs6000/rs6000-protos.h (RS6000_CONST_*): New macros.
            (rs6000_const_splat): New enum type.
            (rs6000_const): New structure type.
            (constant_to_bytes): New declaration.
            * config/rs6000/rs6000.c (constant_integer_to_bytes): New helper
            function.
            (constant_floating_point_to_bytes): New helper function.
            (constant_to_bytes): New function.

Diff:
---
 gcc/config/rs6000/rs6000-protos.h |  35 -----
 gcc/config/rs6000/rs6000.c        | 263 --------------------------------------
 2 files changed, 298 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h
index a3fecbb7812..14f6b313105 100644
--- a/gcc/config/rs6000/rs6000-protos.h
+++ b/gcc/config/rs6000/rs6000-protos.h
@@ -222,41 +222,6 @@ address_is_prefixed (rtx addr,
   return (iform == INSN_FORM_PREFIXED_NUMERIC
 	  || iform == INSN_FORM_PCREL_LOCAL);
 }
-
-/* Functions and data structures relating to constants that are converted to
-   byte, half-word, word, and double-word values.  All fields are kept in big
-   endian order.  */
-#define RS6000_CONST_MAX_BITS		128	/* Largest constant size.  */
-#define RS6000_CONST_MAX_BYTES		(RS6000_CONST_MAX_BITS / 8)
-#define RS6000_CONST_MAX_HALF_WORDS	(RS6000_CONST_MAX_BITS / 16)
-#define RS6000_CONST_MAX_WORDS		(RS6000_CONST_MAX_BITS / 32)
-#define RS6000_CONST_MAX_DOUBLE_WORDS	(RS6000_CONST_MAX_BITS / 64)
-
-/* If the constant is small, whether we will splat the constant to fill a
-   vector.  */
-typedef enum {
-  RS6000_CONST_NO_SPLAT,		/* Do not splat the constant.  */
-  RS6000_CONST_SPLAT_16_BYTES		/* Splat to fill 16-bytes.  */
-} rs6000_const_splat;
-
-typedef struct {
-  /* Constant as various sized items.  */
-  unsigned HOST_WIDE_INT double_words[RS6000_CONST_MAX_DOUBLE_WORDS];
-  unsigned int words[RS6000_CONST_MAX_WORDS];
-  unsigned short half_words[RS6000_CONST_MAX_HALF_WORDS];
-  unsigned char bytes[RS6000_CONST_MAX_BYTES];
-
-  unsigned total_size;			/* Size in bytes of the constant.  */
-  unsigned original_size;		/* Size before a possible splat.  */
-  bool fp_constant_p;			/* Is the constant floating point?  */
-  bool all_double_words_same;		/* Are the double words all equal?  */
-  bool all_words_same;			/* Are the words all equal?  */
-  bool all_half_words_same;		/* Are the halft words all equal?  */
-  bool all_bytes_same;			/* Are the bytes all equal?  */
-} rs6000_const;
-
-extern bool constant_to_bytes (rtx, machine_mode, rs6000_const *,
-			       rs6000_const_splat);
 #endif /* RTX_CODE */
 
 #ifdef TREE_CODE
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index af37a556e94..acba4d9f26c 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -28587,269 +28587,6 @@ rs6000_output_addr_vec_elt (FILE *file, int value)
   fprintf (file, "\n");
 }
 
-\f
-/* Copy an integer constant to the constant structure.  */
-
-static void
-constant_integer_to_bytes (rtx op,
-			   machine_mode mode,
-			   size_t byte_num,
-			   rs6000_const *info)
-{
-  unsigned HOST_WIDE_INT uvalue = UINTVAL (op);
-  unsigned bitsize = GET_MODE_BITSIZE (mode);
-
-  for (int shift = bitsize - 8; shift >= 0; shift -= 8)
-    info->bytes[byte_num++] = (uvalue >> shift) & 0xff;
-}
-
-/* Copy an floating point constant to the rs6000 constant structure.  */
-
-static void
-constant_floating_point_to_bytes (rtx op,
-				  machine_mode mode,
-				  size_t byte_num,
-				  rs6000_const *info)
-{
-  unsigned bitsize = GET_MODE_BITSIZE (mode);
-  unsigned num_words = bitsize / 32;
-  const REAL_VALUE_TYPE *rtype = CONST_DOUBLE_REAL_VALUE (op);
-  long real_words[RS6000_CONST_MAX_WORDS];
-
-  /* Make sure we don't overflow the real_words array and that it is
-     filled completely.  */
-  gcc_assert (bitsize <= RS6000_CONST_MAX_BITS && (bitsize % 32) == 0);
-
-  real_to_target (real_words, rtype, mode);
-
-  /* Iterate over each 32-bit word in the floating point constant.  The
-     real_to_target function puts out words in endian fashion.  We need
-     to arrange so the words are written in big endian order.  */
-  for (unsigned num = 0; num < num_words; num++)
-    {
-      unsigned endian_num = (BYTES_BIG_ENDIAN
-			     ? num
-			     : num_words - 1 - num);
-
-      unsigned uvalue = real_words[endian_num];
-      for (int shift = 32 - 8; shift >= 0; shift -= 8)
-	info->bytes[byte_num++] = (uvalue >> shift) & 0xff;
-    }
-
-  /* Mark that this constant involes floating point.  */
-  info->fp_constant_p = true;
-}
-
-/* Convert an RTL constant OP with mode MODE to an internal structure INFO.  Possibly splat the constant to a larger size (SPLAT).
-
-   Break out the constant out to bytes, half words, words, and double words.
-   Return true if we have successfully broken out a constant.
-
-   We handle CONST_INT, CONST_DOUBLE, CONST_VECTOR, and VEC_DUPLICATE of
-   constants.  */
-
-bool
-constant_to_bytes (rtx op,
-		   machine_mode mode,
-		   rs6000_const *info,		
-		   rs6000_const_splat splat)
-{
-  /* Initialize the constant structure.  */
-  memset ((void *)info, 0, sizeof (rs6000_const));
-
-  /* Assume plain integer constants are DImode.  */
-  if (mode == VOIDmode)
-    mode = CONST_INT_P (op) ? DImode : GET_MODE (op);
-
-  if (mode == VOIDmode)
-    return false;
-
-  unsigned size = GET_MODE_SIZE (mode);
-
-  if (size > RS6000_CONST_MAX_BYTES)
-    return false;
-
-  /* Set up the bits.  */
-  switch (GET_CODE (op))
-    {
-      /* Integer constants, default to double word.  */
-    case CONST_INT:
-      {
-	constant_integer_to_bytes (op, mode, 0, info);
-	break;
-      }
-
-      /* Floating point constants.  */
-    case CONST_DOUBLE:
-      {
-	/* Fail if the floating point constant is the wrong mode.  */
-	if (GET_MODE (op) != mode)
-	  return false;
-
-	/* SFmode stored as scalars are stored in DFmode format.  */
-	if (mode == SFmode)
-	  {
-	    mode = DFmode;
-	    size = GET_MODE_SIZE (DFmode);
-	  }
-
-	constant_floating_point_to_bytes (op, mode, 0, info);
-	break;
-      }
-
-      /* Vector constants, iterate each element.  On little endian systems, we
-	 have to reverse the element numbers.  */
-    case CONST_VECTOR:
-      {
-	/* Fail if the vector constant is the wrong mode.  */
-	if (GET_MODE (op) != mode)
-	  return false;
-
-	machine_mode ele_mode = GET_MODE_INNER (mode);
-	size_t ele_size = GET_MODE_SIZE (ele_mode);
-	size_t nunits = GET_MODE_NUNITS (mode);
-
-	for (size_t num = 0; num < nunits; num++)
-	  {
-	    rtx ele = CONST_VECTOR_ELT (op, num);
-	    size_t byte_num = (BYTES_BIG_ENDIAN
-			       ? num
-			       : nunits - 1 - num) * ele_size;
-
-	    if (CONST_INT_P (ele))
-	      constant_integer_to_bytes (ele, ele_mode, byte_num, info);
-	    else if (CONST_DOUBLE_P (ele))
-	      constant_floating_point_to_bytes (ele, ele_mode, byte_num, info);
-	    else
-	      return false;
-	  }
-
-	break;
-      }
-
-	/* Treat VEC_DUPLICATE of a constant just like a vector constant.  */
-    case VEC_DUPLICATE:
-      {
-	/* Fail if the vector duplicate is the wrong mode.  */
-	if (GET_MODE (op) != mode)
-	  return false;
-
-	machine_mode ele_mode = GET_MODE_INNER (mode);
-	size_t ele_size = GET_MODE_SIZE (ele_mode);
-	rtx ele = XEXP (op, 0);
-	size_t nunits = GET_MODE_NUNITS (mode);
-
-	if (!CONST_INT_P (ele) && !CONST_DOUBLE_P (ele))
-	  return false;
-
-	for (size_t num = 0; num < nunits; num++)
-	  {
-	    size_t byte_num = num * ele_size;
-
-	    if (CONST_INT_P (ele))
-	      constant_integer_to_bytes (ele, ele_mode, byte_num, info);
-	    else
-	      constant_floating_point_to_bytes (ele, ele_mode, byte_num, info);
-	  }
-
-	break;
-      }
-
-      /* Any thing else, just return failure.  */
-    default:
-      return false;
-    }
-
-  unsigned total_size = size;
-
-  /* Possibly splat the constant to fill a vector size.  */
-  if (splat == RS6000_CONST_SPLAT_16_BYTES)
-    {
-      if (size < 16)
-	{
-	  total_size = 16;
-	  if ((total_size % size) != 0)
-	    return false;
-
-	  for (size_t offset = size; offset < total_size; offset += size)
-	    memcpy ((void *) &info->bytes[offset],
-		    (void *) &info->bytes[0],
-		    size);
-	}
-    }
-
-  else if (splat != RS6000_CONST_NO_SPLAT)
-    return false;
-
-  /* Remember total/original sizes.  */
-  info->total_size = total_size;
-  info->original_size = size;
-
-  /* Determine if the bytes are all the same.  */
-  unsigned char first_byte = info->bytes[0];
-  info->all_bytes_same = true;
-  for (size_t i = 1; i < total_size; i++)
-    if (first_byte != info->bytes[i])
-      {
-	info->all_bytes_same = false;
-	break;
-      }
-
-  /* Pack half words together & determine if all of the half words are the
-     same.  */
-  for (size_t i = 0; i < total_size; i += 2)
-    info->half_words[i / 2] = ((info->bytes[i] << 8)
-			       | info->bytes[i + 1]);
-
-  unsigned short first_hword = info->half_words[0];
-  info->all_half_words_same = true;
-  for (size_t i = 1; i < total_size / 2; i++)
-    if (first_hword != info->half_words[i])
-      {
-	info->all_half_words_same = false;
-	break;
-      }
-
-  /* Pack words together & determine if all of the words are the same.  */
-  for (size_t i = 0; i < total_size; i += 4)
-    info->words[i / 4] = ((info->bytes[i] << 24)
-			  | (info->bytes[i + 1] << 16)
-			  | (info->bytes[i + 2] << 8)
-			  | info->bytes[i + 3]);
-
-  unsigned int first_word = info->words[0];
-  info->all_words_same = true;
-  for (size_t i = 1; i < total_size / 4; i++)
-    if (first_word != info->words[i])
-      {
-	info->all_words_same = false;
-	break;
-      }
-
-  /* Pack double words together & determine if all of the double words are the
-     same.  */
-  for (size_t i = 0; i < total_size; i += 8)
-    {
-      unsigned HOST_WIDE_INT d_word = 0;
-      for (size_t j = 0; j < 8; j++)
-	d_word = (d_word << 8) | info->bytes[i + j];
-
-      info->double_words[i / 8] = d_word;
-    }
-
-  unsigned HOST_WIDE_INT first_dword = info->double_words[0];
-  info->all_double_words_same = true;
-  for (size_t i = 1; i < total_size / 8; i++)
-    if (first_dword != info->double_words[i])
-      {
-	info->all_double_words_same = false;
-	break;
-      }
-
-  return true;
-}
-
-\f
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 #include "gt-rs6000.h"


             reply	other threads:[~2021-10-20 21:21 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-20 21:21 Michael Meissner [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-10-29 22:31 Michael Meissner
2021-10-21  2:51 Michael Meissner
2021-10-21  2:27 Michael Meissner
2021-10-21  0:37 Michael Meissner
2021-10-20 22:26 Michael Meissner
2021-10-20 17:56 Michael Meissner
2021-10-18 18:49 Michael Meissner
2021-10-18 17:43 Michael Meissner
2021-10-18 14:07 Michael Meissner
2021-10-15 23:44 Michael Meissner
2021-10-15 15:12 Michael Meissner
2021-10-15  5:23 Michael Meissner
2021-10-14 23:43 Michael Meissner
2021-10-14 16:47 Michael Meissner
2021-10-14 15:35 Michael Meissner
2021-10-14 13:43 Michael Meissner
2021-10-14  2:59 Michael Meissner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211020212141.8DB2B3858D39@sourceware.org \
    --to=meissner@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).