[GHC] #9125: int-to-float conversion broken on ARM
GHC
ghc-devs at haskell.org
Tue Jul 15 03:58:56 UTC 2014
#9125: int-to-float conversion broken on ARM
-------------------------------------+-------------------------------------
Reporter: Ansible | Owner:
Type: bug | Status: new
Priority: highest | Milestone: 7.8.4
Component: Compiler | Version: 7.8.3
Resolution: | Keywords:
Differential Revisions: | Operating System: Unknown/Multiple
Architecture: arm | Type of failure: Incorrect result
Difficulty: Unknown | at runtime
Blocked By: | Test Case:
Related Tickets: | Blocking:
-------------------------------------+-------------------------------------
Comment (by amurrayc):
I'm still learning about Cmm and calling conventions &c. so forgive my
stumblings.
If I modify `stg_decodeFloatzuIntzh` so that the two temporary pointers
are shifted by one word the function returns the correct value. That is
{{{
reserve 2 = tmp {
mp_tmp1 = tmp + WDS(1);
mp_tmp_w = tmp;
}}}
becomes
{{{
reserve 3 = tmp {
mp_tmp1 = tmp + WDS(2);
mp_tmp_w = tmp + WDS(1);
}}}
With this change everything seems to work correctly. I'm confused though.
The pointer that was getting clobbered by the argument value was `tmp +
WDS(1)` but now `mp_tmp_w` i.e. the exponent is fine.
Anyway, I hope this give someone wiser a clue.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9125#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list