diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-05-18 23:25:55 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-05-18 23:25:55 -0700 |
commit | ce03a34d97b1afa3b7abd88d04bbbaffe346f1d9 (patch) | |
tree | 3b355032ee402a595954f703558a7dc84b7a55cf /src/passes/Print.cpp | |
parent | 4a7080b8dc98422b63dc5db3245029d3f689de15 (diff) | |
parent | 50c94e3e9fb6cdf043c7841d73299ee8be5d2cbd (diff) | |
download | binaryen-ce03a34d97b1afa3b7abd88d04bbbaffe346f1d9.tar.gz binaryen-ce03a34d97b1afa3b7abd88d04bbbaffe346f1d9.tar.bz2 binaryen-ce03a34d97b1afa3b7abd88d04bbbaffe346f1d9.zip |
Merge pull request #526 from WebAssembly/spec-test-update
Spec test updates, and many validation fixes
Diffstat (limited to 'src/passes/Print.cpp')
-rw-r--r-- | src/passes/Print.cpp | 200 |
1 files changed, 129 insertions, 71 deletions
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index 121287846..04b1d0edb 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -283,44 +283,55 @@ struct PrintSExpression : public Visitor<PrintSExpression> { } void visitUnary(Unary *curr) { o << '('; - prepareColor(o) << printWasmType(curr->isRelational() ? curr->value->type : curr->type) << '.'; + prepareColor(o); switch (curr->op) { - case Clz: o << "clz"; break; - case Ctz: o << "ctz"; break; - case Popcnt: o << "popcnt"; break; - case EqZ: o << "eqz"; break; - case Neg: o << "neg"; break; - case Abs: o << "abs"; break; - case Ceil: o << "ceil"; break; - case Floor: o << "floor"; break; - case Trunc: o << "trunc"; break; - case Nearest: o << "nearest"; break; - case Sqrt: o << "sqrt"; break; - case ExtendSInt32: o << "extend_s/i32"; break; - case ExtendUInt32: o << "extend_u/i32"; break; - case WrapInt64: o << "wrap/i64"; break; - case TruncSFloat32ToInt32: - case TruncSFloat32ToInt64: o << "trunc_s/f32"; break; - case TruncUFloat32ToInt32: - case TruncUFloat32ToInt64: o << "trunc_u/f32"; break; - case TruncSFloat64ToInt32: - case TruncSFloat64ToInt64: o << "trunc_s/f64"; break; - case TruncUFloat64ToInt32: - case TruncUFloat64ToInt64: o << "trunc_u/f64"; break; - case ReinterpretFloat32: o << "reinterpret/f32"; break; - case ReinterpretFloat64: o << "reinterpret/f64"; break; - case ConvertUInt32ToFloat32: - case ConvertUInt32ToFloat64: o << "convert_u/i32"; break; - case ConvertSInt32ToFloat32: - case ConvertSInt32ToFloat64: o << "convert_s/i32"; break; - case ConvertUInt64ToFloat32: - case ConvertUInt64ToFloat64: o << "convert_u/i64"; break; - case ConvertSInt64ToFloat32: - case ConvertSInt64ToFloat64: o << "convert_s/i64"; break; - case PromoteFloat32: o << "promote/f32"; break; - case DemoteFloat64: o << "demote/f64"; break; - case ReinterpretInt32: o << "reinterpret/i32"; break; - case ReinterpretInt64: o << "reinterpret/i64"; break; + case ClzInt32: o << "i32.clz"; break; + case CtzInt32: o << "i32.ctz"; break; + case PopcntInt32: o << "i32.popcnt"; break; + case EqZInt32: o << "i32.eqz"; break; + case ClzInt64: o << "i64.clz"; break; + case CtzInt64: o << "i64.ctz"; break; + case PopcntInt64: o << "i64.popcnt"; break; + case EqZInt64: o << "i64.eqz"; break; + case NegFloat32: o << "f32.neg"; break; + case AbsFloat32: o << "f32.abs"; break; + case CeilFloat32: o << "f32.ceil"; break; + case FloorFloat32: o << "f32.floor"; break; + case TruncFloat32: o << "f32.trunc"; break; + case NearestFloat32: o << "f32.nearest"; break; + case SqrtFloat32: o << "f32.sqrt"; break; + case NegFloat64: o << "f64.neg"; break; + case AbsFloat64: o << "f64.abs"; break; + case CeilFloat64: o << "f64.ceil"; break; + case FloorFloat64: o << "f64.floor"; break; + case TruncFloat64: o << "f64.trunc"; break; + case NearestFloat64: o << "f64.nearest"; break; + case SqrtFloat64: o << "f64.sqrt"; break; + case ExtendSInt32: o << "i64.extend_s/i32"; break; + case ExtendUInt32: o << "i64.extend_u/i32"; break; + case WrapInt64: o << "i32.wrap/i64"; break; + case TruncSFloat32ToInt32: o << "i32.trunc_s/f32"; break; + case TruncSFloat32ToInt64: o << "i64.trunc_s/f32"; break; + case TruncUFloat32ToInt32: o << "i32.trunc_u/f32"; break; + case TruncUFloat32ToInt64: o << "i64.trunc_u/f32"; break; + case TruncSFloat64ToInt32: o << "i32.trunc_s/f64"; break; + case TruncSFloat64ToInt64: o << "i64.trunc_s/f64"; break; + case TruncUFloat64ToInt32: o << "i32.trunc_u/f64"; break; + case TruncUFloat64ToInt64: o << "i64.trunc_u/f64"; break; + case ReinterpretFloat32: o << "i32.reinterpret/f32"; break; + case ReinterpretFloat64: o << "i64.reinterpret/f64"; break; + case ConvertUInt32ToFloat32: o << "f32.convert_u/i32"; break; + case ConvertUInt32ToFloat64: o << "f64.convert_u/i32"; break; + case ConvertSInt32ToFloat32: o << "f32.convert_s/i32"; break; + case ConvertSInt32ToFloat64: o << "f64.convert_s/i32"; break; + case ConvertUInt64ToFloat32: o << "f32.convert_u/i64"; break; + case ConvertUInt64ToFloat64: o << "f64.convert_u/i64"; break; + case ConvertSInt64ToFloat32: o << "f32.convert_s/i64"; break; + case ConvertSInt64ToFloat64: o << "f64.convert_s/i64"; break; + case PromoteFloat32: o << "f64.promote/f32"; break; + case DemoteFloat64: o << "f32.demote/f64"; break; + case ReinterpretInt32: o << "f32.reinterpret/i32"; break; + case ReinterpretInt64: o << "f64.reinterpret/i64"; break; default: abort(); } incIndent(); @@ -329,41 +340,88 @@ struct PrintSExpression : public Visitor<PrintSExpression> { } void visitBinary(Binary *curr) { o << '('; - prepareColor(o) << printWasmType(curr->isRelational() ? curr->left->type : curr->type) << '.'; + prepareColor(o); switch (curr->op) { - case Add: o << "add"; break; - case Sub: o << "sub"; break; - case Mul: o << "mul"; break; - case DivS: o << "div_s"; break; - case DivU: o << "div_u"; break; - case RemS: o << "rem_s"; break; - case RemU: o << "rem_u"; break; - case And: o << "and"; break; - case Or: o << "or"; break; - case Xor: o << "xor"; break; - case Shl: o << "shl"; break; - case ShrU: o << "shr_u"; break; - case ShrS: o << "shr_s"; break; - case RotL: o << "rotl"; break; - case RotR: o << "rotr"; break; - case Div: o << "div"; break; - case CopySign: o << "copysign"; break; - case Min: o << "min"; break; - case Max: o << "max"; break; - case Eq: o << "eq"; break; - case Ne: o << "ne"; break; - case LtS: o << "lt_s"; break; - case LtU: o << "lt_u"; break; - case LeS: o << "le_s"; break; - case LeU: o << "le_u"; break; - case GtS: o << "gt_s"; break; - case GtU: o << "gt_u"; break; - case GeS: o << "ge_s"; break; - case GeU: o << "ge_u"; break; - case Lt: o << "lt"; break; - case Le: o << "le"; break; - case Gt: o << "gt"; break; - case Ge: o << "ge"; break; + case AddInt32: o << "i32.add"; break; + case SubInt32: o << "i32.sub"; break; + case MulInt32: o << "i32.mul"; break; + case DivSInt32: o << "i32.div_s"; break; + case DivUInt32: o << "i32.div_u"; break; + case RemSInt32: o << "i32.rem_s"; break; + case RemUInt32: o << "i32.rem_u"; break; + case AndInt32: o << "i32.and"; break; + case OrInt32: o << "i32.or"; break; + case XorInt32: o << "i32.xor"; break; + case ShlInt32: o << "i32.shl"; break; + case ShrUInt32: o << "i32.shr_u"; break; + case ShrSInt32: o << "i32.shr_s"; break; + case RotLInt32: o << "i32.rotl"; break; + case RotRInt32: o << "i32.rotr"; break; + case EqInt32: o << "i32.eq"; break; + case NeInt32: o << "i32.ne"; break; + case LtSInt32: o << "i32.lt_s"; break; + case LtUInt32: o << "i32.lt_u"; break; + case LeSInt32: o << "i32.le_s"; break; + case LeUInt32: o << "i32.le_u"; break; + case GtSInt32: o << "i32.gt_s"; break; + case GtUInt32: o << "i32.gt_u"; break; + case GeSInt32: o << "i32.ge_s"; break; + case GeUInt32: o << "i32.ge_u"; break; + + case AddInt64: o << "i64.add"; break; + case SubInt64: o << "i64.sub"; break; + case MulInt64: o << "i64.mul"; break; + case DivSInt64: o << "i64.div_s"; break; + case DivUInt64: o << "i64.div_u"; break; + case RemSInt64: o << "i64.rem_s"; break; + case RemUInt64: o << "i64.rem_u"; break; + case AndInt64: o << "i64.and"; break; + case OrInt64: o << "i64.or"; break; + case XorInt64: o << "i64.xor"; break; + case ShlInt64: o << "i64.shl"; break; + case ShrUInt64: o << "i64.shr_u"; break; + case ShrSInt64: o << "i64.shr_s"; break; + case RotLInt64: o << "i64.rotl"; break; + case RotRInt64: o << "i64.rotr"; break; + case EqInt64: o << "i64.eq"; break; + case NeInt64: o << "i64.ne"; break; + case LtSInt64: o << "i64.lt_s"; break; + case LtUInt64: o << "i64.lt_u"; break; + case LeSInt64: o << "i64.le_s"; break; + case LeUInt64: o << "i64.le_u"; break; + case GtSInt64: o << "i64.gt_s"; break; + case GtUInt64: o << "i64.gt_u"; break; + case GeSInt64: o << "i64.ge_s"; break; + case GeUInt64: o << "i64.ge_u"; break; + + case AddFloat32: o << "f32.add"; break; + case SubFloat32: o << "f32.sub"; break; + case MulFloat32: o << "f32.mul"; break; + case DivFloat32: o << "f32.div"; break; + case CopySignFloat32: o << "f32.copysign"; break; + case MinFloat32: o << "f32.min"; break; + case MaxFloat32: o << "f32.max"; break; + case EqFloat32: o << "f32.eq"; break; + case NeFloat32: o << "f32.ne"; break; + case LtFloat32: o << "f32.lt"; break; + case LeFloat32: o << "f32.le"; break; + case GtFloat32: o << "f32.gt"; break; + case GeFloat32: o << "f32.ge"; break; + + case AddFloat64: o << "f64.add"; break; + case SubFloat64: o << "f64.sub"; break; + case MulFloat64: o << "f64.mul"; break; + case DivFloat64: o << "f64.div"; break; + case CopySignFloat64: o << "f64.copysign"; break; + case MinFloat64: o << "f64.min"; break; + case MaxFloat64: o << "f64.max"; break; + case EqFloat64: o << "f64.eq"; break; + case NeFloat64: o << "f64.ne"; break; + case LtFloat64: o << "f64.lt"; break; + case LeFloat64: o << "f64.le"; break; + case GtFloat64: o << "f64.gt"; break; + case GeFloat64: o << "f64.ge"; break; + default: abort(); } restoreNormalColor(o); |