Skip to content

Instantly share code, notes, and snippets.

@ceving
Last active January 15, 2024 14:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ceving/8e8ef1cceddbb26a4bbfe015ac2a1e81 to your computer and use it in GitHub Desktop.
Save ceving/8e8ef1cceddbb26a4bbfe015ac2a1e81 to your computer and use it in GitHub Desktop.
WASM Instructions in JSON

Extract WASM-Instructions from Webassembly Spec

This is the URL of the specification of the WASM instructions.

https://webassembly.github.io/spec/core/appendix/index-instructions.html

This is some JavaScript which extracts the instructions.

(opcodes => {
  document.querySelectorAll('tbody tr').forEach(tr => {
    opcodes.push([...tr.querySelectorAll('td')]
                 .slice(0,2).map(e => e.innerText))});
  var result = {};
  opcodes.filter((e,i) => e[0] != '(reserved)')
    .map(e => [e[0].split(/\s+/)[0],
               e[1].split(/\s+/).map(i => parseInt(i))])
    .forEach(e => result[e[0]] = e[1]);
  return JSON.stringify(result).replaceAll(',"', ',\n"')})([]);

This is the JSON containing the instructions.

{"unreachable":[0],
"nop":[1],
"block":[2],
"loop":[3],
"if":[4],
"else":[5],
"end":[11],
"br":[12],
"br_if":[13],
"br_table":[14],
"return":[15],
"call":[16],
"call_indirect":[17],
"drop":[26],
"select":[28],
"local.get":[32],
"local.set":[33],
"local.tee":[34],
"global.get":[35],
"global.set":[36],
"table.get":[37],
"table.set":[38],
"i32.load":[40],
"i64.load":[41],
"f32.load":[42],
"f64.load":[43],
"i32.load8_s":[44],
"i32.load8_u":[45],
"i32.load16_s":[46],
"i32.load16_u":[47],
"i64.load8_s":[48],
"i64.load8_u":[49],
"i64.load16_s":[50],
"i64.load16_u":[51],
"i64.load32_s":[52],
"i64.load32_u":[53],
"i32.store":[54],
"i64.store":[55],
"f32.store":[56],
"f64.store":[57],
"i32.store8":[58],
"i32.store16":[59],
"i64.store8":[60],
"i64.store16":[61],
"i64.store32":[62],
"memory.size":[63],
"memory.grow":[64],
"i32.const":[65],
"i64.const":[66],
"f32.const":[67],
"f64.const":[68],
"i32.eqz":[69],
"i32.eq":[70],
"i32.ne":[71],
"i32.lt_s":[72],
"i32.lt_u":[73],
"i32.gt_s":[74],
"i32.gt_u":[75],
"i32.le_s":[76],
"i32.le_u":[77],
"i32.ge_s":[78],
"i32.ge_u":[79],
"i64.eqz":[80],
"i64.eq":[81],
"i64.ne":[82],
"i64.lt_s":[83],
"i64.lt_u":[84],
"i64.gt_s":[85],
"i64.gt_u":[86],
"i64.le_s":[87],
"i64.le_u":[88],
"i64.ge_s":[89],
"i64.ge_u":[90],
"f32.eq":[91],
"f32.ne":[92],
"f32.lt":[93],
"f32.gt":[94],
"f32.le":[95],
"f32.ge":[96],
"f64.eq":[97],
"f64.ne":[98],
"f64.lt":[99],
"f64.gt":[100],
"f64.le":[101],
"f64.ge":[102],
"i32.clz":[103],
"i32.ctz":[104],
"i32.popcnt":[105],
"i32.add":[106],
"i32.sub":[107],
"i32.mul":[108],
"i32.div_s":[109],
"i32.div_u":[110],
"i32.rem_s":[111],
"i32.rem_u":[112],
"i32.and":[113],
"i32.or":[114],
"i32.xor":[115],
"i32.shl":[116],
"i32.shr_s":[117],
"i32.shr_u":[118],
"i32.rotl":[119],
"i32.rotr":[120],
"i64.clz":[121],
"i64.ctz":[122],
"i64.popcnt":[123],
"i64.add":[124],
"i64.sub":[125],
"i64.mul":[126],
"i64.div_s":[127],
"i64.div_u":[128],
"i64.rem_s":[129],
"i64.rem_u":[130],
"i64.and":[131],
"i64.or":[132],
"i64.xor":[133],
"i64.shl":[134],
"i64.shr_s":[135],
"i64.shr_u":[136],
"i64.rotl":[137],
"i64.rotr":[138],
"f32.abs":[139],
"f32.neg":[140],
"f32.ceil":[141],
"f32.floor":[142],
"f32.trunc":[143],
"f32.nearest":[144],
"f32.sqrt":[145],
"f32.add":[146],
"f32.sub":[147],
"f32.mul":[148],
"f32.div":[149],
"f32.min":[150],
"f32.max":[151],
"f32.copysign":[152],
"f64.abs":[153],
"f64.neg":[154],
"f64.ceil":[155],
"f64.floor":[156],
"f64.trunc":[157],
"f64.nearest":[158],
"f64.sqrt":[159],
"f64.add":[160],
"f64.sub":[161],
"f64.mul":[162],
"f64.div":[163],
"f64.min":[164],
"f64.max":[165],
"f64.copysign":[166],
"i32.wrap_i64":[167],
"i32.trunc_f32_s":[168],
"i32.trunc_f32_u":[169],
"i32.trunc_f64_s":[170],
"i32.trunc_f64_u":[171],
"i64.extend_i32_s":[172],
"i64.extend_i32_u":[173],
"i64.trunc_f32_s":[174],
"i64.trunc_f32_u":[175],
"i64.trunc_f64_s":[176],
"i64.trunc_f64_u":[177],
"f32.convert_i32_s":[178],
"f32.convert_i32_u":[179],
"f32.convert_i64_s":[180],
"f32.convert_i64_u":[181],
"f32.demote_f64":[182],
"f64.convert_i32_s":[183],
"f64.convert_i32_u":[184],
"f64.convert_i64_s":[185],
"f64.convert_i64_u":[186],
"f64.promote_f32":[187],
"i32.reinterpret_f32":[188],
"i64.reinterpret_f64":[189],
"f32.reinterpret_i32":[190],
"f64.reinterpret_i64":[191],
"i32.extend8_s":[192],
"i32.extend16_s":[193],
"i64.extend8_s":[194],
"i64.extend16_s":[195],
"i64.extend32_s":[196],
"ref.null":[208],
"ref.is_null":[209],
"ref.func":[210],
"i32.trunc_sat_f32_s":[252,0],
"i32.trunc_sat_f32_u":[252,1],
"i32.trunc_sat_f64_s":[252,2],
"i32.trunc_sat_f64_u":[252,3],
"i64.trunc_sat_f32_s":[252,4],
"i64.trunc_sat_f32_u":[252,5],
"i64.trunc_sat_f64_s":[252,6],
"i64.trunc_sat_f64_u":[252,7],
"memory.init":[252,8],
"data.drop":[252,9],
"memory.copy":[252,10],
"memory.fill":[252,11],
"table.init":[252,12],
"elem.drop":[252,13],
"table.copy":[252,14],
"table.grow":[252,15],
"table.size":[252,16],
"table.fill":[252,17],
"v128.load":[253,0],
"v128.load8x8_s":[253,1],
"v128.load8x8_u":[253,2],
"v128.load16x4_s":[253,3],
"v128.load16x4_u":[253,4],
"v128.load32x2_s":[253,5],
"v128.load32x2_u":[253,6],
"v128.load8_splat":[253,7],
"v128.load16_splat":[253,8],
"v128.load32_splat":[253,9],
"v128.load64_splat":[253,10],
"v128.store":[253,11],
"v128.const":[253,12],
"i8x16.shuffle":[253,13],
"i8x16.swizzle":[253,14],
"i8x16.splat":[253,15],
"i16x8.splat":[253,16],
"i32x4.splat":[253,17],
"i64x2.splat":[253,18],
"f32x4.splat":[253,19],
"f64x2.splat":[253,20],
"i8x16.extract_lane_s":[253,21],
"i8x16.extract_lane_u":[253,22],
"i8x16.replace_lane":[253,23],
"i16x8.extract_lane_s":[253,24],
"i16x8.extract_lane_u":[253,25],
"i16x8.replace_lane":[253,26],
"i32x4.extract_lane":[253,27],
"i32x4.replace_lane":[253,28],
"i64x2.extract_lane":[253,29],
"i64x2.replace_lane":[253,30],
"f32x4.extract_lane":[253,31],
"f32x4.replace_lane":[253,32],
"f64x2.extract_lane":[253,33],
"f64x2.replace_lane":[253,34],
"i8x16.eq":[253,35],
"i8x16.ne":[253,36],
"i8x16.lt_s":[253,37],
"i8x16.lt_u":[253,38],
"i8x16.gt_s":[253,39],
"i8x16.gt_u":[253,40],
"i8x16.le_s":[253,41],
"i8x16.le_u":[253,42],
"i8x16.ge_s":[253,43],
"i8x16.ge_u":[253,44],
"i16x8.eq":[253,45],
"i16x8.ne":[253,46],
"i16x8.lt_s":[253,47],
"i16x8.lt_u":[253,48],
"i16x8.gt_s":[253,49],
"i16x8.gt_u":[253,50],
"i16x8.le_s":[253,51],
"i16x8.le_u":[253,52],
"i16x8.ge_s":[253,53],
"i16x8.ge_u":[253,54],
"i32x4.eq":[253,55],
"i32x4.ne":[253,56],
"i32x4.lt_s":[253,57],
"i32x4.lt_u":[253,58],
"i32x4.gt_s":[253,59],
"i32x4.gt_u":[253,60],
"i32x4.le_s":[253,61],
"i32x4.le_u":[253,62],
"i32x4.ge_s":[253,63],
"i32x4.ge_u":[253,64],
"f32x4.eq":[253,65],
"f32x4.ne":[253,66],
"f32x4.lt":[253,67],
"f32x4.gt":[253,68],
"f32x4.le":[253,69],
"f32x4.ge":[253,70],
"f64x2.eq":[253,71],
"f64x2.ne":[253,72],
"f64x2.lt":[253,73],
"f64x2.gt":[253,74],
"f64x2.le":[253,75],
"f64x2.ge":[253,76],
"v128.not":[253,77],
"v128.and":[253,78],
"v128.andnot":[253,79],
"v128.or":[253,80],
"v128.xor":[253,81],
"v128.bitselect":[253,82],
"v128.any_true":[253,83],
"v128.load8_lane":[253,84],
"v128.load16_lane":[253,85],
"v128.load32_lane":[253,86],
"v128.load64_lane":[253,87],
"v128.store8_lane":[253,88],
"v128.store16_lane":[253,89],
"v128.store32_lane":[253,90],
"v128.store64_lane":[253,91],
"v128.load32_zero":[253,92],
"v128.load64_zero":[253,93],
"f32x4.demote_f64x2_zero":[253,94],
"f64x2.promote_low_f32x4":[253,95],
"i8x16.abs":[253,96],
"i8x16.neg":[253,97],
"i8x16.popcnt":[253,98],
"i8x16.all_true":[253,99],
"i8x16.bitmask":[253,100],
"i8x16.narrow_i16x8_s":[253,101],
"i8x16.narrow_i16x8_u":[253,102],
"f32x4.ceil":[253,103],
"f32x4.floor":[253,104],
"f32x4.trunc":[253,105],
"f32x4.nearest":[253,106],
"i8x16.shl":[253,107],
"i8x16.shr_s":[253,108],
"i8x16.shr_u":[253,109],
"i8x16.add":[253,110],
"i8x16.add_sat_s":[253,111],
"i8x16.add_sat_u":[253,112],
"i8x16.sub":[253,113],
"i8x16.sub_sat_s":[253,114],
"i8x16.sub_sat_u":[253,115],
"f64x2.ceil":[253,116],
"f64x2.floor":[253,117],
"i8x16.min_s":[253,118],
"i8x16.min_u":[253,119],
"i8x16.max_s":[253,120],
"i8x16.max_u":[253,121],
"f64x2.trunc":[253,122],
"i8x16.avgr_u":[253,123],
"i16x8.extadd_pairwise_i8x16_s":[253,124],
"i16x8.extadd_pairwise_i8x16_u":[253,125],
"i32x4.extadd_pairwise_i16x8_s":[253,126],
"i32x4.extadd_pairwise_i16x8_u":[253,127],
"i16x8.abs":[253,128,1],
"i16x8.neg":[253,129,1],
"i16x8.q15mulr_sat_s":[253,130,1],
"i16x8.all_true":[253,131,1],
"i16x8.bitmask":[253,132,1],
"i16x8.narrow_i32x4_s":[253,133,1],
"i16x8.narrow_i32x4_u":[253,134,1],
"i16x8.extend_low_i8x16_s":[253,135,1],
"i16x8.extend_high_i8x16_s":[253,136,1],
"i16x8.extend_low_i8x16_u":[253,137,1],
"i16x8.extend_high_i8x16_u":[253,138,1],
"i16x8.shl":[253,139,1],
"i16x8.shr_s":[253,140,1],
"i16x8.shr_u":[253,141,1],
"i16x8.add":[253,142,1],
"i16x8.add_sat_s":[253,143,1],
"i16x8.add_sat_u":[253,144,1],
"i16x8.sub":[253,145,1],
"i16x8.sub_sat_s":[253,146,1],
"i16x8.sub_sat_u":[253,147,1],
"f64x2.nearest":[253,148,1],
"i16x8.mul":[253,149,1],
"i16x8.min_s":[253,150,1],
"i16x8.min_u":[253,151,1],
"i16x8.max_s":[253,152,1],
"i16x8.max_u":[253,153,1],
"i16x8.avgr_u":[253,155,1],
"i16x8.extmul_low_i8x16_s":[253,156,1],
"i16x8.extmul_high_i8x16_s":[253,157,1],
"i16x8.extmul_low_i8x16_u":[253,158,1],
"i16x8.extmul_high_i8x16_u":[253,159,1],
"i32x4.abs":[253,160,1],
"i32x4.neg":[253,161,1],
"i32x4.all_true":[253,163,1],
"i32x4.bitmask":[253,164,1],
"i32x4.extend_low_i16x8_s":[253,167,1],
"i32x4.extend_high_i16x8_s":[253,168,1],
"i32x4.extend_low_i16x8_u":[253,169,1],
"i32x4.extend_high_i16x8_u":[253,170,1],
"i32x4.shl":[253,171,1],
"i32x4.shr_s":[253,172,1],
"i32x4.shr_u":[253,173,1],
"i32x4.add":[253,174,1],
"i32x4.sub":[253,177,1],
"i32x4.mul":[253,181,1],
"i32x4.min_s":[253,182,1],
"i32x4.min_u":[253,183,1],
"i32x4.max_s":[253,184,1],
"i32x4.max_u":[253,185,1],
"i32x4.dot_i16x8_s":[253,186,1],
"i32x4.extmul_low_i16x8_s":[253,188,1],
"i32x4.extmul_high_i16x8_s":[253,189,1],
"i32x4.extmul_low_i16x8_u":[253,190,1],
"i32x4.extmul_high_i16x8_u":[253,191,1],
"i64x2.abs":[253,192,1],
"i64x2.neg":[253,193,1],
"i64x2.all_true":[253,195,1],
"i64x2.bitmask":[253,196,1],
"i64x2.extend_low_i32x4_s":[253,199,1],
"i64x2.extend_high_i32x4_s":[253,200,1],
"i64x2.extend_low_i32x4_u":[253,201,1],
"i64x2.extend_high_i32x4_u":[253,202,1],
"i64x2.shl":[253,203,1],
"i64x2.shr_s":[253,204,1],
"i64x2.shr_u":[253,205,1],
"i64x2.add":[253,206,1],
"i64x2.sub":[253,209,1],
"i64x2.mul":[253,213,1],
"i64x2.eq":[253,214,1],
"i64x2.ne":[253,215,1],
"i64x2.lt_s":[253,216,1],
"i64x2.gt_s":[253,217,1],
"i64x2.le_s":[253,218,1],
"i64x2.ge_s":[253,219,1],
"i64x2.extmul_low_i32x4_s":[253,220,1],
"i64x2.extmul_high_i32x4_s":[253,221,1],
"i64x2.extmul_low_i32x4_u":[253,222,1],
"i64x2.extmul_high_i32x4_u":[253,223,1],
"f32x4.abs":[253,224,1],
"f32x4.neg":[253,225,1],
"f32x4.sqrt":[253,227,1],
"f32x4.add":[253,228,1],
"f32x4.sub":[253,229,1],
"f32x4.mul":[253,230,1],
"f32x4.div":[253,231,1],
"f32x4.min":[253,232,1],
"f32x4.max":[253,233,1],
"f32x4.pmin":[253,234,1],
"f32x4.pmax":[253,235,1],
"f64x2.abs":[253,236,1],
"f64x2.neg":[253,237,1],
"f64x2.sqrt":[253,239,1],
"f64x2.add":[253,240,1],
"f64x2.sub":[253,241,1],
"f64x2.mul":[253,242,1],
"f64x2.div":[253,243,1],
"f64x2.min":[253,244,1],
"f64x2.max":[253,245,1],
"f64x2.pmin":[253,246,1],
"f64x2.pmax":[253,247,1],
"i32x4.trunc_sat_f32x4_s":[253,248,1],
"i32x4.trunc_sat_f32x4_u":[253,249,1],
"f32x4.convert_i32x4_s":[253,250,1],
"f32x4.convert_i32x4_u":[253,251,1],
"i32x4.trunc_sat_f64x2_s_zero":[253,252,1],
"i32x4.trunc_sat_f64x2_u_zero":[253,253,1],
"f64x2.convert_low_i32x4_s":[253,254,1],
"f64x2.convert_low_i32x4_u":[253,255,1]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment