MMX patterns fix (head/branch)
Jan Hubicka
jh@suse.cz
Wed Feb 21 08:34:00 GMT 2001
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")])
More information about the Gcc-patches
mailing list