i386.md (nonmemory_szext_operand): New mode attribute.

* config/i386/i386.md (nonmemory_szext_operand): New mode attribute.
	(test<mode>_ccno_1): Macroize insn pattern from testsi_ccno_1
	and testdi_ccno_1 using SWI48 mode attribute.
	(*testdi_1): Use x86_64_szext_nonmemory_operand instead of
	x86_64_szext_general_operand.
	(*testqi_1_maybe_si): Use nonmemory_operand instead of general_operand.
	(*test<mode>_1): Use nonmemory_szext_operand mode attribute
	instead of genera_operand mode attribute.

From-SVN: r273482
This commit is contained in:
Uros Bizjak 2019-07-14 20:52:16 +02:00 committed by Uros Bizjak
parent cbfde6ee68
commit 3e4ceed077
2 changed files with 30 additions and 22 deletions

View File

@ -1,3 +1,14 @@
2019-07-14 Uroš Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (nonmemory_szext_operand): New mode attribute.
(test<mode>_ccno_1): Macroize insn pattern from testsi_ccno_1
and testdi_ccno_1 using SWI48 mode attribute.
(*testdi_1): Use x86_64_szext_nonmemory_operand instead of
x86_64_szext_general_operand.
(*testqi_1_maybe_si): Use nonmemory_operand instead of general_operand.
(*test<mode>_1): Use nonmemory_szext_operand mode attribute
instead of genera_operand mode attribute.
2019-07-14 Vladislav Ivanishin <vlad@ispras.ru>
* gdbhooks.py (DumpFn.invoke): Add explicit casts of return values of

View File

@ -1122,6 +1122,12 @@
(SI "x86_64_szext_general_operand")
(DI "x86_64_szext_general_operand")])
(define_mode_attr nonmemory_szext_operand
[(QI "nonmemory_operand")
(HI "nonmemory_operand")
(SI "x86_64_szext_nonmemory_operand")
(DI "x86_64_szext_nonmemory_operand")])
;; Immediate operand predicate for integer modes.
(define_mode_attr immediate_operand
[(QI "immediate_operand")
@ -8118,11 +8124,12 @@
;; On Pentium, "test imm, reg" is pairable only with eax, ax, and al.
;; Note that this excludes ah.
(define_expand "testsi_ccno_1"
(define_expand "test<mode>_ccno_1"
[(set (reg:CCNO FLAGS_REG)
(compare:CCNO
(and:SI (match_operand:SI 0 "nonimmediate_operand")
(match_operand:SI 1 "x86_64_nonmemory_operand"))
(and:SWI48
(match_operand:SWI48 0 "nonimmediate_operand")
(match_operand:SWI48 1 "<nonmemory_szext_operand>"))
(const_int 0)))])
(define_expand "testqi_ccz_1"
@ -8131,23 +8138,14 @@
(match_operand:QI 1 "nonmemory_operand"))
(const_int 0)))])
(define_expand "testdi_ccno_1"
[(set (reg:CCNO FLAGS_REG)
(compare:CCNO
(and:DI (match_operand:DI 0 "nonimmediate_operand")
(match_operand:DI 1 "x86_64_szext_general_operand"))
(const_int 0)))]
"TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))")
(define_insn "*testdi_1"
[(set (reg FLAGS_REG)
(compare
(and:DI
(match_operand:DI 0 "nonimmediate_operand" "%!*a,r,!*a,r,rm")
(match_operand:DI 1 "x86_64_szext_general_operand" "Z,Z,e,e,re"))
(match_operand:DI 1 "x86_64_szext_nonmemory_operand" "Z,Z,e,e,re"))
(const_int 0)))]
"TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
"TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)"
"@
test{l}\t{%k1, %k0|%k0, %k1}
test{l}\t{%k1, %k0|%k0, %k1}
@ -8163,12 +8161,12 @@
(compare
(and:QI
(match_operand:QI 0 "nonimmediate_operand" "%!*a,q,qm,r")
(match_operand:QI 1 "general_operand" "n,n,qn,n"))
(match_operand:QI 1 "nonmemory_operand" "n,n,qn,n"))
(const_int 0)))]
"!(MEM_P (operands[0]) && MEM_P (operands[1]))
&& ix86_match_ccmode (insn,
CONST_INT_P (operands[1])
&& INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode)"
"ix86_match_ccmode (insn,
CONST_INT_P (operands[1])
&& INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode)"
{
if (which_alternative == 3)
{
@ -8188,10 +8186,9 @@
(compare
(and:SWI124
(match_operand:SWI124 0 "nonimmediate_operand" "%!*a,<r>,<r>m")
(match_operand:SWI124 1 "<general_operand>" "<i>,<i>,<r><i>"))
(match_operand:SWI124 1 "<nonmemory_szext_operand>" "<i>,<i>,<r><i>"))
(const_int 0)))]
"ix86_match_ccmode (insn, CCNOmode)
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
"ix86_match_ccmode (insn, CCNOmode)"
"test{<imodesuffix>}\t{%1, %0|%0, %1}"
[(set_attr "type" "test")
(set_attr "modrm" "0,1,1")