Edit i386 rules for 8-byte shift, conversion.
Shifts that drop an EM word don't need to coerce the word to REG. Some arithmetic right shifts can use _cdq_. Drop rules for illegal integer conversions. Sizes below a word are illegal in EM, except as the source size of _cii_.
This commit is contained in:
parent
e867861f6d
commit
bbaed6bdba
|
@ -1107,7 +1107,7 @@ with REG REG
|
||||||
pat loc sli ($1&63)==32 && $2==8
|
pat loc sli ($1&63)==32 && $2==8
|
||||||
with a_word a_word yields %1 {ANYCON,0}
|
with a_word a_word yields %1 {ANYCON,0}
|
||||||
pat loc sli ($1&32)!=0 && $2==8
|
pat loc sli ($1&32)!=0 && $2==8
|
||||||
with REG REG
|
with REG a_word
|
||||||
gen sal %1,{ANYCON,$1&31} yields %1 {ANYCON,0}
|
gen sal %1,{ANYCON,$1&31} yields %1 {ANYCON,0}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1140,11 +1140,13 @@ pat loc sri ($1&32)==0 && $2==8
|
||||||
with REG REG
|
with REG REG
|
||||||
gen shrd %1,%2,{ANYCON,$1&31}
|
gen shrd %1,%2,{ANYCON,$1&31}
|
||||||
sar %2,{ANYCON,$1&31} yields %2 %1
|
sar %2,{ANYCON,$1&31} yields %2 %1
|
||||||
|
pat loc sri ($1&63)==32
|
||||||
|
with a_word ACC
|
||||||
|
gen cdq. yields edx eax
|
||||||
pat loc sri ($1&32)!=0 && $2==8
|
pat loc sri ($1&32)!=0 && $2==8
|
||||||
with REG REG
|
with a_word ACC
|
||||||
gen mov %1,%2
|
gen sar eax,{ANYCON,$1&31}
|
||||||
sar %1,{ANYCON,$1&31}
|
cdq. yields edx eax
|
||||||
sar %2,{ANYCON,31} yields %2 %1
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
pat sri !defined($1)
|
pat sri !defined($1)
|
||||||
|
@ -1258,7 +1260,7 @@ with REG REG
|
||||||
pat loc sru ($1&63)==32 && $2==8
|
pat loc sru ($1&63)==32 && $2==8
|
||||||
with a_word a_word yields {ANYCON,0} %2
|
with a_word a_word yields {ANYCON,0} %2
|
||||||
pat loc sru ($1&32)!=0 && $2==8
|
pat loc sru ($1&32)!=0 && $2==8
|
||||||
with REG REG
|
with a_word REG
|
||||||
gen shr %2,{ANYCON,$1&31} yields {ANYCON,0} %2
|
gen shr %2,{ANYCON,$1&31} yields {ANYCON,0} %2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2212,18 +2214,18 @@ with ACC
|
||||||
|
|
||||||
pat loc loc cii $1<4 && $2==8 leaving loc $1 loc 4 cii loc 4 loc $2 cii
|
pat loc loc cii $1<4 && $2==8 leaving loc $1 loc 4 cii loc 4 loc $2 cii
|
||||||
|
|
||||||
pat loc loc cii $1==8 && $2<=4
|
pat loc loc cii $1==8 && $2==4
|
||||||
with a_word a_word yields %1
|
with a_word a_word yields %1
|
||||||
|
|
||||||
pat loc loc ciu leaving loc $1 loc $2 cuu
|
pat loc loc ciu leaving loc $1 loc $2 cuu
|
||||||
pat loc loc cui leaving loc $1 loc $2 cuu
|
pat loc loc cui leaving loc $1 loc $2 cuu
|
||||||
|
|
||||||
pat loc loc cuu $1==$2 || ($1<=4 && $2<=4)
|
pat loc loc cuu $1==$2
|
||||||
|
|
||||||
pat loc loc cuu $1<=4 && $2==8
|
pat loc loc cuu $1==4 && $2==8
|
||||||
with a_word yields {ANYCON,0} %1
|
with a_word yields {ANYCON,0} %1
|
||||||
|
|
||||||
pat loc loc cuu $1==8 && $2<=4
|
pat loc loc cuu $1==8 && $2==4
|
||||||
with a_word a_word yields %1
|
with a_word a_word yields %1
|
||||||
|
|
||||||
pat loc loc cif $1==4 && $2==4 leaving loc 4 cal ".cif4" asp 4
|
pat loc loc cif $1==4 && $2==4 leaving loc 4 cal ".cif4" asp 4
|
||||||
|
|
Loading…
Reference in a new issue