pprInstr{PPC}: insist on xori,ori,andi being fed non-negative immediate values.
GAS is barfing on neg. values.
[ Don't have access to a PPC box right now to really test the change, so beware.]
#if __GLASGOW_HASKELL__ >= 504
import Data.Array.ST
#if __GLASGOW_HASKELL__ >= 504
import Data.Array.ST
-import Data.Word ( Word8 )
+import Data.Word ( Word8, Word16 )
#else
import MutableArray
#else
import MutableArray
ptext SLIT(", "),
pprImm imm
]
ptext SLIT(", "),
pprImm imm
]
-pprInstr (AND reg1 reg2 ri) = pprLogic SLIT("and") reg1 reg2 ri
+pprInstr (AND reg1 reg2 ri) = pprLogic SLIT("and") reg1 reg2 (toUI16 ri)
-pprInstr (OR reg1 reg2 ri) = pprLogic SLIT("or") reg1 reg2 ri
-pprInstr (XOR reg1 reg2 ri) = pprLogic SLIT("xor") reg1 reg2 ri
+pprInstr (OR reg1 reg2 ri) = pprLogic SLIT("or") reg1 reg2 (toUI16 ri)
+pprInstr (XOR reg1 reg2 ri) = pprLogic SLIT("xor") reg1 reg2 (toUI16 ri)
pprInstr (XORIS reg1 reg2 imm) = hcat [
char '\t',
pprInstr (XORIS reg1 reg2 imm) = hcat [
char '\t',
pprFSize DF = empty
pprFSize F = char 's'
pprFSize DF = empty
pprFSize F = char 's'
+-- hack to ensure that negative vals come out in non-negative form
+-- (assuming that fromIntegral{Int->Word16} will do a 'c-style'
+-- conversion, and not throw a fit/exception.)
+toUI16 :: RI -> RI
+toUI16 (RIImm (ImmInt x))
+ | x < 0 = RIImm (ImmInt (fromIntegral ((fromIntegral x) :: Word16)))
+toUI16 (RIImm (ImmInteger x))
+ | x < 0 = RIImm (ImmInt (fromIntegral ((fromIntegral x) :: Word16)))
+toUI16 x = x
+
{-
The Mach-O object file format used in Darwin/Mac OS X needs a so-called
"symbol stub" for every function that might be imported from a dynamic
{-
The Mach-O object file format used in Darwin/Mac OS X needs a so-called
"symbol stub" for every function that might be imported from a dynamic