aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-05-12 04:55:43 +0000
committerRichard Stallman <rms@gnu.org>1993-05-12 04:55:43 +0000
commit7a61c8e37c5675a28e35cf3471ae054891d272e4 (patch)
treea01d60ec61c8038b9af9a712e00fb914ef4a40d7
parentbd96cb7805f5674f8c582908b43a6a98c2b7f72c (diff)
downloadgcc-7a61c8e37c5675a28e35cf3471ae054891d272e4.zip
gcc-7a61c8e37c5675a28e35cf3471ae054891d272e4.tar.gz
gcc-7a61c8e37c5675a28e35cf3471ae054891d272e4.tar.bz2
(call_insn_operand): New funcion.
From-SVN: r4430
-rw-r--r--gcc/config/i860/i860.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/config/i860/i860.c b/gcc/config/i860/i860.c
index c82c197..0652e08 100644
--- a/gcc/config/i860/i860.c
+++ b/gcc/config/i860/i860.c
@@ -468,6 +468,26 @@ logic_int (op, mode)
{
return (GET_CODE (op) == CONST_INT && LOGIC_INT (op));
}
+
+/* Test for a valid operand for a call instruction.
+ Don't allow the arg pointer register or virtual regs
+ since they may change into reg + const, which the patterns
+ can't handle yet. */
+
+int
+call_insn_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) == MEM
+ && (CONSTANT_ADDRESS_P (XEXP (op, 0))
+ || (GET_CODE (XEXP (op, 0)) == REG
+ && XEXP (op, 0) != arg_pointer_rtx
+ && !(REGNO (XEXP (op, 0)) >= FIRST_PSEUDO_REGISTER
+ && REGNO (XEXP (op, 0)) <= LAST_VIRTUAL_REGISTER))))
+ return 1;
+ return 0;
+}
/* Return the best assembler insn template
for moving operands[1] into operands[0] as a fullword. */