aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-06-18 10:26:15 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-06-18 10:26:15 -0400
commit572e10f482971d72bfe077c25063c26ece0c89b4 (patch)
tree00998262f78232c9c90e61d65411e3d59003779e
parent73d9a835b6f9e8089999bf50b00ff3e1ac1ff1b1 (diff)
downloadgcc-572e10f482971d72bfe077c25063c26ece0c89b4.zip
gcc-572e10f482971d72bfe077c25063c26ece0c89b4.tar.gz
gcc-572e10f482971d72bfe077c25063c26ece0c89b4.tar.bz2
(lshrsi3): New define_expand.
From-SVN: r7513
-rw-r--r--gcc/config/vax/vax.md20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/config/vax/vax.md b/gcc/config/vax/vax.md
index 5b3dec6..ce0f067 100644
--- a/gcc/config/vax/vax.md
+++ b/gcc/config/vax/vax.md
@@ -1253,6 +1253,26 @@
""
"ashq %2,%1,%0")
+;; We used to have expand_shift handle logical right shifts by using extzv,
+;; but this make it very difficult to do lshrdi3. Since the VAX is the
+;; only machine with this kludge, it's better to just do this with a
+;; define_expand and remove that case from expand_shift.
+
+(define_expand "lshrsi3"
+ [(set (match_dup 3)
+ (minus:QI (const_int 32)
+ (match_dup 4)))
+ (set (match_operand:SI 0 "general_operand" "=g")
+ (zero_extract:SI (match_operand:SI 1 "nonmemory_operand" "r")
+ (match_dup 3)
+ (match_operand:SI 2 "register_operand" "g")))]
+ ""
+ "
+{
+ operands[3] = gen_reg_rtx (QImode);
+ operands[4] = gen_lowpart (QImode, operands[2]);
+}")
+
;; Rotate right on the vax works by negating the shift count.
(define_expand "rotrsi3"
[(set (match_operand:SI 0 "general_operand" "=g")