aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2001-01-07 22:30:22 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2001-01-07 22:30:22 +0100
commiteaf19aba9dd54803ac02782fc2c1945a6971e38f (patch)
tree895c3a796664294ea3092d3b8c7999bf24dc5e1e
parenta8b462be08d807dbf00c1959c2debc241fc215a3 (diff)
downloadgcc-eaf19aba9dd54803ac02782fc2c1945a6971e38f.zip
gcc-eaf19aba9dd54803ac02782fc2c1945a6971e38f.tar.gz
gcc-eaf19aba9dd54803ac02782fc2c1945a6971e38f.tar.bz2
i386.c (constant_call_address_operand): Accept (const (plus (symbol_ref) (const_int))).
* config/i386/i386.c (constant_call_address_operand): Accept (const (plus (symbol_ref) (const_int))). * config/i386/i386.h (PREDICATE_CODES): Add CONST for constant_call_address_operand. * gcc.c-torture/compile/20010107-1.c: New test. From-SVN: r38783
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/config/i386/i386.h2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20010107-1.c6
5 files changed, 22 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6cb5c6d..e060e3a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2001-01-07 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/i386.c (constant_call_address_operand): Accept
+ (const (plus (symbol_ref) (const_int))).
+ * config/i386/i386.h (PREDICATE_CODES): Add CONST for
+ constant_call_address_operand.
+
2001-01-08 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* libgcc2.h (W_TYPE_SIZE): Fix case where MIN_UNITS_PER_WORD == 1
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index c8a25c4..3afc75c 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1109,6 +1109,10 @@ constant_call_address_operand (op, mode)
rtx op;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
+ if (GET_CODE (op) == CONST
+ && GET_CODE (XEXP (op, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT)
+ op = XEXP (XEXP (op, 0), 0);
return GET_CODE (op) == SYMBOL_REF;
}
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 8f219cf..104b344 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2830,7 +2830,7 @@ do { long l; \
LABEL_REF, SUBREG, REG, MEM}}, \
{"pic_symbolic_operand", {CONST}}, \
{"call_insn_operand", {REG, SUBREG, MEM, SYMBOL_REF}}, \
- {"constant_call_address_operand", {SYMBOL_REF}}, \
+ {"constant_call_address_operand", {SYMBOL_REF, CONST}}, \
{"const0_operand", {CONST_INT, CONST_DOUBLE}}, \
{"const1_operand", {CONST_INT}}, \
{"const248_operand", {CONST_INT}}, \
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0626643..0d53b938 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-07 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/compile/20010107-1.c: New test.
+
2001-01-07 Joseph S. Myers <jsm28@cam.ac.uk>
* gcc.c-torture/execute/builtin-noret-1.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/20010107-1.c b/gcc/testsuite/gcc.c-torture/compile/20010107-1.c
new file mode 100644
index 0000000..222def4
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20010107-1.c
@@ -0,0 +1,6 @@
+unsigned long x[4];
+
+void foo(void)
+{
+ ((void (*)())(x+2))();
+}