Packages
orb
0.0.12
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
0.0.51
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
retired
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
DSL for WebAssembly
Retired package: Release invalid - Package has a breaking bug
Current section
Files
Jump to
Current section
Files
lib/orb/ops.ex
defmodule Orb.Ops do
@moduledoc false
# See: https://webassembly.github.io/spec/core/syntax/instructions.html#numeric-instructions
@i_unary_ops ~w(clz ctz popcnt)a
@i_binary_ops ~w(add sub mul div_u div_s rem_u rem_s and or xor shl shr_u shr_s rotl rotr)a
@i_test_ops ~w(eqz)a
@i_relative_ops ~w(eq ne lt_u lt_s gt_u gt_s le_u le_s ge_u ge_s)a
# https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Memory/Load
@i_load_ops ~w(load load8_u load8_s load16_s load16_u)a
# https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Memory/Store
@i_store_ops ~w(store store8 store16)a
# https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Numeric/Truncate_float_to_int
@i_trunc_ops ~w(trunc_f32_s trunc_f32_u trunc_f64_s trunc_f64_u)a
@i32_ops_1 @i_unary_ops ++ @i_test_ops ++ @i_trunc_ops
@i32_ops_2 @i_binary_ops ++ @i_relative_ops
@i32_ops_all @i32_ops_1 ++ @i32_ops_2 ++ @i_load_ops ++ @i_store_ops
@f32_ops_1 ~w(floor ceil trunc nearest abs neg sqrt convert_i32_s convert_i32_u)a
@f32_ops_2 ~w(add sub mul div eq ne lt gt le ge copysign min max)a
# TODO: add conversions ops https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Numeric#conversion
defmacro i32(arity_or_type)
defmacro i32(1), do: @i32_ops_1 |> Macro.escape()
defmacro i32(2), do: @i32_ops_2 |> Macro.escape()
defmacro i32(:load), do: @i_load_ops |> Macro.escape()
defmacro i32(:store), do: @i_store_ops |> Macro.escape()
defmacro i32(:all), do: @i32_ops_all |> Macro.escape()
defmacro f32(arity_or_type)
defmacro f32(1), do: @f32_ops_1 |> Macro.escape()
defmacro f32(2), do: @f32_ops_2 |> Macro.escape()
end