diff options
author | Torbjorn Granlund <tege@gnu.org> | 1992-07-02 19:43:44 +0000 |
---|---|---|
committer | Torbjorn Granlund <tege@gnu.org> | 1992-07-02 19:43:44 +0000 |
commit | 3a5babacd9f34ceb94ae707696fd0ffeae85f7ca (patch) | |
tree | 9293345326b0195c8dca887ff4e85278ef0c9812 /gcc | |
parent | 51c2b9d10438d42cfd050b17664a6f567cfdebf8 (diff) | |
download | gcc-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.c | 21 |
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) |