mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 09:43:56 -06:00
target/s390x: vxeh2: Update for changes to vector shifts
Signed-off-by: David Miller <dmiller423@gmail.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: David Hildenbrand <david@redhat.com> Tested-by: Thomas Huth <thuth@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Message-Id: <20220428094708.84835-8-david@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
1d706f3141
commit
b7a50eb7d6
4 changed files with 96 additions and 51 deletions
|
@ -539,18 +539,73 @@ void HELPER(gvec_vsl)(void *v1, const void *v2, uint64_t count,
|
|||
s390_vec_shl(v1, v2, count);
|
||||
}
|
||||
|
||||
void HELPER(gvec_vsl_ve2)(void *v1, const void *v2, const void *v3,
|
||||
uint32_t desc)
|
||||
{
|
||||
S390Vector tmp;
|
||||
uint32_t sh, e0, e1 = 0;
|
||||
int i;
|
||||
|
||||
for (i = 15; i >= 0; --i, e1 = e0) {
|
||||
e0 = s390_vec_read_element8(v2, i);
|
||||
sh = s390_vec_read_element8(v3, i) & 7;
|
||||
|
||||
s390_vec_write_element8(&tmp, i, rol32(e0 | (e1 << 24), sh));
|
||||
}
|
||||
|
||||
*(S390Vector *)v1 = tmp;
|
||||
}
|
||||
|
||||
void HELPER(gvec_vsra)(void *v1, const void *v2, uint64_t count,
|
||||
uint32_t desc)
|
||||
{
|
||||
s390_vec_sar(v1, v2, count);
|
||||
}
|
||||
|
||||
void HELPER(gvec_vsra_ve2)(void *v1, const void *v2, const void *v3,
|
||||
uint32_t desc)
|
||||
{
|
||||
S390Vector tmp;
|
||||
uint32_t sh, e0, e1 = 0;
|
||||
int i = 0;
|
||||
|
||||
/* Byte 0 is special only. */
|
||||
e0 = (int32_t)(int8_t)s390_vec_read_element8(v2, i);
|
||||
sh = s390_vec_read_element8(v3, i) & 7;
|
||||
s390_vec_write_element8(&tmp, i, e0 >> sh);
|
||||
|
||||
e1 = e0;
|
||||
for (i = 1; i < 16; ++i, e1 = e0) {
|
||||
e0 = s390_vec_read_element8(v2, i);
|
||||
sh = s390_vec_read_element8(v3, i) & 7;
|
||||
s390_vec_write_element8(&tmp, i, (e0 | e1 << 8) >> sh);
|
||||
}
|
||||
|
||||
*(S390Vector *)v1 = tmp;
|
||||
}
|
||||
|
||||
void HELPER(gvec_vsrl)(void *v1, const void *v2, uint64_t count,
|
||||
uint32_t desc)
|
||||
{
|
||||
s390_vec_shr(v1, v2, count);
|
||||
}
|
||||
|
||||
void HELPER(gvec_vsrl_ve2)(void *v1, const void *v2, const void *v3,
|
||||
uint32_t desc)
|
||||
{
|
||||
S390Vector tmp;
|
||||
uint32_t sh, e0, e1 = 0;
|
||||
|
||||
for (int i = 0; i < 16; ++i, e1 = e0) {
|
||||
e0 = s390_vec_read_element8(v2, i);
|
||||
sh = s390_vec_read_element8(v3, i) & 7;
|
||||
|
||||
s390_vec_write_element8(&tmp, i, (e0 | (e1 << 8)) >> sh);
|
||||
}
|
||||
|
||||
*(S390Vector *)v1 = tmp;
|
||||
}
|
||||
|
||||
#define DEF_VSCBI(BITS) \
|
||||
void HELPER(gvec_vscbi##BITS)(void *v1, const void *v2, const void *v3, \
|
||||
uint32_t desc) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue