aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gnu.org>1992-07-02 19:43:44 +0000
committerTorbjorn Granlund <tege@gnu.org>1992-07-02 19:43:44 +0000
commit3a5babacd9f34ceb94ae707696fd0ffeae85f7ca (patch)
tree9293345326b0195c8dca887ff4e85278ef0c9812 /gcc
parent51c2b9d10438d42cfd050b17664a6f567cfdebf8 (diff)
downloadgcc-3a5babacd9f34ceb94ae707696fd0ffeae85f7ca.zip
gcc-3a5babacd9f34ceb94ae707696fd0ffeae85f7ca.tar.gz
gcc-3a5babacd9f34ceb94ae707696fd0ffeae85f7ca.tar.bz2
entered into RCS
From-SVN: r1390
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/pa/pa.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 88db91c..0239d86 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -315,6 +315,25 @@ arith5_operand (op, mode)
return register_operand (op, mode) || int5_operand (op, mode);
}
+/* True iff zdepi can be used to generate this CONST_INT. */
+zdepi_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ unsigned x;
+ unsigned lbmask, t;
+
+ if (GET_CODE (op) != CONST_INT)
+ return 0;
+
+ /* This might not be obvious, but it's at least fast.
+ This function is critcal; we don't have the time loops would take. */
+ x = INTVAL (op);
+ lbmask = x & -x;
+ t = ((x >> 4) + lbmask) & ~(lbmask - 1);
+ return ((t & (t - 1)) == 0);
+}
+
/* Return truth value of statement that OP is a call-clobbered register. */
int
clobbered_register (op, mode)
@@ -621,6 +640,8 @@ emit_move_sequence (operands, mode)
return 1;
}
}
+ else if (zdepi_operand (operand1, VOIDmode))
+ return 0;
else if (GET_CODE (operand1) == CONST_INT
? (! SMALL_INT (operand1)
&& (INTVAL (operand1) & 0x7ff) != 0) : 1)