aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard@codesourcery.com>2007-08-08 15:06:05 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2007-08-08 15:06:05 +0000
commit67da85da7923399850541459ffb67c812ef0625d (patch)
tree307c2200e7bb246635fe7f59e68a7dc2395047e7
parent76b4f0f724ae26bf9f7a6ed3b888d4360fd6ea5d (diff)
downloadgcc-67da85da7923399850541459ffb67c812ef0625d.zip
gcc-67da85da7923399850541459ffb67c812ef0625d.tar.gz
gcc-67da85da7923399850541459ffb67c812ef0625d.tar.bz2
mips-protos.h (SYMBOL_GENERAL): Rename to...
gcc/ * config/mips/mips-protos.h (SYMBOL_GENERAL): Rename to... (SYMBOL_ABSOLUTE): ...this. (SYMBOL_SMALL_DATA): Rename to... (SYMBOL_GP_RELATIVE): ...this. (SYMBOL_CONSTANT_POOL): Rename to... (SYMBOL_PC_RELATIVE): ...this. * config/mips/mips.c (mips_classify_symbol, mips_symbolic_constant_p) (mips_symbolic_address_p, mips_symbol_insns, override_options) (mips_rewrite_small_data_p, mips_use_anchors_for_symbol_p): Update after above changes. * config/mips/predicates.md (const_call_insn_operand): Likewise. (general_symbolic_operand): Rename to... (absolute_symbolic_operand): ...this. * config/mips/mips.md: Update after above changes. From-SVN: r127294
-rw-r--r--gcc/ChangeLog17
-rw-r--r--gcc/config/mips/mips-protos.h21
-rw-r--r--gcc/config/mips/mips.c54
-rw-r--r--gcc/config/mips/mips.md12
-rw-r--r--gcc/config/mips/predicates.md6
5 files changed, 65 insertions, 45 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5529610..e4b4229 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,20 @@
+2007-08-08 Richard Sandiford <richard@codesourcery.com>
+
+ * config/mips/mips-protos.h (SYMBOL_GENERAL): Rename to...
+ (SYMBOL_ABSOLUTE): ...this.
+ (SYMBOL_SMALL_DATA): Rename to...
+ (SYMBOL_GP_RELATIVE): ...this.
+ (SYMBOL_CONSTANT_POOL): Rename to...
+ (SYMBOL_PC_RELATIVE): ...this.
+ * config/mips/mips.c (mips_classify_symbol, mips_symbolic_constant_p)
+ (mips_symbolic_address_p, mips_symbol_insns, override_options)
+ (mips_rewrite_small_data_p, mips_use_anchors_for_symbol_p): Update
+ after above changes.
+ * config/mips/predicates.md (const_call_insn_operand): Likewise.
+ (general_symbolic_operand): Rename to...
+ (absolute_symbolic_operand): ...this.
+ * config/mips/mips.md: Update after above changes.
+
2007-08-08 Vladimir Yanovsky <yanov@il.ibm.com>
Revital Eres <eres@il.ibm.com>
diff --git a/gcc/config/mips/mips-protos.h b/gcc/config/mips/mips-protos.h
index debd626..233ffea 100644
--- a/gcc/config/mips/mips-protos.h
+++ b/gcc/config/mips/mips-protos.h
@@ -27,14 +27,17 @@ along with GCC; see the file COPYING3. If not see
/* Classifies a SYMBOL_REF, LABEL_REF or UNSPEC address.
- SYMBOL_GENERAL
- Used when none of the below apply.
+ SYMBOL_ABSOLUTE
+ The symbol's value will be calculated using absolute relocations,
+ such as %hi and %lo.
- SYMBOL_SMALL_DATA
- The symbol refers to something in a small data section.
+ SYMBOL_GP_RELATIVE
+ The symbol's value will be calculated by adding a 16-bit offset
+ from $gp.
- SYMBOL_CONSTANT_POOL
- The symbol refers to something in the mips16 constant pool.
+ SYMBOL_PC_RELATIVE
+ The symbol's value will be calculated using a MIPS16 PC-relative
+ calculation.
SYMBOL_GOT_PAGE_OFST
The symbol's value will be calculated by loading an address
@@ -87,9 +90,9 @@ along with GCC; see the file COPYING3. If not see
An UNSPEC wrapper around any kind of address. It represents the
low 16 bits of that address. */
enum mips_symbol_type {
- SYMBOL_GENERAL,
- SYMBOL_SMALL_DATA,
- SYMBOL_CONSTANT_POOL,
+ SYMBOL_ABSOLUTE,
+ SYMBOL_GP_RELATIVE,
+ SYMBOL_PC_RELATIVE,
SYMBOL_GOT_PAGE_OFST,
SYMBOL_GOT_DISP,
SYMBOL_GOTOFF_PAGE,
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 103a5d0..afa46b4 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -1446,10 +1446,10 @@ mips_classify_symbol (rtx x)
if (GET_CODE (x) == LABEL_REF)
{
if (TARGET_MIPS16)
- return SYMBOL_CONSTANT_POOL;
+ return SYMBOL_PC_RELATIVE;
if (TARGET_ABICALLS && !TARGET_ABSOLUTE_ABICALLS)
return SYMBOL_GOT_PAGE_OFST;
- return SYMBOL_GENERAL;
+ return SYMBOL_ABSOLUTE;
}
gcc_assert (GET_CODE (x) == SYMBOL_REF);
@@ -1460,25 +1460,25 @@ mips_classify_symbol (rtx x)
if (CONSTANT_POOL_ADDRESS_P (x))
{
if (TARGET_MIPS16)
- return SYMBOL_CONSTANT_POOL;
+ return SYMBOL_PC_RELATIVE;
if (!TARGET_EMBEDDED_DATA
&& GET_MODE_SIZE (get_pool_mode (x)) <= mips_section_threshold)
- return SYMBOL_SMALL_DATA;
+ return SYMBOL_GP_RELATIVE;
}
/* Do not use small-data accesses for weak symbols; they may end up
being zero. */
if (SYMBOL_REF_SMALL_P (x)
&& !SYMBOL_REF_WEAK (x))
- return SYMBOL_SMALL_DATA;
+ return SYMBOL_GP_RELATIVE;
if (TARGET_ABICALLS)
{
/* Don't use GOT accesses for locally-binding symbols; we can use
%hi and %lo instead. */
if (TARGET_ABSOLUTE_ABICALLS && mips_symbol_binds_local_p (x))
- return SYMBOL_GENERAL;
+ return SYMBOL_ABSOLUTE;
/* There are three cases to consider:
@@ -1505,7 +1505,7 @@ mips_classify_symbol (rtx x)
return SYMBOL_GOT_PAGE_OFST;
}
- return SYMBOL_GENERAL;
+ return SYMBOL_ABSOLUTE;
}
/* Return true if OFFSET is within the range [0, ALIGN), where ALIGN
@@ -1559,7 +1559,7 @@ mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
relocations. */
switch (*symbol_type)
{
- case SYMBOL_GENERAL:
+ case SYMBOL_ABSOLUTE:
case SYMBOL_64_HIGH:
case SYMBOL_64_MID:
case SYMBOL_64_LOW:
@@ -1573,7 +1573,7 @@ mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
/* In other cases the relocations can handle any offset. */
return true;
- case SYMBOL_CONSTANT_POOL:
+ case SYMBOL_PC_RELATIVE:
/* Allow constant pool references to be converted to LABEL+CONSTANT.
In this case, we no longer have access to the underlying constant,
but the original symbol-based access was known to be valid. */
@@ -1582,7 +1582,7 @@ mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
/* Fall through. */
- case SYMBOL_SMALL_DATA:
+ case SYMBOL_GP_RELATIVE:
/* Make sure that the offset refers to something within the
same object block. This should guarantee that the final
PC- or GP-relative offset is within the 16-bit limit. */
@@ -1681,13 +1681,13 @@ mips_symbolic_address_p (enum mips_symbol_type symbol_type,
{
switch (symbol_type)
{
- case SYMBOL_GENERAL:
+ case SYMBOL_ABSOLUTE:
return !TARGET_MIPS16;
- case SYMBOL_SMALL_DATA:
+ case SYMBOL_GP_RELATIVE:
return true;
- case SYMBOL_CONSTANT_POOL:
+ case SYMBOL_PC_RELATIVE:
/* PC-relative addressing is only available for lw and ld. */
return GET_MODE_SIZE (mode) == 4 || GET_MODE_SIZE (mode) == 8;
@@ -1838,7 +1838,7 @@ mips_symbol_insns (enum mips_symbol_type type)
{
switch (type)
{
- case SYMBOL_GENERAL:
+ case SYMBOL_ABSOLUTE:
/* In mips16 code, general symbols must be fetched from the
constant pool. */
if (TARGET_MIPS16)
@@ -1857,11 +1857,11 @@ mips_symbol_insns (enum mips_symbol_type type)
symbols we just need a preparatory lui. */
return (ABI_HAS_64BIT_SYMBOLS ? 6 : 2);
- case SYMBOL_SMALL_DATA:
+ case SYMBOL_GP_RELATIVE:
case SYMBOL_HALF:
return 1;
- case SYMBOL_CONSTANT_POOL:
+ case SYMBOL_PC_RELATIVE:
/* This case is for mips16 only. Assume we'll need an
extended instruction. */
return 2;
@@ -5429,32 +5429,32 @@ override_options (void)
mips_hi_relocs[SYMBOL_64_LOW] = "%hi(";
mips_lo_relocs[SYMBOL_64_LOW] = "%lo(";
- mips_split_p[SYMBOL_GENERAL] = true;
- mips_lo_relocs[SYMBOL_GENERAL] = "%lo(";
+ mips_split_p[SYMBOL_ABSOLUTE] = true;
+ mips_lo_relocs[SYMBOL_ABSOLUTE] = "%lo(";
}
}
else
{
if (TARGET_EXPLICIT_RELOCS || mips_split_addresses)
{
- mips_split_p[SYMBOL_GENERAL] = true;
- mips_hi_relocs[SYMBOL_GENERAL] = "%hi(";
- mips_lo_relocs[SYMBOL_GENERAL] = "%lo(";
+ mips_split_p[SYMBOL_ABSOLUTE] = true;
+ mips_hi_relocs[SYMBOL_ABSOLUTE] = "%hi(";
+ mips_lo_relocs[SYMBOL_ABSOLUTE] = "%lo(";
}
}
if (TARGET_MIPS16)
{
/* The high part is provided by a pseudo copy of $gp. */
- mips_split_p[SYMBOL_SMALL_DATA] = true;
- mips_lo_relocs[SYMBOL_SMALL_DATA] = "%gprel(";
+ mips_split_p[SYMBOL_GP_RELATIVE] = true;
+ mips_lo_relocs[SYMBOL_GP_RELATIVE] = "%gprel(";
}
if (TARGET_EXPLICIT_RELOCS)
{
/* Small data constants are kept whole until after reload,
then lowered by mips_rewrite_small_data. */
- mips_lo_relocs[SYMBOL_SMALL_DATA] = "%gp_rel(";
+ mips_lo_relocs[SYMBOL_GP_RELATIVE] = "%gp_rel(";
mips_split_p[SYMBOL_GOT_PAGE_OFST] = true;
if (TARGET_NEWABI)
@@ -6439,7 +6439,7 @@ mips_rewrite_small_data_p (rtx x)
return (TARGET_EXPLICIT_RELOCS
&& mips_symbolic_constant_p (x, &symbol_type)
- && symbol_type == SYMBOL_SMALL_DATA);
+ && symbol_type == SYMBOL_GP_RELATIVE);
}
@@ -8309,8 +8309,8 @@ mips_use_anchors_for_symbol_p (rtx symbol)
{
switch (mips_classify_symbol (symbol))
{
- case SYMBOL_CONSTANT_POOL:
- case SYMBOL_SMALL_DATA:
+ case SYMBOL_PC_RELATIVE:
+ case SYMBOL_GP_RELATIVE:
return false;
default:
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index c72569a..e522f4e 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -3094,7 +3094,7 @@
[(set_attr "type" "store")
(set_attr "mode" "<MODE>")])
-;; An instruction to calculate the high part of a 64-bit SYMBOL_GENERAL.
+;; An instruction to calculate the high part of a 64-bit SYMBOL_ABSOLUTE.
;; The required value is:
;;
;; (%highest(op1) << 48) + (%higher(op1) << 32) + (%hi(op1) << 16)
@@ -3111,7 +3111,7 @@
;; to take effect.
(define_insn_and_split "*lea_high64"
[(set (match_operand:DI 0 "register_operand" "=d")
- (high:DI (match_operand:DI 1 "general_symbolic_operand" "")))]
+ (high:DI (match_operand:DI 1 "absolute_symbolic_operand" "")))]
"TARGET_EXPLICIT_RELOCS && ABI_HAS_64BIT_SYMBOLS"
"#"
"&& epilogue_completed"
@@ -3136,7 +3136,7 @@
;; daddu op1,op1,op0
(define_peephole2
[(set (match_operand:DI 1 "register_operand")
- (high:DI (match_operand:DI 2 "general_symbolic_operand")))
+ (high:DI (match_operand:DI 2 "absolute_symbolic_operand")))
(match_scratch:DI 0 "d")]
"TARGET_EXPLICIT_RELOCS && ABI_HAS_64BIT_SYMBOLS"
[(set (match_dup 1) (high:DI (match_dup 3)))
@@ -3150,7 +3150,7 @@
})
;; On most targets, the expansion of (lo_sum (high X) X) for a 64-bit
-;; SYMBOL_GENERAL X will take 6 cycles. This next pattern allows combine
+;; SYMBOL_ABSOLUTE X will take 6 cycles. This next pattern allows combine
;; to merge the HIGH and LO_SUM parts of a move if the HIGH part is only
;; used once. We can then use the sequence:
;;
@@ -3164,7 +3164,7 @@
;; which takes 4 cycles on most superscalar targets.
(define_insn_and_split "*lea64"
[(set (match_operand:DI 0 "register_operand" "=d")
- (match_operand:DI 1 "general_symbolic_operand" ""))
+ (match_operand:DI 1 "absolute_symbolic_operand" ""))
(clobber (match_scratch:DI 2 "=&d"))]
"TARGET_EXPLICIT_RELOCS && ABI_HAS_64BIT_SYMBOLS && cse_not_expected"
"#"
@@ -4182,7 +4182,7 @@
(match_dup 4)] UNSPEC_LOAD_GOT))]
{
operands[2] = pic_offset_table_rtx;
- operands[3] = mips_unspec_address (operands[0], SYMBOL_GENERAL);
+ operands[3] = mips_unspec_address (operands[0], SYMBOL_ABSOLUTE);
operands[4] = mips_unspec_address (operands[1], SYMBOL_HALF);
})
diff --git a/gcc/config/mips/predicates.md b/gcc/config/mips/predicates.md
index f567b34..7f69f98 100644
--- a/gcc/config/mips/predicates.md
+++ b/gcc/config/mips/predicates.md
@@ -101,7 +101,7 @@
switch (symbol_type)
{
- case SYMBOL_GENERAL:
+ case SYMBOL_ABSOLUTE:
/* We can only use direct calls for TARGET_ABSOLUTE_ABICALLS if we
are sure that the target function does not need $25 to be live
on entry. This is true for any locally-defined function because
@@ -229,11 +229,11 @@
return mips_symbolic_constant_p (op, &type);
})
-(define_predicate "general_symbolic_operand"
+(define_predicate "absolute_symbolic_operand"
(match_code "const,symbol_ref,label_ref")
{
enum mips_symbol_type type;
- return mips_symbolic_constant_p (op, &type) && type == SYMBOL_GENERAL;
+ return mips_symbolic_constant_p (op, &type) && type == SYMBOL_ABSOLUTE;
})
(define_predicate "got_disp_operand"