@@ -1952,26 +1952,37 @@ struct InstructionTranslator<Context: TranslatorContext>: InstructionVisitor {
19521952 . i64Eqz( Instruction . UnaryOperand ( result: LVReg ( result) , input: LVReg ( value) ) )
19531953 }
19541954 }
1955- mutating func visitI32Clz( ) throws -> Output { try visitUnary ( . i32, Instruction . i32Clz) }
1956- mutating func visitI32Ctz( ) throws -> Output { try visitUnary ( . i32, Instruction . i32Ctz) }
1957- mutating func visitI32Popcnt( ) throws -> Output { try visitUnary ( . i32, Instruction . i32Popcnt) }
1958- mutating func visitI64Clz( ) throws -> Output { try visitUnary ( . i64, Instruction . i64Clz) }
1959- mutating func visitI64Ctz( ) throws -> Output { try visitUnary ( . i64, Instruction . i64Ctz) }
1960- mutating func visitI64Popcnt( ) throws -> Output { try visitUnary ( . i64, Instruction . i64Popcnt) }
1961- mutating func visitF32Abs( ) throws -> Output { try visitUnary ( . f32, Instruction . f32Abs) }
1962- mutating func visitF32Neg( ) throws -> Output { try visitUnary ( . f32, Instruction . f32Neg) }
1963- mutating func visitF32Ceil( ) throws -> Output { try visitUnary ( . f32, Instruction . f32Ceil) }
1964- mutating func visitF32Floor( ) throws -> Output { try visitUnary ( . f32, Instruction . f32Floor) }
1965- mutating func visitF32Trunc( ) throws -> Output { try visitUnary ( . f32, Instruction . f32Trunc) }
1966- mutating func visitF32Nearest( ) throws -> Output { try visitUnary ( . f32, Instruction . f32Nearest) }
1967- mutating func visitF32Sqrt( ) throws -> Output { try visitUnary ( . f32, Instruction . f32Sqrt) }
1968- mutating func visitF64Abs( ) throws -> Output { try visitUnary ( . f64, Instruction . f64Abs) }
1969- mutating func visitF64Neg( ) throws -> Output { try visitUnary ( . f64, Instruction . f64Neg) }
1970- mutating func visitF64Ceil( ) throws -> Output { try visitUnary ( . f64, Instruction . f64Ceil) }
1971- mutating func visitF64Floor( ) throws -> Output { try visitUnary ( . f64, Instruction . f64Floor) }
1972- mutating func visitF64Trunc( ) throws -> Output { try visitUnary ( . f64, Instruction . f64Trunc) }
1973- mutating func visitF64Nearest( ) throws -> Output { try visitUnary ( . f64, Instruction . f64Nearest) }
1974- mutating func visitF64Sqrt( ) throws -> Output { try visitUnary ( . f64, Instruction . f64Sqrt) }
1955+ mutating func visitUnary( _ unary: WasmParser . Instruction . Unary ) throws {
1956+ let operand : ValueType , instruction : ( Instruction . UnaryOperand ) -> Instruction
1957+ switch unary {
1958+ case . i32Clz: ( operand, instruction) = ( . i32, Instruction . i32Clz)
1959+ case . i32Ctz: ( operand, instruction) = ( . i32, Instruction . i32Ctz)
1960+ case . i32Popcnt: ( operand, instruction) = ( . i32, Instruction . i32Popcnt)
1961+ case . i64Clz: ( operand, instruction) = ( . i64, Instruction . i64Clz)
1962+ case . i64Ctz: ( operand, instruction) = ( . i64, Instruction . i64Ctz)
1963+ case . i64Popcnt: ( operand, instruction) = ( . i64, Instruction . i64Popcnt)
1964+ case . f32Abs: ( operand, instruction) = ( . f32, Instruction . f32Abs)
1965+ case . f32Neg: ( operand, instruction) = ( . f32, Instruction . f32Neg)
1966+ case . f32Ceil: ( operand, instruction) = ( . f32, Instruction . f32Ceil)
1967+ case . f32Floor: ( operand, instruction) = ( . f32, Instruction . f32Floor)
1968+ case . f32Trunc: ( operand, instruction) = ( . f32, Instruction . f32Trunc)
1969+ case . f32Nearest: ( operand, instruction) = ( . f32, Instruction . f32Nearest)
1970+ case . f32Sqrt: ( operand, instruction) = ( . f32, Instruction . f32Sqrt)
1971+ case . f64Abs: ( operand, instruction) = ( . f64, Instruction . f64Abs)
1972+ case . f64Neg: ( operand, instruction) = ( . f64, Instruction . f64Neg)
1973+ case . f64Ceil: ( operand, instruction) = ( . f64, Instruction . f64Ceil)
1974+ case . f64Floor: ( operand, instruction) = ( . f64, Instruction . f64Floor)
1975+ case . f64Trunc: ( operand, instruction) = ( . f64, Instruction . f64Trunc)
1976+ case . f64Nearest: ( operand, instruction) = ( . f64, Instruction . f64Nearest)
1977+ case . f64Sqrt: ( operand, instruction) = ( . f64, Instruction . f64Sqrt)
1978+ case . i32Extend8S: ( operand, instruction) = ( . i32, Instruction . i32Extend8S)
1979+ case . i32Extend16S: ( operand, instruction) = ( . i32, Instruction . i32Extend16S)
1980+ case . i64Extend8S: ( operand, instruction) = ( . i64, Instruction . i64Extend8S)
1981+ case . i64Extend16S: ( operand, instruction) = ( . i64, Instruction . i64Extend16S)
1982+ case . i64Extend32S: ( operand, instruction) = ( . i64, Instruction . i64Extend32S)
1983+ }
1984+ try visitUnary ( operand, instruction)
1985+ }
19751986 mutating func visitI32WrapI64( ) throws -> Output { try visitConversion ( . i64, . i32, Instruction . i32WrapI64) }
19761987 mutating func visitI32TruncF32S( ) throws -> Output { try visitConversion ( . f32, . i32, Instruction . i32TruncF32S) }
19771988 mutating func visitI32TruncF32U( ) throws -> Output { try visitConversion ( . f32, . i32, Instruction . i32TruncF32U) }
@@ -1997,11 +2008,7 @@ struct InstructionTranslator<Context: TranslatorContext>: InstructionVisitor {
19972008 mutating func visitI64ReinterpretF64( ) throws -> Output { try visitConversion ( . f64, . i64, Instruction . i64ReinterpretF64) }
19982009 mutating func visitF32ReinterpretI32( ) throws -> Output { try visitConversion ( . i32, . f32, Instruction . f32ReinterpretI32) }
19992010 mutating func visitF64ReinterpretI64( ) throws -> Output { try visitConversion ( . i64, . f64, Instruction . f64ReinterpretI64) }
2000- mutating func visitI32Extend8S( ) throws -> Output { try visitUnary ( . i32, Instruction . i32Extend8S) }
2001- mutating func visitI32Extend16S( ) throws -> Output { try visitUnary ( . i32, Instruction . i32Extend16S) }
2002- mutating func visitI64Extend8S( ) throws -> Output { try visitUnary ( . i64, Instruction . i64Extend8S) }
2003- mutating func visitI64Extend16S( ) throws -> Output { try visitUnary ( . i64, Instruction . i64Extend16S) }
2004- mutating func visitI64Extend32S( ) throws -> Output { try visitUnary ( . i64, Instruction . i64Extend32S) }
2011+
20052012 mutating func visitMemoryInit( dataIndex: UInt32 ) throws -> Output {
20062013 try self . module. validateDataSegment ( dataIndex)
20072014 let addressType = try module. addressType ( memoryIndex: 0 )
0 commit comments