mirror of https://gitee.com/openkylin/qemu.git
s390x/tcg: Fix VECTOR SHIFT RIGHT ARITHMETIC BY BYTE
We forgot to propagate the highest bit accross the high doubleword in
two cases (shift >=64).
Fixes: 5f724887e3
("s390x/tcg: Implement VECTOR SHIFT RIGHT ARITHMETIC")
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20191021085715.3797-4-david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
8b95251947
commit
b57b336876
|
@ -70,15 +70,17 @@ static void s390_vec_sar(S390Vector *d, const S390Vector *a, uint64_t count)
|
|||
d->doubleword[0] = a->doubleword[0];
|
||||
d->doubleword[1] = a->doubleword[1];
|
||||
} else if (count == 64) {
|
||||
tmp = (int64_t)a->doubleword[0] >> 63;
|
||||
d->doubleword[1] = a->doubleword[0];
|
||||
d->doubleword[0] = 0;
|
||||
d->doubleword[0] = tmp;
|
||||
} else if (count < 64) {
|
||||
tmp = a->doubleword[1] >> count;
|
||||
d->doubleword[1] = deposit64(tmp, 64 - count, count, a->doubleword[0]);
|
||||
d->doubleword[0] = (int64_t)a->doubleword[0] >> count;
|
||||
} else {
|
||||
tmp = (int64_t)a->doubleword[0] >> 63;
|
||||
d->doubleword[1] = (int64_t)a->doubleword[0] >> (count - 64);
|
||||
d->doubleword[0] = 0;
|
||||
d->doubleword[0] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue