Wire Sysio Wire Sysion 1.0.0
Loading...
Searching...
No Matches
wasm_sysio_binary_ops.hpp File Reference
#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/preprocessor/seq/subseq.hpp>
#include <boost/preprocessor/seq/remove.hpp>
#include <boost/preprocessor/seq/push_back.hpp>
#include <fc/reflect/reflect.hpp>
#include <sysio/chain/exceptions.hpp>
#include <cstdint>
#include <functional>
#include <iterator>
#include <memory>
#include <fc/exception/exception.hpp>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include "IR/Operators.h"
#include "IR/Module.h"
Include dependency graph for wasm_sysio_binary_ops.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  sysio::chain::wasm_ops::instruction_stream
 
struct  sysio::chain::wasm_ops::memarg
 
struct  sysio::chain::wasm_ops::blocktype
 
struct  sysio::chain::wasm_ops::memoryoptype
 
struct  sysio::chain::wasm_ops::branchtabletype
 
struct  sysio::chain::wasm_ops::voidtype
 
struct  sysio::chain::wasm_ops::field_specific_params< Field >
 
struct  sysio::chain::wasm_ops::field_specific_params< voidtype >
 
struct  sysio::chain::wasm_ops::visitor_arg
 
struct  sysio::chain::wasm_ops::instr
 
struct  sysio::chain::wasm_ops::propagate_should_kill< Mutator, Mutators >
 
struct  sysio::chain::wasm_ops::propagate_should_kill< Mutator >
 
struct  sysio::chain::wasm_ops::propagate_post_injection< Mutator, Mutators >
 
struct  sysio::chain::wasm_ops::propagate_post_injection< Mutator >
 
struct  sysio::chain::wasm_ops::instr_base< Mutators >
 
struct  sysio::chain::wasm_ops::nop_mutator
 
struct  sysio::chain::wasm_ops::op_types< Mutator, Mutators >
 
class  sysio::chain::wasm_ops::cached_ops< Op_Types >
 
struct  sysio::chain::wasm_ops::SYSIO_OperatorDecoderStream< Op_Types >
 

Namespaces

namespace  sysio
 
namespace  sysio::chain
 
namespace  sysio::chain::wasm_ops
 

Macros

#define CONSTRUCT_OP_HAS_DATA(r, DATA, OP)
 
#define WASM_OP_SEQ
 
#define GEN_TYPE(r, T, OP)
 
#define GEN_FIELD(r, P, OP)
 
#define PUSH_BACK_OP(r, T, OP)
 
#define INIT_FIELD(r, P, OP)
 
#define GEN_FIELD(r, P, OP)
 
#define PUSH_BACK_OP(r, T, OP)
 
#define VISIT_OPCODE(opcode, name, nameString, Imm, ...)
 

Typedefs

using sysio::chain::wasm_ops::wasm_op_ptr = std::unique_ptr<instr>
 
using sysio::chain::wasm_ops::wasm_instr_ptr = std::shared_ptr<instr>
 
using sysio::chain::wasm_ops::wasm_return_t = std::vector<uint8_t>
 
using sysio::chain::wasm_ops::wasm_instr_callback = std::function<std::vector<wasm_instr_ptr>(uint8_t)>
 
using sysio::chain::wasm_ops::code_vector = std::vector<uint8_t>
 
using sysio::chain::wasm_ops::code_iterator = std::vector<uint8_t>::iterator
 
using sysio::chain::wasm_ops::wasm_op_generator = std::function<wasm_instr_ptr(std::vector<uint8_t>, size_t)>
 

Enumerations

enum  sysio::chain::wasm_ops::code {
  sysio::chain::wasm_ops::unreachable_code = 0x00 , sysio::chain::wasm_ops::nop_code = 0x01 , sysio::chain::wasm_ops::block_code = 0x02 , sysio::chain::wasm_ops::loop_code = 0x03 ,
  sysio::chain::wasm_ops::if__code = 0x04 , sysio::chain::wasm_ops::else__code = 0x05 , sysio::chain::wasm_ops::end_code = 0x0B , sysio::chain::wasm_ops::br_code = 0x0C ,
  sysio::chain::wasm_ops::br_if_code = 0x0D , sysio::chain::wasm_ops::br_table_code = 0x0E , sysio::chain::wasm_ops::return__code = 0x0F , sysio::chain::wasm_ops::call_code = 0x10 ,
  sysio::chain::wasm_ops::call_indirect_code = 0x11 , sysio::chain::wasm_ops::drop_code = 0x1A , sysio::chain::wasm_ops::select_code = 0x1B , sysio::chain::wasm_ops::get_local_code = 0x20 ,
  sysio::chain::wasm_ops::set_local_code = 0x21 , sysio::chain::wasm_ops::tee_local_code = 0x22 , sysio::chain::wasm_ops::get_global_code = 0x23 , sysio::chain::wasm_ops::set_global_code = 0x24 ,
  sysio::chain::wasm_ops::i32_load_code = 0x28 , sysio::chain::wasm_ops::i64_load_code = 0x29 , sysio::chain::wasm_ops::f32_load_code = 0x2A , sysio::chain::wasm_ops::f64_load_code = 0x2B ,
  sysio::chain::wasm_ops::i32_load8_s_code = 0x2C , sysio::chain::wasm_ops::i32_load8_u_code = 0x2D , sysio::chain::wasm_ops::i32_load16_s_code = 0x2E , sysio::chain::wasm_ops::i32_load16_u_code = 0x2F ,
  sysio::chain::wasm_ops::i64_load8_s_code = 0x30 , sysio::chain::wasm_ops::i64_load8_u_code = 0x31 , sysio::chain::wasm_ops::i64_load16_s_code = 0x32 , sysio::chain::wasm_ops::i64_load16_u_code = 0x33 ,
  sysio::chain::wasm_ops::i64_load32_s_code = 0x34 , sysio::chain::wasm_ops::i64_load32_u_code = 0x35 , sysio::chain::wasm_ops::i32_store_code = 0x36 , sysio::chain::wasm_ops::i64_store_code = 0x37 ,
  sysio::chain::wasm_ops::f32_store_code = 0x38 , sysio::chain::wasm_ops::f64_store_code = 0x39 , sysio::chain::wasm_ops::i32_store8_code = 0x3A , sysio::chain::wasm_ops::i32_store16_code = 0x3B ,
  sysio::chain::wasm_ops::i64_store8_code = 0x3C , sysio::chain::wasm_ops::i64_store16_code = 0x3D , sysio::chain::wasm_ops::i64_store32_code = 0x3E , sysio::chain::wasm_ops::current_memory_code = 0x3F ,
  sysio::chain::wasm_ops::grow_memory_code = 0x40 , sysio::chain::wasm_ops::i32_const_code = 0x41 , sysio::chain::wasm_ops::i64_const_code = 0x42 , sysio::chain::wasm_ops::f32_const_code = 0x43 ,
  sysio::chain::wasm_ops::f64_const_code = 0x44 , sysio::chain::wasm_ops::i32_eqz_code = 0x45 , sysio::chain::wasm_ops::i32_eq_code = 0x46 , sysio::chain::wasm_ops::i32_ne_code = 0x47 ,
  sysio::chain::wasm_ops::i32_lt_s_code = 0x48 , sysio::chain::wasm_ops::i32_lt_u_code = 0x49 , sysio::chain::wasm_ops::i32_gt_s_code = 0x4A , sysio::chain::wasm_ops::i32_gt_u_code = 0x4B ,
  sysio::chain::wasm_ops::i32_le_s_code = 0x4C , sysio::chain::wasm_ops::i32_le_u_code = 0x4D , sysio::chain::wasm_ops::i32_ge_s_code = 0x4E , sysio::chain::wasm_ops::i32_ge_u_code = 0x4F ,
  sysio::chain::wasm_ops::i64_eqz_code = 0x50 , sysio::chain::wasm_ops::i64_eq_code = 0x51 , sysio::chain::wasm_ops::i64_ne_code = 0x52 , sysio::chain::wasm_ops::i64_lt_s_code = 0x53 ,
  sysio::chain::wasm_ops::i64_lt_u_code = 0x54 , sysio::chain::wasm_ops::i64_gt_s_code = 0x55 , sysio::chain::wasm_ops::i64_gt_u_code = 0x56 , sysio::chain::wasm_ops::i64_le_s_code = 0x57 ,
  sysio::chain::wasm_ops::i64_le_u_code = 0x58 , sysio::chain::wasm_ops::i64_ge_s_code = 0x59 , sysio::chain::wasm_ops::i64_ge_u_code = 0x5A , sysio::chain::wasm_ops::f32_eq_code = 0x5B ,
  sysio::chain::wasm_ops::f32_ne_code = 0x5C , sysio::chain::wasm_ops::f32_lt_code = 0x5D , sysio::chain::wasm_ops::f32_gt_code = 0x5E , sysio::chain::wasm_ops::f32_le_code = 0x5F ,
  sysio::chain::wasm_ops::f32_ge_code = 0x60 , sysio::chain::wasm_ops::f64_eq_code = 0x61 , sysio::chain::wasm_ops::f64_ne_code = 0x62 , sysio::chain::wasm_ops::f64_lt_code = 0x63 ,
  sysio::chain::wasm_ops::f64_gt_code = 0x64 , sysio::chain::wasm_ops::f64_le_code = 0x65 , sysio::chain::wasm_ops::f64_ge_code = 0x66 , sysio::chain::wasm_ops::i32_clz_code = 0x67 ,
  sysio::chain::wasm_ops::i32_ctz_code = 0x68 , sysio::chain::wasm_ops::i32_popcnt_code = 0x69 , sysio::chain::wasm_ops::i32_add_code = 0x6A , sysio::chain::wasm_ops::i32_sub_code = 0x6B ,
  sysio::chain::wasm_ops::i32_mul_code = 0x6C , sysio::chain::wasm_ops::i32_div_s_code = 0x6D , sysio::chain::wasm_ops::i32_div_u_code = 0x6E , sysio::chain::wasm_ops::i32_rem_s_code = 0x6F ,
  sysio::chain::wasm_ops::i32_rem_u_code = 0x70 , sysio::chain::wasm_ops::i32_and_code = 0x71 , sysio::chain::wasm_ops::i32_or_code = 0x72 , sysio::chain::wasm_ops::i32_xor_code = 0x73 ,
  sysio::chain::wasm_ops::i32_shl_code = 0x74 , sysio::chain::wasm_ops::i32_shr_s_code = 0x75 , sysio::chain::wasm_ops::i32_shr_u_code = 0x76 , sysio::chain::wasm_ops::i32_rotl_code = 0x77 ,
  sysio::chain::wasm_ops::i32_rotr_code = 0x78 , sysio::chain::wasm_ops::i64_clz_code = 0x79 , sysio::chain::wasm_ops::i64_ctz_code = 0x7A , sysio::chain::wasm_ops::i64_popcnt_code = 0x7B ,
  sysio::chain::wasm_ops::i64_add_code = 0x7C , sysio::chain::wasm_ops::i64_sub_code = 0x7D , sysio::chain::wasm_ops::i64_mul_code = 0x7E , sysio::chain::wasm_ops::i64_div_s_code = 0x7F ,
  sysio::chain::wasm_ops::i64_div_u_code = 0x80 , sysio::chain::wasm_ops::i64_rem_s_code = 0x81 , sysio::chain::wasm_ops::i64_rem_u_code = 0x82 , sysio::chain::wasm_ops::i64_and_code = 0x83 ,
  sysio::chain::wasm_ops::i64_or_code = 0x84 , sysio::chain::wasm_ops::i64_xor_code = 0x85 , sysio::chain::wasm_ops::i64_shl_code = 0x86 , sysio::chain::wasm_ops::i64_shr_s_code = 0x87 ,
  sysio::chain::wasm_ops::i64_shr_u_code = 0x88 , sysio::chain::wasm_ops::i64_rotl_code = 0x89 , sysio::chain::wasm_ops::i64_rotr_code = 0x8A , sysio::chain::wasm_ops::f32_abs_code = 0x8B ,
  sysio::chain::wasm_ops::f32_neg_code = 0x8C , sysio::chain::wasm_ops::f32_ceil_code = 0x8D , sysio::chain::wasm_ops::f32_floor_code = 0x8E , sysio::chain::wasm_ops::f32_trunc_code = 0x8F ,
  sysio::chain::wasm_ops::f32_nearest_code = 0x90 , sysio::chain::wasm_ops::f32_sqrt_code = 0x91 , sysio::chain::wasm_ops::f32_add_code = 0x92 , sysio::chain::wasm_ops::f32_sub_code = 0x93 ,
  sysio::chain::wasm_ops::f32_mul_code = 0x94 , sysio::chain::wasm_ops::f32_div_code = 0x95 , sysio::chain::wasm_ops::f32_min_code = 0x96 , sysio::chain::wasm_ops::f32_max_code = 0x97 ,
  sysio::chain::wasm_ops::f32_copysign_code = 0x98 , sysio::chain::wasm_ops::f64_abs_code = 0x99 , sysio::chain::wasm_ops::f64_neg_code = 0x9A , sysio::chain::wasm_ops::f64_ceil_code = 0x9B ,
  sysio::chain::wasm_ops::f64_floor_code = 0x9C , sysio::chain::wasm_ops::f64_trunc_code = 0x9D , sysio::chain::wasm_ops::f64_nearest_code = 0x9E , sysio::chain::wasm_ops::f64_sqrt_code = 0x9F ,
  sysio::chain::wasm_ops::f64_add_code = 0xA0 , sysio::chain::wasm_ops::f64_sub_code = 0xA1 , sysio::chain::wasm_ops::f64_mul_code = 0xA2 , sysio::chain::wasm_ops::f64_div_code = 0xA3 ,
  sysio::chain::wasm_ops::f64_min_code = 0xA4 , sysio::chain::wasm_ops::f64_max_code = 0xA5 , sysio::chain::wasm_ops::f64_copysign_code = 0xA6 , sysio::chain::wasm_ops::i32_wrap_i64_code = 0xA7 ,
  sysio::chain::wasm_ops::i32_trunc_s_f32_code = 0xA8 , sysio::chain::wasm_ops::i32_trunc_u_f32_code = 0xA9 , sysio::chain::wasm_ops::i32_trunc_s_f64_code = 0xAA , sysio::chain::wasm_ops::i32_trunc_u_f64_code = 0xAB ,
  sysio::chain::wasm_ops::i64_extend_s_i32_code = 0xAC , sysio::chain::wasm_ops::i64_extend_u_i32_code = 0xAD , sysio::chain::wasm_ops::i64_trunc_s_f32_code = 0xAE , sysio::chain::wasm_ops::i64_trunc_u_f32_code = 0xAF ,
  sysio::chain::wasm_ops::i64_trunc_s_f64_code = 0xB0 , sysio::chain::wasm_ops::i64_trunc_u_f64_code = 0xB1 , sysio::chain::wasm_ops::f32_convert_s_i32_code = 0xB2 , sysio::chain::wasm_ops::f32_convert_u_i32_code = 0xB3 ,
  sysio::chain::wasm_ops::f32_convert_s_i64_code = 0xB4 , sysio::chain::wasm_ops::f32_convert_u_i64_code = 0xB5 , sysio::chain::wasm_ops::f32_demote_f64_code = 0xB6 , sysio::chain::wasm_ops::f64_convert_s_i32_code = 0xB7 ,
  sysio::chain::wasm_ops::f64_convert_u_i32_code = 0xB8 , sysio::chain::wasm_ops::f64_convert_s_i64_code = 0xB9 , sysio::chain::wasm_ops::f64_convert_u_i64_code = 0xBA , sysio::chain::wasm_ops::f64_promote_f32_code = 0xBB ,
  sysio::chain::wasm_ops::i32_reinterpret_f32_code = 0xBC , sysio::chain::wasm_ops::i64_reinterpret_f64_code = 0xBD , sysio::chain::wasm_ops::f32_reinterpret_i32_code = 0xBE , sysio::chain::wasm_ops::f64_reinterpret_i64_code = 0xBF ,
  sysio::chain::wasm_ops::error_code = 0xFF
}
 

Functions

std::string sysio::chain::wasm_ops::to_string (uint32_t field)
 
std::string sysio::chain::wasm_ops::to_string (uint64_t field)
 
std::string sysio::chain::wasm_ops::to_string (blocktype field)
 
std::string sysio::chain::wasm_ops::to_string (memoryoptype field)
 
std::string sysio::chain::wasm_ops::to_string (memarg field)
 
std::string sysio::chain::wasm_ops::to_string (branchtabletype field)
 
void sysio::chain::wasm_ops::pack (instruction_stream *stream, uint32_t field)
 
void sysio::chain::wasm_ops::pack (instruction_stream *stream, uint64_t field)
 
void sysio::chain::wasm_ops::pack (instruction_stream *stream, blocktype field)
 
void sysio::chain::wasm_ops::pack (instruction_stream *stream, memoryoptype field)
 
void sysio::chain::wasm_ops::pack (instruction_stream *stream, memarg field)
 
void sysio::chain::wasm_ops::pack (instruction_stream *stream, branchtabletype field)
 
template<class Op_Types >
std::vector< instr * > * sysio::chain::wasm_ops::get_cached_ops_vec ()
 

Macro Definition Documentation

◆ CONSTRUCT_OP_HAS_DATA

#define CONSTRUCT_OP_HAS_DATA ( r,
DATA,
OP )
Value:
template <typename ... Mutators> \
struct OP final : instr_base<Mutators...> { \
uint16_t code = BOOST_PP_CAT(OP,_code); \
DATA field; \
uint16_t get_code() override { return BOOST_PP_CAT(OP,_code); } \
int skip_ahead() override { return field_specific_params<DATA>::skip_ahead; } \
void unpack( char* opcode ) override { \
field_specific_params<DATA>::unpack( opcode, field ); \
} \
void pack(instruction_stream* stream) override { \
stream->set(2, (const char*)&code); \
field_specific_params<DATA>::pack( stream, field ); \
} \
std::string to_string() override { \
return std::string(BOOST_PP_STRINGIZE(OP))+field_specific_params<DATA>::to_string( field ); \
} \
};
ehm field
void unpack(Stream &s, std::deque< T > &value)
Definition raw.hpp:540
void pack(instruction_stream *stream, uint32_t field)
unsigned short uint16_t
Definition stdint.h:125
#define OP(opname)

Definition at line 151 of file wasm_sysio_binary_ops.hpp.

151#define CONSTRUCT_OP_HAS_DATA( r, DATA, OP ) \
152template <typename ... Mutators> \
153struct OP final : instr_base<Mutators...> { \
154 uint16_t code = BOOST_PP_CAT(OP,_code); \
155 DATA field; \
156 uint16_t get_code() override { return BOOST_PP_CAT(OP,_code); } \
157 int skip_ahead() override { return field_specific_params<DATA>::skip_ahead; } \
158 void unpack( char* opcode ) override { \
159 field_specific_params<DATA>::unpack( opcode, field ); \
160 } \
161 void pack(instruction_stream* stream) override { \
162 stream->set(2, (const char*)&code); \
163 field_specific_params<DATA>::pack( stream, field ); \
164 } \
165 std::string to_string() override { \
166 return std::string(BOOST_PP_STRINGIZE(OP))+field_specific_params<DATA>::to_string( field ); \
167 } \
168};

◆ GEN_FIELD [1/2]

#define GEN_FIELD ( r,
P,
OP )
Value:
static std::unique_ptr<typename Op_Types::BOOST_PP_CAT(OP,_t)> BOOST_PP_CAT(P, OP);
#define P
Definition dtoa.c:437

Definition at line 603 of file wasm_sysio_binary_ops.hpp.

603#define GEN_FIELD( r, P, OP ) \
604 static std::unique_ptr<typename Op_Types::BOOST_PP_CAT(OP,_t)> BOOST_PP_CAT(P, OP);

◆ GEN_FIELD [2/2]

#define GEN_FIELD ( r,
P,
OP )
Value:
static std::unique_ptr<typename Op_Types::BOOST_PP_CAT(OP,_t)> BOOST_PP_CAT(P, OP) = std::make_unique<typename Op_Types::BOOST_PP_CAT(OP,_t)>();

Definition at line 603 of file wasm_sysio_binary_ops.hpp.

603#define GEN_FIELD( r, P, OP ) \
604 static std::unique_ptr<typename Op_Types::BOOST_PP_CAT(OP,_t)> BOOST_PP_CAT(P, OP);

◆ GEN_TYPE

#define GEN_TYPE ( r,
T,
OP )
Value:
using BOOST_PP_CAT( OP, _t ) = OP < T , BOOST_PP_CAT(T, s) ...>;
#define T(meth, val, expected)
char * s

Definition at line 591 of file wasm_sysio_binary_ops.hpp.

591#define GEN_TYPE( r, T, OP ) \
592 using BOOST_PP_CAT( OP, _t ) = OP < T , BOOST_PP_CAT(T, s) ...>;

◆ INIT_FIELD

#define INIT_FIELD ( r,
P,
OP )
Value:
template <class Op_Types> \
std::unique_ptr<typename Op_Types::BOOST_PP_CAT(OP,_t)> cached_ops<Op_Types>::BOOST_PP_CAT(P, OP) = std::make_unique<typename Op_Types::BOOST_PP_CAT(OP,_t)>();

Definition at line 626 of file wasm_sysio_binary_ops.hpp.

626#define INIT_FIELD( r, P, OP ) \
627 template <class Op_Types> \
628 std::unique_ptr<typename Op_Types::BOOST_PP_CAT(OP,_t)> cached_ops<Op_Types>::BOOST_PP_CAT(P, OP) = std::make_unique<typename Op_Types::BOOST_PP_CAT(OP,_t)>();

◆ PUSH_BACK_OP [1/2]

#define PUSH_BACK_OP ( r,
T,
OP )
Value:
_cached_ops[BOOST_PP_CAT(OP,_code)] = BOOST_PP_CAT(T, OP).get();

◆ PUSH_BACK_OP [2/2]

#define PUSH_BACK_OP ( r,
T,
OP )
Value:
_cached_ops[BOOST_PP_CAT(OP,_code)] = BOOST_PP_CAT(T, OP).get();

◆ VISIT_OPCODE

#define VISIT_OPCODE ( opcode,
name,
nameString,
Imm,
... )
Value:
case IR::Opcode::name: \
{ \
SYS_ASSERT(nextByte + sizeof(IR::OpcodeAndImm<IR::Imm>) <= end, wasm_exception, ""); \
IR::OpcodeAndImm<IR::Imm>* encodedOperator = (IR::OpcodeAndImm<IR::Imm>*)nextByte; \
nextByte += sizeof(IR::OpcodeAndImm<IR::Imm>); \
auto op = _cached_ops->at(BOOST_PP_CAT(name, _code)); \
op->unpack( reinterpret_cast<char*>(&(encodedOperator->imm)) ); \
return op; \
}
std::string name

◆ WASM_OP_SEQ

#define WASM_OP_SEQ

Definition at line 170 of file wasm_sysio_binary_ops.hpp.

170#define WASM_OP_SEQ (error) \
171 (end) \
172 (unreachable) \
173 (nop) \
174 (else_) \
175 (return_) \
176 (drop) \
177 (select) \
178 (i32_eqz) \
179 (i32_eq) \
180 (i32_ne) \
181 (i32_lt_s) \
182 (i32_lt_u) \
183 (i32_gt_s) \
184 (i32_gt_u) \
185 (i32_le_s) \
186 (i32_le_u) \
187 (i32_ge_s) \
188 (i32_ge_u) \
189 (i64_eqz) \
190 (i64_eq) \
191 (i64_ne) \
192 (i64_lt_s) \
193 (i64_lt_u) \
194 (i64_gt_s) \
195 (i64_gt_u) \
196 (i64_le_s) \
197 (i64_le_u) \
198 (i64_ge_s) \
199 (i64_ge_u) \
200 (f32_eq) \
201 (f32_ne) \
202 (f32_lt) \
203 (f32_gt) \
204 (f32_le) \
205 (f32_ge) \
206 (f64_eq) \
207 (f64_ne) \
208 (f64_lt) \
209 (f64_gt) \
210 (f64_le) \
211 (f64_ge) \
212 (i32_clz) \
213 (i32_ctz) \
214 (i32_popcnt) \
215 (i32_add) \
216 (i32_sub) \
217 (i32_mul) \
218 (i32_div_s) \
219 (i32_div_u) \
220 (i32_rem_s) \
221 (i32_rem_u) \
222 (i32_and) \
223 (i32_or) \
224 (i32_xor) \
225 (i32_shl) \
226 (i32_shr_s) \
227 (i32_shr_u) \
228 (i32_rotl) \
229 (i32_rotr) \
230 (i64_clz) \
231 (i64_ctz) \
232 (i64_popcnt) \
233 (i64_add) \
234 (i64_sub) \
235 (i64_mul) \
236 (i64_div_s) \
237 (i64_div_u) \
238 (i64_rem_s) \
239 (i64_rem_u) \
240 (i64_and) \
241 (i64_or) \
242 (i64_xor) \
243 (i64_shl) \
244 (i64_shr_s) \
245 (i64_shr_u) \
246 (i64_rotl) \
247 (i64_rotr) \
248 (f32_abs) \
249 (f32_neg) \
250 (f32_ceil) \
251 (f32_floor) \
252 (f32_trunc) \
253 (f32_nearest) \
254 (f32_sqrt) \
255 (f32_add) \
256 (f32_sub) \
257 (f32_mul) \
258 (f32_div) \
259 (f32_min) \
260 (f32_max) \
261 (f32_copysign) \
262 (f64_abs) \
263 (f64_neg) \
264 (f64_ceil) \
265 (f64_floor) \
266 (f64_trunc) \
267 (f64_nearest) \
268 (f64_sqrt) \
269 (f64_add) \
270 (f64_sub) \
271 (f64_mul) \
272 (f64_div) \
273 (f64_min) \
274 (f64_max) \
275 (f64_copysign) \
276 (i32_wrap_i64) \
277 (i32_trunc_s_f32) \
278 (i32_trunc_u_f32) \
279 (i32_trunc_s_f64) \
280 (i32_trunc_u_f64) \
281 (i64_extend_s_i32) \
282 (i64_extend_u_i32) \
283 (i64_trunc_s_f32) \
284 (i64_trunc_u_f32) \
285 (i64_trunc_s_f64) \
286 (i64_trunc_u_f64) \
287 (f32_convert_s_i32) \
288 (f32_convert_u_i32) \
289 (f32_convert_s_i64) \
290 (f32_convert_u_i64) \
291 (f32_demote_f64) \
292 (f64_convert_s_i32) \
293 (f64_convert_u_i32) \
294 (f64_convert_s_i64) \
295 (f64_convert_u_i64) \
296 (f64_promote_f32) \
297 (i32_reinterpret_f32) \
298 (i64_reinterpret_f64) \
299 (f32_reinterpret_i32) \
300 (f64_reinterpret_i64) \
301 (grow_memory) \
302 (current_memory) \
303/* BLOCK TYPE OPS */ \
304 (block) \
305 (loop) \
306 (if_) \
307/* 32bit OPS */ \
308 (br) \
309 (br_if) \
310 (call) \
311 (call_indirect) \
312 (get_local) \
313 (set_local) \
314 (tee_local) \
315 (get_global) \
316 (set_global) \
317 (i32_const) \
318 (f32_const) \
319/* memarg OPS */ \
320 (i32_load) \
321 (i64_load) \
322 (f32_load) \
323 (f64_load) \
324 (i32_load8_s) \
325 (i32_load8_u) \
326 (i32_load16_s) \
327 (i32_load16_u) \
328 (i64_load8_s) \
329 (i64_load8_u) \
330 (i64_load16_s) \
331 (i64_load16_u) \
332 (i64_load32_s) \
333 (i64_load32_u) \
334 (i32_store) \
335 (i64_store) \
336 (f32_store) \
337 (f64_store) \
338 (i32_store8) \
339 (i32_store16) \
340 (i64_store8) \
341 (i64_store16) \
342 (i64_store32) \
343/* 64bit OPS */ \
344 (i64_const) \
345 (f64_const) \
346/* branchtable op */ \
347 (br_table) \
348