Stubbed out all WebAssembly instructions.

This commit is contained in:
James Harton 2020-03-30 22:53:45 +13:00
parent f5173e8f9e
commit 3658529772
188 changed files with 2213 additions and 24 deletions

View file

@ -27,3 +27,6 @@ Metrics/BlockLength:
Style/Documentation:
Enabled: false
Style/OptionalArguments:
Enabled: false

View file

@ -7,20 +7,29 @@ module WAG
# Your code goes here...
require 'wag/wat'
require 'wag/inflector'
require 'wag/instructable'
require 'wag/data'
require 'wag/function'
require 'wag/function_type'
require 'wag/global'
require 'wag/element'
require 'wag/export'
require 'wag/f32_instructions'
require 'wag/f64_instructions'
require 'wag/function_type'
require 'wag/function'
require 'wag/global'
require 'wag/global_instructions'
require 'wag/i32_instructions'
require 'wag/i64_instructions'
require 'wag/import'
require 'wag/indices'
require 'wag/inflector'
require 'wag/instruction'
require 'wag/label'
require 'wag/local_instructions'
require 'wag/memory'
require 'wag/module'
require 'wag/param'
require 'wag/result'
require 'wag/table'
require 'wag/type'
end

View file

@ -0,0 +1,21 @@
# frozen_string_literal: true
module WAG
class F32Instructions
def initialize(instructions)
@instructions = instructions
end
%i[load store const eq ne lt gt le ge abs neg ceil floor trunc nearest
sqrt add sub mul div min max copysign convert_i32_s convert_i32_u
convert_i64_s convert_i64_u reinterpret_i32].each do |instruction_name|
camelised_name = "F32#{WAG::Inflector.inflector.camelize(instruction_name)}"
define_method(instruction_name) do |*args, &block|
instruction = WAG::Instruction.get_const(camelised_name).new(*args)
@instructions << instruction
instruction.instance_exec(&block) if block
instruction
end
end
end
end

View file

@ -0,0 +1,21 @@
# frozen_string_literal: true
module WAG
class F64Instructions
def initialize(instructions)
@instructions = instructions
end
%i[load store const eq ne lt gt le ge abs neg ceil floor trunc nearest sqrt
add sub mul div min max copysign convert_i32_s convert_i32_u
convert_i64_s convert_i64_u promote_f32 reinterpret_i64].each do |instruction_name|
camelised_name = "F64#{WAG::Inflector.inflector.camelize(instruction_name)}"
define_method(instruction_name) do |*args, &block|
instruction = WAG::Instruction.get_const(camelised_name).new(*args)
@instructions << instruction
instruction.instance_exec(&block) if block
instruction
end
end
end
end

View file

@ -3,27 +3,29 @@
module WAG
class Function
include WAG::WAT
prepend WAG::Instructable
attr_reader :label, :params, :results
attr_reader :label, :params
def initialize(label)
@label = WAG::Label.from(label)
@params = []
@results = []
end
def param(*types)
@params.concat(types.map { |t| WAG::Type.from(t) })
def param(label = nil, type)
@params.push(WAG::Param.new(type, label))
end
def result(*types)
@results.concat(types.map { |t| WAG::Type.from(t) })
return @result if types.empty?
@result = WAG::Result.new(*types)
end
def to_sexpr
[:func, @label.to_sexpr].tap do |func|
func.push([:param].concat(@params.map(&:to_sexpr))) if @params
func.push([:result].concat(@results.map(&:to_sexpr))) if @results
func.concat(@params.map(&:to_sexpr)) unless @params.empty?
func.push(@result.to_sexpr) if @result
end
end
end

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
module WAG
class GlobalInstructions
def initialize(instructions)
@instructions = instructions
end
%i[get set].each do |instruction_name|
camelised_name = "Global#{WAG::Inflector.inflector.camelize(instruction_name)}"
define_method(instruction_name) do |*args, &block|
instruction = WAG::Instruction.get_const(camelised_name).new(*args)
@instructions << instruction
instruction.instance_exec(&block) if block
instruction
end
end
end
end

View file

@ -0,0 +1,22 @@
# frozen_string_literal: true
module WAG
class I32Instructions
def initialize(instructions)
@instructions = instructions
end
%i[load load8_s load8_u load16_s load16_u store store8 store16 const eqz eq
ne lt_s lt_u gt_s gt_u le_s le_u ge_s ge_u clz ctz popcnt add sub mul
div_s div_u rem_s rem_u and or xor shl shr_s shr_u rotl rotr trunc_f32_s
trunc_f32_u trunc_f64_s trunc_f64_u reinterpret_f32].each do |instruction_name|
camelised_name = "I32#{WAG::Inflector.inflector.camelize(instruction_name)}"
define_method(instruction_name) do |*args, &block|
instruction = WAG::Instruction.get_const(camelised_name).new(*args)
@instructions << instruction
instruction.instance_exec(&block) if block
instruction
end
end
end
end

View file

@ -0,0 +1,23 @@
# frozen_string_literal: true
module WAG
class I64Instructions
def initialize(instructions)
@instructions = instructions
end
%i[load load8_s load8_u load16_s load16_u load32_s load32_u store store8
store16 store32 const eqz eq ne lt_s lt_u gt_s gt_u le_s le_u ge_s ge_u
clz ctz popcnt add sub mul div_s div_u rem_s rem_u and or xor shl shr_s
shr_u rotl rotr extend_i13_s extend_i32_u trunc_f32_s trunc_f32_u
trunc_f64_s trunc_f64_u reinterpret_f64].each do |instruction_name|
camelised_name = "I32#{WAG::Inflector.inflector.camelize(instruction_name)}"
define_method(instruction_name) do |*args, &block|
instruction = WAG::Instruction.get_const(camelised_name).new(*args)
@instructions << instruction
instruction.instance_exec(&block) if block
instruction
end
end
end
end

43
lib/wag/instructable.rb Normal file
View file

@ -0,0 +1,43 @@
# frozen_string_literal: true
module WAG
module Instructable
# Define all the basic instructions.
%i[unreachable nop block loop if else end br br_if br_table return call
call_indirect drop select].each do |instruction_name|
camelised_name = WAG::Inflector.inflector.camelize(instruction_name)
define_method(instruction_name) do |*args, &block|
instruction = WAG::Instruction.get_const(camelised_name).new(*args)
instructions << instruction
instruction.instance_exec(&block) if block
instruction
end
end
def local
WAG::LocalInstructions.new(instructions)
end
def i32
WAG::I32Instructions.new(instructions)
end
def i64
WAG::I64Instructions.new(instructions)
end
def memory
WAG::MemoryInstructions.new(instructions)
end
def to_sexpr
super().concat(instructions.map(&:to_sexpr))
end
private
def instructions
@instructions ||= []
end
end
end

View file

@ -1,19 +1,192 @@
# frozen_string_literal: true
module WAG
module Instruction
module Instruction # rubocop:disable Metrics/ModuleLength
require 'wag/instructions/base'
require 'wag/instructions/block'
require 'wag/instructions/br'
require 'wag/instructions/br_if'
require 'wag/instructions/br_table'
require 'wag/instructions/br'
require 'wag/instructions/call'
require 'wag/instructions/call_indirect'
require 'wag/instructions/drop'
require 'wag/instructions/else'
require 'wag/instructions/end'
require 'wag/instructions/if'
require 'wag/instructions/loop'
require 'wag/instructions/nop'
require 'wag/instructions/return'
require 'wag/instructions/select'
require 'wag/instructions/unreachable'
require 'wag/instructions/f32/base'
require 'wag/instructions/f32/abs'
require 'wag/instructions/f32/add'
require 'wag/instructions/f32/ceil'
require 'wag/instructions/f32/const'
require 'wag/instructions/f32/convert_i32_s'
require 'wag/instructions/f32/convert_i32_u'
require 'wag/instructions/f32/convert_i64_s'
require 'wag/instructions/f32/convert_i64_u'
require 'wag/instructions/f32/copysign'
require 'wag/instructions/f32/demote_f64'
require 'wag/instructions/f32/div'
require 'wag/instructions/f32/eq'
require 'wag/instructions/f32/floor'
require 'wag/instructions/f32/ge'
require 'wag/instructions/f32/gt'
require 'wag/instructions/f32/le'
require 'wag/instructions/f32/load'
require 'wag/instructions/f32/lt'
require 'wag/instructions/f32/max'
require 'wag/instructions/f32/min'
require 'wag/instructions/f32/mul'
require 'wag/instructions/f32/ne'
require 'wag/instructions/f32/nearest'
require 'wag/instructions/f32/neg'
require 'wag/instructions/f32/reinterpret_i32'
require 'wag/instructions/f32/sqrt'
require 'wag/instructions/f32/store'
require 'wag/instructions/f32/sub'
require 'wag/instructions/f32/trunc'
require 'wag/instructions/f64/base'
require 'wag/instructions/f64/abs'
require 'wag/instructions/f64/add'
require 'wag/instructions/f64/ceil'
require 'wag/instructions/f64/const'
require 'wag/instructions/f64/convert_i32_s'
require 'wag/instructions/f64/convert_i32_u'
require 'wag/instructions/f64/convert_i64_s'
require 'wag/instructions/f64/convert_i64_u'
require 'wag/instructions/f64/copysign'
require 'wag/instructions/f64/div'
require 'wag/instructions/f64/eq'
require 'wag/instructions/f64/floor'
require 'wag/instructions/f64/ge'
require 'wag/instructions/f64/gt'
require 'wag/instructions/f64/le'
require 'wag/instructions/f64/load'
require 'wag/instructions/f64/lt'
require 'wag/instructions/f64/max'
require 'wag/instructions/f64/min'
require 'wag/instructions/f64/mul'
require 'wag/instructions/f64/ne'
require 'wag/instructions/f64/nearest'
require 'wag/instructions/f64/neg'
require 'wag/instructions/f64/promote_f32'
require 'wag/instructions/f64/reinterpret_i64'
require 'wag/instructions/f64/sqrt'
require 'wag/instructions/f64/store'
require 'wag/instructions/f64/sub'
require 'wag/instructions/f64/trunc'
require 'wag/instructions/global/base'
require 'wag/instructions/global/get'
require 'wag/instructions/global/set'
require 'wag/instructions/i32/base'
require 'wag/instructions/i32/add'
require 'wag/instructions/i32/and'
require 'wag/instructions/i32/clz'
require 'wag/instructions/i32/const'
require 'wag/instructions/i32/ctz'
require 'wag/instructions/i32/div_s'
require 'wag/instructions/i32/div_u'
require 'wag/instructions/i32/eq'
require 'wag/instructions/i32/eqz'
require 'wag/instructions/i32/ge_s'
require 'wag/instructions/i32/ge_u'
require 'wag/instructions/i32/gt_s'
require 'wag/instructions/i32/gt_u'
require 'wag/instructions/i32/le_s'
require 'wag/instructions/i32/le_u'
require 'wag/instructions/i32/load'
require 'wag/instructions/i32/load16_s'
require 'wag/instructions/i32/load16_u'
require 'wag/instructions/i32/load8_s'
require 'wag/instructions/i32/load8_u'
require 'wag/instructions/i32/lt_s'
require 'wag/instructions/i32/lt_u'
require 'wag/instructions/i32/mul'
require 'wag/instructions/i32/ne'
require 'wag/instructions/i32/or'
require 'wag/instructions/i32/popcnt'
require 'wag/instructions/i32/reinterpret_f32'
require 'wag/instructions/i32/rem_s'
require 'wag/instructions/i32/rem_u'
require 'wag/instructions/i32/rotl'
require 'wag/instructions/i32/rotr'
require 'wag/instructions/i32/shl'
require 'wag/instructions/i32/shr_s'
require 'wag/instructions/i32/shr_u'
require 'wag/instructions/i32/store'
require 'wag/instructions/i32/store16'
require 'wag/instructions/i32/store8'
require 'wag/instructions/i32/sub'
require 'wag/instructions/i32/trunc_f32_s'
require 'wag/instructions/i32/trunc_f32_u'
require 'wag/instructions/i32/trunc_f64_s'
require 'wag/instructions/i32/trunc_f64_u'
require 'wag/instructions/i32/wrap_i64'
require 'wag/instructions/i32/xor'
require 'wag/instructions/i64/base'
require 'wag/instructions/i64/add'
require 'wag/instructions/i64/clz'
require 'wag/instructions/i64/const'
require 'wag/instructions/i64/ctz'
require 'wag/instructions/i64/div_s'
require 'wag/instructions/i64/div_u'
require 'wag/instructions/i64/eq'
require 'wag/instructions/i64/eqz'
require 'wag/instructions/i64/extend_i32_s'
require 'wag/instructions/i64/extend_i32_u'
require 'wag/instructions/i64/ge_s'
require 'wag/instructions/i64/ge_u'
require 'wag/instructions/i64/gt_s'
require 'wag/instructions/i64/gt_u'
require 'wag/instructions/i64/le_s'
require 'wag/instructions/i64/le_u'
require 'wag/instructions/i64/load'
require 'wag/instructions/i64/load16_s'
require 'wag/instructions/i64/load16_u'
require 'wag/instructions/i64/load32_s'
require 'wag/instructions/i64/load32_u'
require 'wag/instructions/i64/load8_s'
require 'wag/instructions/i64/load8_u'
require 'wag/instructions/i64/lt_s'
require 'wag/instructions/i64/lt_u'
require 'wag/instructions/i64/mul'
require 'wag/instructions/i64/ne'
require 'wag/instructions/i64/or'
require 'wag/instructions/i64/popcnt'
require 'wag/instructions/i64/reinterpret_f64'
require 'wag/instructions/i64/rem_s'
require 'wag/instructions/i64/rem_u'
require 'wag/instructions/i64/rotl'
require 'wag/instructions/i64/rotr'
require 'wag/instructions/i64/shl'
require 'wag/instructions/i64/shr_s'
require 'wag/instructions/i64/shr_u'
require 'wag/instructions/i64/store'
require 'wag/instructions/i64/store16'
require 'wag/instructions/i64/store32'
require 'wag/instructions/i64/store8'
require 'wag/instructions/i64/sub'
require 'wag/instructions/i64/trunc_f32_s'
require 'wag/instructions/i64/trunc_f32_u'
require 'wag/instructions/i64/trunc_f64_s'
require 'wag/instructions/i64/trunc_f64_u'
require 'wag/instructions/i64/xor'
require 'wag/instructions/local/base'
require 'wag/instructions/local/get'
require 'wag/instructions/local/set'
require 'wag/instructions/local/tee'
require 'wag/instructions/memory/base'
require 'wag/instructions/memory/grow'
require 'wag/instructions/memory/size'
end
end

View file

@ -4,6 +4,7 @@ module WAG
module Instruction
class Base
include WAG::WAT
prepend WAG::Instructable
def self.instruction(op_code)
klass = Class.new(WAG::Instruction::Base)

View file

@ -3,6 +3,17 @@
module WAG
module Instruction
class Block < Base.instruction(0x02)
def result(*types)
return @result if types.empty?
@result = WAG::Result.new(*types)
end
def to_sexpr
[:block].tap do |expr|
expr << @result.to_sexpr if @result
end
end
end
end
end

View file

@ -0,0 +1,8 @@
# frozen_string_literal: true
module WAG
module Instruction
class Call < Base.instruction(0x10)
end
end
end

View file

@ -0,0 +1,8 @@
# frozen_string_literal: true
module WAG
module Instruction
class CallIndirect < Base.instruction(0x11)
end
end
end

View file

@ -0,0 +1,8 @@
# frozen_string_literal: true
module WAG
module Instruction
class Drop < Base.instruction(0x1a)
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Abs < Base.instruction(0x8b)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Add < Base.instruction(0x92)
end
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Base < WAG::Instruction::Base
def name
"f32.#{super()}".to_sym
end
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Ceil < Base.instruction(0x8d)
end
end
end
end

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Const < Base.instruction(0x43)
attr_reader :literal
def initialize(literal)
@literal = literal.to_f
end
def to_sexpr
[name, @literal]
end
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class ConvertI32S < Base.instruction(0xb2)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class ConvertI32U < Base.instruction(0xb3)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class ConvertI64S < Base.instruction(0xb4)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class ConvertI64U < Base.instruction(0xb5)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Copysign < Base.instruction(0x98)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class DemoteF64 < Base.instruction(0xb6)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Div < Base.instruction(0x95)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Eq < Base.instruction(0x5b)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Floor < Base.instruction(0x8e)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Ge < Base.instruction(0x60)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Gt < Base.instruction(0x5e)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Le < Base.instruction(0x5f)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Load < Base.instruction(0x2a)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Lt < Base.instruction(0x5d)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Max < Base.instruction(0x97)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Min < Base.instruction(0x96)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Mul < Base.instruction(0x94)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Ne < Base.instruction(0x5c)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Nearest < Base.instruction(0x90)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Neg < Base.instruction(0x8c)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class ReinterpretI32 < Base.instruction(0xbe)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Sqrt < Base.instruction(0x91)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Store < Base.instruction(0x38)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Sub < Base.instruction(0x93)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F32
class Trunc < Base.instruction(0x8f)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Abs < Base.instruction(0x99)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Add < Base.instruction(0xa0)
end
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Base < WAG::Instruction::Base
def name
"f64.#{super()}".to_sym
end
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Ceil < Base.instruction(0x9b)
end
end
end
end

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Const < Base.instruction(0x44)
attr_reader :literal
def initialize(literal)
@literal = literal.to_f
end
def to_sexpr
[name, @literal]
end
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class ConvertI32S < Base.instruction(0xb7)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class ConvertI32U < Base.instruction(0xb8)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class ConvertI64S < Base.instruction(0xb9)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class ConvertI64U < Base.instruction(0xba)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Copysign < Base.instruction(0xa6)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Div < Base.instruction(0xa3)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Eq < Base.instruction(0x61)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Floor < Base.instruction(0x9c)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Ge < Base.instruction(0x66)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Gt < Base.instruction(0x64)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Le < Base.instruction(0x65)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Load < Base.instruction(0x2b)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Lt < Base.instruction(0x63)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Max < Base.instruction(0xa5)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Min < Base.instruction(0xa4)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Mul < Base.instruction(0xa2)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Ne < Base.instruction(0x62)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Nearest < Base.instruction(0x9e)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Neg < Base.instruction(0x9a)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class PromoteF32 < Base.instruction(0xbb)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class ReinterpretI64 < Base.instruction(0xbf)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Sqrt < Base.instruction(0x9f)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Store < Base.instruction(0x39)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Sub < Base.instruction(0xa1)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module F64
class Trunc < Base.instruction(0x9d)
end
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module WAG
module Instruction
module Global
class Base < WAG::Instruction::Base
def name
"global.#{super()}".to_sym
end
end
end
end
end

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
module WAG
module Instruction
module Global
class Get < Base.instruction(0x23)
attr_reader :label
def initialize(label)
@label = WAG::Label.from(label)
end
def to_sexpr
[name, label.to_sexpr]
end
end
end
end
end

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
module WAG
module Instruction
module Global
class Set < Base.instruction(0x24)
attr_reader :label
def initialize(label)
@label = WAG::Label.from(label)
end
def to_sexpr
[name, label.to_sexpr]
end
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Add < Base.instruction(0x6a)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class And < Base.instruction(0x71)
end
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Base < WAG::Instruction::Base
def name
"i32.#{super()}".to_sym
end
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Clz < Base.instruction(0x67)
end
end
end
end

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Const < Base.instruction(0x41)
attr_reader :literal
def initialize(literal)
@literal = literal.to_i
end
def to_sexpr
[name, @literal]
end
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Ctz < Base.instruction(0x68)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class DivS < Base.instruction(0x6d)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class DivU < Base.instruction(0x6e)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Eq < Base.instruction(0x46)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Eqz < Base.instruction(0x45)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class GeS < Base.instruction(0x4e)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class GeU < Base.instruction(0x4f)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class GtS < Base.instruction(0x4a)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class GtU < Base.instruction(0x4b)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class LeS < Base.instruction(0x4c)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class LeU < Base.instruction(0x4d)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Load < Base.instruction(0x28)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Load16S < Base.instruction(0x2e)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Load16U < Base.instruction(0x2f)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Load8S < Base.instruction(0x2c)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class Load8U < Base.instruction(0x2d)
end
end
end
end

View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
module WAG
module Instruction
module I32
class LtS < Base.instruction(0x48)
end
end
end
end

Some files were not shown because too many files have changed in this diff Show more