Add and test rol 8, ror 8 for linux386.
These tests are in core/rotate_e.e with the other rotation tests, and only run on platforms where _EM_LLSIZE == 8.
This commit is contained in:
parent
aeb8ed53e4
commit
04427e65dc
|
@ -2339,12 +2339,56 @@ with SHIFT_CREG REG
|
||||||
with ANYCON REG
|
with ANYCON REG
|
||||||
gen rol %2,%1 yields %2
|
gen rol %2,%1 yields %2
|
||||||
|
|
||||||
|
pat rol $1==8
|
||||||
|
with SHIFT_CREG REG REG
|
||||||
|
uses REG
|
||||||
|
gen testb cl,{ANYCON,32}
|
||||||
|
je {label,1f}
|
||||||
|
xchg %2,%3
|
||||||
|
1:
|
||||||
|
mov %a,%3
|
||||||
|
shld %3,%2,cl
|
||||||
|
shld %2,%a,cl yields %3 %2
|
||||||
|
|
||||||
|
pat loc rol ($1&32)==0 && $2==8
|
||||||
|
with REG REG
|
||||||
|
uses REG
|
||||||
|
gen mov %a,%2
|
||||||
|
shld %2,%1,{ANYCON,$1&31}
|
||||||
|
shld %1,%a,{ANYCON,$1&31} yields %2 %1
|
||||||
|
pat loc rol ($1&63)==32 && $2==8
|
||||||
|
leaving exg 4
|
||||||
|
pat loc rol ($1&32)!=0 && $2==8
|
||||||
|
leaving loc (0-$1)&31 ror 8
|
||||||
|
|
||||||
pat ror $1==4
|
pat ror $1==4
|
||||||
with SHIFT_CREG REG
|
with SHIFT_CREG REG
|
||||||
gen ror %2,cl yields %2
|
gen ror %2,cl yields %2
|
||||||
with ANYCON REG
|
with ANYCON REG
|
||||||
gen ror %2,%1 yields %2
|
gen ror %2,%1 yields %2
|
||||||
|
|
||||||
|
pat ror $1==8
|
||||||
|
with SHIFT_CREG REG REG
|
||||||
|
uses REG
|
||||||
|
gen testb cl,{ANYCON,32}
|
||||||
|
je {label,1f}
|
||||||
|
xchg %2,%3
|
||||||
|
1:
|
||||||
|
mov %a,%2
|
||||||
|
shrd %2,%3,cl
|
||||||
|
shrd %3,%a,cl yields %3 %2
|
||||||
|
|
||||||
|
pat loc ror ($1&32)==0 && $2==8
|
||||||
|
with REG REG
|
||||||
|
uses REG
|
||||||
|
gen mov %a,%1
|
||||||
|
shrd %1,%2,{ANYCON,$1&31}
|
||||||
|
shrd %2,%a,{ANYCON,$1&31} yields %2 %1
|
||||||
|
pat loc ror ($1&63)==32 && $2==8
|
||||||
|
leaving exg 4
|
||||||
|
pat loc ror ($1&32)!=0 && $2==8
|
||||||
|
leaving loc (0-$1)&31 rol 8
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* Group 10 : Set Instructions *
|
* Group 10 : Set Instructions *
|
||||||
*******************************************************************/
|
*******************************************************************/
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
* word size, or longer than 4 bytes.
|
* word size, or longer than 4 bytes.
|
||||||
* - If word size is 2, then try rotating 2-byte and 4-byte values.
|
* - If word size is 2, then try rotating 2-byte and 4-byte values.
|
||||||
* - If word size is 4, then try rotating 4-byte values.
|
* - If word size is 4, then try rotating 4-byte values.
|
||||||
|
* - If long long size is 8, then also try 8-byte rotations.
|
||||||
*
|
*
|
||||||
* You can cheat this test if _cmu_ always pushes zero.
|
* You can cheat this test if _cmu_ always pushes zero.
|
||||||
*/
|
*/
|
||||||
|
@ -54,6 +55,35 @@ val4left7
|
||||||
val4right11
|
val4right11
|
||||||
con 2298473143U4
|
con 2298473143U4
|
||||||
|
|
||||||
|
#if _EM_LLSIZE == 8
|
||||||
|
#define LEN8 4
|
||||||
|
exa table8
|
||||||
|
exa left8
|
||||||
|
exa right8
|
||||||
|
table8 /* left, right */
|
||||||
|
con 14079773792309488728U8 /* 0, 0 */
|
||||||
|
con 9712803510909425841U8 /* 1, 63 */
|
||||||
|
con 10409556348460427178U8 /* 32, 32 */
|
||||||
|
con 7039886896154744364U8 /* 63, 1 */
|
||||||
|
left8
|
||||||
|
con 0I2, 1I2, 32I2, 63I2
|
||||||
|
right8
|
||||||
|
con 0I2, 63I2, 32I2, 1I2
|
||||||
|
|
||||||
|
exa val8
|
||||||
|
exa val8left13
|
||||||
|
exa val8right20
|
||||||
|
exa val8right32
|
||||||
|
val8
|
||||||
|
con 15129222862059184558U8
|
||||||
|
val8left13
|
||||||
|
con 13366998808072149566U8
|
||||||
|
val8right20
|
||||||
|
con 1881076513336495948U8
|
||||||
|
val8right32
|
||||||
|
con 17636555387978501128U8
|
||||||
|
#endif
|
||||||
|
|
||||||
exp $_m_a_i_n
|
exp $_m_a_i_n
|
||||||
pro $_m_a_i_n, _EM_WSIZE
|
pro $_m_a_i_n, _EM_WSIZE
|
||||||
#define i -_EM_WSIZE
|
#define i -_EM_WSIZE
|
||||||
|
@ -219,5 +249,121 @@ val4right11
|
||||||
asp 4
|
asp 4
|
||||||
8
|
8
|
||||||
|
|
||||||
|
#if _EM_LLSIZE == 8
|
||||||
|
/*
|
||||||
|
* Loop for LEN8 items in table8.
|
||||||
|
*/
|
||||||
|
loc 0
|
||||||
|
stl i
|
||||||
|
9
|
||||||
|
lae table8
|
||||||
|
loi 8 /* value to rotate */
|
||||||
|
lae left8
|
||||||
|
lol i
|
||||||
|
loc 1
|
||||||
|
sli _EM_WSIZE
|
||||||
|
ads _EM_WSIZE
|
||||||
|
loi 2 /* left distance */
|
||||||
|
loc 2
|
||||||
|
loc _EM_WSIZE
|
||||||
|
cii
|
||||||
|
rol 8 /* rotate left */
|
||||||
|
lae table8
|
||||||
|
lol i
|
||||||
|
loc 3
|
||||||
|
sli _EM_WSIZE
|
||||||
|
ads _EM_WSIZE
|
||||||
|
loi 8 /* expected result */
|
||||||
|
cmu 8
|
||||||
|
zeq *10
|
||||||
|
loc __LINE__
|
||||||
|
loc _EM_WSIZE
|
||||||
|
loc 4
|
||||||
|
cuu
|
||||||
|
cal $fail
|
||||||
|
asp 4
|
||||||
|
10
|
||||||
|
lae table8
|
||||||
|
loi 8 /* value to rotate */
|
||||||
|
lae right8
|
||||||
|
lol i
|
||||||
|
loc 1
|
||||||
|
sli _EM_WSIZE
|
||||||
|
ads _EM_WSIZE
|
||||||
|
loi 2 /* right distance */
|
||||||
|
loc 2
|
||||||
|
loc _EM_WSIZE
|
||||||
|
cii
|
||||||
|
ror 8 /* rotate right */
|
||||||
|
lae table8
|
||||||
|
lol i
|
||||||
|
loc 3
|
||||||
|
sli _EM_WSIZE
|
||||||
|
ads _EM_WSIZE
|
||||||
|
loi 8 /* expected result */
|
||||||
|
cmu 8
|
||||||
|
zeq *11
|
||||||
|
loc __LINE__
|
||||||
|
loc _EM_WSIZE
|
||||||
|
loc 4
|
||||||
|
cuu
|
||||||
|
cal $fail
|
||||||
|
asp 4
|
||||||
|
11
|
||||||
|
inl i /* loop LEN8 times */
|
||||||
|
lol i
|
||||||
|
loc LEN8
|
||||||
|
blt *9
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Rotate 8-byte value by constant distance.
|
||||||
|
*/
|
||||||
|
lae val8
|
||||||
|
loi 8
|
||||||
|
loc 13
|
||||||
|
rol 8 /* rotate left by 13 bits */
|
||||||
|
lae val8left13
|
||||||
|
loi 8
|
||||||
|
cmu 8
|
||||||
|
zeq *12
|
||||||
|
loc __LINE__
|
||||||
|
loc _EM_WSIZE
|
||||||
|
loc 4
|
||||||
|
cuu
|
||||||
|
cal $fail
|
||||||
|
asp 4
|
||||||
|
12
|
||||||
|
lae val8
|
||||||
|
loi 8
|
||||||
|
loc 20
|
||||||
|
ror 8 /* rotate right by 20 bits */
|
||||||
|
lae val8right20
|
||||||
|
loi 8
|
||||||
|
cmu 8
|
||||||
|
zeq *13
|
||||||
|
loc __LINE__
|
||||||
|
loc _EM_WSIZE
|
||||||
|
loc 4
|
||||||
|
cuu
|
||||||
|
cal $fail
|
||||||
|
asp 4
|
||||||
|
13
|
||||||
|
lae val8
|
||||||
|
loi 8
|
||||||
|
loc 32
|
||||||
|
ror 8 /* rotate right by 32 bits */
|
||||||
|
lae val8right32
|
||||||
|
loi 8
|
||||||
|
cmu 8
|
||||||
|
zeq *14
|
||||||
|
loc __LINE__
|
||||||
|
loc _EM_WSIZE
|
||||||
|
loc 4
|
||||||
|
cuu
|
||||||
|
cal $fail
|
||||||
|
asp 4
|
||||||
|
14
|
||||||
|
#endif /* _EM_LLSIZE == 8 */
|
||||||
|
|
||||||
cal $finished
|
cal $finished
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue