wasm-ir

Crates.iowasm-ir
lib.rswasm-ir
version0.1.9
sourcesrc
created_at2022-03-04 16:43:59.926762
updated_at2022-03-23 17:21:31.079685
descriptionAn Intermediate Representation of WebAssembly
homepage
repositoryhttps://github.com/theblueforest/wasm-ir
max_upload_size
id543587
size130,495
Nazim Lachter (n4zim)

documentation

README

WebAssembly Intermediate Representation

License Maintenance Stability Crates.io latest version Crates.io total downloads Liberapay receiving

This is an Intermediate Representation which can be compiled into WebAssembly.

The source code is in an experimental state and will be fully documented in its final version.

Warning : we do not recommend to use this code in a production environment, even if it theoretically works we haven't finished writing tests to make sure everything works and avoid regressions.

The codebase is licensed under GNU Affero General Public License v3, you have the right to exploit this source code but it must remain open-source and under the same license, thanks for your support !

If you want to join the development and contribute to the project, please reach us at contact@blueforest.cc.

Todo

Values

  • u32
  • u64
  • s32
  • s64
  • f32
  • f64
  • v128
  • name

Types

  • u32
  • u64
  • s32
  • s64
  • f32
  • f64
  • v128
  • name
  • reference
    • function
    • extern
  • limit
  • function

Instructions

Control

  • unreachable
  • nop
  • block
  • if
  • else
  • br
  • br_if
  • br_table
  • return
  • call
  • call_indirect

Reference

  • ref.null
  • ref.is_null
  • ref.func

Parametric

  • drop
  • select
  • select t

Variable

  • local.get
  • local.set
  • local.tee
  • global.get
  • global.set

Table

  • table.get
  • table.set
  • table.init
  • elem.drop
  • table.copy
  • table.grow
  • table.size
  • table.fill

Memory

  • i32.load
  • i64.load
  • f32.load
  • f64.load
  • i32.load8_s
  • i32.load8_u
  • i32.load16_s
  • i32.load16_u
  • i64.load8_s
  • i64.load8_u
  • i64.load16_s
  • i64.load16_u
  • i64.load32_s
  • i64.load32_u
  • i32.store
  • i64.store
  • f32.store
  • f64.store
  • i32.store8
  • i32.store16
  • i64.store8
  • i64.store16
  • i64.store32
  • memory.size
  • memory.grow
  • memory.init
  • data.drop
  • memory.copy
  • memory.fill

Numeric

  • i32.const
  • i64.const
  • f32.const
  • f64.const
  • i32.eqz
  • i32.eq
  • i32.ne
  • i32.lt_s
  • i32.lt_u
  • i32.gt_s
  • i32.gt_u
  • i32.le_s
  • i32.le_u
  • i32.ge_s
  • i32.ge_u
  • i64.eqz
  • i64.eq
  • i64.ne
  • i64.lt_s
  • i64.lt_u
  • i64.gt_s
  • i64.gt_u
  • i64.le_s
  • i64.le_u
  • i64.ge_s
  • i64.ge_u
  • f32.eq
  • f32.ne
  • f32.lt
  • f32.gt
  • f32.le
  • f32.ge
  • f64.eq
  • f64.ne
  • f64.lt
  • f64.gt
  • f64.le
  • f64.ge
  • i32.clz
  • i32.ctz
  • i32.popcnt
  • i32.add
  • i32.sub
  • i32.mul
  • i32.div_s
  • i32.div_u
  • i32.rem_s
  • i32.rem_u
  • i32.and
  • i32.or
  • i32.xor
  • i32.shl
  • i32.shr_s
  • i32.shr_u
  • i32.rotl
  • i32.rotr
  • i64.clz
  • i64.ctz
  • i64.popcnt
  • i64.add
  • i64.sub
  • i64.mul
  • i64.div_s
  • i64.div_u
  • i64.rem_s
  • i64.rem_u
  • i64.and
  • i64.or
  • i64.xor
  • i64.shl
  • i64.shr_s
  • i64.shr_u
  • i64.rotl
  • i64.rotr
  • f32.abs
  • f32.neg
  • f32.ceil
  • f32.floor
  • f32.trunc
  • f32.nearest
  • f32.sqrt
  • f32.add
  • f32.sub
  • f32.mul
  • f32.div
  • f32.min
  • f32.max
  • f32.copysign
  • f64.abs
  • f64.neg
  • f64.ceil
  • f64.floor
  • f64.trunc
  • f64.nearest
  • f64.sqrt
  • f64.add
  • f64.sub
  • f64.mul
  • f64.div
  • f64.min
  • f64.max
  • f64.copysign
  • i32.wrap_i64
  • i32.trunc_f32_s
  • i32.trunc_f32_u
  • i32.trunc_f64_s
  • i32.trunc_f64_u
  • i64.extend_i32_s
  • i64.extend_i32_u
  • i64.trunc_f32_s
  • i64.trunc_f32_u
  • i64.trunc_f64_s
  • i64.trunc_f64_u
  • f32.convert_i32_s
  • f32.convert_i32_u
  • f32.convert_i64_s
  • f32.convert_i64_u
  • f32.demote_f64
  • f64.convert_i32_s
  • f64.convert_i32_u
  • f64.convert_i64_s
  • f64.convert_i64_u
  • f64.promote_f32
  • i32.reinterpret_f32
  • i64.reinterpret_f64
  • f32.reinterpret_i32
  • f64.reinterpret_i64
  • i32.extend8_s
  • i32.extend16_s
  • i64.extend8_s
  • i64.extend16_s
  • i64.extend32_s
  • i32.trunc_sat_f32_s
  • i32.trunc_sat_f32_u
  • i32.trunc_sat_f64_s
  • i32.trunc_sat_f64_u
  • i64.trunc_sat_f32_s
  • i64.trunc_sat_f32_u
  • i64.trunc_sat_f64_s
  • i64.trunc_sat_f64_u
  • v128.load
  • v128.load8x8_s
  • v128.load8x8_u
  • v128.load16x4_s
  • v128.load16x4_u
  • v128.load32x2_s
  • v128.load32x2_u
  • v128.load8_splat
  • v128.load16_splat
  • v128.load32_splat
  • v128.load64_splat
  • v128.load32_zero
  • v128.load64_zero
  • v128.store
  • v128.load8_lane
  • v128.load16_lane
  • v128.load32_lane
  • v128.load64_lane
  • v128.store8_lane
  • v128.store16_lane
  • v128.store32_lane
  • v128.store64_lane
  • v128.const
  • i8x16.shuffle
  • i8x16.extract_lane_s
  • i8x16.extract_lane_u
  • i8x16.replace_lane
  • i16x8.extract_lane_s
  • i16x8.extract_lane_u
  • i16x8.replace_lane
  • i32x4.extract_lane
  • i32x4.replace_lane
  • i64x2.extract_lane
  • i64x2.replace_lane
  • f32x4.extract_lane
  • f32x4.replace_lane
  • f64x2.extract_lane
  • f64x2.replace_lane
  • i8x16.swizzle
  • i8x16.splat
  • i16x8.splat
  • i32x4.splat
  • i64x2.splat
  • f32x4.splat
  • f64x2.splat
  • i8x16.eq
  • i8x16.ne
  • i8x16.lt_s
  • i8x16.lt_u
  • i8x16.gt_s
  • i8x16.gt_u
  • i8x16.le_s
  • i8x16.le_u
  • i8x16.ge_s
  • i8x16.ge_u
  • i16x8.eq
  • i16x8.ne
  • i16x8.lt_s
  • i16x8.lt_u
  • i16x8.gt_s
  • i16x8.gt_u
  • i16x8.le_s
  • i16x8.le_u
  • i16x8.ge_s
  • i16x8.ge_u
  • i32x4.eq
  • i32x4.ne
  • i32x4.lt_s
  • i32x4.lt_u
  • i32x4.gt_s
  • i32x4.gt_u
  • i32x4.le_s
  • i32x4.le_u
  • i32x4.ge_s
  • i32x4.ge_u
  • i64x2.eq
  • i64x2.ne
  • i64x2.lt_s
  • i64x2.gt_s
  • i64x2.le_s
  • i64x2.ge_s
  • f32x4.eq
  • f32x4.ne
  • f32x4.lt
  • f32x4.gt
  • f32x4.le
  • f32x4.ge
  • f64x2.eq
  • f64x2.ne
  • f64x2.lt
  • f64x2.gt
  • f64x2.le
  • f64x2.ge
  • v128.not
  • v128.and
  • v128.andnot
  • v128.or
  • v128.xor
  • v128.bitselect
  • v128.any_true
  • i8x16.abs
  • i8x16.neg
  • i8x16.popcnt
  • i8x16.all_true
  • i8x16.bitmask
  • i8x16.narrow_i16x8_s
  • i8x16.narrow_i16x8_u
  • i8x16.shl
  • i8x16.shr_s
  • i8x16.shr_u
  • i8x16.add
  • i8x16.add_sat_s
  • i8x16.add_sat_u
  • i8x16.sub
  • i8x16.sub_sat_s
  • i8x16.sub_sat_u
  • i8x16.min_s
  • i8x16.min_u
  • i8x16.max_s
  • i8x16.max_u
  • i8x16.avgr_u
  • i16x8.extadd_pairwise_i8x16_s
  • i16x8.extadd_pairwise_i8x16_u
  • i16x8.abs
  • i16x8.neg
  • i16x8.q15mulr_sat_s
  • i16x8.all_true
  • i16x8.bitmask
  • i16x8.narrow_i32x4_s
  • i16x8.narrow_i32x4_u
  • i16x8.extend_low_i8x16_s
  • i16x8.extend_high_i8x16_s
  • i16x8.extend_low_i8x16_u
  • i16x8.extend_high_i8x16_u
  • i16x8.shl
  • i16x8.shr_s
  • i16x8.shr_u
  • i16x8.add
  • i16x8.add_sat_s
  • i16x8.add_sat_u
  • i16x8.sub
  • i16x8.sub_sat_s
  • i16x8.sub_sat_u
  • i16x8.mul
  • i16x8.min_s
  • i16x8.min_u
  • i16x8.max_s
  • i16x8.max_u
  • i16x8.avgr_u
  • i16x8.extmul_low_i8x16_s
  • i16x8.extmul_high_i8x16_s
  • i16x8.extmul_low_i8x16_u
  • i16x8.extmul_high_i8x16_u
  • i32x4.extadd_pairwise_i8x16_s
  • i32x4.extadd_pairwise_i8x16_u
  • i32x4.abs
  • i32x4.neg
  • i32x4.all_true
  • i32x4.bitmask
  • i32x4.extend_low_i16x8_s
  • i32x4.extend_high_i16x8_s
  • i32x4.extend_low_i16x8_u
  • i32x4.extend_high_i16x8_u
  • i32x4.shl
  • i32x4.shr_s
  • i32x4.shr_u
  • i32x4.add
  • i32x4.sub
  • i32x4.mul
  • i32x4.min_s
  • i32x4.min_u
  • i32x4.max_s
  • i32x4.max_u
  • i32x4.dot_i16x8_s
  • i32x4.extmul_low_i16x8_s
  • i32x4.extmul_high_i16x8_s
  • i32x4.extmul_low_i16x8_u
  • i32x4.extmul_high_i16x8_u
  • i64x2.abs
  • i64x2.neg
  • i64x2.all_true
  • i64x2.bitmask
  • i64x2.extend_low_i32x4_s
  • i64x2.extend_high_i32x4_s
  • i64x2.extend_low_i32x4_u
  • i64x2.extend_high_i32x4_u
  • i64x2.shl
  • i64x2.shr_s
  • i64x2.shr_u
  • i64x2.add
  • i64x2.sub
  • i64x2.mul
  • i64x2.extmul_low_i32x4_s
  • i64x2.extmul_high_i32x4_s
  • i64x2.extmul_low_i32x4_u
  • i64x2.extmul_high_i32x4_u
  • f32x4.ceil
  • f32x4.floor
  • f32x4.trunc
  • f32x4.nearest
  • f32x4.abs
  • f32x4.neg
  • f32x4.sqrt
  • f32x4.add
  • f32x4.sub
  • f32x4.mul
  • f32x4.div
  • f32x4.min
  • f32x4.max
  • f32x4.pmin
  • f32x4.pmax
  • f64x2.ceil
  • f64x2.floor
  • f64x2.trunc
  • f64x2.nearest
  • f64x2.abs
  • f64x2.neg
  • f64x2.sqrt
  • f64x2.add
  • f64x2.sub
  • f64x2.mul
  • f64x2.div
  • f64x2.min
  • f64x2.max
  • f64x2.pmin
  • f64x2.pmax
  • i32x4.trunc_sat_f32x4_s
  • i32x4.trunc_sat_f32x4_u
  • f32x4.convert_i32x4_s
  • f32x4.convert_i32x4_u
  • i32x4.trunc_sat_f64x2_s_zero
  • i32x4.trunc_sat_f64x2_u_zero
  • f64x2.convert_low_i32x4_s
  • f64x2.convert_low_i32x4_u
  • f32x4.demote_f64x2_zero
  • f64x2.promote_low_f32x4

Module

  • Type

  • Import

    • Func
    • Table
    • Mem
    • Global
  • Function

  • Table

  • Memory

  • Global

  • Export

    • Func
    • Table
    • Mem
    • Global
  • Start

  • Element (except declarative)

  • Data count

  • Code

  • Data

  • Custom

Contributors

Commit count: 99

cargo fmt