blob: b794c7f5b762cefaa2340f873434641e587a119e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE Strict #-}
module GHC.CmmToAsm.Wasm.Utils
( naturalNarrowing,
widthMax,
detEltsUFM,
detEltsUniqMap,
builderCommas,
)
where
import Data.ByteString.Builder
import Data.List (intersperse, sortOn)
import GHC.Cmm
import GHC.Prelude
import GHC.Types.Unique.FM
import GHC.Types.Unique.Map
naturalNarrowing :: Width -> Integer -> Integer
naturalNarrowing w i
| i < 0 = narrowS w i
| otherwise = narrowU w i
widthMax :: Width -> Integer
widthMax w = (1 `shiftL` widthInBits w) - 1
detEltsUFM :: Ord k => UniqFM k0 (k, a) -> [(k, a)]
detEltsUFM = sortOn fst . nonDetEltsUFM
detEltsUniqMap :: Ord k => UniqMap k a -> [(k, a)]
detEltsUniqMap = sortOn fst . nonDetEltsUniqMap
builderCommas :: (a -> Builder) -> [a] -> Builder
builderCommas f xs = mconcat (intersperse ", " (map f xs))
|