wag/lib/wag/i64_instructions.rb
2020-03-31 20:45:55 +13:00

23 lines
880 B
Ruby

# 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_i32_s extend_i32_u trunc_f32_s trunc_f32_u
trunc_f64_s trunc_f64_u reinterpret_f64].each do |instruction_name|
camelised_name = "I64::#{WAG::Inflector.inflector.camelize(instruction_name)}"
define_method(instruction_name) do |*args, &block|
instruction = WAG::Instruction.const_get(camelised_name).new(*args)
@instructions << instruction
instruction.instance_exec(&block) if block
instruction
end
end
end
end