Packages
orb
0.0.46
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/numeric/add.ex
defmodule Orb.Numeric.Add do
@moduledoc """
WebAssembly numeric `add` instruction:
- `i32.add`
- `i64.add`
- `f32.add`
- `f64.add`
[MDN reference](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Numeric/Addition)
"""
alias Orb.CustomType
require alias Orb.Ops
# Perform at comptime.
def optimized(_type, a, b) when is_integer(a) and is_integer(b), do: a + b
# Add zero to anything is that same thing.
def optimized(_type, a, 0), do: a
def optimized(_type, 0, b), do: b
def optimized(type, a, b) when Ops.is_primitive_type(type),
do: Orb.Instruction.new(type, :add, [a, b])
def optimized(type, a, b), do: Orb.Instruction.new(CustomType.resolve!(type), :add, [a, b])
end