simplify insturction type

This commit is contained in:
Ilya Rezvov
2018-01-25 15:27:19 -08:00
parent aae3401ff6
commit 93a89e4470
+158 -232
View File
@@ -370,129 +370,129 @@ plaininstr :: { PlainInstr }
| 'i64.const' int64 { I64Const $2 }
| 'f32.const' float32 { F32Const $2 }
| 'f64.const' float64 { 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.clz' { IUnOp BS32 IClz }
| 'i32.ctz' { IUnOp BS32 ICtz }
| 'i32.popcnt' { IUnOp BS32 IPopcnt }
| 'i32.add' { IBinOp BS32 IAdd }
| 'i32.sub' { IBinOp BS32 ISub }
| 'i32.mul' { IBinOp BS32 IMul }
| 'i32.div_s' { IBinOp BS32 IDivS }
| 'i32.div_u' { IBinOp BS32 IDivU }
| 'i32.rem_s' { IBinOp BS32 IRemS }
| 'i32.rem_u' { IBinOp BS32 IRemU }
| 'i32.and' { IBinOp BS32 IAnd }
| 'i32.or' { IBinOp BS32 IOr }
| 'i32.xor' { IBinOp BS32 IXor }
| 'i32.shl' { IBinOp BS32 IShl }
| 'i32.shr_s' { IBinOp BS32 IShrS }
| 'i32.shr_u' { IBinOp BS32 IShrU }
| 'i32.rotl' { IBinOp BS32 IRotl }
| 'i32.rotr' { IBinOp BS32 IRotr }
| 'i64.clz' { IUnOp BS64 IClz }
| 'i64.ctz' { IUnOp BS64 ICtz }
| 'i64.popcnt' { IUnOp BS64 IPopcnt }
| 'i64.add' { IBinOp BS64 IAdd }
| 'i64.sub' { IBinOp BS64 ISub }
| 'i64.mul' { IBinOp BS64 IMul }
| 'i64.div_s' { IBinOp BS64 IDivS }
| 'i64.div_u' { IBinOp BS64 IDivU }
| 'i64.rem_s' { IBinOp BS64 IRemS }
| 'i64.rem_u' { IBinOp BS64 IRemU }
| 'i64.and' { IBinOp BS64 IAnd }
| 'i64.or' { IBinOp BS64 IOr }
| 'i64.xor' { IBinOp BS64 IXor }
| 'i64.shl' { IBinOp BS64 IShl }
| 'i64.shr_s' { IBinOp BS64 IShrS }
| 'i64.shr_u' { IBinOp BS64 IShrU }
| 'i64.rotl' { IBinOp BS64 IRotl }
| 'i64.rotr' { IBinOp BS64 IRotr }
| 'f32.abs' { FUnOp BS32 FAbs }
| 'f32.neg' { FUnOp BS32 FNeg }
| 'f32.ceil' { FUnOp BS32 FCeil }
| 'f32.floor' { FUnOp BS32 FFloor }
| 'f32.trunc' { FUnOp BS32 FTrunc }
| 'f32.nearest' { FUnOp BS32 FNearest }
| 'f32.sqrt' { FUnOp BS32 FSqrt }
| 'f32.add' { FBinOp BS32 FAdd }
| 'f32.sub' { FBinOp BS32 FSub }
| 'f32.mul' { FBinOp BS32 FMul }
| 'f32.div' { FBinOp BS32 FDiv }
| 'f32.min' { FBinOp BS32 FMin }
| 'f32.max' { FBinOp BS32 FMax }
| 'f32.copysign' { FBinOp BS32 FCopySign }
| 'f64.abs' { FUnOp BS64 FAbs }
| 'f64.neg' { FUnOp BS64 FNeg }
| 'f64.ceil' { FUnOp BS64 FCeil }
| 'f64.floor' { FUnOp BS64 FFloor }
| 'f64.trunc' { FUnOp BS64 FTrunc }
| 'f64.nearest' { FUnOp BS64 FNearest }
| 'f64.sqrt' { FUnOp BS64 FSqrt }
| 'f64.add' { FBinOp BS64 FAdd }
| 'f64.sub' { FBinOp BS64 FSub }
| 'f64.mul' { FBinOp BS64 FMul }
| 'f64.div' { FBinOp BS64 FDiv }
| 'f64.min' { FBinOp BS64 FMin }
| 'f64.max' { FBinOp BS64 FMax }
| 'f64.copysign' { FBinOp BS64 FCopySign }
| '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 }
| 'i32.eq' { IRelOp BS32 IEq }
| 'i32.ne' { IRelOp BS32 INe }
| 'i32.lt_s' { IRelOp BS32 ILtS }
| 'i32.lt_u' { IRelOp BS32 ILtU }
| 'i32.gt_s' { IRelOp BS32 IGtS }
| 'i32.gt_u' { IRelOp BS32 IGtU }
| 'i32.le_s' { IRelOp BS32 ILeS }
| 'i32.le_u' { IRelOp BS32 ILeU }
| 'i32.ge_s' { IRelOp BS32 IGeS }
| 'i32.ge_u' { IRelOp BS32 IGeU }
| '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 }
| 'i64.eq' { IRelOp BS64 IEq }
| 'i64.ne' { IRelOp BS64 INe }
| 'i64.lt_s' { IRelOp BS64 ILtS }
| 'i64.lt_u' { IRelOp BS64 ILtU }
| 'i64.gt_s' { IRelOp BS64 IGtS }
| 'i64.gt_u' { IRelOp BS64 IGtU }
| 'i64.le_s' { IRelOp BS64 ILeS }
| 'i64.le_u' { IRelOp BS64 ILeU }
| 'i64.ge_s' { IRelOp BS64 IGeS }
| 'i64.ge_u' { IRelOp BS64 IGeU }
| 'f32.eq' { FRelOp BS32 FEq }
| 'f32.ne' { FRelOp BS32 FNe }
| 'f32.lt' { FRelOp BS32 FLt }
| 'f32.gt' { FRelOp BS32 FGt }
| 'f32.le' { FRelOp BS32 FLe }
| 'f32.ge' { FRelOp BS32 FGe }
| 'f64.eq' { FRelOp BS64 FEq }
| 'f64.ne' { FRelOp BS64 FNe }
| 'f64.lt' { FRelOp BS64 FLt }
| 'f64.gt' { FRelOp BS64 FGt }
| 'f64.le' { FRelOp BS64 FLe }
| 'f64.ge' { FRelOp BS64 FGe }
| 'i32.wrap/i64' { I32WrapI64 }
| 'i32.trunc_s/f32' { I32TruncSF32 }
| 'i32.trunc_u/f32' { I32TruncUF32 }
| 'i32.trunc_s/f64' { I32TruncSF64 }
| 'i32.trunc_u/f64' { I32TruncUF64 }
| 'i32.trunc_s/f32' { ITruncFS BS32 BS32 }
| 'i32.trunc_u/f32' { ITruncFU BS32 BS32 }
| 'i32.trunc_s/f64' { ITruncFS BS32 BS64 }
| 'i32.trunc_u/f64' { ITruncFU BS32 BS64 }
| 'i64.extend_s/i32' { I64ExtendSI32 }
| 'i64.extend_u/i32' { I64ExtendUI32 }
| 'i64.trunc_s/f32' { I64TruncSF32 }
| 'i64.trunc_u/f32' { I64TruncUF32 }
| 'i64.trunc_s/f64' { I64TruncSF64 }
| 'i64.trunc_u/f64' { I64TruncUF64 }
| 'f32.convert_s/i32' { F32ConvertSI32 }
| 'f32.convert_u/i32' { F32ConvertUI32 }
| 'f32.convert_s/i64' { F32ConvertSI64 }
| 'f32.convert_u/i64' { F32ConvertUI64 }
| 'i64.trunc_s/f32' { ITruncFS BS64 BS32 }
| 'i64.trunc_u/f32' { ITruncFU BS64 BS32 }
| 'i64.trunc_s/f64' { ITruncFS BS64 BS64 }
| 'i64.trunc_u/f64' { ITruncFU BS64 BS64 }
| 'f32.convert_s/i32' { FConvertIS BS32 BS32 }
| 'f32.convert_u/i32' { FConvertIU BS32 BS32 }
| 'f32.convert_s/i64' { FConvertIS BS32 BS64 }
| 'f32.convert_u/i64' { FConvertIU BS32 BS64 }
| 'f32.demote/f64' { F32DemoteF64 }
| 'f64.convert_s/i32' { F64ConvertSI32 }
| 'f64.convert_u/i32' { F64ConvertUI32 }
| 'f64.convert_s/i64' { F64ConvertSI64 }
| 'f64.convert_u/i64' { F64ConvertUI64 }
| 'f64.convert_s/i32' { FConvertIS BS64 BS32 }
| 'f64.convert_u/i32' { FConvertIU BS64 BS32 }
| 'f64.convert_s/i64' { FConvertIS BS64 BS64 }
| 'f64.convert_u/i64' { FConvertIU BS64 BS64 }
| 'f64.promote/f32' { F64PromoteF32 }
| 'i32.reinterpret/f32' { I32ReinterpretF32 }
| 'i64.reinterpret/f64' { I64ReinterpretF64 }
| 'f32.reinterpret/i32' { F32ReinterpretI32 }
| 'f64.reinterpret/i64' { F64ReinterpretI64 }
| 'i32.reinterpret/f32' { IReinterpretF BS32 }
| 'i64.reinterpret/f64' { IReinterpretF BS64 }
| 'f32.reinterpret/i32' { FReinterpretI BS32 }
| 'f64.reinterpret/i64' { FReinterpretI BS64 }
typedef :: { TypeDef }
: 'type' opt(ident) functype ')' { TypeDef $2 $3 }
@@ -920,6 +920,36 @@ type GlobalIndex = Index
type TableIndex = Index
type MemoryIndex = Index
data BitSize = BS32 | BS64 deriving (Show, Eq)
data IUnOp = IClz |ICtz | IPopcnt deriving (Show, Eq)
data IBinOp =
IAdd
| ISub
| IMul
| IDivU
| IDivS
| IRemU
| IRemS
| IAnd
| IOr
| IXor
| IShl
| IShrU
| IShrS
| IRotl
| IRotr
deriving (Show, Eq)
data IRelOp = IEq | INe | ILtU | ILtS | IGtU | IGtS | ILeU | ILeS | IGeU | IGeS deriving (Show, Eq)
data FUnOp = FAbs | FNeg | FSqrt | FCeil | FFloor | FTrunc | FNearest deriving (Show, Eq)
data FBinOp = FAdd | FSub | FMul | FDiv | FMin | FMax | FCopySign deriving (Show, Eq)
data FRelOp = FEq | FNe | FLt | FGt | FLe | FGe deriving (Show, Eq)
data PlainInstr =
-- Control instructions
Unreachable
@@ -970,129 +1000,25 @@ data PlainInstr =
| 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
| IUnOp BitSize IUnOp
| IBinOp BitSize IBinOp
| 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
| IRelOp BitSize IRelOp
| FUnOp BitSize FUnOp
| FBinOp BitSize FBinOp
| FRelOp BitSize FRelOp
| I32WrapI64
| I32TruncSF32
| I32TruncUF32
| I32TruncSF64
| I32TruncUF64
| ITruncFU {- Int Size -} BitSize {- Float Size -} BitSize
| ITruncFS {- Int Size -} BitSize {- Float Size -} BitSize
| I64ExtendSI32
| I64ExtendUI32
| I64TruncSF32
| I64TruncUF32
| I64TruncSF64
| I64TruncUF64
| F32ConvertSI32
| F32ConvertUI32
| F32ConvertSI64
| F32ConvertUI64
| FConvertIU {- Float Size -} BitSize {- Int Size -} BitSize
| FConvertIS {- Float Size -} BitSize {- Int Size -} BitSize
| F32DemoteF64
| F64ConvertSI32
| F64ConvertUI32
| F64ConvertSI64
| F64ConvertUI64
| F64PromoteF32
| I32ReinterpretF32
| I64ReinterpretF64
| F32ReinterpretI32
| F64ReinterpretI64
| IReinterpretF BitSize
| FReinterpretI BitSize
deriving (Show, Eq)
data TypeDef = TypeDef (Maybe Ident) FuncType deriving (Show, Eq)