on master help sign in
javascript: add plenty of bits primitives
commit40ca3385729833c93c745c5bce082694a71aaa1a authorraichoo <raichoo@googlemail.com> dateFri 18 Apr 2014, 22:11 (13 years ago) parent26d7d2b
1 file changed+392−38
src/IRTS/CodegenJavaScript.hs+392−38
src/IRTS/CodegenJavaScript.hs+392−38
@@ -347,14 +347,23 @@ jsUnPackBits :: JS -> JS
347347jsUnPackBits js = JSIndex js $ JSNum (JSInt 0)
348348
349349
350−jsPackBits8 :: JS -> JS
351−jsPackBits8 js = JSNew "Uint8Array" [JSArray [js]]
350+jsPackUBits8 :: JS -> JS
351+jsPackUBits8 js = JSNew "Uint8Array" [JSArray [js]]
352352
353−jsPackBits16 :: JS -> JS
354−jsPackBits16 js = JSNew "Uint16Array" [JSArray [js]]
353+jsPackUBits16 :: JS -> JS
354+jsPackUBits16 js = JSNew "Uint16Array" [JSArray [js]]
355355
356−jsPackBits32 :: JS -> JS
357−jsPackBits32 js = JSNew "Uint32Array" [JSArray [js]]
356+jsPackUBits32 :: JS -> JS
357+jsPackUBits32 js = JSNew "Uint32Array" [JSArray [js]]
358+
359+jsPackSBits8 :: JS -> JS
360+jsPackSBits8 js = JSNew "Int8Array" [JSArray [js]]
361+
362+jsPackSBits16 :: JS -> JS
363+jsPackSBits16 js = JSNew "Int16Array" [JSArray [js]]
364+
365+jsPackSBits32 :: JS -> JS
366+jsPackSBits32 js = JSNew "Int32Array" [JSArray [js]]
358367
359368
360369foldJS :: (JS -> a) -> (a -> a -> a) -> a -> JS -> a
@@ -1843,29 +1852,9 @@ translateExpression (SApp tc name vars)
18431852translateExpression (SOp op vars)
18441853 | LNoOp <- op = JSVar (last vars)
18451854
1846− | (LZExt (ITFixed IT8) ITNative) <- op = jsUnPackBits $ JSVar (last vars)
1847−
1848− | (LLSHR (ITFixed IT8)) <- op
1849− , (lhs:rhs:_) <- vars =
1850− jsPackBits8 (
1851− JSBinOp ">>" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1852− )
1853−
1854− | (LLSHR (ITFixed IT16)) <- op
1855− , (lhs:rhs:_) <- vars =
1856− jsPackBits16 (
1857− JSBinOp ">>" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1858− )
1859−
1860− | (LLSHR (ITFixed IT32)) <- op
1861− , (lhs:rhs:_) <- vars =
1862− jsPackBits32 (
1863− JSBinOp ">>" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1864− )
1865−
1866− | (LLSHR (ITFixed IT64)) <- op
1867− , (lhs:rhs:_) <- vars =
1868− jsMeth (JSVar lhs) "shiftRight" [JSVar rhs]
1855+ | (LZExt (ITFixed IT8) ITNative) <- op = jsUnPackBits $ JSVar (last vars)
1856+ | (LZExt (ITFixed IT16) ITNative) <- op = jsUnPackBits $ JSVar (last vars)
1857+ | (LZExt (ITFixed IT32) ITNative) <- op = jsUnPackBits $ JSVar (last vars)
18691858
18701859 | (LZExt _ ITBig) <- op = jsBigInt $ jsCall "String" [JSVar (last vars)]
18711860 | (LPlus (ATInt ITBig)) <- op
@@ -1920,19 +1909,19 @@ translateExpression (SOp op vars)
19201909
19211910 | (LTrunc (ITFixed IT16) (ITFixed IT8)) <- op
19221911 , (arg:_) <- vars =
1923− jsPackBits8 (
1912+ jsPackUBits8 (
19241913 JSBinOp "&" (jsUnPackBits $ JSVar arg) (JSNum (JSInt 0xFF))
19251914 )
19261915
19271916 | (LTrunc (ITFixed IT32) (ITFixed IT16)) <- op
19281917 , (arg:_) <- vars =
1929− jsPackBits16 (
1918+ jsPackUBits16 (
19301919 JSBinOp "&" (jsUnPackBits $ JSVar arg) (JSNum (JSInt 0xFFFF))
19311920 )
19321921
19331922 | (LTrunc (ITFixed IT64) (ITFixed IT32)) <- op
19341923 , (arg:_) <- vars =
1935− jsPackBits32 (
1924+ jsPackUBits32 (
19361925 jsMeth (jsMeth (JSVar arg) "and" [
19371926 jsBigInt (JSString $ show 0xFFFFFFFF)
19381927 ]) "intValue" []
@@ -1944,21 +1933,67 @@ translateExpression (SOp op vars)
19441933 jsBigInt (JSString $ show 0xFFFFFFFFFFFFFFFF)
19451934 ]
19461935
1947− | (LAnd (ITFixed IT8)) <- op
1936+ | (LLSHR (ITFixed IT8)) <- op
19481937 , (lhs:rhs:_) <- vars =
1949− jsPackBits8 (
1938+ jsPackUBits8 (
1939+ JSBinOp ">>" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1940+ )
1941+
1942+ | (LLSHR (ITFixed IT16)) <- op
1943+ , (lhs:rhs:_) <- vars =
1944+ jsPackUBits16 (
1945+ JSBinOp ">>" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1946+ )
1947+
1948+ | (LLSHR (ITFixed IT32)) <- op
1949+ , (lhs:rhs:_) <- vars =
1950+ jsPackUBits32 (
1951+ JSBinOp ">>" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1952+ )
1953+
1954+ | (LLSHR (ITFixed IT64)) <- op
1955+ , (lhs:rhs:_) <- vars =
1956+ jsMeth (JSVar lhs) "shiftRight" [JSVar rhs]
1957+
1958+ | (LSHL (ITFixed IT8)) <- op
1959+ , (lhs:rhs:_) <- vars =
1960+ jsPackUBits8 (
1961+ JSBinOp "<<" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1962+ )
1963+
1964+ | (LSHL (ITFixed IT16)) <- op
1965+ , (lhs:rhs:_) <- vars =
1966+ jsPackUBits16 (
1967+ JSBinOp "<<" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1968+ )
1969+
1970+ | (LSHL (ITFixed IT32)) <- op
1971+ , (lhs:rhs:_) <- vars =
1972+ jsPackUBits32 (
1973+ JSBinOp "<<" (jsUnPackBits $ JSVar lhs) (jsUnPackBits $ JSVar rhs)
1974+ )
1975+
1976+ | (LSHL (ITFixed IT64)) <- op
1977+ , (lhs:rhs:_) <- vars =
1978+ jsMeth (jsMeth (JSVar lhs) "shiftLeft" [JSVar rhs]) "and" [
1979+ jsBigInt (JSString $ show 0xFFFFFFFFFFFFFFFF)
1980+ ]
1981+
1982+ | (LAnd (ITFixed IT8)) <- op
1983+ , (lhs:rhs:_) <- vars =
1984+ jsPackUBits8 (
19501985 JSBinOp "&" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
19511986 )
19521987
1953− | (LAnd (ITFixed IT16)) <- op
1988+ | (LAnd (ITFixed IT16)) <- op
19541989 , (lhs:rhs:_) <- vars =
1955− jsPackBits16 (
1990+ jsPackUBits16 (
19561991 JSBinOp "&" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
19571992 )
19581993
1959− | (LAnd (ITFixed IT32)) <- op
1994+ | (LAnd (ITFixed IT32)) <- op
19601995 , (lhs:rhs:_) <- vars =
1961− jsPackBits32 (
1996+ jsPackUBits32 (
19621997 JSBinOp "&" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
19631998 )
19641999
@@ -1966,12 +2001,331 @@ translateExpression (SOp op vars)
19662001 , (lhs:rhs:_) <- vars =
19672002 jsMeth (JSVar lhs) "and" [JSVar rhs]
19682003
2004+ | (LOr (ITFixed IT8)) <- op
2005+ , (lhs:rhs:_) <- vars =
2006+ jsPackUBits8 (
2007+ JSBinOp "|" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2008+ )
2009+
2010+ | (LOr (ITFixed IT16)) <- op
2011+ , (lhs:rhs:_) <- vars =
2012+ jsPackUBits16 (
2013+ JSBinOp "|" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2014+ )
2015+
2016+ | (LOr (ITFixed IT32)) <- op
2017+ , (lhs:rhs:_) <- vars =
2018+ jsPackUBits32 (
2019+ JSBinOp "|" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2020+ )
2021+
2022+ | (LOr (ITFixed IT64)) <- op
2023+ , (lhs:rhs:_) <- vars =
2024+ jsMeth (JSVar lhs) "or" [JSVar rhs]
2025+
2026+ | (LXOr (ITFixed IT8)) <- op
2027+ , (lhs:rhs:_) <- vars =
2028+ jsPackUBits8 (
2029+ JSBinOp "^" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2030+ )
2031+
2032+ | (LXOr (ITFixed IT16)) <- op
2033+ , (lhs:rhs:_) <- vars =
2034+ jsPackUBits16 (
2035+ JSBinOp "^" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2036+ )
2037+
2038+ | (LXOr (ITFixed IT32)) <- op
2039+ , (lhs:rhs:_) <- vars =
2040+ jsPackUBits32 (
2041+ JSBinOp "^" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2042+ )
2043+
2044+ | (LXOr (ITFixed IT64)) <- op
2045+ , (lhs:rhs:_) <- vars =
2046+ jsMeth (JSVar lhs) "xor" [JSVar rhs]
2047+
2048+ | (LPlus (ATInt (ITFixed IT8))) <- op
2049+ , (lhs:rhs:_) <- vars =
2050+ jsPackUBits8 (
2051+ JSBinOp "+" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2052+ )
2053+
2054+ | (LPlus (ATInt (ITFixed IT16))) <- op
2055+ , (lhs:rhs:_) <- vars =
2056+ jsPackUBits16 (
2057+ JSBinOp "+" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2058+ )
2059+
2060+ | (LPlus (ATInt (ITFixed IT32))) <- op
2061+ , (lhs:rhs:_) <- vars =
2062+ jsPackUBits32 (
2063+ JSBinOp "+" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2064+ )
2065+
19692066 | (LPlus (ATInt (ITFixed IT64))) <- op
19702067 , (lhs:rhs:_) <- vars =
19712068 jsMeth (jsMeth (JSVar lhs) "add" [JSVar rhs]) "and" [
19722069 jsBigInt (JSString $ show 0xFFFFFFFFFFFFFFFF)
19732070 ]
19742071
2072+ | (LMinus (ATInt (ITFixed IT8))) <- op
2073+ , (lhs:rhs:_) <- vars =
2074+ jsPackUBits8 (
2075+ JSBinOp "-" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2076+ )
2077+
2078+ | (LMinus (ATInt (ITFixed IT16))) <- op
2079+ , (lhs:rhs:_) <- vars =
2080+ jsPackUBits16 (
2081+ JSBinOp "-" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2082+ )
2083+
2084+ | (LMinus (ATInt (ITFixed IT32))) <- op
2085+ , (lhs:rhs:_) <- vars =
2086+ jsPackUBits32 (
2087+ JSBinOp "-" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2088+ )
2089+
2090+ | (LMinus (ATInt (ITFixed IT64))) <- op
2091+ , (lhs:rhs:_) <- vars =
2092+ jsMeth (jsMeth (JSVar lhs) "subtract" [JSVar rhs]) "and" [
2093+ jsBigInt (JSString $ show 0xFFFFFFFFFFFFFFFF)
2094+ ]
2095+
2096+ | (LTimes (ATInt (ITFixed IT8))) <- op
2097+ , (lhs:rhs:_) <- vars =
2098+ jsPackUBits8 (
2099+ JSBinOp "*" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2100+ )
2101+
2102+ | (LTimes (ATInt (ITFixed IT16))) <- op
2103+ , (lhs:rhs:_) <- vars =
2104+ jsPackUBits16 (
2105+ JSBinOp "*" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2106+ )
2107+
2108+ | (LTimes (ATInt (ITFixed IT32))) <- op
2109+ , (lhs:rhs:_) <- vars =
2110+ jsPackUBits32 (
2111+ JSBinOp "*" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2112+ )
2113+
2114+ | (LTimes (ATInt (ITFixed IT64))) <- op
2115+ , (lhs:rhs:_) <- vars =
2116+ jsMeth (jsMeth (JSVar lhs) "multiply" [JSVar rhs]) "and" [
2117+ jsBigInt (JSString $ show 0xFFFFFFFFFFFFFFFF)
2118+ ]
2119+
2120+ | (LEq (ATInt (ITFixed IT8))) <- op
2121+ , (lhs:rhs:_) <- vars =
2122+ jsPackUBits8 (
2123+ JSBinOp "==" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2124+ )
2125+
2126+ | (LEq (ATInt (ITFixed IT16))) <- op
2127+ , (lhs:rhs:_) <- vars =
2128+ jsPackUBits16 (
2129+ JSBinOp "==" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2130+ )
2131+
2132+ | (LEq (ATInt (ITFixed IT32))) <- op
2133+ , (lhs:rhs:_) <- vars =
2134+ jsPackUBits32 (
2135+ JSBinOp "==" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2136+ )
2137+
2138+ | (LEq (ATInt (ITFixed IT64))) <- op
2139+ , (lhs:rhs:_) <- vars =
2140+ jsMeth (jsMeth (JSVar lhs) "equals" [JSVar rhs]) "and" [
2141+ jsBigInt (JSString $ show 0xFFFFFFFFFFFFFFFF)
2142+ ]
2143+
2144+ | (LLt (ITFixed IT8)) <- op
2145+ , (lhs:rhs:_) <- vars =
2146+ jsPackUBits8 (
2147+ JSBinOp "<" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2148+ )
2149+
2150+ | (LLt (ITFixed IT16)) <- op
2151+ , (lhs:rhs:_) <- vars =
2152+ jsPackUBits16 (
2153+ JSBinOp "<" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2154+ )
2155+
2156+ | (LLt (ITFixed IT32)) <- op
2157+ , (lhs:rhs:_) <- vars =
2158+ jsPackUBits32 (
2159+ JSBinOp "<" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2160+ )
2161+
2162+ | (LLt (ITFixed IT64)) <- op
2163+ , (lhs:rhs:_) <- vars = invokeMeth lhs "lesser" [rhs]
2164+
2165+ | (LLe (ITFixed IT8)) <- op
2166+ , (lhs:rhs:_) <- vars =
2167+ jsPackUBits8 (
2168+ JSBinOp "<=" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2169+ )
2170+
2171+ | (LLe (ITFixed IT16)) <- op
2172+ , (lhs:rhs:_) <- vars =
2173+ jsPackUBits16 (
2174+ JSBinOp "<=" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2175+ )
2176+
2177+ | (LLe (ITFixed IT32)) <- op
2178+ , (lhs:rhs:_) <- vars =
2179+ jsPackUBits32 (
2180+ JSBinOp "<=" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2181+ )
2182+
2183+ | (LLe (ITFixed IT64)) <- op
2184+ , (lhs:rhs:_) <- vars = invokeMeth lhs "lesserOrEquals" [rhs]
2185+
2186+ | (LGt (ITFixed IT8)) <- op
2187+ , (lhs:rhs:_) <- vars =
2188+ jsPackUBits8 (
2189+ JSBinOp ">" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2190+ )
2191+
2192+ | (LGt (ITFixed IT16)) <- op
2193+ , (lhs:rhs:_) <- vars =
2194+ jsPackUBits16 (
2195+ JSBinOp ">" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2196+ )
2197+ | (LGt (ITFixed IT32)) <- op
2198+ , (lhs:rhs:_) <- vars =
2199+ jsPackUBits32 (
2200+ JSBinOp ">" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2201+ )
2202+
2203+ | (LGt (ITFixed IT64)) <- op
2204+ , (lhs:rhs:_) <- vars = invokeMeth lhs "greater" [rhs]
2205+
2206+ | (LGe (ITFixed IT8)) <- op
2207+ , (lhs:rhs:_) <- vars =
2208+ jsPackUBits8 (
2209+ JSBinOp ">=" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2210+ )
2211+
2212+ | (LGe (ITFixed IT16)) <- op
2213+ , (lhs:rhs:_) <- vars =
2214+ jsPackUBits16 (
2215+ JSBinOp ">=" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2216+ )
2217+ | (LGe (ITFixed IT32)) <- op
2218+ , (lhs:rhs:_) <- vars =
2219+ jsPackUBits32 (
2220+ JSBinOp ">=" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2221+ )
2222+
2223+ | (LGe (ITFixed IT64)) <- op
2224+ , (lhs:rhs:_) <- vars = invokeMeth lhs "greaterOrEquals" [rhs]
2225+
2226+ | (LUDiv (ITFixed IT8)) <- op
2227+ , (lhs:rhs:_) <- vars =
2228+ jsPackUBits8 (
2229+ JSBinOp "/" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2230+ )
2231+
2232+ | (LUDiv (ITFixed IT16)) <- op
2233+ , (lhs:rhs:_) <- vars =
2234+ jsPackUBits16 (
2235+ JSBinOp "/" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2236+ )
2237+
2238+ | (LUDiv (ITFixed IT32)) <- op
2239+ , (lhs:rhs:_) <- vars =
2240+ jsPackUBits32 (
2241+ JSBinOp "/" (jsUnPackBits (JSVar lhs)) (jsUnPackBits (JSVar rhs))
2242+ )
2243+
2244+ | (LUDiv (ITFixed IT64)) <- op
2245+ , (lhs:rhs:_) <- vars = invokeMeth lhs "divide" [rhs]
2246+
2247+ | (LSDiv (ATInt (ITFixed IT8))) <- op
2248+ , (lhs:rhs:_) <- vars =
2249+ jsPackSBits8 (
2250+ JSBinOp "/" (
2251+ jsUnPackBits $ jsPackSBits8 $ jsUnPackBits (JSVar lhs)
2252+ ) (
2253+ jsUnPackBits $ jsPackSBits8 $ jsUnPackBits (JSVar rhs)
2254+ )
2255+ )
2256+
2257+ | (LSDiv (ATInt (ITFixed IT16))) <- op
2258+ , (lhs:rhs:_) <- vars =
2259+ jsPackSBits16 (
2260+ JSBinOp "/" (
2261+ jsUnPackBits $ jsPackSBits16 $ jsUnPackBits (JSVar lhs)
2262+ ) (
2263+ jsUnPackBits $ jsPackSBits16 $ jsUnPackBits (JSVar rhs)
2264+ )
2265+ )
2266+
2267+ | (LSDiv (ATInt (ITFixed IT32))) <- op
2268+ , (lhs:rhs:_) <- vars =
2269+ jsPackSBits32 (
2270+ JSBinOp "/" (
2271+ jsUnPackBits $ jsPackSBits32 $ jsUnPackBits (JSVar lhs)
2272+ ) (
2273+ jsUnPackBits $ jsPackSBits32 $ jsUnPackBits (JSVar rhs)
2274+ )
2275+ )
2276+
2277+ | (LSDiv (ATInt (ITFixed IT64))) <- op
2278+ , (lhs:rhs:_) <- vars = invokeMeth lhs "divide" [rhs]
2279+
2280+ | (LSRem (ATInt (ITFixed IT8))) <- op
2281+ , (lhs:rhs:_) <- vars =
2282+ jsPackSBits8 (
2283+ JSBinOp "%" (
2284+ jsUnPackBits $ jsPackSBits8 $ jsUnPackBits (JSVar lhs)
2285+ ) (
2286+ jsUnPackBits $ jsPackSBits8 $ jsUnPackBits (JSVar rhs)
2287+ )
2288+ )
2289+
2290+ | (LSRem (ATInt (ITFixed IT16))) <- op
2291+ , (lhs:rhs:_) <- vars =
2292+ jsPackSBits16 (
2293+ JSBinOp "%" (
2294+ jsUnPackBits $ jsPackSBits16 $ jsUnPackBits (JSVar lhs)
2295+ ) (
2296+ jsUnPackBits $ jsPackSBits16 $ jsUnPackBits (JSVar rhs)
2297+ )
2298+ )
2299+
2300+ | (LSRem (ATInt (ITFixed IT32))) <- op
2301+ , (lhs:rhs:_) <- vars =
2302+ jsPackSBits32 (
2303+ JSBinOp "%" (
2304+ jsUnPackBits $ jsPackSBits32 $ jsUnPackBits (JSVar lhs)
2305+ ) (
2306+ jsUnPackBits $ jsPackSBits32 $ jsUnPackBits (JSVar rhs)
2307+ )
2308+ )
2309+
2310+ | (LSRem (ATInt (ITFixed IT64))) <- op
2311+ , (lhs:rhs:_) <- vars = invokeMeth lhs "mod" [rhs]
2312+
2313+ | (LCompl (ITFixed IT8)) <- op
2314+ , (arg:_) <- vars =
2315+ jsPackSBits8 $ JSPreOp "~" $ jsUnPackBits (JSVar arg)
2316+
2317+ | (LCompl (ITFixed IT16)) <- op
2318+ , (arg:_) <- vars =
2319+ jsPackSBits16 $ JSPreOp "~" $ jsUnPackBits (JSVar arg)
2320+
2321+ | (LCompl (ITFixed IT32)) <- op
2322+ , (arg:_) <- vars =
2323+ jsPackSBits32 $ JSPreOp "~" $ jsUnPackBits (JSVar arg)
2324+
2325+ | (LCompl (ITFixed IT64)) <- op
2326+ , (arg:_) <- vars =
2327+ invokeMeth arg "not" []
2328+
19752329 | (LPlus _) <- op
19762330 , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
19772331 | (LMinus _) <- op