mirror of
https://github.com/yuzu-emu/unicorn
synced 2024-11-25 17:25:22 +00:00
target-sparc: fix 32-bit truncation in fpackfix
This is reported by Coverity. The algorithm description at ftp://ftp.icm.edu.pl/packages/ggi/doc/hw/sparc/Sparc.pdf suggests that the 32-bit parts of rs2, after the left shift, is treated as a 64-bit integer. Bits 32 and above are used to do the saturating truncation. Backports commit 12a3567c4099be194b44987ac5d7d65b99bcfab7 from qemu
This commit is contained in:
parent
272e412fc9
commit
1918761803
1 changed files with 1 additions and 1 deletions
|
@ -447,7 +447,7 @@ uint32_t helper_fpackfix(uint64_t gsr, uint64_t rs2)
|
||||||
for (word = 0; word < 2; word++) {
|
for (word = 0; word < 2; word++) {
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
int32_t src = rs2 >> (word * 32);
|
int32_t src = rs2 >> (word * 32);
|
||||||
int64_t scaled = src << scale;
|
int64_t scaled = (int64_t)src << scale;
|
||||||
int64_t from_fixed = scaled >> 16;
|
int64_t from_fixed = scaled >> 16;
|
||||||
|
|
||||||
val = (from_fixed < -32768 ? -32768 :
|
val = (from_fixed < -32768 ? -32768 :
|
||||||
|
|
Loading…
Reference in a new issue