diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-12-29 21:02:29 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-12-29 22:16:58 -0800 |
commit | fb895476f8ba11c27a4732be28ec53356f6d759f (patch) | |
tree | e597948467790516787165efcc0a4cc76e496a2d /src/wasm-binary.h | |
parent | d26cd0e48e948862b545d4fbf98c98b0978d1022 (diff) | |
download | binaryen-fb895476f8ba11c27a4732be28ec53356f6d759f.tar.gz binaryen-fb895476f8ba11c27a4732be28ec53356f6d759f.tar.bz2 binaryen-fb895476f8ba11c27a4732be28ec53356f6d759f.zip |
binary in binary format
Diffstat (limited to 'src/wasm-binary.h')
-rw-r--r-- | src/wasm-binary.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h index f0d194cab..25225579b 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -549,6 +549,52 @@ public: visit(curr->value); } void visitBinary(Binary *curr) { + #define TYPED_CODE(code) { \ + switch (curr->left->type) { \ + case i32: o << int8_t(I32##code); break; \ + case i64: o << int8_t(I64##code); break; \ + case f32: o << int8_t(F32##code); break; \ + case f64: o << int8_t(F64##code); break; \ + default: abort(); \ + } \ + } + + switch (op) { + case Add: TYPED_CODE(Add); + case Sub: TYPED_CODE(Sub); + case Mul: TYPED_CODE(Mul); + case DivS: int8_t(curr->type == i32 ? I32DivS : I64DivS); break; + case DivU: int8_t(curr->type == i32 ? I32DivU : I64DivU); break; + case RemS: int8_t(curr->type == i32 ? I32RemS : I64RemS); break; + case RemU: int8_t(curr->type == i32 ? I32RemU : I64RemU); break; + case And: int8_t(curr->type == i32 ? I32And : I64And); break; + case Or: int8_t(curr->type == i32 ? I32Or : I64Or); break; + case Xor: int8_t(curr->type == i32 ? I32Xor : I64Xor); break; + case Shl: int8_t(curr->type == i32 ? I32Shl : I64Shl); break; + case ShrU: int8_t(curr->type == i32 ? I32ShrU : I64ShrU); break; + case ShrS: int8_t(curr->type == i32 ? I32ShrS : I64ShrS); break; + case Div: int8_t(curr->type == f32 ? F32Div : F64Div); break; + case CopySign: int8_t(curr->type == f32 ? F32CopySign : F64CopySign); break; + case Min: int8_t(curr->type == f32 ? F32Min : F64Min); break; + case Max: int8_t(curr->type == f32 ? F32Max : F64Max); break; + case Eq: TYPED_CODE(Eq); + case Ne: TYPED_CODE(Ne); + case LtS: TYPED_CODE(LtS); + case LtU: TYPED_CODE(LtU); + case LeS: TYPED_CODE(LeS); + case LeU: TYPED_CODE(LeU); + case GtS: TYPED_CODE(GtS); + case GtU: TYPED_CODE(GtU); + case GeS: TYPED_CODE(GeS); + case GeU: TYPED_CODE(GeU); + case Lt: TYPED_CODE(Lt); + case Le: TYPED_CODE(Le); + case Gt: TYPED_CODE(Gt); + case Ge: TYPED_CODE(Ge); + default: abort(); + } + visit(curr->left); + visit(curr->right); } void visitSelect(Select *curr) { o << int8_t(ASTNodes::Select); |