This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] rs6000: Renumber the registers
- From: Segher Boessenkool <segher at kernel dot crashing dot org>
- To: gcc-patches at gcc dot gnu dot org
- Cc: dje dot gcc at gmail dot com, Segher Boessenkool <segher at kernel dot crashing dot org>
- Date: Mon, 6 May 2019 23:46:40 +0000
- Subject: [PATCH] rs6000: Renumber the registers
This renumbers the registers.
It moves the VRs to 64..95, right after the GPRs and the FPRS. This
means that the VSRs (which are aliases to the FPRs and the VRs, in
that order) are consecutive now.
It removes MQ, which has been just a stub for ages (it is a leftover
from RIOS, old POWER).
It moves the CR fields to 100..107, which is a bit easier to read
than the 68..75 is was before.
The rest fills the holes. It should be easy to move anything else
after this series, so the exact order isn't very important anymore,
we aren't stuck with it if we dislike it.
Many things still want the GPRs to be at 0..31, and some things want
the FPRs at 32..63. I don't think we'll ever want to change that,
so I left it be.
Small things... It removes DWARF_FRAME_REGISTERS, it used to save
1000 or so words of memory, but it has been just a handful for a
while, and now it is one. Some whitespace fixes. Testing showed one
or two places where register allocation was different (not worse, not
better, just different).
Tested on BE and LE Linux (p7 and p9); committing to trunk.
Segher
2019-05-06 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (FIRST_ALTIVEC_REGNO, LAST_ALTIVEC_REGNO)
(LR_REGNO, CTR_REGNO, CA_REGNO, ARG_POINTER_REGNUM, CR0_REGNO)
(CR1_REGNO, CR2_REGNO, CR3_REGNO, CR4_REGNO, CR5_REGNO, CR6_REGNO)
(CR7_REGNO, MAX_CR_REGNO, VRSAVE_REGNO, VSCR_REGNO)
(FRAME_POINTER_REGNUM): Change numbering.
* config/rs6000/rs6000.c (rs6000_reg_names): Adjust.
(alt_reg_names): Adjust.
(rs6000_conditional_register_usage): Don't mark hard register 64 as
fixed.
* config/rs6000/rs6000.h (FIRST_PSEUDO_REGISTER): Adjust.
(DWARF_FRAME_REGISTERS): Delete.
(DWARF2_FRAME_REG_OUT): Fix whitespace.
(FIXED_REGISTERS, CALL_USED_REGISTERS, CALL_REALLY_USED_REGISTERS):
Adjust.
(REG_ALLOC_ORDER): Adjust.
(FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM): Adjust.
(REG_CLASS_CONTENTS): Adjust.
(RETURN_ADDR_RTX): Change comment.
(REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P): Use ARG_POINTER_REGNUM
instead of 67.
(REGISTER_NAMES): Adjust.
(ADDITIONAL_REGISTER_NAMES): Adjust.
* config/rs6000/darwin.h (REGISTER_NAMES): Adjust.
---
gcc/config/rs6000/darwin.h | 20 ++--
gcc/config/rs6000/rs6000.c | 64 +++++------
gcc/config/rs6000/rs6000.h | 272 +++++++++++++++++++++++---------------------
gcc/config/rs6000/rs6000.md | 36 +++---
4 files changed, 203 insertions(+), 189 deletions(-)
diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h
index d86333d..4774d1d 100644
--- a/gcc/config/rs6000/darwin.h
+++ b/gcc/config/rs6000/darwin.h
@@ -215,23 +215,27 @@ extern int darwin_emit_branch_islands;
#undef REGISTER_NAMES
#define REGISTER_NAMES \
{ \
+ /* GPRs */ \
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
"r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \
"r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \
+ /* FPRs */ \
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
"f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
"f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
- "mq", "lr", "ctr", "ap", \
+ /* VRs */ \
+ "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", \
+ "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", \
+ "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", \
+ "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", \
+ /* lr ctr ca ap */ \
+ "lr", "ctr", "xer", "ap", \
+ /* cr0..cr7 */ \
"cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \
- "xer", \
- "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", \
- "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", \
- "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", \
- "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", \
- "vrsave", "vscr", \
- "sfp" \
+ /* vrsave vscr sfp */ \
+ "vrsave", "vscr", "sfp" \
}
/* This outputs NAME to FILE. */
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index d7b7526..1114cab 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1464,53 +1464,53 @@ static GTY (()) hash_table<builtin_hasher> *builtin_hash_table;
/* Default register names. */
char rs6000_reg_names[][8] =
{
+ /* GPRs */
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "11", "12", "13", "14", "15",
"16", "17", "18", "19", "20", "21", "22", "23",
"24", "25", "26", "27", "28", "29", "30", "31",
+ /* FPRs */
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "11", "12", "13", "14", "15",
"16", "17", "18", "19", "20", "21", "22", "23",
"24", "25", "26", "27", "28", "29", "30", "31",
- "mq", "lr", "ctr","ap",
+ /* VRs */
"0", "1", "2", "3", "4", "5", "6", "7",
- "ca",
- /* AltiVec registers. */
- "0", "1", "2", "3", "4", "5", "6", "7",
- "8", "9", "10", "11", "12", "13", "14", "15",
- "16", "17", "18", "19", "20", "21", "22", "23",
- "24", "25", "26", "27", "28", "29", "30", "31",
- "vrsave", "vscr",
- /* Soft frame pointer. */
- "sfp",
- /* HTM SPR registers. */
- "tfhar", "tfiar", "texasr"
+ "8", "9", "10", "11", "12", "13", "14", "15",
+ "16", "17", "18", "19", "20", "21", "22", "23",
+ "24", "25", "26", "27", "28", "29", "30", "31",
+ /* lr ctr ca ap */
+ "lr", "ctr", "ca", "ap",
+ /* cr0..cr7 */
+ "0", "1", "2", "3", "4", "5", "6", "7",
+ /* vrsave vscr sfp */
+ "vrsave", "vscr", "sfp",
};
#ifdef TARGET_REGNAMES
static const char alt_reg_names[][8] =
{
- "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7",
- "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15",
- "%r16", "%r17", "%r18", "%r19", "%r20", "%r21", "%r22", "%r23",
- "%r24", "%r25", "%r26", "%r27", "%r28", "%r29", "%r30", "%r31",
- "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7",
- "%f8", "%f9", "%f10", "%f11", "%f12", "%f13", "%f14", "%f15",
- "%f16", "%f17", "%f18", "%f19", "%f20", "%f21", "%f22", "%f23",
- "%f24", "%f25", "%f26", "%f27", "%f28", "%f29", "%f30", "%f31",
- "mq", "lr", "ctr", "ap",
- "%cr0", "%cr1", "%cr2", "%cr3", "%cr4", "%cr5", "%cr6", "%cr7",
- "ca",
- /* AltiVec registers. */
- "%v0", "%v1", "%v2", "%v3", "%v4", "%v5", "%v6", "%v7",
+ /* GPRs */
+ "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7",
+ "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15",
+ "%r16", "%r17", "%r18", "%r19", "%r20", "%r21", "%r22", "%r23",
+ "%r24", "%r25", "%r26", "%r27", "%r28", "%r29", "%r30", "%r31",
+ /* FPRs */
+ "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7",
+ "%f8", "%f9", "%f10", "%f11", "%f12", "%f13", "%f14", "%f15",
+ "%f16", "%f17", "%f18", "%f19", "%f20", "%f21", "%f22", "%f23",
+ "%f24", "%f25", "%f26", "%f27", "%f28", "%f29", "%f30", "%f31",
+ /* VRs */
+ "%v0", "%v1", "%v2", "%v3", "%v4", "%v5", "%v6", "%v7",
"%v8", "%v9", "%v10", "%v11", "%v12", "%v13", "%v14", "%v15",
"%v16", "%v17", "%v18", "%v19", "%v20", "%v21", "%v22", "%v23",
"%v24", "%v25", "%v26", "%v27", "%v28", "%v29", "%v30", "%v31",
- "vrsave", "vscr",
- /* Soft frame pointer. */
- "sfp",
- /* HTM SPR registers. */
- "tfhar", "tfiar", "texasr"
+ /* lr ctr ca ap */
+ "lr", "ctr", "ca", "ap",
+ /* cr0..cr7 */
+ "%cr0", "%cr1", "%cr2", "%cr3", "%cr4", "%cr5", "%cr6", "%cr7",
+ /* vrsave vscr sfp */
+ "vrsave", "vscr", "sfp",
};
#endif
@@ -9495,10 +9495,6 @@ rs6000_conditional_register_usage (void)
if (TARGET_DEBUG_TARGET)
fprintf (stderr, "rs6000_conditional_register_usage called\n");
- /* Set MQ register fixed (already call_used) so that it will not be
- allocated. */
- fixed_regs[64] = 1;
-
/* 64-bit AIX and Linux reserve GPR13 for thread-private data. */
if (TARGET_64BIT)
fixed_regs[13] = call_used_regs[13]
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 3a32c11..15d00e6 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -811,14 +811,9 @@ enum data_align { align_abi, align_opt, align_both };
in inline functions.
Another pseudo (not included in DWARF_FRAME_REGISTERS) is soft frame
- pointer, which is eventually eliminated in favor of SP or FP.
+ pointer, which is eventually eliminated in favor of SP or FP. */
- The 3 HTM registers aren't also included in DWARF_FRAME_REGISTERS. */
-
-#define FIRST_PSEUDO_REGISTER 112
-
-/* The sfp register isn't included in DWARF_FRAME_REGISTERS. */
-#define DWARF_FRAME_REGISTERS (FIRST_PSEUDO_REGISTER - 1)
+#define FIRST_PSEUDO_REGISTER 111
/* Use standard DWARF numbering for DWARF debugging information. */
#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number ((REGNO), 0)
@@ -830,7 +825,7 @@ enum data_align { align_abi, align_opt, align_both };
collected using DWARF_FRAME_REGNUM to those that should be output in
.debug_frame and .eh_frame. */
#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) \
- rs6000_dbx_register_number ((REGNO), (FOR_EH)? 2 : 1)
+ rs6000_dbx_register_number ((REGNO), (FOR_EH) ? 2 : 1)
/* 1 for registers that have pervasive standard uses
and are not available for the register allocator.
@@ -841,16 +836,21 @@ enum data_align { align_abi, align_opt, align_both };
On System V implementations, r13 is fixed and not available for use. */
#define FIXED_REGISTERS \
- {0, 1, FIXED_R2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FIXED_R13, 0, 0, \
+ {/* GPRs */ \
+ 0, 1, FIXED_R2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FIXED_R13, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ /* FPRs */ \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, \
- /* AltiVec registers. */ \
+ /* VRs */ \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 1 \
- , 1 \
+ /* lr ctr ca ap */ \
+ 0, 0, 1, 1, \
+ /* cr0..cr7 */ \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ /* vrsave vscr sfp */ \
+ 1, 1, 1 \
}
/* 1 for registers not available across function calls.
@@ -861,16 +861,21 @@ enum data_align { align_abi, align_opt, align_both };
Aside from that, you can include as many other registers as you like. */
#define CALL_USED_REGISTERS \
- {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \
+ {/* GPRs */ \
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ /* FPRs */ \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, \
- /* AltiVec registers. */ \
+ /* VRs */ \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 1 \
- , 1 \
+ /* lr ctr ca ap */ \
+ 1, 1, 1, 1, \
+ /* cr0..cr7 */ \
+ 1, 1, 0, 0, 0, 1, 1, 1, \
+ /* vrsave vscr sfp */ \
+ 1, 1, 1 \
}
/* Like `CALL_USED_REGISTERS' except this macro doesn't require that
@@ -880,16 +885,21 @@ enum data_align { align_abi, align_opt, align_both };
of `CALL_USED_REGISTERS'. */
#define CALL_REALLY_USED_REGISTERS \
- {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \
+ {/* GPRs */ \
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ /* FPRs */ \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, \
- /* AltiVec registers. */ \
+ /* VRs */ \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0 \
- , 0 \
+ /* lr ctr ca ap */ \
+ 1, 1, 1, 1, \
+ /* cr0..cr7 */ \
+ 1, 1, 0, 0, 0, 1, 1, 1, \
+ /* vrsave vscr sfp */ \
+ 0, 0, 0 \
}
#define TOTAL_ALTIVEC_REGS (LAST_ALTIVEC_REGNO - FIRST_ALTIVEC_REGNO + 1)
@@ -954,22 +964,22 @@ enum data_align { align_abi, align_opt, align_both };
33, \
63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, \
50, 49, 48, 47, 46, \
- 68, 75, 73, 74, 69, 72, 71, 70, \
+ 100, 107, 105, 106, 101, 104, 103, 102, \
MAYBE_R2_AVAILABLE \
9, 10, 8, 7, 6, 5, 4, \
3, EARLY_R12 11, 0, \
31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, \
18, 17, 16, 15, 14, 13, LATE_R12 \
- 66, 65, \
- 1, MAYBE_R2_FIXED 67, 76, \
+ 97, 96, \
+ 1, MAYBE_R2_FIXED 99, 98, \
/* AltiVec registers. */ \
- 77, 78, \
- 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, \
- 79, \
- 96, 95, 94, 93, 92, 91, \
- 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, \
- 109, 110, \
- 111 \
+ 64, 65, \
+ 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, \
+ 66, \
+ 83, 82, 81, 80, 79, 78, \
+ 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, \
+ 108, 109, \
+ 110 \
}
/* True if register is floating-point. */
@@ -1077,10 +1087,10 @@ enum data_align { align_abi, align_opt, align_both };
#define HARD_FRAME_POINTER_REGNUM 31
/* Base register for access to local variables of the function. */
-#define FRAME_POINTER_REGNUM 111
+#define FRAME_POINTER_REGNUM 110
/* Base register for access to arguments of the function. */
-#define ARG_POINTER_REGNUM 67
+#define ARG_POINTER_REGNUM 99
/* Place to put static chain when calling a function that requires it. */
#define STATIC_CHAIN_REGNUM 11
@@ -1180,41 +1190,41 @@ enum reg_class
/* NO_REGS. */ \
{ 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, \
/* BASE_REGS. */ \
- { 0xfffffffe, 0x00000000, 0x00000008, 0x00008000 }, \
+ { 0xfffffffe, 0x00000000, 0x00000000, 0x00004008 }, \
/* GENERAL_REGS. */ \
- { 0xffffffff, 0x00000000, 0x00000008, 0x00008000 }, \
+ { 0xffffffff, 0x00000000, 0x00000000, 0x00004008 }, \
/* FLOAT_REGS. */ \
{ 0x00000000, 0xffffffff, 0x00000000, 0x00000000 }, \
/* ALTIVEC_REGS. */ \
- { 0x00000000, 0x00000000, 0xffffe000, 0x00001fff }, \
+ { 0x00000000, 0x00000000, 0xffffffff, 0x00000000 }, \
/* VSX_REGS. */ \
- { 0x00000000, 0xffffffff, 0xffffe000, 0x00001fff }, \
+ { 0x00000000, 0xffffffff, 0xffffffff, 0x00000000 }, \
/* VRSAVE_REGS. */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00002000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00001000 }, \
/* VSCR_REGS. */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00004000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00002000 }, \
/* GEN_OR_FLOAT_REGS. */ \
- { 0xffffffff, 0xffffffff, 0x00000008, 0x00008000 }, \
+ { 0xffffffff, 0xffffffff, 0x00000000, 0x00004008 }, \
/* LINK_REGS. */ \
- { 0x00000000, 0x00000000, 0x00000002, 0x00000000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00000001 }, \
/* CTR_REGS. */ \
- { 0x00000000, 0x00000000, 0x00000004, 0x00000000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00000002 }, \
/* LINK_OR_CTR_REGS. */ \
- { 0x00000000, 0x00000000, 0x00000006, 0x00000000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00000003 }, \
/* SPECIAL_REGS. */ \
- { 0x00000000, 0x00000000, 0x00000006, 0x00002000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00001003 }, \
/* SPEC_OR_GEN_REGS. */ \
- { 0xffffffff, 0x00000000, 0x0000000e, 0x0000a000 }, \
+ { 0xffffffff, 0x00000000, 0x00000000, 0x0000500b }, \
/* CR0_REGS. */ \
- { 0x00000000, 0x00000000, 0x00000010, 0x00000000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00000010 }, \
/* CR_REGS. */ \
- { 0x00000000, 0x00000000, 0x00000ff0, 0x00000000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00000ff0 }, \
/* NON_FLOAT_REGS. */ \
- { 0xffffffff, 0x00000000, 0x00000ffe, 0x00008000 }, \
+ { 0xffffffff, 0x00000000, 0x00000000, 0x00004ffb }, \
/* CA_REGS. */ \
- { 0x00000000, 0x00000000, 0x00001000, 0x00000000 }, \
+ { 0x00000000, 0x00000000, 0x00000000, 0x00000004 }, \
/* ALL_REGS. */ \
- { 0xffffffff, 0xffffffff, 0xfffffffe, 0x0000ffff } \
+ { 0xffffffff, 0xffffffff, 0xffffffff, 0x00007fff } \
}
/* The same information, inverted:
@@ -1625,7 +1635,7 @@ typedef struct rs6000_args
#define RETURN_ADDRESS_OFFSET \
((DEFAULT_ABI == ABI_V4 ? 4 : 8) << (TARGET_64BIT ? 1 : 0))
-/* The current return address is in link register (65). The return address
+/* The current return address is in the link register. The return address
of anything farther back is accessed normally at an offset of 8 from the
frame pointer. */
#define RETURN_ADDR_RTX(COUNT, FRAME) \
@@ -1679,18 +1689,22 @@ typedef struct rs6000_args
#define REGNO_OK_FOR_INDEX_P(REGNO) \
(HARD_REGISTER_NUM_P (REGNO) \
- ? (REGNO) <= 31 || (REGNO) == 67 \
+ ? (REGNO) <= 31 \
+ || (REGNO) == ARG_POINTER_REGNUM \
|| (REGNO) == FRAME_POINTER_REGNUM \
: (reg_renumber[REGNO] >= 0 \
- && (reg_renumber[REGNO] <= 31 || reg_renumber[REGNO] == 67 \
+ && (reg_renumber[REGNO] <= 31 \
+ || reg_renumber[REGNO] == ARG_POINTER_REGNUM \
|| reg_renumber[REGNO] == FRAME_POINTER_REGNUM)))
#define REGNO_OK_FOR_BASE_P(REGNO) \
(HARD_REGISTER_NUM_P (REGNO) \
- ? ((REGNO) > 0 && (REGNO) <= 31) || (REGNO) == 67 \
+ ? ((REGNO) > 0 && (REGNO) <= 31) \
+ || (REGNO) == ARG_POINTER_REGNUM \
|| (REGNO) == FRAME_POINTER_REGNUM \
: (reg_renumber[REGNO] > 0 \
- && (reg_renumber[REGNO] <= 31 || reg_renumber[REGNO] == 67 \
+ && (reg_renumber[REGNO] <= 31 \
+ || reg_renumber[REGNO] == ARG_POINTER_REGNUM \
|| reg_renumber[REGNO] == FRAME_POINTER_REGNUM)))
/* Nonzero if X is a hard reg that can be used as an index
@@ -2022,7 +2036,7 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
{ \
&rs6000_reg_names[ 0][0], /* r0 */ \
&rs6000_reg_names[ 1][0], /* r1 */ \
- &rs6000_reg_names[ 2][0], /* r2 */ \
+ &rs6000_reg_names[ 2][0], /* r2 */ \
&rs6000_reg_names[ 3][0], /* r3 */ \
&rs6000_reg_names[ 4][0], /* r4 */ \
&rs6000_reg_names[ 5][0], /* r5 */ \
@@ -2053,7 +2067,7 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
&rs6000_reg_names[30][0], /* r30 */ \
&rs6000_reg_names[31][0], /* r31 */ \
\
- &rs6000_reg_names[32][0], /* fr0 */ \
+ &rs6000_reg_names[32][0], /* fr0 */ \
&rs6000_reg_names[33][0], /* fr1 */ \
&rs6000_reg_names[34][0], /* fr2 */ \
&rs6000_reg_names[35][0], /* fr3 */ \
@@ -2086,57 +2100,57 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
&rs6000_reg_names[62][0], /* fr30 */ \
&rs6000_reg_names[63][0], /* fr31 */ \
\
- &rs6000_reg_names[64][0], /* was mq */ \
- &rs6000_reg_names[65][0], /* lr */ \
- &rs6000_reg_names[66][0], /* ctr */ \
- &rs6000_reg_names[67][0], /* ap */ \
+ &rs6000_reg_names[64][0], /* vr0 */ \
+ &rs6000_reg_names[65][0], /* vr1 */ \
+ &rs6000_reg_names[66][0], /* vr2 */ \
+ &rs6000_reg_names[67][0], /* vr3 */ \
+ &rs6000_reg_names[68][0], /* vr4 */ \
+ &rs6000_reg_names[69][0], /* vr5 */ \
+ &rs6000_reg_names[70][0], /* vr6 */ \
+ &rs6000_reg_names[71][0], /* vr7 */ \
+ &rs6000_reg_names[72][0], /* vr8 */ \
+ &rs6000_reg_names[73][0], /* vr9 */ \
+ &rs6000_reg_names[74][0], /* vr10 */ \
+ &rs6000_reg_names[75][0], /* vr11 */ \
+ &rs6000_reg_names[76][0], /* vr12 */ \
+ &rs6000_reg_names[77][0], /* vr13 */ \
+ &rs6000_reg_names[78][0], /* vr14 */ \
+ &rs6000_reg_names[79][0], /* vr15 */ \
+ &rs6000_reg_names[80][0], /* vr16 */ \
+ &rs6000_reg_names[81][0], /* vr17 */ \
+ &rs6000_reg_names[82][0], /* vr18 */ \
+ &rs6000_reg_names[83][0], /* vr19 */ \
+ &rs6000_reg_names[84][0], /* vr20 */ \
+ &rs6000_reg_names[85][0], /* vr21 */ \
+ &rs6000_reg_names[86][0], /* vr22 */ \
+ &rs6000_reg_names[87][0], /* vr23 */ \
+ &rs6000_reg_names[88][0], /* vr24 */ \
+ &rs6000_reg_names[89][0], /* vr25 */ \
+ &rs6000_reg_names[90][0], /* vr26 */ \
+ &rs6000_reg_names[91][0], /* vr27 */ \
+ &rs6000_reg_names[92][0], /* vr28 */ \
+ &rs6000_reg_names[93][0], /* vr29 */ \
+ &rs6000_reg_names[94][0], /* vr30 */ \
+ &rs6000_reg_names[95][0], /* vr31 */ \
\
- &rs6000_reg_names[68][0], /* cr0 */ \
- &rs6000_reg_names[69][0], /* cr1 */ \
- &rs6000_reg_names[70][0], /* cr2 */ \
- &rs6000_reg_names[71][0], /* cr3 */ \
- &rs6000_reg_names[72][0], /* cr4 */ \
- &rs6000_reg_names[73][0], /* cr5 */ \
- &rs6000_reg_names[74][0], /* cr6 */ \
- &rs6000_reg_names[75][0], /* cr7 */ \
+ &rs6000_reg_names[96][0], /* lr */ \
+ &rs6000_reg_names[97][0], /* ctr */ \
+ &rs6000_reg_names[98][0], /* ca */ \
+ &rs6000_reg_names[99][0], /* ap */ \
\
- &rs6000_reg_names[76][0], /* ca */ \
+ &rs6000_reg_names[100][0], /* cr0 */ \
+ &rs6000_reg_names[101][0], /* cr1 */ \
+ &rs6000_reg_names[102][0], /* cr2 */ \
+ &rs6000_reg_names[103][0], /* cr3 */ \
+ &rs6000_reg_names[104][0], /* cr4 */ \
+ &rs6000_reg_names[105][0], /* cr5 */ \
+ &rs6000_reg_names[106][0], /* cr6 */ \
+ &rs6000_reg_names[107][0], /* cr7 */ \
\
- &rs6000_reg_names[77][0], /* v0 */ \
- &rs6000_reg_names[78][0], /* v1 */ \
- &rs6000_reg_names[79][0], /* v2 */ \
- &rs6000_reg_names[80][0], /* v3 */ \
- &rs6000_reg_names[81][0], /* v4 */ \
- &rs6000_reg_names[82][0], /* v5 */ \
- &rs6000_reg_names[83][0], /* v6 */ \
- &rs6000_reg_names[84][0], /* v7 */ \
- &rs6000_reg_names[85][0], /* v8 */ \
- &rs6000_reg_names[86][0], /* v9 */ \
- &rs6000_reg_names[87][0], /* v10 */ \
- &rs6000_reg_names[88][0], /* v11 */ \
- &rs6000_reg_names[89][0], /* v12 */ \
- &rs6000_reg_names[90][0], /* v13 */ \
- &rs6000_reg_names[91][0], /* v14 */ \
- &rs6000_reg_names[92][0], /* v15 */ \
- &rs6000_reg_names[93][0], /* v16 */ \
- &rs6000_reg_names[94][0], /* v17 */ \
- &rs6000_reg_names[95][0], /* v18 */ \
- &rs6000_reg_names[96][0], /* v19 */ \
- &rs6000_reg_names[97][0], /* v20 */ \
- &rs6000_reg_names[98][0], /* v21 */ \
- &rs6000_reg_names[99][0], /* v22 */ \
- &rs6000_reg_names[100][0], /* v23 */ \
- &rs6000_reg_names[101][0], /* v24 */ \
- &rs6000_reg_names[102][0], /* v25 */ \
- &rs6000_reg_names[103][0], /* v26 */ \
- &rs6000_reg_names[104][0], /* v27 */ \
- &rs6000_reg_names[105][0], /* v28 */ \
- &rs6000_reg_names[106][0], /* v29 */ \
- &rs6000_reg_names[107][0], /* v30 */ \
- &rs6000_reg_names[108][0], /* v31 */ \
- &rs6000_reg_names[109][0], /* vrsave */ \
- &rs6000_reg_names[110][0], /* vscr */ \
- &rs6000_reg_names[111][0] /* sfp */ \
+ &rs6000_reg_names[108][0], /* vrsave */ \
+ &rs6000_reg_names[109][0], /* vscr */ \
+ \
+ &rs6000_reg_names[110][0] /* sfp */ \
}
/* Table of additional register names to use in user input. */
@@ -2158,21 +2172,21 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
{"fr20", 52}, {"fr21", 53}, {"fr22", 54}, {"fr23", 55}, \
{"fr24", 56}, {"fr25", 57}, {"fr26", 58}, {"fr27", 59}, \
{"fr28", 60}, {"fr29", 61}, {"fr30", 62}, {"fr31", 63}, \
- {"v0", 77}, {"v1", 78}, {"v2", 79}, {"v3", 80}, \
- {"v4", 81}, {"v5", 82}, {"v6", 83}, {"v7", 84}, \
- {"v8", 85}, {"v9", 86}, {"v10", 87}, {"v11", 88}, \
- {"v12", 89}, {"v13", 90}, {"v14", 91}, {"v15", 92}, \
- {"v16", 93}, {"v17", 94}, {"v18", 95}, {"v19", 96}, \
- {"v20", 97}, {"v21", 98}, {"v22", 99}, {"v23", 100}, \
- {"v24", 101},{"v25", 102},{"v26", 103},{"v27", 104}, \
- {"v28", 105},{"v29", 106},{"v30", 107},{"v31", 108}, \
- {"vrsave", 109}, {"vscr", 110}, \
+ {"v0", 64}, {"v1", 65}, {"v2", 66}, {"v3", 67}, \
+ {"v4", 68}, {"v5", 69}, {"v6", 70}, {"v7", 71}, \
+ {"v8", 72}, {"v9", 73}, {"v10", 74}, {"v11", 75}, \
+ {"v12", 76}, {"v13", 77}, {"v14", 78}, {"v15", 79}, \
+ {"v16", 80}, {"v17", 81}, {"v18", 82}, {"v19", 83}, \
+ {"v20", 84}, {"v21", 85}, {"v22", 86}, {"v23", 87}, \
+ {"v24", 88}, {"v25", 89}, {"v26", 90}, {"v27", 91}, \
+ {"v28", 92}, {"v29", 93}, {"v30", 94}, {"v31", 95}, \
+ {"vrsave", 108}, {"vscr", 109}, \
/* no additional names for: lr, ctr, ap */ \
- {"cr0", 68}, {"cr1", 69}, {"cr2", 70}, {"cr3", 71}, \
- {"cr4", 72}, {"cr5", 73}, {"cr6", 74}, {"cr7", 75}, \
- {"cc", 68}, {"sp", 1}, {"toc", 2}, \
+ {"cr0", 100},{"cr1", 101},{"cr2", 102},{"cr3", 103}, \
+ {"cr4", 104},{"cr5", 105},{"cr6", 106},{"cr7", 107}, \
+ {"cc", 100},{"sp", 1}, {"toc", 2}, \
/* CA is only part of XER, but we do not model the other parts (yet). */ \
- {"xer", 76}, \
+ {"xer", 98}, \
/* VSX registers overlaid on top of FR, Altivec registers */ \
{"vs0", 32}, {"vs1", 33}, {"vs2", 34}, {"vs3", 35}, \
{"vs4", 36}, {"vs5", 37}, {"vs6", 38}, {"vs7", 39}, \
@@ -2182,14 +2196,14 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
{"vs20", 52}, {"vs21", 53}, {"vs22", 54}, {"vs23", 55}, \
{"vs24", 56}, {"vs25", 57}, {"vs26", 58}, {"vs27", 59}, \
{"vs28", 60}, {"vs29", 61}, {"vs30", 62}, {"vs31", 63}, \
- {"vs32", 77}, {"vs33", 78}, {"vs34", 79}, {"vs35", 80}, \
- {"vs36", 81}, {"vs37", 82}, {"vs38", 83}, {"vs39", 84}, \
- {"vs40", 85}, {"vs41", 86}, {"vs42", 87}, {"vs43", 88}, \
- {"vs44", 89}, {"vs45", 90}, {"vs46", 91}, {"vs47", 92}, \
- {"vs48", 93}, {"vs49", 94}, {"vs50", 95}, {"vs51", 96}, \
- {"vs52", 97}, {"vs53", 98}, {"vs54", 99}, {"vs55", 100}, \
- {"vs56", 101},{"vs57", 102},{"vs58", 103},{"vs59", 104}, \
- {"vs60", 105},{"vs61", 106},{"vs62", 107},{"vs63", 108}, \
+ {"vs32", 64}, {"vs33", 65}, {"vs34", 66}, {"vs35", 67}, \
+ {"vs36", 68}, {"vs37", 69}, {"vs38", 70}, {"vs39", 71}, \
+ {"vs40", 72}, {"vs41", 73}, {"vs42", 74}, {"vs43", 75}, \
+ {"vs44", 76}, {"vs45", 77}, {"vs46", 78}, {"vs47", 79}, \
+ {"vs48", 80}, {"vs49", 81}, {"vs50", 82}, {"vs51", 83}, \
+ {"vs52", 84}, {"vs53", 85}, {"vs54", 86}, {"vs55", 87}, \
+ {"vs56", 88}, {"vs57", 89}, {"vs58", 90}, {"vs59", 91}, \
+ {"vs60", 92}, {"vs61", 93}, {"vs62", 94}, {"vs63", 95}, \
}
/* This is how to output an element of a case-vector that is relative. */
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 9c1a645..411d7f0 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -33,24 +33,24 @@ (define_constants
(LAST_GPR_REGNO 31)
(FIRST_FPR_REGNO 32)
(LAST_FPR_REGNO 63)
- (LR_REGNO 65)
- (CTR_REGNO 66)
- (ARG_POINTER_REGNUM 67)
- (CR0_REGNO 68)
- (CR1_REGNO 69)
- (CR2_REGNO 70)
- (CR3_REGNO 71)
- (CR4_REGNO 72)
- (CR5_REGNO 73)
- (CR6_REGNO 74)
- (CR7_REGNO 75)
- (MAX_CR_REGNO 75)
- (CA_REGNO 76)
- (FIRST_ALTIVEC_REGNO 77)
- (LAST_ALTIVEC_REGNO 108)
- (VRSAVE_REGNO 109)
- (VSCR_REGNO 110)
- (FRAME_POINTER_REGNUM 111)
+ (FIRST_ALTIVEC_REGNO 64)
+ (LAST_ALTIVEC_REGNO 95)
+ (LR_REGNO 96)
+ (CTR_REGNO 97)
+ (CA_REGNO 98)
+ (ARG_POINTER_REGNUM 99)
+ (CR0_REGNO 100)
+ (CR1_REGNO 101)
+ (CR2_REGNO 102)
+ (CR3_REGNO 103)
+ (CR4_REGNO 104)
+ (CR5_REGNO 105)
+ (CR6_REGNO 106)
+ (CR7_REGNO 107)
+ (MAX_CR_REGNO 107)
+ (VRSAVE_REGNO 108)
+ (VSCR_REGNO 109)
+ (FRAME_POINTER_REGNUM 110)
])
;;
--
1.8.3.1