From: simonm Date: Wed, 5 Nov 1997 16:11:34 +0000 (+0000) Subject: [project @ 1997-11-05 16:11:17 by simonm] X-Git-Tag: Approx_2487_patches~1317 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=62dfd96cf8239ceb7cb65e955c29c57f6c798517;p=ghc-hetmet.git [project @ 1997-11-05 16:11:17 by simonm] add xor# word operation --- diff --git a/ghc/compiler/absCSyn/Costs.lhs b/ghc/compiler/absCSyn/Costs.lhs index 4c0a636..eb641bc 100644 --- a/ghc/compiler/absCSyn/Costs.lhs +++ b/ghc/compiler/absCSyn/Costs.lhs @@ -518,7 +518,7 @@ data PrimOp -- Rest is unchecked so far -- HWL -- Word#-related ops: - | AndOp | OrOp | NotOp | ShiftLOp | ShiftROp + | AndOp | OrOp | NotOp | XorOp | ShiftLOp | ShiftROp | Int2WordOp | Word2IntOp -- casts -- Addr#-related ops: diff --git a/ghc/compiler/nativeGen/AsmCodeGen.lhs b/ghc/compiler/nativeGen/AsmCodeGen.lhs index d592676..b94efa4 100644 --- a/ghc/compiler/nativeGen/AsmCodeGen.lhs +++ b/ghc/compiler/nativeGen/AsmCodeGen.lhs @@ -248,6 +248,7 @@ primOpt op args@[x, y@(StInt 0)] IntMulOp -> y AndOp -> y OrOp -> x + XorOp -> x SllOp -> x SraOp -> x SrlOp -> x diff --git a/ghc/compiler/nativeGen/MachCode.lhs b/ghc/compiler/nativeGen/MachCode.lhs index c649d87..8c2b594 100644 --- a/ghc/compiler/nativeGen/MachCode.lhs +++ b/ghc/compiler/nativeGen/MachCode.lhs @@ -404,6 +404,7 @@ getRegister (StPrim primop [x, y]) -- dyadic PrimOps AndOp -> trivialCode AND x y OrOp -> trivialCode OR x y + XorOp -> trivialCode XOR x y SllOp -> trivialCode SLL x y SraOp -> trivialCode SRA x y SrlOp -> trivialCode SRL x y @@ -662,6 +663,7 @@ getRegister (StPrim primop [x, y]) -- dyadic PrimOps AndOp -> trivialCode (AND L) x y {-True-} OrOp -> trivialCode (OR L) x y {-True-} + XorOp -> trivialCode (XOR L) x y {-True-} {- Shift ops on x86s have constraints on their source, it either has to be Imm, CL or 1 @@ -1071,7 +1073,8 @@ getRegister (StPrim primop [x, y]) -- dyadic PrimOps DoubleDivOp -> trivialFCode DoubleRep FDIV x y AndOp -> trivialCode (AND False) x y - OrOp -> trivialCode (OR False) x y + OrOp -> trivialCode (OR False) x y + XorOp -> trivialCode (XOR False) x y SllOp -> trivialCode SLL x y SraOp -> trivialCode SRA x y SrlOp -> trivialCode SRL x y diff --git a/ghc/compiler/prelude/PrimOp.lhs b/ghc/compiler/prelude/PrimOp.lhs index ab2428c..f9818b0 100644 --- a/ghc/compiler/prelude/PrimOp.lhs +++ b/ghc/compiler/prelude/PrimOp.lhs @@ -81,7 +81,7 @@ data PrimOp | IntRemOp | IntNegOp | IntAbsOp -- Word#-related ops: - | AndOp | OrOp | NotOp + | AndOp | OrOp | NotOp | XorOp | SllOp | SraOp | SrlOp -- shift {left,right} {arithmetic,logical} | ISllOp | ISraOp | ISrlOp -- equivs on Int#s | Int2WordOp | Word2IntOp -- casts @@ -261,186 +261,187 @@ about using it this way?? ADR) Deriving Ix is what we really want! ToDo (Chk around before deleting...) \begin{code} -tagOf_PrimOp CharGtOp = (ILIT(1) :: FAST_INT) -tagOf_PrimOp CharGeOp = ILIT( 2) -tagOf_PrimOp CharEqOp = ILIT( 3) -tagOf_PrimOp CharNeOp = ILIT( 4) -tagOf_PrimOp CharLtOp = ILIT( 5) -tagOf_PrimOp CharLeOp = ILIT( 6) -tagOf_PrimOp IntGtOp = ILIT( 7) -tagOf_PrimOp IntGeOp = ILIT( 8) -tagOf_PrimOp IntEqOp = ILIT( 9) -tagOf_PrimOp IntNeOp = ILIT( 10) -tagOf_PrimOp IntLtOp = ILIT( 11) -tagOf_PrimOp IntLeOp = ILIT( 12) -tagOf_PrimOp WordGtOp = ILIT( 13) -tagOf_PrimOp WordGeOp = ILIT( 14) -tagOf_PrimOp WordEqOp = ILIT( 15) -tagOf_PrimOp WordNeOp = ILIT( 16) -tagOf_PrimOp WordLtOp = ILIT( 17) -tagOf_PrimOp WordLeOp = ILIT( 18) -tagOf_PrimOp AddrGtOp = ILIT( 19) -tagOf_PrimOp AddrGeOp = ILIT( 20) -tagOf_PrimOp AddrEqOp = ILIT( 21) -tagOf_PrimOp AddrNeOp = ILIT( 22) -tagOf_PrimOp AddrLtOp = ILIT( 23) -tagOf_PrimOp AddrLeOp = ILIT( 24) -tagOf_PrimOp FloatGtOp = ILIT( 25) -tagOf_PrimOp FloatGeOp = ILIT( 26) -tagOf_PrimOp FloatEqOp = ILIT( 27) -tagOf_PrimOp FloatNeOp = ILIT( 28) -tagOf_PrimOp FloatLtOp = ILIT( 29) -tagOf_PrimOp FloatLeOp = ILIT( 30) -tagOf_PrimOp DoubleGtOp = ILIT( 31) -tagOf_PrimOp DoubleGeOp = ILIT( 32) -tagOf_PrimOp DoubleEqOp = ILIT( 33) -tagOf_PrimOp DoubleNeOp = ILIT( 34) -tagOf_PrimOp DoubleLtOp = ILIT( 35) -tagOf_PrimOp DoubleLeOp = ILIT( 36) -tagOf_PrimOp OrdOp = ILIT( 37) -tagOf_PrimOp ChrOp = ILIT( 38) -tagOf_PrimOp IntAddOp = ILIT( 39) -tagOf_PrimOp IntSubOp = ILIT( 40) -tagOf_PrimOp IntMulOp = ILIT( 41) -tagOf_PrimOp IntQuotOp = ILIT( 42) -tagOf_PrimOp IntRemOp = ILIT( 44) -tagOf_PrimOp IntNegOp = ILIT( 45) -tagOf_PrimOp IntAbsOp = ILIT( 46) -tagOf_PrimOp AndOp = ILIT( 47) -tagOf_PrimOp OrOp = ILIT( 48) -tagOf_PrimOp NotOp = ILIT( 49) -tagOf_PrimOp SllOp = ILIT( 50) -tagOf_PrimOp SraOp = ILIT( 51) -tagOf_PrimOp SrlOp = ILIT( 52) -tagOf_PrimOp ISllOp = ILIT( 53) -tagOf_PrimOp ISraOp = ILIT( 54) -tagOf_PrimOp ISrlOp = ILIT( 55) -tagOf_PrimOp Int2WordOp = ILIT( 56) -tagOf_PrimOp Word2IntOp = ILIT( 57) -tagOf_PrimOp Int2AddrOp = ILIT( 58) -tagOf_PrimOp Addr2IntOp = ILIT( 59) -tagOf_PrimOp FloatAddOp = ILIT( 60) -tagOf_PrimOp FloatSubOp = ILIT( 61) -tagOf_PrimOp FloatMulOp = ILIT( 62) -tagOf_PrimOp FloatDivOp = ILIT( 63) -tagOf_PrimOp FloatNegOp = ILIT( 64) -tagOf_PrimOp Float2IntOp = ILIT( 65) -tagOf_PrimOp Int2FloatOp = ILIT( 66) -tagOf_PrimOp FloatExpOp = ILIT( 67) -tagOf_PrimOp FloatLogOp = ILIT( 68) -tagOf_PrimOp FloatSqrtOp = ILIT( 69) -tagOf_PrimOp FloatSinOp = ILIT( 70) -tagOf_PrimOp FloatCosOp = ILIT( 71) -tagOf_PrimOp FloatTanOp = ILIT( 72) -tagOf_PrimOp FloatAsinOp = ILIT( 73) -tagOf_PrimOp FloatAcosOp = ILIT( 74) -tagOf_PrimOp FloatAtanOp = ILIT( 75) -tagOf_PrimOp FloatSinhOp = ILIT( 76) -tagOf_PrimOp FloatCoshOp = ILIT( 77) -tagOf_PrimOp FloatTanhOp = ILIT( 78) -tagOf_PrimOp FloatPowerOp = ILIT( 79) -tagOf_PrimOp DoubleAddOp = ILIT( 80) -tagOf_PrimOp DoubleSubOp = ILIT( 81) -tagOf_PrimOp DoubleMulOp = ILIT( 82) -tagOf_PrimOp DoubleDivOp = ILIT( 83) -tagOf_PrimOp DoubleNegOp = ILIT( 84) -tagOf_PrimOp Double2IntOp = ILIT( 85) -tagOf_PrimOp Int2DoubleOp = ILIT( 86) -tagOf_PrimOp Double2FloatOp = ILIT( 87) -tagOf_PrimOp Float2DoubleOp = ILIT( 88) -tagOf_PrimOp DoubleExpOp = ILIT( 89) -tagOf_PrimOp DoubleLogOp = ILIT( 90) -tagOf_PrimOp DoubleSqrtOp = ILIT( 91) -tagOf_PrimOp DoubleSinOp = ILIT( 92) -tagOf_PrimOp DoubleCosOp = ILIT( 93) -tagOf_PrimOp DoubleTanOp = ILIT( 94) -tagOf_PrimOp DoubleAsinOp = ILIT( 95) -tagOf_PrimOp DoubleAcosOp = ILIT( 96) -tagOf_PrimOp DoubleAtanOp = ILIT( 97) -tagOf_PrimOp DoubleSinhOp = ILIT( 98) -tagOf_PrimOp DoubleCoshOp = ILIT( 99) -tagOf_PrimOp DoubleTanhOp = ILIT(100) -tagOf_PrimOp DoublePowerOp = ILIT(101) -tagOf_PrimOp IntegerAddOp = ILIT(102) -tagOf_PrimOp IntegerSubOp = ILIT(103) -tagOf_PrimOp IntegerMulOp = ILIT(104) -tagOf_PrimOp IntegerQuotRemOp = ILIT(105) -tagOf_PrimOp IntegerDivModOp = ILIT(106) -tagOf_PrimOp IntegerNegOp = ILIT(107) -tagOf_PrimOp IntegerCmpOp = ILIT(108) -tagOf_PrimOp Integer2IntOp = ILIT(109) -tagOf_PrimOp Int2IntegerOp = ILIT(110) -tagOf_PrimOp Word2IntegerOp = ILIT(111) -tagOf_PrimOp Addr2IntegerOp = ILIT(112) -tagOf_PrimOp FloatEncodeOp = ILIT(113) -tagOf_PrimOp FloatDecodeOp = ILIT(114) -tagOf_PrimOp DoubleEncodeOp = ILIT(115) -tagOf_PrimOp DoubleDecodeOp = ILIT(116) -tagOf_PrimOp NewArrayOp = ILIT(117) -tagOf_PrimOp (NewByteArrayOp CharRep) = ILIT(118) -tagOf_PrimOp (NewByteArrayOp IntRep) = ILIT(119) -tagOf_PrimOp (NewByteArrayOp AddrRep) = ILIT(120) -tagOf_PrimOp (NewByteArrayOp FloatRep) = ILIT(121) -tagOf_PrimOp (NewByteArrayOp DoubleRep)= ILIT(122) -tagOf_PrimOp SameMutableArrayOp = ILIT(123) -tagOf_PrimOp SameMutableByteArrayOp = ILIT(124) -tagOf_PrimOp ReadArrayOp = ILIT(125) -tagOf_PrimOp WriteArrayOp = ILIT(126) -tagOf_PrimOp IndexArrayOp = ILIT(127) -tagOf_PrimOp (ReadByteArrayOp CharRep) = ILIT(128) -tagOf_PrimOp (ReadByteArrayOp IntRep) = ILIT(129) -tagOf_PrimOp (ReadByteArrayOp AddrRep) = ILIT(130) -tagOf_PrimOp (ReadByteArrayOp FloatRep) = ILIT(131) -tagOf_PrimOp (ReadByteArrayOp DoubleRep) = ILIT(132) -tagOf_PrimOp (WriteByteArrayOp CharRep) = ILIT(133) -tagOf_PrimOp (WriteByteArrayOp IntRep) = ILIT(134) -tagOf_PrimOp (WriteByteArrayOp AddrRep) = ILIT(135) -tagOf_PrimOp (WriteByteArrayOp FloatRep) = ILIT(136) -tagOf_PrimOp (WriteByteArrayOp DoubleRep) = ILIT(137) -tagOf_PrimOp (IndexByteArrayOp CharRep) = ILIT(138) -tagOf_PrimOp (IndexByteArrayOp IntRep) = ILIT(139) -tagOf_PrimOp (IndexByteArrayOp AddrRep) = ILIT(140) -tagOf_PrimOp (IndexByteArrayOp FloatRep) = ILIT(141) -tagOf_PrimOp (IndexByteArrayOp DoubleRep) = ILIT(142) -tagOf_PrimOp (IndexOffAddrOp CharRep) = ILIT(143) -tagOf_PrimOp (IndexOffAddrOp IntRep) = ILIT(144) -tagOf_PrimOp (IndexOffAddrOp AddrRep) = ILIT(145) -tagOf_PrimOp (IndexOffAddrOp FloatRep) = ILIT(146) -tagOf_PrimOp (IndexOffAddrOp DoubleRep) = ILIT(147) -tagOf_PrimOp (IndexOffForeignObjOp CharRep) = ILIT(148) -tagOf_PrimOp (IndexOffForeignObjOp IntRep) = ILIT(149) -tagOf_PrimOp (IndexOffForeignObjOp AddrRep) = ILIT(150) -tagOf_PrimOp (IndexOffForeignObjOp FloatRep) = ILIT(151) -tagOf_PrimOp (IndexOffForeignObjOp DoubleRep) = ILIT(152) -tagOf_PrimOp UnsafeFreezeArrayOp = ILIT(153) -tagOf_PrimOp UnsafeFreezeByteArrayOp = ILIT(154) -tagOf_PrimOp NewSynchVarOp = ILIT(155) -tagOf_PrimOp TakeMVarOp = ILIT(156) -tagOf_PrimOp PutMVarOp = ILIT(157) -tagOf_PrimOp ReadIVarOp = ILIT(158) -tagOf_PrimOp WriteIVarOp = ILIT(159) -tagOf_PrimOp MakeForeignObjOp = ILIT(160) -tagOf_PrimOp WriteForeignObjOp = ILIT(161) -tagOf_PrimOp MakeStablePtrOp = ILIT(162) -tagOf_PrimOp DeRefStablePtrOp = ILIT(163) -tagOf_PrimOp (CCallOp _ _ _ _ _) = ILIT(164) -tagOf_PrimOp ErrorIOPrimOp = ILIT(165) -tagOf_PrimOp ReallyUnsafePtrEqualityOp = ILIT(166) -tagOf_PrimOp SeqOp = ILIT(167) -tagOf_PrimOp ParOp = ILIT(168) -tagOf_PrimOp ForkOp = ILIT(169) -tagOf_PrimOp DelayOp = ILIT(170) -tagOf_PrimOp WaitReadOp = ILIT(171) -tagOf_PrimOp WaitWriteOp = ILIT(172) - -tagOf_PrimOp ParGlobalOp = ILIT(173) -tagOf_PrimOp ParLocalOp = ILIT(174) -tagOf_PrimOp ParAtOp = ILIT(175) -tagOf_PrimOp ParAtAbsOp = ILIT(176) -tagOf_PrimOp ParAtRelOp = ILIT(177) -tagOf_PrimOp ParAtForNowOp = ILIT(178) -tagOf_PrimOp CopyableOp = ILIT(179) -tagOf_PrimOp NoFollowOp = ILIT(180) +tagOf_PrimOp CharGtOp = (ILIT(1) :: FAST_INT) +tagOf_PrimOp CharGeOp = ILIT( 2) +tagOf_PrimOp CharEqOp = ILIT( 3) +tagOf_PrimOp CharNeOp = ILIT( 4) +tagOf_PrimOp CharLtOp = ILIT( 5) +tagOf_PrimOp CharLeOp = ILIT( 6) +tagOf_PrimOp IntGtOp = ILIT( 7) +tagOf_PrimOp IntGeOp = ILIT( 8) +tagOf_PrimOp IntEqOp = ILIT( 9) +tagOf_PrimOp IntNeOp = ILIT( 10) +tagOf_PrimOp IntLtOp = ILIT( 11) +tagOf_PrimOp IntLeOp = ILIT( 12) +tagOf_PrimOp WordGtOp = ILIT( 13) +tagOf_PrimOp WordGeOp = ILIT( 14) +tagOf_PrimOp WordEqOp = ILIT( 15) +tagOf_PrimOp WordNeOp = ILIT( 16) +tagOf_PrimOp WordLtOp = ILIT( 17) +tagOf_PrimOp WordLeOp = ILIT( 18) +tagOf_PrimOp AddrGtOp = ILIT( 19) +tagOf_PrimOp AddrGeOp = ILIT( 20) +tagOf_PrimOp AddrEqOp = ILIT( 21) +tagOf_PrimOp AddrNeOp = ILIT( 22) +tagOf_PrimOp AddrLtOp = ILIT( 23) +tagOf_PrimOp AddrLeOp = ILIT( 24) +tagOf_PrimOp FloatGtOp = ILIT( 25) +tagOf_PrimOp FloatGeOp = ILIT( 26) +tagOf_PrimOp FloatEqOp = ILIT( 27) +tagOf_PrimOp FloatNeOp = ILIT( 28) +tagOf_PrimOp FloatLtOp = ILIT( 29) +tagOf_PrimOp FloatLeOp = ILIT( 30) +tagOf_PrimOp DoubleGtOp = ILIT( 31) +tagOf_PrimOp DoubleGeOp = ILIT( 32) +tagOf_PrimOp DoubleEqOp = ILIT( 33) +tagOf_PrimOp DoubleNeOp = ILIT( 34) +tagOf_PrimOp DoubleLtOp = ILIT( 35) +tagOf_PrimOp DoubleLeOp = ILIT( 36) +tagOf_PrimOp OrdOp = ILIT( 37) +tagOf_PrimOp ChrOp = ILIT( 38) +tagOf_PrimOp IntAddOp = ILIT( 39) +tagOf_PrimOp IntSubOp = ILIT( 40) +tagOf_PrimOp IntMulOp = ILIT( 41) +tagOf_PrimOp IntQuotOp = ILIT( 42) +tagOf_PrimOp IntRemOp = ILIT( 44) +tagOf_PrimOp IntNegOp = ILIT( 45) +tagOf_PrimOp IntAbsOp = ILIT( 46) +tagOf_PrimOp AndOp = ILIT( 47) +tagOf_PrimOp OrOp = ILIT( 48) +tagOf_PrimOp NotOp = ILIT( 49) +tagOf_PrimOp XorOp = ILIT( 50) +tagOf_PrimOp SllOp = ILIT( 51) +tagOf_PrimOp SraOp = ILIT( 52) +tagOf_PrimOp SrlOp = ILIT( 53) +tagOf_PrimOp ISllOp = ILIT( 54) +tagOf_PrimOp ISraOp = ILIT( 55) +tagOf_PrimOp ISrlOp = ILIT( 56) +tagOf_PrimOp Int2WordOp = ILIT( 57) +tagOf_PrimOp Word2IntOp = ILIT( 58) +tagOf_PrimOp Int2AddrOp = ILIT( 59) +tagOf_PrimOp Addr2IntOp = ILIT( 60) +tagOf_PrimOp FloatAddOp = ILIT( 61) +tagOf_PrimOp FloatSubOp = ILIT( 62) +tagOf_PrimOp FloatMulOp = ILIT( 63) +tagOf_PrimOp FloatDivOp = ILIT( 64) +tagOf_PrimOp FloatNegOp = ILIT( 65) +tagOf_PrimOp Float2IntOp = ILIT( 66) +tagOf_PrimOp Int2FloatOp = ILIT( 67) +tagOf_PrimOp FloatExpOp = ILIT( 68) +tagOf_PrimOp FloatLogOp = ILIT( 69) +tagOf_PrimOp FloatSqrtOp = ILIT( 70) +tagOf_PrimOp FloatSinOp = ILIT( 71) +tagOf_PrimOp FloatCosOp = ILIT( 72) +tagOf_PrimOp FloatTanOp = ILIT( 73) +tagOf_PrimOp FloatAsinOp = ILIT( 74) +tagOf_PrimOp FloatAcosOp = ILIT( 75) +tagOf_PrimOp FloatAtanOp = ILIT( 76) +tagOf_PrimOp FloatSinhOp = ILIT( 77) +tagOf_PrimOp FloatCoshOp = ILIT( 78) +tagOf_PrimOp FloatTanhOp = ILIT( 79) +tagOf_PrimOp FloatPowerOp = ILIT( 80) +tagOf_PrimOp DoubleAddOp = ILIT( 81) +tagOf_PrimOp DoubleSubOp = ILIT( 82) +tagOf_PrimOp DoubleMulOp = ILIT( 83) +tagOf_PrimOp DoubleDivOp = ILIT( 84) +tagOf_PrimOp DoubleNegOp = ILIT( 85) +tagOf_PrimOp Double2IntOp = ILIT( 86) +tagOf_PrimOp Int2DoubleOp = ILIT( 87) +tagOf_PrimOp Double2FloatOp = ILIT( 88) +tagOf_PrimOp Float2DoubleOp = ILIT( 89) +tagOf_PrimOp DoubleExpOp = ILIT( 90) +tagOf_PrimOp DoubleLogOp = ILIT( 91) +tagOf_PrimOp DoubleSqrtOp = ILIT( 92) +tagOf_PrimOp DoubleSinOp = ILIT( 93) +tagOf_PrimOp DoubleCosOp = ILIT( 94) +tagOf_PrimOp DoubleTanOp = ILIT( 95) +tagOf_PrimOp DoubleAsinOp = ILIT( 96) +tagOf_PrimOp DoubleAcosOp = ILIT( 97) +tagOf_PrimOp DoubleAtanOp = ILIT( 98) +tagOf_PrimOp DoubleSinhOp = ILIT( 99) +tagOf_PrimOp DoubleCoshOp = ILIT(100) +tagOf_PrimOp DoubleTanhOp = ILIT(101) +tagOf_PrimOp DoublePowerOp = ILIT(102) +tagOf_PrimOp IntegerAddOp = ILIT(103) +tagOf_PrimOp IntegerSubOp = ILIT(104) +tagOf_PrimOp IntegerMulOp = ILIT(105) +tagOf_PrimOp IntegerQuotRemOp = ILIT(106) +tagOf_PrimOp IntegerDivModOp = ILIT(107) +tagOf_PrimOp IntegerNegOp = ILIT(108) +tagOf_PrimOp IntegerCmpOp = ILIT(109) +tagOf_PrimOp Integer2IntOp = ILIT(110) +tagOf_PrimOp Int2IntegerOp = ILIT(111) +tagOf_PrimOp Word2IntegerOp = ILIT(112) +tagOf_PrimOp Addr2IntegerOp = ILIT(113) +tagOf_PrimOp FloatEncodeOp = ILIT(114) +tagOf_PrimOp FloatDecodeOp = ILIT(115) +tagOf_PrimOp DoubleEncodeOp = ILIT(116) +tagOf_PrimOp DoubleDecodeOp = ILIT(117) +tagOf_PrimOp NewArrayOp = ILIT(118) +tagOf_PrimOp (NewByteArrayOp CharRep) = ILIT(119) +tagOf_PrimOp (NewByteArrayOp IntRep) = ILIT(120) +tagOf_PrimOp (NewByteArrayOp AddrRep) = ILIT(121) +tagOf_PrimOp (NewByteArrayOp FloatRep) = ILIT(122) +tagOf_PrimOp (NewByteArrayOp DoubleRep) = ILIT(123) +tagOf_PrimOp SameMutableArrayOp = ILIT(124) +tagOf_PrimOp SameMutableByteArrayOp = ILIT(125) +tagOf_PrimOp ReadArrayOp = ILIT(126) +tagOf_PrimOp WriteArrayOp = ILIT(127) +tagOf_PrimOp IndexArrayOp = ILIT(128) +tagOf_PrimOp (ReadByteArrayOp CharRep) = ILIT(129) +tagOf_PrimOp (ReadByteArrayOp IntRep) = ILIT(130) +tagOf_PrimOp (ReadByteArrayOp AddrRep) = ILIT(131) +tagOf_PrimOp (ReadByteArrayOp FloatRep) = ILIT(132) +tagOf_PrimOp (ReadByteArrayOp DoubleRep) = ILIT(133) +tagOf_PrimOp (WriteByteArrayOp CharRep) = ILIT(134) +tagOf_PrimOp (WriteByteArrayOp IntRep) = ILIT(135) +tagOf_PrimOp (WriteByteArrayOp AddrRep) = ILIT(136) +tagOf_PrimOp (WriteByteArrayOp FloatRep) = ILIT(137) +tagOf_PrimOp (WriteByteArrayOp DoubleRep) = ILIT(138) +tagOf_PrimOp (IndexByteArrayOp CharRep) = ILIT(139) +tagOf_PrimOp (IndexByteArrayOp IntRep) = ILIT(140) +tagOf_PrimOp (IndexByteArrayOp AddrRep) = ILIT(141) +tagOf_PrimOp (IndexByteArrayOp FloatRep) = ILIT(142) +tagOf_PrimOp (IndexByteArrayOp DoubleRep) = ILIT(143) +tagOf_PrimOp (IndexOffAddrOp CharRep) = ILIT(144) +tagOf_PrimOp (IndexOffAddrOp IntRep) = ILIT(145) +tagOf_PrimOp (IndexOffAddrOp AddrRep) = ILIT(146) +tagOf_PrimOp (IndexOffAddrOp FloatRep) = ILIT(147) +tagOf_PrimOp (IndexOffAddrOp DoubleRep) = ILIT(148) +tagOf_PrimOp (IndexOffForeignObjOp CharRep) = ILIT(149) +tagOf_PrimOp (IndexOffForeignObjOp IntRep) = ILIT(150) +tagOf_PrimOp (IndexOffForeignObjOp AddrRep) = ILIT(151) +tagOf_PrimOp (IndexOffForeignObjOp FloatRep) = ILIT(152) +tagOf_PrimOp (IndexOffForeignObjOp DoubleRep) = ILIT(153) +tagOf_PrimOp UnsafeFreezeArrayOp = ILIT(154) +tagOf_PrimOp UnsafeFreezeByteArrayOp = ILIT(155) +tagOf_PrimOp NewSynchVarOp = ILIT(156) +tagOf_PrimOp TakeMVarOp = ILIT(157) +tagOf_PrimOp PutMVarOp = ILIT(158) +tagOf_PrimOp ReadIVarOp = ILIT(159) +tagOf_PrimOp WriteIVarOp = ILIT(160) +tagOf_PrimOp MakeForeignObjOp = ILIT(161) +tagOf_PrimOp WriteForeignObjOp = ILIT(162) +tagOf_PrimOp MakeStablePtrOp = ILIT(163) +tagOf_PrimOp DeRefStablePtrOp = ILIT(164) +tagOf_PrimOp (CCallOp _ _ _ _ _) = ILIT(165) +tagOf_PrimOp ErrorIOPrimOp = ILIT(166) +tagOf_PrimOp ReallyUnsafePtrEqualityOp = ILIT(167) +tagOf_PrimOp SeqOp = ILIT(168) +tagOf_PrimOp ParOp = ILIT(169) +tagOf_PrimOp ForkOp = ILIT(170) +tagOf_PrimOp DelayOp = ILIT(171) +tagOf_PrimOp WaitReadOp = ILIT(172) +tagOf_PrimOp WaitWriteOp = ILIT(173) + +tagOf_PrimOp ParGlobalOp = ILIT(174) +tagOf_PrimOp ParLocalOp = ILIT(175) +tagOf_PrimOp ParAtOp = ILIT(176) +tagOf_PrimOp ParAtAbsOp = ILIT(177) +tagOf_PrimOp ParAtRelOp = ILIT(178) +tagOf_PrimOp ParAtForNowOp = ILIT(179) +tagOf_PrimOp CopyableOp = ILIT(180) +tagOf_PrimOp NoFollowOp = ILIT(181) tagOf_PrimOp _ = panic# "tagOf_PrimOp: pattern-match" @@ -498,6 +499,7 @@ allThePrimOps AndOp, OrOp, NotOp, + XorOp, SllOp, SraOp, SrlOp, @@ -792,6 +794,7 @@ A @Word#@ is an unsigned @Int#@. primOpInfo AndOp = Dyadic SLIT("and#") wordPrimTy primOpInfo OrOp = Dyadic SLIT("or#") wordPrimTy primOpInfo NotOp = Monadic SLIT("not#") wordPrimTy +primOpInfo XorOp = Monadic SLIT("xor#") wordPrimTy primOpInfo SllOp = PrimResult SLIT("shiftL#") [] [wordPrimTy, intPrimTy] wordPrimTyCon WordRep [] @@ -1765,6 +1768,7 @@ commutableOp IntAddOp = True commutableOp IntMulOp = True commutableOp AndOp = True commutableOp OrOp = True +commutableOp XorOp = True commutableOp IntEqOp = True commutableOp IntNeOp = True commutableOp IntegerAddOp = True diff --git a/ghc/includes/StgMacros.lh b/ghc/includes/StgMacros.lh index 5484c77..a1bf60b 100644 --- a/ghc/includes/StgMacros.lh +++ b/ghc/includes/StgMacros.lh @@ -470,6 +470,7 @@ I_ stg_div PROTO((I_ a, I_ b)); \begin{code} #define andZh(r,a,b) r=(a)&(b) #define orZh(r,a,b) r=(a)|(b) +#define xorZh(r,a,b) r=(a)^(b) #define notZh(r,a) r=~(a) #define shiftLZh(r,a,b) r=(a)<<(b)