summaryrefslogtreecommitdiff
path: root/gcc/config/vax/vax.md
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1994-06-18 14:26:15 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1994-06-18 14:26:15 +0000
commit6fffe29cf39a7308ec331c60b4a4500fa6f27007 (patch)
tree00998262f78232c9c90e61d65411e3d59003779e /gcc/config/vax/vax.md
parentb2bc10f73ae4f06efba43fe9779e1483afa98168 (diff)
downloadgcc-6fffe29cf39a7308ec331c60b4a4500fa6f27007.tar.gz
(lshrsi3): New define_expand.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7513 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/vax/vax.md')
-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 5b3dec63bc3..ce0f067f129 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")