Packages
orb
0.0.47
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/sub.ex
defmodule Orb.Numeric.Subtract do
@moduledoc """
WebAssembly numeric `sub` instruction:
- `i32.sub`
- `i64.sub`
- `f32.sub`
- `f64.sub`
[MDN reference](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Numeric/Subtraction)
"""
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
# Minus zero from anything is that same thing.
def optimized(_type, a, 0), do: a
def optimized(type, a, b) when Ops.is_primitive_type(type),
do: Orb.Instruction.new(type, :sub, [a, b])
def optimized(type, a, b), do: Orb.Instruction.new(CustomType.resolve!(type), :sub, [a, b])
end