mirror of
https://github.com/yuzu-emu/unicorn
synced 2024-11-25 15:28:54 +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++) {
|
||||
uint32_t val;
|
||||
int32_t src = rs2 >> (word * 32);
|
||||
int64_t scaled = src << scale;
|
||||
int64_t scaled = (int64_t)src << scale;
|
||||
int64_t from_fixed = scaled >> 16;
|
||||
|
||||
val = (from_fixed < -32768 ? -32768 :
|
||||
|
|
Loading…
Reference in a new issue