Packages
orb
0.0.16
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/multiply.ex
defmodule Orb.Numeric.Multiply do
@moduledoc """
WebAssembly numeric `mul` instruction:
- `i32.mul`
- `i64.mul`
- `f32.mul`
- `f64.mul`
[MDN reference](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Numeric/Multiplication)
"""
# Perform at comptime.
def optimized(_type, a, b) when is_integer(a) and is_integer(b), do: a * b
# Multiply anything by zero equals zero.
def optimized(_type, _, 0), do: 0
def optimized(_type, 0, _), do: 0
# Multiply anything by one is that same thing.
def optimized(_type, a, 1), do: a
def optimized(_type, 1, b), do: b
# Finally, spit out the instruction.
def optimized(type, a, b), do: Orb.Instruction.new(type.wasm_type(), :mul, a, b)
end