From: Jim Wilson Date: Wed, 26 May 1993 22:39:50 +0000 (-0700) Subject: (ashlsi3): Use shlo instead of shli. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2b7794ad0be64f46c4ad99ca580a5eabe86a3d37;p=gcc.git (ashlsi3): Use shlo instead of shli. From-SVN: r4577 --- diff --git a/gcc/config/i960/i960.md b/gcc/config/i960/i960.md index 191cee99032..dd528291043 100644 --- a/gcc/config/i960/i960.md +++ b/gcc/config/i960/i960.md @@ -2092,12 +2092,20 @@ ;; Arithmetic shift instructions. +;; The shli instruction generates an overflow fault if the sign changes. +;; In the case of overflow, it does not give the natural result, it instead +;; gives the last shift value before the overflow. We can not use this +;; instruction because gcc thinks that arithmetic left shift and logical +;; left shift are identical, and sometimes canonicalizes the logical left +;; shift to an arithmetic left shift. Therefore we must always use the +;; logical left shift instruction. + (define_insn "ashlsi3" [(set (match_operand:SI 0 "register_operand" "=d") (ashift:SI (match_operand:SI 1 "arith_operand" "dI") (match_operand:SI 2 "arith_operand" "dI")))] "" - "shli %2,%1,%0" + "shlo %2,%1,%0" [(set_attr "type" "alu2")]) (define_insn "ashrsi3"