For C6X, I added a patch to separate out a REG_WORDS_BIG_ENDIAN macro
from WORDS_BIG_ENDIAN. Since the patch was originally for 4.5, it missed
a few new instances in IRA where we need to change which macro we use.
The following patch makes big-endian kernels boot.

Bootstrapped and regression tested on i686-linux; can't affect any
target other than C6X. Normally I'd check it in as obvious, but given
that we're in stage4 I'll ask for an OK.


Bernd
        * ira.c (check_allocation): Use REG_WORDS_BIG_ENDIAN, not
        WORDS_BIG_ENDIAN.
        * ira-color.c (setup_profitable_hard_regs, check_hard_reg_p,
        assign_hard_reg): Likewise.

Index: gcc/ira.c
===================================================================
--- gcc/ira.c   (revision 183969)
+++ gcc/ira.c   (working copy)
@@ -2089,7 +2089,7 @@ check_allocation (void)
          int this_regno = hard_regno;
          if (n > 1)
            {
-             if (WORDS_BIG_ENDIAN)
+             if (REG_WORDS_BIG_ENDIAN)
                this_regno += n - i - 1;
              else
                this_regno += i;
@@ -2108,7 +2108,7 @@ check_allocation (void)
              if (ALLOCNO_NUM_OBJECTS (conflict_a) > 1
                  && conflict_nregs == ALLOCNO_NUM_OBJECTS (conflict_a))
                {
-                 if (WORDS_BIG_ENDIAN)
+                 if (REG_WORDS_BIG_ENDIAN)
                    conflict_hard_regno += (ALLOCNO_NUM_OBJECTS (conflict_a)
                                            - OBJECT_SUBWORD (conflict_obj) - 
1);
                  else
Index: gcc/ira-color.c
===================================================================
--- gcc/ira-color.c     (revision 183969)
+++ gcc/ira-color.c     (working copy)
@@ -1067,7 +1067,7 @@ setup_profitable_hard_regs (void)
                {
                  int num = OBJECT_SUBWORD (conflict_obj);
                  
-                 if (WORDS_BIG_ENDIAN)
+                 if (REG_WORDS_BIG_ENDIAN)
                    CLEAR_HARD_REG_BIT
                      (ALLOCNO_COLOR_DATA (conflict_a)->profitable_hard_regs,
                       hard_regno + nobj - num - 1);
@@ -1451,7 +1451,7 @@ check_hard_reg_p (ira_allocno_t a, int h
       
       if (nregs == nwords)
        {
-         if (WORDS_BIG_ENDIAN)
+         if (REG_WORDS_BIG_ENDIAN)
            set_to_test_start = nwords - j - 1;
          else
            set_to_test_start = j;
@@ -1610,7 +1610,7 @@ assign_hard_reg (ira_allocno_t a, bool r
                    {
                      int num = OBJECT_SUBWORD (conflict_obj);
 
-                     if (WORDS_BIG_ENDIAN)
+                     if (REG_WORDS_BIG_ENDIAN)
                        SET_HARD_REG_BIT (conflicting_regs[word],
                                          hard_regno + n_objects - num - 1);
                      else

Reply via email to