forked from GitHub/haskell-wasm
add part of numeric operations
This commit is contained in:
+409
-55
@@ -12,9 +12,10 @@ import qualified Data.Text.Lazy.Encoding as TLEncoding
|
||||
import qualified Data.Text.Lazy.Read as TLRead
|
||||
|
||||
import qualified Data.ByteString.Lazy as LBS
|
||||
import Numeric.Natural (Natural)
|
||||
import Data.Maybe (fromMaybe)
|
||||
|
||||
import Numeric.Natural (Natural)
|
||||
|
||||
import Language.Wasm.Lexer (
|
||||
Token (
|
||||
TKeyword,
|
||||
@@ -38,60 +39,191 @@ import Language.Wasm.Lexer (
|
||||
|
||||
'(' { TOpenBracket }
|
||||
')' { TCloseBracket }
|
||||
'func' { TKeyword "func" }
|
||||
'param' { TKeyword "param" }
|
||||
'result' { TKeyword "result" }
|
||||
'i32' { TKeyword "i32" }
|
||||
'i64' { TKeyword "i64" }
|
||||
'f32' { TKeyword "f32" }
|
||||
'f64' { TKeyword "f64" }
|
||||
'mut' { TKeyword "mut" }
|
||||
'anyfunc' { TKeyword "anyfunc" }
|
||||
'type' { TKeyword "type" }
|
||||
'unreachable' { TKeyword "unreachable" }
|
||||
'nop' { TKeyword "nop" }
|
||||
'br' { TKeyword "br" }
|
||||
'br_if' { TKeyword "br_if" }
|
||||
'br_table' { TKeyword "br_table" }
|
||||
'return' { TKeyword "return" }
|
||||
'call' { TKeyword "call" }
|
||||
'call_indirect' { TKeyword "call_indirect" }
|
||||
'drop' { TKeyword "drop" }
|
||||
'select' { TKeyword "select" }
|
||||
'get_local' { TKeyword "get_local" }
|
||||
'set_local' { TKeyword "set_local" }
|
||||
'tee_local' { TKeyword "tee_local" }
|
||||
'get_global' { TKeyword "get_global" }
|
||||
'set_global' { TKeyword "set_global" }
|
||||
'i32.load' { TKeyword "i32.load" }
|
||||
'i64.load' { TKeyword "i64.load" }
|
||||
'f32.load' { TKeyword "f32.load" }
|
||||
'f64.load' { TKeyword "f64.load" }
|
||||
'i32.load8_s' { TKeyword "i32.load8_s" }
|
||||
'i32.load8_u' { TKeyword "i32.load8_u" }
|
||||
'i32.load16_s' { TKeyword "i32.load16_s" }
|
||||
'i32.load16_u' { TKeyword "i32.load16_u" }
|
||||
'i64.load8_s' { TKeyword "i64.load8_s" }
|
||||
'i64.load8_u' { TKeyword "i64.load8_u" }
|
||||
'i64.load16_s' { TKeyword "i64.load16_s" }
|
||||
'i64.load16_u' { TKeyword "i64.load16_u" }
|
||||
'i64.load32_s' { TKeyword "i64.load32_s" }
|
||||
'i64.load32_u' { TKeyword "i64.load32_u" }
|
||||
'i32.store' { TKeyword "i32.store" }
|
||||
'i64.store' { TKeyword "i64.store" }
|
||||
'f32.store' { TKeyword "f32.store" }
|
||||
'f64.store' { TKeyword "f64.store" }
|
||||
'i32.store8' { TKeyword "i32.store8" }
|
||||
'i32.store16' { TKeyword "i32.store16" }
|
||||
'i64.store8' { TKeyword "i64.store" }
|
||||
'i64.store16' { TKeyword "i64.store" }
|
||||
'i64.store32' { TKeyword "i64.store" }
|
||||
'current_memory' { TKeyword "current_memory" }
|
||||
'grow_memory' { TKeyword "grow_memory" }
|
||||
id { TId $$ }
|
||||
u32 { TIntLit (asUInt32 -> Just $$) }
|
||||
offset { TKeyword (asOffset -> Just $$) }
|
||||
align { TKeyword (asAlign -> Just $$) }
|
||||
'func' { TKeyword "func" }
|
||||
'param' { TKeyword "param" }
|
||||
'result' { TKeyword "result" }
|
||||
'i32' { TKeyword "i32" }
|
||||
'i64' { TKeyword "i64" }
|
||||
'f32' { TKeyword "f32" }
|
||||
'f64' { TKeyword "f64" }
|
||||
'mut' { TKeyword "mut" }
|
||||
'anyfunc' { TKeyword "anyfunc" }
|
||||
'type' { TKeyword "type" }
|
||||
'unreachable' { TKeyword "unreachable" }
|
||||
'nop' { TKeyword "nop" }
|
||||
'br' { TKeyword "br" }
|
||||
'br_if' { TKeyword "br_if" }
|
||||
'br_table' { TKeyword "br_table" }
|
||||
'return' { TKeyword "return" }
|
||||
'call' { TKeyword "call" }
|
||||
'call_indirect' { TKeyword "call_indirect" }
|
||||
'drop' { TKeyword "drop" }
|
||||
'select' { TKeyword "select" }
|
||||
'get_local' { TKeyword "get_local" }
|
||||
'set_local' { TKeyword "set_local" }
|
||||
'tee_local' { TKeyword "tee_local" }
|
||||
'get_global' { TKeyword "get_global" }
|
||||
'set_global' { TKeyword "set_global" }
|
||||
'i32.load' { TKeyword "i32.load" }
|
||||
'i64.load' { TKeyword "i64.load" }
|
||||
'f32.load' { TKeyword "f32.load" }
|
||||
'f64.load' { TKeyword "f64.load" }
|
||||
'i32.load8_s' { TKeyword "i32.load8_s" }
|
||||
'i32.load8_u' { TKeyword "i32.load8_u" }
|
||||
'i32.load16_s' { TKeyword "i32.load16_s" }
|
||||
'i32.load16_u' { TKeyword "i32.load16_u" }
|
||||
'i64.load8_s' { TKeyword "i64.load8_s" }
|
||||
'i64.load8_u' { TKeyword "i64.load8_u" }
|
||||
'i64.load16_s' { TKeyword "i64.load16_s" }
|
||||
'i64.load16_u' { TKeyword "i64.load16_u" }
|
||||
'i64.load32_s' { TKeyword "i64.load32_s" }
|
||||
'i64.load32_u' { TKeyword "i64.load32_u" }
|
||||
'i32.store' { TKeyword "i32.store" }
|
||||
'i64.store' { TKeyword "i64.store" }
|
||||
'f32.store' { TKeyword "f32.store" }
|
||||
'f64.store' { TKeyword "f64.store" }
|
||||
'i32.store8' { TKeyword "i32.store8" }
|
||||
'i32.store16' { TKeyword "i32.store16" }
|
||||
'i64.store8' { TKeyword "i64.store" }
|
||||
'i64.store16' { TKeyword "i64.store" }
|
||||
'i64.store32' { TKeyword "i64.store" }
|
||||
'current_memory' { TKeyword "current_memory" }
|
||||
'grow_memory' { TKeyword "grow_memory" }
|
||||
'i32.const' { TKeyword "i32.const" }
|
||||
'i64.const' { TKeyword "i64.const" }
|
||||
'f32.const' { TKeyword "f32.const" }
|
||||
'f64.const' { TKeyword "f64.const" }
|
||||
'i32.clz' { TKeyword "i32.clz" }
|
||||
'i32.ctz' { TKeyword "i32.ctz" }
|
||||
'i32.popcnt' { TKeyword "i32.popcnt" }
|
||||
'i32.add' { TKeyword "i32.add" }
|
||||
'i32.sub' { TKeyword "i32.sub" }
|
||||
'i32.mul' { TKeyword "i32.mul" }
|
||||
'i32.div_s' { TKeyword "i32.div_s" }
|
||||
'i32.div_u' { TKeyword "i32.div_u" }
|
||||
'i32.rem_s' { TKeyword "i32.rem_s" }
|
||||
'i32.rem_u' { TKeyword "i32.rem_u" }
|
||||
'i32.and' { TKeyword "i32.and" }
|
||||
'i32.or' { TKeyword "i32.or" }
|
||||
'i32.xor' { TKeyword "i32.xor" }
|
||||
'i32.shl' { TKeyword "i32.shl" }
|
||||
'i32.shr_s' { TKeyword "i32.shr_s" }
|
||||
'i32.shr_u' { TKeyword "i32.shr_u" }
|
||||
'i32.rotl' { TKeyword "i32.rotl" }
|
||||
'i32.rotr' { TKeyword "i32.rotr" }
|
||||
'i64.clz' { TKeyword "i64.clz" }
|
||||
'i64.ctz' { TKeyword "i64.ctz" }
|
||||
'i64.popcnt' { TKeyword "i64.popcnt" }
|
||||
'i64.add' { TKeyword "i64.add" }
|
||||
'i64.sub' { TKeyword "i64.sub" }
|
||||
'i64.mul' { TKeyword "i64.mul" }
|
||||
'i64.div_s' { TKeyword "i64.div_s" }
|
||||
'i64.div_u' { TKeyword "i64.div_u" }
|
||||
'i64.rem_s' { TKeyword "i64.rem_s" }
|
||||
'i64.rem_u' { TKeyword "i64.rem_u" }
|
||||
'i64.and' { TKeyword "i64.and" }
|
||||
'i64.or' { TKeyword "i64.or" }
|
||||
'i64.xor' { TKeyword "i64.xor" }
|
||||
'i64.shl' { TKeyword "i64.shl" }
|
||||
'i64.shr_s' { TKeyword "i64.shr_s" }
|
||||
'i64.shr_u' { TKeyword "i64.shr_u" }
|
||||
'i64.rotl' { TKeyword "i64.rotl" }
|
||||
'i64.rotr' { TKeyword "i64.rotr" }
|
||||
'f32.abs' { TKeyword "f32.abs" }
|
||||
'f32.neg' { TKeyword "f32.neg" }
|
||||
'f32.ceil' { TKeyword "f32.ceil" }
|
||||
'f32.floor' { TKeyword "f32.floor" }
|
||||
'f32.trunc' { TKeyword "f32.trunc" }
|
||||
'f32.nearest' { TKeyword "f32.nearest" }
|
||||
'f32.sqrt' { TKeyword "f32.sqrt" }
|
||||
'f32.add' { TKeyword "f32.add" }
|
||||
'f32.sub' { TKeyword "f32.sub" }
|
||||
'f32.mul' { TKeyword "f32.mul" }
|
||||
'f32.div' { TKeyword "f32.div" }
|
||||
'f32.min' { TKeyword "f32.min" }
|
||||
'f32.max' { TKeyword "f32.max" }
|
||||
'f32.copysign' { TKeyword "f32.copysign" }
|
||||
'f64.abs' { TKeyword "f64.abs" }
|
||||
'f64.neg' { TKeyword "f64.neg" }
|
||||
'f64.ceil' { TKeyword "f64.ceil" }
|
||||
'f64.floor' { TKeyword "f64.floor" }
|
||||
'f64.trunc' { TKeyword "f64.trunc" }
|
||||
'f64.nearest' { TKeyword "f64.nearest" }
|
||||
'f64.sqrt' { TKeyword "f64.sqrt" }
|
||||
'f64.add' { TKeyword "f64.add" }
|
||||
'f64.sub' { TKeyword "f64.sub" }
|
||||
'f64.mul' { TKeyword "f64.mul" }
|
||||
'f64.div' { TKeyword "f64.div" }
|
||||
'f64.min' { TKeyword "f64.min" }
|
||||
'f64.max' { TKeyword "f64.max" }
|
||||
'f64.copysign' { TKeyword "f64.copysign" }
|
||||
'i32.eqz' { TKeyword "i32.eqz" }
|
||||
'i32.eq' { TKeyword "i32.eq" }
|
||||
'i32.ne' { TKeyword "i32.ne" }
|
||||
'i32.lt_s' { TKeyword "i32.lt_s" }
|
||||
'i32.lt_u' { TKeyword "i32.lt_u" }
|
||||
'i32.gt_s' { TKeyword "i32.gt_s" }
|
||||
'i32.gt_u' { TKeyword "i32.gt_u" }
|
||||
'i32.le_s' { TKeyword "i32.le_s" }
|
||||
'i32.le_u' { TKeyword "i32.le_u" }
|
||||
'i32.ge_s' { TKeyword "i32.ge_s" }
|
||||
'i32.ge_u' { TKeyword "i32.ge_u" }
|
||||
'i64.eqz' { TKeyword "i64.eqz" }
|
||||
'i64.eq' { TKeyword "i64.eq" }
|
||||
'i64.ne' { TKeyword "i64.ne" }
|
||||
'i64.lt_s' { TKeyword "i64.lt_s" }
|
||||
'i64.lt_u' { TKeyword "i64.lt_u" }
|
||||
'i64.gt_s' { TKeyword "i64.gt_s" }
|
||||
'i64.gt_u' { TKeyword "i64.gt_u" }
|
||||
'i64.le_s' { TKeyword "i64.le_s" }
|
||||
'i64.le_u' { TKeyword "i64.le_u" }
|
||||
'i64.ge_s' { TKeyword "i64.ge_s" }
|
||||
'i64.ge_u' { TKeyword "i64.ge_u" }
|
||||
'f32.eq' { TKeyword "f32.eq" }
|
||||
'f32.ne' { TKeyword "f32.ne" }
|
||||
'f32.lt' { TKeyword "f32.lt" }
|
||||
'f32.gt' { TKeyword "f32.gt" }
|
||||
'f32.le' { TKeyword "f32.le" }
|
||||
'f32.ge' { TKeyword "f32.ge" }
|
||||
'f64.eq' { TKeyword "f64.eq" }
|
||||
'f64.ne' { TKeyword "f64.ne" }
|
||||
'f64.lt' { TKeyword "f64.lt" }
|
||||
'f64.gt' { TKeyword "f64.gt" }
|
||||
'f64.le' { TKeyword "f64.le" }
|
||||
'f64.ge' { TKeyword "f64.ge" }
|
||||
'i32.wrap/i64' { TKeyword "i32.wrap/i64" }
|
||||
'i32.trunc_s/f32' { TKeyword "i32.trunc_s/f32" }
|
||||
'i32.trunc_u/f32' { TKeyword "i32.trunc_u/f32" }
|
||||
'i32.trunc_s/f64' { TKeyword "i32.trunc_s/f64" }
|
||||
'i32.trunc_u/f64' { TKeyword "i32.trunc_u/f64" }
|
||||
'i64.extend_s/i32' { TKeyword "i64.extend_s/i32" }
|
||||
'i64.extend_u/i32' { TKeyword "i64.extend_u/i32" }
|
||||
'i64.trunc_s/f32' { TKeyword "i64.trunc_s/f32" }
|
||||
'i64.trunc_u/f32' { TKeyword "i64.trunc_u/f32" }
|
||||
'i64.trunc_s/f64' { TKeyword "i64.trunc_s/f64" }
|
||||
'i64.trunc_u/f64' { TKeyword "i64.trunc_u/f64" }
|
||||
'f32.convert_s/i32' { TKeyword "f32.convert_s/i32" }
|
||||
'f32.convert_u/i32' { TKeyword "f32.convert_u/i32" }
|
||||
'f32.convert_s/i64' { TKeyword "f32.convert_s/i64" }
|
||||
'f32.convert_u/i64' { TKeyword "f32.convert_u/i64" }
|
||||
'f32.demote/f64' { TKeyword "f32.demote/f64" }
|
||||
'f64.convert_s/i32' { TKeyword "f64.convert_s/i32" }
|
||||
'f64.convert_u/i32' { TKeyword "f64.convert_u/i32" }
|
||||
'f64.convert_s/i64' { TKeyword "f64.convert_s/i64" }
|
||||
'f64.convert_u/i64' { TKeyword "f64.convert_u/i64" }
|
||||
'f64.promote/f32' { TKeyword "f64.promote/f32" }
|
||||
'i32.reinterpret/f32' { TKeyword "i32.reinterpret/f32" }
|
||||
'i64.reinterpret/f64' { TKeyword "i64.reinterpret/f64" }
|
||||
'f32.reinterpret/i32' { TKeyword "f32.reinterpret/i32" }
|
||||
'f64.reinterpret/i64' { TKeyword "f64.reinterpret/i64" }
|
||||
id { TId $$ }
|
||||
u32 { TIntLit (asUInt32 -> Just $$) }
|
||||
i32 { TIntLit (asInt32 -> Just $$) }
|
||||
i64 { TIntLit (asInt64 -> Just $$) }
|
||||
f32 { TFloatLit (asFloat32 -> $$) }
|
||||
f64 { TFloatLit (asFloat64 -> $$) }
|
||||
offset { TKeyword (asOffset -> Just $$) }
|
||||
align { TKeyword (asAlign -> Just $$) }
|
||||
|
||||
%%
|
||||
|
||||
@@ -194,6 +326,109 @@ plaininstr :: { PlainInstr }
|
||||
| 'i64.store32' memarg4 { I64Store32 $2 }
|
||||
| 'current_memory' { CurrentMemory }
|
||||
| 'grow_memory' { GrowMemory }
|
||||
-- numeric instructions
|
||||
| 'i32.const' i32 { I32Const $2 }
|
||||
| 'i64.const' i64 { I64Const $2 }
|
||||
| 'f32.const' f32 { F32Const $2 }
|
||||
| 'f64.const' f64 { F64Const $2 }
|
||||
| 'i32.clz' { I32Clz }
|
||||
| 'i32.ctz' { I32Ctz }
|
||||
| 'i32.popcnt' { I32Popcnt }
|
||||
| 'i32.add' { I32Add }
|
||||
| 'i32.sub' { I32Sub }
|
||||
| 'i32.mul' { I32Mul }
|
||||
| 'i32.div_s' { I32DivS }
|
||||
| 'i32.div_u' { I32DivU }
|
||||
| 'i32.rem_s' { I32RemS }
|
||||
| 'i32.rem_u' { I32RemU }
|
||||
| 'i32.and' { I32And }
|
||||
| 'i32.or' { I32Or }
|
||||
| 'i32.xor' { I32Xor }
|
||||
| 'i32.shl' { I32Shl }
|
||||
| 'i32.shr_s' { I32ShrS }
|
||||
| 'i32.shr_u' { I32ShrU }
|
||||
| 'i32.rotl' { I32Rotl }
|
||||
| 'i32.rotr' { I32Rotr }
|
||||
| 'i64.clz' { I64Clz }
|
||||
| 'i64.ctz' { I64Ctz }
|
||||
| 'i64.popcnt' { I64Popcnt }
|
||||
| 'i64.add' { I64Add }
|
||||
| 'i64.sub' { I64Sub }
|
||||
| 'i64.mul' { I64Mul }
|
||||
| 'i64.div_s' { I64DivS }
|
||||
| 'i64.div_u' { I64DivU }
|
||||
| 'i64.rem_s' { I64RemS }
|
||||
| 'i64.rem_u' { I64RemU }
|
||||
| 'i64.and' { I64And }
|
||||
| 'i64.or' { I64Or }
|
||||
| 'i64.xor' { I64Xor }
|
||||
| 'i64.shl' { I64Shl }
|
||||
| 'i64.shr_s' { I64ShrS }
|
||||
| 'i64.shr_u' { I64ShrU }
|
||||
| 'i64.rotl' { I64Rotl }
|
||||
| 'i64.rotr' { I64Rotr }
|
||||
| 'f32.abs' { F32Abs }
|
||||
| 'f32.neg' { F32Neg }
|
||||
| 'f32.ceil' { F32Ceil }
|
||||
| 'f32.floor' { F32Floor }
|
||||
| 'f32.trunc' { F32Trunc }
|
||||
| 'f32.nearest' { F32Nearest }
|
||||
| 'f32.sqrt' { F32Sqrt }
|
||||
| 'f32.add' { F32Add }
|
||||
| 'f32.sub' { F32Sub }
|
||||
| 'f32.mul' { F32Mul }
|
||||
| 'f32.div' { F32Div }
|
||||
| 'f32.min' { F32Min }
|
||||
| 'f32.max' { F32Max }
|
||||
| 'f32.copysign' { F32Copysign }
|
||||
| 'f64.abs' { F64Abs }
|
||||
| 'f64.neg' { F64Neg }
|
||||
| 'f64.ceil' { F64Ceil }
|
||||
| 'f64.floor' { F64Floor }
|
||||
| 'f64.trunc' { F64Trunc }
|
||||
| 'f64.nearest' { F64Nearest }
|
||||
| 'f64.sqrt' { F64Sqrt }
|
||||
| 'f64.add' { F64Add }
|
||||
| 'f64.sub' { F64Sub }
|
||||
| 'f64.mul' { F64Mul }
|
||||
| 'f64.div' { F64Div }
|
||||
| 'f64.min' { F64Min }
|
||||
| 'f64.max' { F64Max }
|
||||
| 'f64.copysign' { F64Copysign }
|
||||
| 'i32.eqz' { I32Eqz }
|
||||
| 'i32.eq' { I32Eq }
|
||||
| 'i32.ne' { I32Ne }
|
||||
| 'i32.lt_s' { I32LtS }
|
||||
| 'i32.lt_u' { I32LtU }
|
||||
| 'i32.gt_s' { I32GtS }
|
||||
| 'i32.gt_u' { I32GtU }
|
||||
| 'i32.le_s' { I32LeS }
|
||||
| 'i32.le_u' { I32LeU }
|
||||
| 'i32.ge_s' { I32GeS }
|
||||
| 'i32.ge_u' { I32GeU }
|
||||
| 'i64.eqz' { I64Eqz }
|
||||
| 'i64.eq' { I64Eq }
|
||||
| 'i64.ne' { I64Ne }
|
||||
| 'i64.lt_s' { I64LtS }
|
||||
| 'i64.lt_u' { I64LtU }
|
||||
| 'i64.gt_s' { I64GtS }
|
||||
| 'i64.gt_u' { I64GtU }
|
||||
| 'i64.le_s' { I64LeS }
|
||||
| 'i64.le_u' { I64LeU }
|
||||
| 'i64.ge_s' { I64GeS }
|
||||
| 'i64.ge_u' { I64GeU }
|
||||
| 'f32.eq' { F32Eq }
|
||||
| 'f32.ne' { F32Ne }
|
||||
| 'f32.lt' { F32Lt }
|
||||
| 'f32.gt' { F32Gt }
|
||||
| 'f32.le' { F32Le }
|
||||
| 'f32.ge' { F32Ge }
|
||||
| 'f64.eq' { F64Eq }
|
||||
| 'f64.ne' { F64Ne }
|
||||
| 'f64.lt' { F64Lt }
|
||||
| 'f64.gt' { F64Gt }
|
||||
| 'f64.le' { F64Le }
|
||||
| 'f64.ge' { F64Ge }
|
||||
|
||||
typedef :: { TypeDef }
|
||||
: '(' 'type' opt(ident) functype ')' { TypeDef $3 $4 }
|
||||
@@ -242,6 +477,22 @@ asUInt32 val
|
||||
| val >= 0, val < 2 ^ 32 = Just $ fromIntegral val
|
||||
| otherwise = Nothing
|
||||
|
||||
asInt32 :: Integer -> Maybe Integer
|
||||
asInt32 val
|
||||
| val >= -2 ^ 31, val < 2 ^ 32 = Just $ fromIntegral val
|
||||
| otherwise = Nothing
|
||||
|
||||
asInt64 :: Integer -> Maybe Integer
|
||||
asInt64 val
|
||||
| val >= -2 ^ 63, val < 2 ^ 64 = Just $ fromIntegral val
|
||||
| otherwise = Nothing
|
||||
|
||||
asFloat32 :: Double -> Float
|
||||
asFloat32 = realToFrac
|
||||
|
||||
asFloat64 :: Double -> Double
|
||||
asFloat64 = id
|
||||
|
||||
asOffset :: LBS.ByteString -> Maybe Natural
|
||||
asOffset str = do
|
||||
num <- TL.stripPrefix "offset=" $ TLEncoding.decodeUtf8 str
|
||||
@@ -333,6 +584,109 @@ data PlainInstr =
|
||||
| I64Store32 MemArg
|
||||
| CurrentMemory
|
||||
| GrowMemory
|
||||
-- Numeric instructions
|
||||
| I32Const Integer
|
||||
| I64Const Integer
|
||||
| F32Const Float
|
||||
| F64Const Double
|
||||
| I32Clz
|
||||
| I32Ctz
|
||||
| I32Popcnt
|
||||
| I32Add
|
||||
| I32Sub
|
||||
| I32Mul
|
||||
| I32DivS
|
||||
| I32DivU
|
||||
| I32RemS
|
||||
| I32RemU
|
||||
| I32And
|
||||
| I32Or
|
||||
| I32Xor
|
||||
| I32Shl
|
||||
| I32ShrS
|
||||
| I32ShrU
|
||||
| I32Rotl
|
||||
| I32Rotr
|
||||
| I64Clz
|
||||
| I64Ctz
|
||||
| I64Popcnt
|
||||
| I64Add
|
||||
| I64Sub
|
||||
| I64Mul
|
||||
| I64DivS
|
||||
| I64DivU
|
||||
| I64RemS
|
||||
| I64RemU
|
||||
| I64And
|
||||
| I64Or
|
||||
| I64Xor
|
||||
| I64Shl
|
||||
| I64ShrS
|
||||
| I64ShrU
|
||||
| I64Rotl
|
||||
| I64Rotr
|
||||
| F32Abs
|
||||
| F32Neg
|
||||
| F32Ceil
|
||||
| F32Floor
|
||||
| F32Trunc
|
||||
| F32Nearest
|
||||
| F32Sqrt
|
||||
| F32Add
|
||||
| F32Sub
|
||||
| F32Mul
|
||||
| F32Div
|
||||
| F32Min
|
||||
| F32Max
|
||||
| F32Copysign
|
||||
| F64Abs
|
||||
| F64Neg
|
||||
| F64Ceil
|
||||
| F64Floor
|
||||
| F64Trunc
|
||||
| F64Nearest
|
||||
| F64Sqrt
|
||||
| F64Add
|
||||
| F64Sub
|
||||
| F64Mul
|
||||
| F64Div
|
||||
| F64Min
|
||||
| F64Max
|
||||
| F64Copysign
|
||||
| I32Eqz
|
||||
| I32Eq
|
||||
| I32Ne
|
||||
| I32LtS
|
||||
| I32LtU
|
||||
| I32GtS
|
||||
| I32GtU
|
||||
| I32LeS
|
||||
| I32LeU
|
||||
| I32GeS
|
||||
| I32GeU
|
||||
| I64Eqz
|
||||
| I64Eq
|
||||
| I64Ne
|
||||
| I64LtS
|
||||
| I64LtU
|
||||
| I64GtS
|
||||
| I64GtU
|
||||
| I64LeS
|
||||
| I64LeU
|
||||
| I64GeS
|
||||
| I64GeU
|
||||
| F32Eq
|
||||
| F32Ne
|
||||
| F32Lt
|
||||
| F32Gt
|
||||
| F32Le
|
||||
| F32Ge
|
||||
| F64Eq
|
||||
| F64Ne
|
||||
| F64Lt
|
||||
| F64Gt
|
||||
| F64Le
|
||||
| F64Ge
|
||||
deriving (Show, Eq)
|
||||
|
||||
data TypeDef = TypeDef (Maybe Ident) FuncType deriving (Show, Eq)
|
||||
|
||||
Reference in New Issue
Block a user