aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-08-24 17:11:41 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-08-24 17:11:41 -0400
commitac030a7b0c7e45a1214731a0fb0a60e3a312167a (patch)
treec5ec6c9156a100679940fbc3d2aa683f1bd572d2
parent7eec3328e2b481e3bac07bda55e0fcbac2819377 (diff)
downloadgcc-ac030a7b0c7e45a1214731a0fb0a60e3a312167a.zip
gcc-ac030a7b0c7e45a1214731a0fb0a60e3a312167a.tar.gz
gcc-ac030a7b0c7e45a1214731a0fb0a60e3a312167a.tar.bz2
(EXTRA_CONSTRAINT): Add new letter, `R'.
(ENCODE_SECTION_INFO): Don't check TREE_ASM_WRITTEN. (PREDICATE_COSTS): Add call_operand. From-SVN: r7965
-rw-r--r--gcc/config/alpha/alpha.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index d1b5fbc..0c29441 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -510,10 +510,13 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
/* Optional extra constraints for this machine.
For the Alpha, `Q' means that this is a memory operand but not a
- reference to an unaligned location. */
+ reference to an unaligned location.
+ `R' is a SYMBOL_REF that has SYMBOL_REF_FLAG set or is the current
+ function. */
#define EXTRA_CONSTRAINT(OP, C) \
((C) == 'Q' ? GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) != AND \
+ : (C) == 'R' ? current_file_function_operand (OP, Pmode) \
: 0)
/* Given an rtx X being reloaded into a reg required to be
@@ -1514,14 +1517,12 @@ literal_section () \
#define READONLY_DATA_SECTION literal_section
-/* If we are referencing a function that is static or is known to be
- in this file, make the SYMBOL_REF special. We can use this to see
- indicate that we can branch to this function without setting PV or
- restoring GP. */
+/* If we are referencing a function that is static, make the SYMBOL_REF
+ special. We use this to see indicate we can branch to this function
+ without setting PV or restoring GP. */
#define ENCODE_SECTION_INFO(DECL) \
- if (TREE_CODE (DECL) == FUNCTION_DECL \
- && (TREE_ASM_WRITTEN (DECL) || ! TREE_PUBLIC (DECL))) \
+ if (TREE_CODE (DECL) == FUNCTION_DECL && ! TREE_PUBLIC (DECL)) \
SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;
/* How to refer to registers in assembler output.
@@ -1837,6 +1838,7 @@ literal_section () \
{"divmod_operator", {DIV, MOD, UDIV, UMOD}}, \
{"fp0_operand", {CONST_DOUBLE}}, \
{"current_file_function_operand", {SYMBOL_REF}}, \
+ {"call_operand", {REG, SYMBOL_REF}}, \
{"input_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \
SYMBOL_REF, CONST, LABEL_REF}}, \
{"aligned_memory_operand", {MEM}}, \