This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
MMX patterns fix (head/branch)
- To: patches at x86-64 dot org, gcc-patches at gcc dot gnu dot org, rth at cygnus dot com
- Subject: MMX patterns fix (head/branch)
- From: Jan Hubicka <jh at suse dot cz>
- Date: Wed, 21 Feb 2001 17:34:21 +0100
Hi
The shift patterns don't have unspec guard around, as other MMX arithmetics
does. This forces gcc to mysteriously use MMX registers when CSE or combine
manages to produce this insn from something.
Wed Feb 21 17:26:26 CET 2001 Jan Hubicka <jh@suse.cz>
* i386.md (mmx_lshrdi3, mmx_ashldi3): Guard by unspec.
Index: gcc/gcc/config/i386/i386.md
===================================================================
RCS file: /home/cvs/Repository/gcc/gcc/config/i386/i386.md,v
retrieving revision 1.34
diff -c -3 -p -r1.34 i386.md
*** gcc/gcc/config/i386/i386.md 2001/02/20 15:45:33 1.34
--- gcc/gcc/config/i386/i386.md 2001/02/21 16:22:12
***************
*** 17872,17879 ****
;; See logical MMX insns.
(define_insn "mmx_lshrdi3"
[(set (match_operand:DI 0 "register_operand" "=y")
! (lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
! (match_operand:DI 2 "nonmemory_operand" "yi")))]
"TARGET_MMX"
"psrlq\\t{%2, %0|%0, %2}"
[(set_attr "type" "mmx")])
--- 17874,17882 ----
;; See logical MMX insns.
(define_insn "mmx_lshrdi3"
[(set (match_operand:DI 0 "register_operand" "=y")
! (unspec:DI
! [(lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
! (match_operand:DI 2 "nonmemory_operand" "yi"))] 45))]
"TARGET_MMX"
"psrlq\\t{%2, %0|%0, %2}"
[(set_attr "type" "mmx")])
***************
*** 17897,17904 ****
;; See logical MMX insns.
(define_insn "mmx_ashldi3"
[(set (match_operand:DI 0 "register_operand" "=y")
! (ashift:DI (match_operand:DI 1 "register_operand" "0")
! (match_operand:DI 2 "nonmemory_operand" "yi")))]
"TARGET_MMX"
"psllq\\t{%2, %0|%0, %2}"
[(set_attr "type" "mmx")])
--- 17900,17908 ----
;; See logical MMX insns.
(define_insn "mmx_ashldi3"
[(set (match_operand:DI 0 "register_operand" "=y")
! (unspec:DI
! [(ashift:DI (match_operand:DI 1 "register_operand" "0")
! (match_operand:DI 2 "nonmemory_operand" "yi"))] 45))]
"TARGET_MMX"
"psllq\\t{%2, %0|%0, %2}"
[(set_attr "type" "mmx")])