[GHC] #9013: plusWord2# is buggy
GHC
ghc-devs at haskell.org
Wed Apr 30 03:20:24 UTC 2014
#9013: plusWord2# is buggy
-------------------------------------+------------------------------------
Reporter: pumpkin | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Comment (by rwbarton):
Simon: `MO_Add2` is translated to an `ADD` (which is expected to either
set or clear the carry flag as appropriate) followed by an `ADC`. Printing
the `ADD` as (in this case) `dec` rather than `add` loses the effect on
the carry flag, so the subsequent `ADC` will just use whatever garbage
happens to be in the carry flag.
Like Simon, I'm not totally thrilled with the organization of the code
here, but one simple fix would be to add an `ADD'` instruction which means
the same as `ADD` except it indicates that the side effect of setting the
carry flag is important. Then the pretty printer can produce `dec` for an
`ADD` of `-1` but not for an `ADD'` of `-1`. GHC doesn't expose the carry
flag to Haskell directly so we would only need to use `ADD'` in the
translation of `MO_Add2` and other similar operations.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9013#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list