[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug 1728325] Re: POWER8: Wrong behaviour with float-to-int punning
From: |
Launchpad Bug Tracker |
Subject: |
[Bug 1728325] Re: POWER8: Wrong behaviour with float-to-int punning |
Date: |
Sat, 09 Jan 2021 04:17:56 -0000 |
[Expired for QEMU because there has been no activity for 60 days.]
** Changed in: qemu
Status: Incomplete => Expired
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1728325
Title:
POWER8: Wrong behaviour with float-to-int punning
Status in QEMU:
Expired
Bug description:
Building a reduced test program with 'gcc -O2 -fno-inline
-mcpu=power8' produces wrong results at runtime. I don't think gcc is
at fault here.
---
#include <stdio.h>
int getWord(const float x)
{
return *(int*)&x;
}
void main()
{
int foo = getWord(+123.456f);
int bar = getWord(-123.456f);
printf("%d\n", foo);
printf("%d\n", bar);
return;
}
---
This prints:
---
0
0
---
Compiling with 'gcc -O2 -fno-inline -mcpu=power7' and you instead get the
expected result:
---
1123477881
-1024005767
---
The different between the two programs is:
--- power7.s
+++ power8.s
@@ -6,9 +6,9 @@
.globl getWord
.type getWord, @function
getWord:
- stfs 1,-16(1)
- ori 2,2,0
- lwa 3,-16(1)
+ xscvdpspn 0,1
+ mfvsrwz 3,0
+ extsw 3,3
blr
.long 0
.byte 0,0,0,0,0,0,0,0
.size getWord,.-getWord
Seems like qemu doesn't handle xscvdpspn/mfvsrwz correctly.
https://github.com/qemu/qemu/commit/7ee19fb9d682689d36c849576c808cf92e3bae40
https://github.com/qemu/qemu/commit/f5c0f7f981333da59cc35c3210d05ec1775c97c1
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1728325/+subscriptions
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Bug 1728325] Re: POWER8: Wrong behaviour with float-to-int punning,
Launchpad Bug Tracker <=