X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fprelude%2FPrimOp.lhs;h=72445f6d92e0c4492f7bf0bc6a7632430a7bf0f3;hb=814e402f24569ca7a8a02e8b54a38abfd6b0b59e;hp=fd1a66651eb343372d8ddf0053c881572066ef25;hpb=1908837b767a9c755f607339cae3d75ca27eb3fa;p=ghc-hetmet.git diff --git a/ghc/compiler/prelude/PrimOp.lhs b/ghc/compiler/prelude/PrimOp.lhs index fd1a666..72445f6 100644 --- a/ghc/compiler/prelude/PrimOp.lhs +++ b/ghc/compiler/prelude/PrimOp.lhs @@ -79,11 +79,12 @@ data PrimOp -- IntAbsOp unused?? ADR | IntAddOp | IntSubOp | IntMulOp | IntQuotOp | IntRemOp | IntNegOp | IntAbsOp + | ISllOp | ISraOp | ISrlOp -- shift {left,right} {arithmetic,logical} -- Word#-related ops: + | WordQuotOp | WordRemOp | AndOp | OrOp | NotOp | XorOp | SllOp | SraOp | SrlOp -- shift {left,right} {arithmetic,logical} - | ISllOp | ISraOp | ISrlOp -- equivs on Int#s | Int2WordOp | Word2IntOp -- casts -- Addr#-related ops: @@ -305,143 +306,144 @@ 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 IntAbsOp = ILIT( 47) +tagOf_PrimOp WordQuotOp = ILIT( 48) +tagOf_PrimOp WordRemOp = ILIT( 49) +tagOf_PrimOp AndOp = ILIT( 50) +tagOf_PrimOp OrOp = ILIT( 51) +tagOf_PrimOp NotOp = ILIT( 52) +tagOf_PrimOp XorOp = ILIT( 53) +tagOf_PrimOp SllOp = ILIT( 54) +tagOf_PrimOp SraOp = ILIT( 55) +tagOf_PrimOp SrlOp = ILIT( 56) +tagOf_PrimOp ISllOp = ILIT( 57) +tagOf_PrimOp ISraOp = ILIT( 58) +tagOf_PrimOp ISrlOp = ILIT( 59) +tagOf_PrimOp Int2WordOp = ILIT( 60) +tagOf_PrimOp Word2IntOp = ILIT( 61) +tagOf_PrimOp Int2AddrOp = ILIT( 62) +tagOf_PrimOp Addr2IntOp = ILIT( 63) +tagOf_PrimOp FloatAddOp = ILIT( 64) +tagOf_PrimOp FloatSubOp = ILIT( 65) +tagOf_PrimOp FloatMulOp = ILIT( 66) +tagOf_PrimOp FloatDivOp = ILIT( 67) +tagOf_PrimOp FloatNegOp = ILIT( 68) +tagOf_PrimOp Float2IntOp = ILIT( 69) +tagOf_PrimOp Int2FloatOp = ILIT( 70) +tagOf_PrimOp FloatExpOp = ILIT( 71) +tagOf_PrimOp FloatLogOp = ILIT( 72) +tagOf_PrimOp FloatSqrtOp = ILIT( 73) +tagOf_PrimOp FloatSinOp = ILIT( 74) +tagOf_PrimOp FloatCosOp = ILIT( 75) +tagOf_PrimOp FloatTanOp = ILIT( 76) +tagOf_PrimOp FloatAsinOp = ILIT( 77) +tagOf_PrimOp FloatAcosOp = ILIT( 78) +tagOf_PrimOp FloatAtanOp = ILIT( 79) +tagOf_PrimOp FloatSinhOp = ILIT( 80) +tagOf_PrimOp FloatCoshOp = ILIT( 81) +tagOf_PrimOp FloatTanhOp = ILIT( 82) +tagOf_PrimOp FloatPowerOp = ILIT( 83) +tagOf_PrimOp DoubleAddOp = ILIT( 84) +tagOf_PrimOp DoubleSubOp = ILIT( 85) +tagOf_PrimOp DoubleMulOp = ILIT( 86) +tagOf_PrimOp DoubleDivOp = ILIT( 87) +tagOf_PrimOp DoubleNegOp = ILIT( 88) +tagOf_PrimOp Double2IntOp = ILIT( 89) +tagOf_PrimOp Int2DoubleOp = ILIT( 90) +tagOf_PrimOp Double2FloatOp = ILIT( 91) +tagOf_PrimOp Float2DoubleOp = ILIT( 92) +tagOf_PrimOp DoubleExpOp = ILIT( 93) +tagOf_PrimOp DoubleLogOp = ILIT( 94) +tagOf_PrimOp DoubleSqrtOp = ILIT( 95) +tagOf_PrimOp DoubleSinOp = ILIT( 96) +tagOf_PrimOp DoubleCosOp = ILIT( 97) +tagOf_PrimOp DoubleTanOp = ILIT( 98) +tagOf_PrimOp DoubleAsinOp = ILIT( 99) +tagOf_PrimOp DoubleAcosOp = ILIT(100) +tagOf_PrimOp DoubleAtanOp = ILIT(101) +tagOf_PrimOp DoubleSinhOp = ILIT(102) +tagOf_PrimOp DoubleCoshOp = ILIT(103) +tagOf_PrimOp DoubleTanhOp = ILIT(104) +tagOf_PrimOp DoublePowerOp = ILIT(105) +tagOf_PrimOp IntegerAddOp = ILIT(106) +tagOf_PrimOp IntegerSubOp = ILIT(107) +tagOf_PrimOp IntegerMulOp = ILIT(108) +tagOf_PrimOp IntegerQuotRemOp = ILIT(109) +tagOf_PrimOp IntegerDivModOp = ILIT(110) +tagOf_PrimOp IntegerNegOp = ILIT(111) +tagOf_PrimOp IntegerCmpOp = ILIT(112) +tagOf_PrimOp Integer2IntOp = ILIT(113) +tagOf_PrimOp Int2IntegerOp = ILIT(114) +tagOf_PrimOp Word2IntegerOp = ILIT(115) +tagOf_PrimOp Addr2IntegerOp = ILIT(116) +tagOf_PrimOp FloatEncodeOp = ILIT(117) +tagOf_PrimOp FloatDecodeOp = ILIT(118) +tagOf_PrimOp DoubleEncodeOp = ILIT(119) +tagOf_PrimOp DoubleDecodeOp = ILIT(120) +tagOf_PrimOp NewArrayOp = ILIT(121) +tagOf_PrimOp (NewByteArrayOp CharRep) = ILIT(122) +tagOf_PrimOp (NewByteArrayOp IntRep) = ILIT(123) +tagOf_PrimOp (NewByteArrayOp AddrRep) = ILIT(124) +tagOf_PrimOp (NewByteArrayOp FloatRep) = ILIT(125) +tagOf_PrimOp (NewByteArrayOp DoubleRep) = ILIT(126) +tagOf_PrimOp SameMutableArrayOp = ILIT(127) +tagOf_PrimOp SameMutableByteArrayOp = ILIT(128) +tagOf_PrimOp ReadArrayOp = ILIT(129) +tagOf_PrimOp WriteArrayOp = ILIT(130) +tagOf_PrimOp IndexArrayOp = ILIT(131) +tagOf_PrimOp (ReadByteArrayOp CharRep) = ILIT(132) +tagOf_PrimOp (ReadByteArrayOp IntRep) = ILIT(133) +tagOf_PrimOp (ReadByteArrayOp AddrRep) = ILIT(134) +tagOf_PrimOp (ReadByteArrayOp FloatRep) = ILIT(135) +tagOf_PrimOp (ReadByteArrayOp DoubleRep) = ILIT(136) +tagOf_PrimOp (WriteByteArrayOp CharRep) = ILIT(137) +tagOf_PrimOp (WriteByteArrayOp IntRep) = ILIT(138) +tagOf_PrimOp (WriteByteArrayOp AddrRep) = ILIT(139) +tagOf_PrimOp (WriteByteArrayOp FloatRep) = ILIT(140) +tagOf_PrimOp (WriteByteArrayOp DoubleRep) = ILIT(141) +tagOf_PrimOp (IndexByteArrayOp CharRep) = ILIT(142) +tagOf_PrimOp (IndexByteArrayOp IntRep) = ILIT(143) +tagOf_PrimOp (IndexByteArrayOp AddrRep) = ILIT(144) +tagOf_PrimOp (IndexByteArrayOp FloatRep) = ILIT(145) +tagOf_PrimOp (IndexByteArrayOp DoubleRep) = ILIT(146) +tagOf_PrimOp (IndexOffAddrOp CharRep) = ILIT(147) +tagOf_PrimOp (IndexOffAddrOp IntRep) = ILIT(148) +tagOf_PrimOp (IndexOffAddrOp AddrRep) = ILIT(149) +tagOf_PrimOp (IndexOffAddrOp FloatRep) = ILIT(150) +tagOf_PrimOp (IndexOffAddrOp DoubleRep) = ILIT(151) +tagOf_PrimOp (IndexOffForeignObjOp CharRep) = ILIT(152) +tagOf_PrimOp (IndexOffForeignObjOp IntRep) = ILIT(153) +tagOf_PrimOp (IndexOffForeignObjOp AddrRep) = ILIT(154) +tagOf_PrimOp (IndexOffForeignObjOp FloatRep) = ILIT(155) +tagOf_PrimOp (IndexOffForeignObjOp DoubleRep) = ILIT(156) +tagOf_PrimOp UnsafeFreezeArrayOp = ILIT(157) +tagOf_PrimOp UnsafeFreezeByteArrayOp = ILIT(158) +tagOf_PrimOp NewSynchVarOp = ILIT(159) +tagOf_PrimOp TakeMVarOp = ILIT(160) +tagOf_PrimOp PutMVarOp = ILIT(161) +tagOf_PrimOp ReadIVarOp = ILIT(162) +tagOf_PrimOp WriteIVarOp = ILIT(163) +tagOf_PrimOp MakeForeignObjOp = ILIT(164) +tagOf_PrimOp WriteForeignObjOp = ILIT(165) +tagOf_PrimOp MakeStablePtrOp = ILIT(166) +tagOf_PrimOp DeRefStablePtrOp = ILIT(167) +tagOf_PrimOp (CCallOp _ _ _ _ _) = ILIT(168) +tagOf_PrimOp ErrorIOPrimOp = ILIT(169) +tagOf_PrimOp ReallyUnsafePtrEqualityOp = ILIT(170) +tagOf_PrimOp SeqOp = ILIT(171) +tagOf_PrimOp ParOp = ILIT(172) +tagOf_PrimOp ForkOp = ILIT(173) +tagOf_PrimOp DelayOp = ILIT(174) +tagOf_PrimOp WaitReadOp = ILIT(175) +tagOf_PrimOp WaitWriteOp = ILIT(176) +tagOf_PrimOp ParGlobalOp = ILIT(177) +tagOf_PrimOp ParLocalOp = ILIT(178) +tagOf_PrimOp ParAtOp = ILIT(179) +tagOf_PrimOp ParAtAbsOp = ILIT(180) +tagOf_PrimOp ParAtRelOp = ILIT(181) +tagOf_PrimOp ParAtForNowOp = ILIT(182) +tagOf_PrimOp CopyableOp = ILIT(183) +tagOf_PrimOp NoFollowOp = ILIT(184) tagOf_PrimOp _ = panic# "tagOf_PrimOp: pattern-match" @@ -496,6 +498,8 @@ allThePrimOps IntQuotOp, IntRemOp, IntNegOp, + WordQuotOp, + WordRemOp, AndOp, OrOp, NotOp, @@ -791,6 +795,9 @@ primOpInfo IntAbsOp = Monadic SLIT("absInt#") intPrimTy A @Word#@ is an unsigned @Int#@. \begin{code} +primOpInfo WordQuotOp = Dyadic SLIT("quotWord#") wordPrimTy +primOpInfo WordRemOp = Dyadic SLIT("remWord#") wordPrimTy + primOpInfo AndOp = Dyadic SLIT("and#") wordPrimTy primOpInfo OrOp = Dyadic SLIT("or#") wordPrimTy primOpInfo XorOp = Dyadic SLIT("xor#") wordPrimTy