Packages
orb
0.0.21
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
Current section
Files
Jump to
Current section
Files
lib/orb/f32.ex
defmodule Orb.F32 do
@moduledoc false
require Orb.Ops, as: Ops
alias Orb.Instruction
@behaviour Orb.CustomType
@impl Orb.CustomType
def wasm_type(), do: :f32
@impl Orb.CustomType
def byte_count(), do: 4
for op <- Ops.f32(1) do
def unquote(op)(a) do
Instruction.f32(unquote(op), a)
end
end
for op <- Ops.f32(2) do
def unquote(op)(a, b) do
Instruction.f32(unquote(op), a, b)
end
end
defmacro global(mutability \\ :mutable, list)
when mutability in ~w{readonly mutable}a do
quote do
@wasm_globals (for {key, value} <- unquote(list) do
Orb.Global.new(
:f32,
key,
unquote(mutability),
:internal,
{:f32_const, value}
)
end)
end
end
defmacro export_global(mutability, list)
when mutability in ~w{readonly mutable}a do
quote do
@wasm_globals (for {key, value} <- unquote(list) do
Orb.Global.new(
:f32,
key,
unquote(mutability),
:exported,
{:f32_const, value}
)
end)
end
end
defmodule DSL do
@moduledoc """
32-bit float operators.
"""
import Kernel, except: [+: 2, -: 2, *: 2, ===: 2, !==: 2, /: 2, <=: 2, >=: 2]
def left + right do
Instruction.f32(:add, left, right)
end
def left - right do
Instruction.f32(:sub, left, right)
end
def left * right do
Instruction.f32(:mul, left, right)
end
def left / right do
Instruction.f32(:div, left, right)
end
def _left == _right do
raise "== is not supported in Orb. Use === instead."
end
def _left != _right do
raise "!= is not supported in Orb. Use !== instead."
end
def left === right do
Instruction.f32(:eq, left, right)
end
def left !== right do
Instruction.f32(:ne, left, right)
end
def left < right do
Instruction.f32(:lt, left, right)
end
def left > right do
Instruction.f32(:gt, left, right)
end
def left <= right do
Instruction.f32(:le, left, right)
end
def left >= right do
Instruction.f32(:ge, left, right)
end
end
end