diff --git a/src/compiler.ts b/src/compiler.ts index 18f75250..940cf2d6 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -1954,6 +1954,7 @@ export class Compiler extends DiagnosticEmitter { condExpr = module.createI32(1); alwaysTrue = true; } + innerFlow.inheritNonnullIf(condExpr); var incrExpr = statement.incrementor ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE) : 0; @@ -2010,7 +2011,6 @@ export class Compiler extends DiagnosticEmitter { var ifTrue = statement.ifTrue; var ifFalse = statement.ifFalse; var outerFlow = this.currentFlow; - var actualFunction = outerFlow.actualFunction; // The condition doesn't initiate a branch yet var condExpr = this.makeIsTrueish( @@ -2041,6 +2041,7 @@ export class Compiler extends DiagnosticEmitter { // Each arm initiates a branch var ifTrueFlow = outerFlow.fork(); this.currentFlow = ifTrueFlow; + ifTrueFlow.inheritNonnullIf(condExpr); var ifTrueExpr = this.compileStatement(ifTrue); ifTrueFlow.freeScopedLocals(); this.currentFlow = outerFlow; @@ -2049,12 +2050,16 @@ export class Compiler extends DiagnosticEmitter { if (ifFalse) { let ifFalseFlow = outerFlow.fork(); this.currentFlow = ifFalseFlow; + ifFalseFlow.inheritNonnullIfNot(condExpr); ifFalseExpr = this.compileStatement(ifFalse); ifFalseFlow.freeScopedLocals(); this.currentFlow = outerFlow; outerFlow.inheritMutual(ifTrueFlow, ifFalseFlow); } else { outerFlow.inheritConditional(ifTrueFlow); + if (ifTrueFlow.isAny(FlowFlags.ANY_TERMINATING)) { + outerFlow.inheritNonnullIfNot(condExpr); + } } return module.createIf(condExpr, ifTrueExpr, ifFalseExpr); } @@ -2431,6 +2436,7 @@ export class Compiler extends DiagnosticEmitter { var continueLabel = "continue|" + label; innerFlow.continueLabel = continueLabel; + innerFlow.inheritNonnullIf(condExpr); var body = this.compileStatement(statement.statement); var alwaysTrue = false; // TODO var terminated = innerFlow.isAny(FlowFlags.ANY_TERMINATING); @@ -2705,10 +2711,17 @@ export class Compiler extends DiagnosticEmitter { if (!fromType.isAssignableTo(toType)) { if (conversionKind == ConversionKind.IMPLICIT) { - this.error( - DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast, - reportNode.range, fromType.toString(), toType.toString() - ); // recoverable + if (fromType.nonNullableType == toType) { + this.error( + DiagnosticCode.Object_is_possibly_null, + reportNode.range + ); // recoverable + } else { + this.error( + DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast, + reportNode.range, fromType.toString(), toType.toString() + ); // recoverable + } } } @@ -4743,10 +4756,19 @@ export class Compiler extends DiagnosticEmitter { leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE); leftType = this.currentType; rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE); - rightType = this.currentType; + rightType = leftType; + + // simplify if only interested in true or false + if (contextualType == Type.bool || contextualType == Type.void) { + this.currentType = Type.bool; + expr = module.createIf( + this.makeIsTrueish(leftExpr, leftType), + this.makeIsTrueish(rightExpr, rightType), + module.createI32(0) + ); // simplify if cloning left without side effects is possible - if (expr = module.cloneExpression(leftExpr, true, 0)) { + } else if (expr = module.cloneExpression(leftExpr, true, 0)) { expr = module.createIf( this.makeIsTrueish(leftExpr, this.currentType), rightExpr, @@ -4778,11 +4800,20 @@ export class Compiler extends DiagnosticEmitter { leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE); leftType = this.currentType; rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE); - rightType = this.currentType; + rightType = leftType; + + // simplify if only interested in true or false + if (contextualType == Type.bool || contextualType == Type.void) { + this.currentType = Type.bool; + expr = module.createIf( + this.makeIsTrueish(leftExpr, leftType), + module.createI32(1), + this.makeIsTrueish(rightExpr, rightType) + ); // simplify if cloning left without side effects is possible - if (expr = this.module.cloneExpression(leftExpr, true, 0)) { - expr = this.module.createIf( + } else if (expr = module.cloneExpression(leftExpr, true, 0)) { + expr = module.createIf( this.makeIsTrueish(leftExpr, this.currentType), expr, rightExpr @@ -4815,7 +4846,11 @@ export class Compiler extends DiagnosticEmitter { } } return compound - ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void) + ? this.compileAssignmentWithValue( + left, + expr, + contextualType != Type.void + ) : expr; } @@ -4833,6 +4868,7 @@ export class Compiler extends DiagnosticEmitter { } else { argumentExpressions = [ value ]; // annotated type might differ -> recompile } + this.currentType = operatorInstance.signature.returnType; return this.compileCallDirect( operatorInstance, argumentExpressions, @@ -4857,13 +4893,13 @@ export class Compiler extends DiagnosticEmitter { } else { argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile } - var ret = this.compileCallDirect( + this.currentType = operatorInstance.signature.returnType; + return this.compileCallDirect( operatorInstance, argumentExpressions, reportNode, thisArg ); - return ret; } compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef { @@ -4977,11 +5013,12 @@ export class Compiler extends DiagnosticEmitter { compileAssignmentWithValue( expression: Expression, valueExpr: ExpressionRef, - tee: bool = false + tee: bool ): ExpressionRef { var module = this.module; var flow = this.currentFlow; var target = this.resolver.resolveExpression(expression, flow); // reports + var possiblyNull = this.currentType.is(TypeFlags.NULLABLE) && !flow.isNonnull(valueExpr); if (!target) return module.createUnreachable(); switch (target.kind) { @@ -4994,7 +5031,7 @@ export class Compiler extends DiagnosticEmitter { this.currentType = tee ? (target).type : Type.void; return module.createUnreachable(); } - return this.makeLocalAssignment(target, valueExpr, tee); + return this.makeLocalAssignment(target, valueExpr, tee, possiblyNull); } case ElementKind.GLOBAL: { if (!this.compileGlobal(target)) return module.createUnreachable(); @@ -5177,17 +5214,23 @@ export class Compiler extends DiagnosticEmitter { return module.createUnreachable(); } - makeLocalAssignment(local: Local, valueExpr: ExpressionRef, tee: bool): ExpressionRef { + makeLocalAssignment( + local: Local, + valueExpr: ExpressionRef, + tee: bool, + possiblyNull: bool + ): ExpressionRef { // TBD: use REPLACE macro to keep track of managed refcounts? or can the compiler evaluate // this statically in closed contexts like functions in order to safe the extra work? var type = local.type; assert(type != Type.void); + var flow = this.currentFlow; var localIndex = local.index; if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) { - let flow = this.currentFlow; if (!flow.canOverflow(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.WRAPPED); else flow.unsetLocalFlag(localIndex, LocalFlags.WRAPPED); } + if (possiblyNull) flow.unsetLocalFlag(localIndex, LocalFlags.NONNULL); if (tee) { this.currentType = type; return this.module.createTeeLocal(localIndex, valueExpr); @@ -6633,6 +6676,9 @@ export class Compiler extends DiagnosticEmitter { } let localIndex = (target).index; assert(localIndex >= 0); + if (localType.is(TypeFlags.NULLABLE) && flow.isLocalFlag(localIndex, LocalFlags.NONNULL, false)) { + localType = localType.nonNullableType; + } this.currentType = localType; return this.module.createGetLocal(localIndex, localType.toNativeType()); } @@ -7489,23 +7535,21 @@ export class Compiler extends DiagnosticEmitter { // shortcut if compiling the getter already failed if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue; - var currentType = this.currentType; - // if the value isn't dropped, a temp. local is required to remember the original value var tempLocal: Local | null = null; if (contextualType != Type.void) { - tempLocal = flow.getTempLocal(currentType, false); + tempLocal = flow.getTempLocal(this.currentType, false); getValue = module.createTeeLocal( tempLocal.index, getValue ); } - var calcValue: ExpressionRef; + var expr: ExpressionRef; switch (expression.operator) { case Token.PLUS_PLUS: { - switch (currentType.kind) { + switch (this.currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.I32: @@ -7513,7 +7557,7 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - calcValue = module.createBinary( + expr = module.createBinary( BinaryOp.AddI32, getValue, module.createI32(1) @@ -7527,7 +7571,7 @@ export class Compiler extends DiagnosticEmitter { if (classReference) { let overload = classReference.lookupOverload(OperatorKind.POSTFIX_INC); if (overload) { - calcValue = this.compileUnaryOverload(overload, expression.operand, getValue, expression); + expr = this.compileUnaryOverload(overload, expression.operand, getValue, expression); break; } } @@ -7540,18 +7584,18 @@ export class Compiler extends DiagnosticEmitter { } case TypeKind.ISIZE: { let options = this.options; - calcValue = module.createBinary( + expr = module.createBinary( options.isWasm64 ? BinaryOp.AddI64 : BinaryOp.AddI32, getValue, - currentType.toNativeOne(module) + this.currentType.toNativeOne(module) ); break; } case TypeKind.I64: case TypeKind.U64: { - calcValue = module.createBinary( + expr = module.createBinary( BinaryOp.AddI64, getValue, module.createI64(1) @@ -7559,7 +7603,7 @@ export class Compiler extends DiagnosticEmitter { break; } case TypeKind.F32: { - calcValue = module.createBinary( + expr = module.createBinary( BinaryOp.AddF32, getValue, module.createF32(1) @@ -7567,7 +7611,7 @@ export class Compiler extends DiagnosticEmitter { break; } case TypeKind.F64: { - calcValue = module.createBinary( + expr = module.createBinary( BinaryOp.AddF64, getValue, module.createF64(1) @@ -7582,7 +7626,7 @@ export class Compiler extends DiagnosticEmitter { break; } case Token.MINUS_MINUS: { - switch (currentType.kind) { + switch (this.currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.I32: @@ -7590,7 +7634,7 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - calcValue = module.createBinary( + expr = module.createBinary( BinaryOp.SubI32, getValue, module.createI32(1) @@ -7604,7 +7648,7 @@ export class Compiler extends DiagnosticEmitter { if (classReference) { let overload = classReference.lookupOverload(OperatorKind.POSTFIX_DEC); if (overload) { - calcValue = this.compileUnaryOverload(overload, expression.operand, getValue, expression); + expr = this.compileUnaryOverload(overload, expression.operand, getValue, expression); break; } } @@ -7617,18 +7661,18 @@ export class Compiler extends DiagnosticEmitter { } case TypeKind.ISIZE: { let options = this.options; - calcValue = module.createBinary( + expr = module.createBinary( options.isWasm64 ? BinaryOp.SubI64 : BinaryOp.SubI32, getValue, - currentType.toNativeOne(module) + this.currentType.toNativeOne(module) ); break; } case TypeKind.I64: case TypeKind.U64: { - calcValue = module.createBinary( + expr = module.createBinary( BinaryOp.SubI64, getValue, module.createI64(1) @@ -7636,7 +7680,7 @@ export class Compiler extends DiagnosticEmitter { break; } case TypeKind.F32: { - calcValue = module.createBinary( + expr = module.createBinary( BinaryOp.SubF32, getValue, module.createF32(1) @@ -7644,7 +7688,7 @@ export class Compiler extends DiagnosticEmitter { break; } case TypeKind.F64: { - calcValue = module.createBinary( + expr = module.createBinary( BinaryOp.SubF64, getValue, module.createF64(1) @@ -7667,15 +7711,17 @@ export class Compiler extends DiagnosticEmitter { // simplify if dropped anyway if (!tempLocal) { this.currentType = Type.void; - return this.compileAssignmentWithValue(expression.operand, - calcValue, + return this.compileAssignmentWithValue( + expression.operand, + expr, false ); } // otherwise use the temp. local for the intermediate value (always possibly overflows) - var setValue = this.compileAssignmentWithValue(expression.operand, - calcValue, // also tees getValue to tempLocal + var setValue = this.compileAssignmentWithValue( + expression.operand, + expr, // also tees getValue to tempLocal false ); @@ -8058,7 +8104,11 @@ export class Compiler extends DiagnosticEmitter { } } return compound - ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void) + ? this.compileAssignmentWithValue( + expression.operand, + expr, + contextualType != Type.void + ) : expr; } @@ -8182,11 +8232,11 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.I8: case TypeKind.I16: case TypeKind.U8: - case TypeKind.U16: - case TypeKind.BOOL: { + case TypeKind.U16: { expr = this.ensureSmallIntegerWrap(expr, type); // fall-through } + case TypeKind.BOOL: // not a mask, just != 0 case TypeKind.I32: case TypeKind.U32: { return expr; diff --git a/src/diagnosticMessages.generated.ts b/src/diagnosticMessages.generated.ts index d678ac49..933c3456 100644 --- a/src/diagnosticMessages.generated.ts +++ b/src/diagnosticMessages.generated.ts @@ -122,6 +122,7 @@ export enum DiagnosticCode { The_0_operator_cannot_be_applied_to_type_1 = 2469, In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474, Export_declaration_conflicts_with_exported_declaration_of_0 = 2484, + Object_is_possibly_null = 2531, Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540, The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541, Index_signature_in_type_0_only_permits_reading = 2542, @@ -259,6 +260,7 @@ export function diagnosticCodeToString(code: DiagnosticCode): string { case 2469: return "The '{0}' operator cannot be applied to type '{1}'."; case 2474: return "In 'const' enum declarations member initializer must be constant expression."; case 2484: return "Export declaration conflicts with exported declaration of '{0}'."; + case 2531: return "Object is possibly 'null'."; case 2540: return "Cannot assign to '{0}' because it is a constant or a read-only property."; case 2541: return "The target of an assignment must be a variable or a property access."; case 2542: return "Index signature in type '{0}' only permits reading."; diff --git a/src/diagnosticMessages.json b/src/diagnosticMessages.json index 6516c953..86731c5b 100644 --- a/src/diagnosticMessages.json +++ b/src/diagnosticMessages.json @@ -116,6 +116,7 @@ "The '{0}' operator cannot be applied to type '{1}'.": 2469, "In 'const' enum declarations member initializer must be constant expression.": 2474, "Export declaration conflicts with exported declaration of '{0}'.": 2484, + "Object is possibly 'null'.": 2531, "Cannot assign to '{0}' because it is a constant or a read-only property.": 2540, "The target of an assignment must be a variable or a property access.": 2541, "Index signature in type '{0}' only permits reading.": 2542, diff --git a/src/flow.ts b/src/flow.ts index 7bbe99a1..8c090752 100644 --- a/src/flow.ts +++ b/src/flow.ts @@ -47,7 +47,11 @@ import { getIfFalse, getSelectThen, getSelectElse, - getCallTarget + getCallTarget, + getSetLocalIndex, + getIfCondition, + getConstValueI64High, + getUnaryValue } from "./module"; import { @@ -136,8 +140,8 @@ export enum LocalFlags { /** Local is properly wrapped. Relevant for small integers. */ WRAPPED = 1 << 0, - /** Local is possibly null. */ - MAYBENULL = 1 << 1, + /** Local is non-null. */ + NONNULL = 1 << 1, /** Local is read from. */ READFROM = 1 << 2, /** Local is written to. */ @@ -149,7 +153,7 @@ export enum LocalFlags { CONDITIONALLY_WRITTENTO = 1 << 5, /** Any categorical flag. */ - ANY_CATEGORICAL = WRAPPED | MAYBENULL | READFROM | WRITTENTO, + ANY_CATEGORICAL = WRAPPED | NONNULL | READFROM | WRITTENTO, /** Any conditional flag. */ ANY_CONDITIONAL = CONDITIONALLY_READFROM | CONDITIONALLY_WRITTENTO } @@ -578,6 +582,184 @@ export class Flow { this.localFlags = combinedFlags; } + /** Checks if an expression is known to be non-null. */ + isNonnull(expr: ExpressionRef): bool { + switch (getExpressionId(expr)) { + case ExpressionId.SetLocal: { + if (!isTeeLocal(expr)) break; + let local = this.parentFunction.localsByIndex[getSetLocalIndex(expr)]; + return !local.type.is(TypeFlags.NULLABLE) || this.isLocalFlag(local.index, LocalFlags.NONNULL, false); + } + case ExpressionId.GetLocal: { + let local = this.parentFunction.localsByIndex[getGetLocalIndex(expr)]; + return !local.type.is(TypeFlags.NULLABLE) || this.isLocalFlag(local.index, LocalFlags.NONNULL, false); + } + } + return false; + } + + /** Sets local states where this branch is only taken when `expr` is true-ish. */ + inheritNonnullIf(expr: ExpressionRef): void { + switch (getExpressionId(expr)) { + case ExpressionId.SetLocal: { + if (!isTeeLocal(expr)) break; + let local = this.parentFunction.localsByIndex[getSetLocalIndex(expr)]; + this.setLocalFlag(local.index, LocalFlags.NONNULL); + break; + } + case ExpressionId.GetLocal: { // local must be true-ish/non-null + let local = this.parentFunction.localsByIndex[getGetLocalIndex(expr)]; + this.setLocalFlag(local.index, LocalFlags.NONNULL); + break; + } + case ExpressionId.If: { + let ifFalse = getIfFalse(expr); + if (!ifFalse) break; + if (getExpressionId(ifFalse) == ExpressionId.Const && getExpressionType(ifFalse) == NativeType.I32 && getConstValueI32(ifFalse) == 0) { + // Logical AND: (if (condition ifTrue 0)) + // the only way this can become true is if condition and ifTrue are true + this.inheritNonnullIf(getIfCondition(expr)); + this.inheritNonnullIf(getIfTrue(expr)); + } + break; + } + case ExpressionId.Unary: { + switch (getUnaryOp(expr)) { + case UnaryOp.EqzI32: { + this.inheritNonnullIfNot(getUnaryValue(expr)); // !expr + break; + } + case UnaryOp.EqzI64: { + this.inheritNonnullIfNot(getUnaryValue(expr)); // !expr + break; + } + } + break; + } + case ExpressionId.Binary: { + switch (getBinaryOp(expr)) { + case BinaryOp.EqI32: { + let left = getBinaryLeft(expr); + let right = getBinaryRight(expr); + if (getExpressionId(left) == ExpressionId.Const && getConstValueI32(left) != 0) { + this.inheritNonnullIf(right); // TRUE == right + } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI32(right) != 0) { + this.inheritNonnullIf(left); // left == TRUE + } + break; + } + case BinaryOp.EqI64: { + let left = getBinaryLeft(expr); + let right = getBinaryRight(expr); + if (getExpressionId(left) == ExpressionId.Const && (getConstValueI64Low(left) != 0 || getConstValueI64High(left) != 0)) { + this.inheritNonnullIf(right); // TRUE == right + } else if (getExpressionId(right) == ExpressionId.Const && (getConstValueI64Low(right) != 0 && getConstValueI64High(right) != 0)) { + this.inheritNonnullIf(left); // left == TRUE + } + break; + } + case BinaryOp.NeI32: { + let left = getBinaryLeft(expr); + let right = getBinaryRight(expr); + if (getExpressionId(left) == ExpressionId.Const && getConstValueI32(left) == 0) { + this.inheritNonnullIf(right); // FALSE != right + } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI32(right) == 0) { + this.inheritNonnullIf(left); // left != FALSE + } + break; + } + case BinaryOp.NeI64: { + let left = getBinaryLeft(expr); + let right = getBinaryRight(expr); + if (getExpressionId(left) == ExpressionId.Const && getConstValueI64Low(left) == 0 && getConstValueI64High(left) == 0) { + this.inheritNonnullIf(right); // FALSE != right + } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI64Low(right) == 0 && getConstValueI64High(right) == 0) { + this.inheritNonnullIf(left); // left != FALSE + } + break; + } + } + break; + } + } + } + + /** Sets local states where this branch is only taken when `expr` is false-ish. */ + inheritNonnullIfNot(expr: ExpressionRef): void { + switch (getExpressionId(expr)) { + case ExpressionId.Unary: { + switch (getUnaryOp(expr)) { + case UnaryOp.EqzI32: { + this.inheritNonnullIf(getUnaryValue(expr)); // !expr + break; + } + case UnaryOp.EqzI64: { + this.inheritNonnullIf(getUnaryValue(expr)); // !expr + break; + } + } + break; + } + case ExpressionId.If: { + let ifTrue = getIfTrue(expr); + if (getExpressionId(ifTrue) == ExpressionId.Const && getExpressionType(ifTrue) == NativeType.I32 && getConstValueI32(ifTrue) != 0) { + let ifFalse = getIfFalse(expr); + if (!ifFalse) break; + // Logical OR: (if (condition 1 ifFalse)) + // the only way this can become false is if condition and ifFalse are false + this.inheritNonnullIfNot(getIfCondition(expr)); + this.inheritNonnullIfNot(getIfFalse(expr)); + } + break; + } + case ExpressionId.Binary: { + switch (getBinaryOp(expr)) { + case BinaryOp.EqI32: { + let left = getBinaryLeft(expr); + let right = getBinaryRight(expr); + if (getExpressionId(left) == ExpressionId.Const && getConstValueI32(left) == 0) { + this.inheritNonnullIf(right); // FALSE == right + } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI32(right) == 0) { + this.inheritNonnullIf(left); // left == FALSE + } + break; + } + case BinaryOp.EqI64: { + let left = getBinaryLeft(expr); + let right = getBinaryRight(expr); + if (getExpressionId(left) == ExpressionId.Const && getConstValueI64Low(left) == 0 && getConstValueI64High(left) == 0) { + this.inheritNonnullIf(right); // FALSE == right + } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI64Low(right) == 0 && getConstValueI64High(right) == 0) { + this.inheritNonnullIf(left); // left == FALSE + } + break; + } + case BinaryOp.NeI32: { + let left = getBinaryLeft(expr); + let right = getBinaryRight(expr); + if (getExpressionId(left) == ExpressionId.Const && getConstValueI32(left) != 0) { + this.inheritNonnullIf(right); // TRUE != right + } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI32(right) != 0) { + this.inheritNonnullIf(left); // left != TRUE + } + break; + } + case BinaryOp.NeI64: { + let left = getBinaryLeft(expr); + let right = getBinaryRight(expr); + if (getExpressionId(left) == ExpressionId.Const && (getConstValueI64Low(left) != 0 || getConstValueI64High(left) != 0)) { + this.inheritNonnullIf(right); // TRUE != right + } else if (getExpressionId(right) == ExpressionId.Const && (getConstValueI64Low(right) != 0 || getConstValueI64High(right) != 0)) { + this.inheritNonnullIf(left); // left != TRUE + } + break; + } + } + break; + } + } + } + /** * Tests if an expression can possibly overflow in the context of this flow. Assumes that the * expression might already have overflown and returns `false` only if the operation neglects diff --git a/src/types.ts b/src/types.ts index 35551e1d..2276f22a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -219,9 +219,7 @@ export class Type { var targetFunction: Signature | null; if (this.is(TypeFlags.REFERENCE)) { if (target.is(TypeFlags.REFERENCE)) { - // FIXME: turned out resolveType didn't handle nullability properly, and fixing it there - // leads to this check failing all over the place due to not yet implemented null states. - // if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) { + if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) { if (currentClass = this.classReference) { if (targetClass = target.classReference) { return currentClass.isAssignableTo(targetClass); @@ -231,7 +229,7 @@ export class Type { return currentFunction.isAssignableTo(targetFunction); } } - // } + } } } else if (!target.is(TypeFlags.REFERENCE)) { if (this.is(TypeFlags.INTEGER)) { diff --git a/std/assembly/string.ts b/std/assembly/string.ts index 653e3471..98c8898a 100644 --- a/std/assembly/string.ts +++ b/std/assembly/string.ts @@ -102,12 +102,12 @@ import { ArrayBufferView } from "./arraybuffer"; } @operator.prefix("!") - private static __not(str: String): bool { + private static __not(str: String | null): bool { return str === null || !str.length; } @operator("!=") - private static __ne(left: String, right: String): bool { + private static __ne(left: String | null, right: String | null): bool { return !this.__eq(left, right); } @@ -391,7 +391,7 @@ import { ArrayBufferView } from "./arraybuffer"; } var result = NEWARRAY(0); var end = 0, start = 0, i = 0; - while ((end = this.indexOf(separator!, start)) != -1) { + while ((end = this.indexOf(separator, start)) != -1) { let len = end - start; if (len > 0) { let out = allocate(len << 1); diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index cc70e25a..89a908dd 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -15,55 +15,42 @@ (local $2 i64) (local $3 i32) (local $4 i32) - (local $5 i32) local.get $0 i64.reinterpret_f64 local.tee $2 i32.wrap_i64 - local.set $3 - block (result i32) - block (result i32) - block (result i32) - local.get $2 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.tee $4 - i32.const 2147483647 - i32.and - local.tee $5 - i32.const 2146435072 - i32.gt_s - local.tee $1 - i32.eqz - if - local.get $5 - i32.const 2146435072 - i32.eq - local.tee $1 - if - local.get $3 - i32.const 0 - i32.ne - local.set $1 - end - end - local.get $1 - i32.eqz - end - if - i32.const 0 - local.set $1 - end - local.get $1 - i32.eqz - end - if - i32.const 0 - local.set $1 - end + local.set $1 + i32.const 1 + i32.const 0 + local.get $2 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.tee $3 + i32.const 2147483647 + i32.and + local.tee $4 + i32.const 2146435072 + i32.gt_s + if (result i32) + i32.const 1 + else local.get $1 + i32.const 0 + i32.ne + i32.const 0 + local.get $4 + i32.const 2146435072 + i32.eq + select end + select + if (result i32) + i32.const 1 + else + i32.const 0 + end + local.tee $1 if local.get $0 f64.const 1 @@ -79,25 +66,23 @@ (local $4 i32) local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 i32.const -2147483648 i32.and local.set $4 - local.get $3 + local.get $2 i32.const 23 i32.shr_u i32.const 255 i32.and - local.tee $2 + local.tee $3 i32.const 255 i32.eq - local.tee $1 - i32.eqz - if + if (result i32) + i32.const 1 + else i32.const 0 - local.set $1 end - local.get $1 if local.get $0 local.get $0 @@ -105,7 +90,7 @@ return end block $folding-inner0 - local.get $3 + local.get $2 i32.const 1 i32.shl local.tee $1 @@ -119,29 +104,29 @@ local.get $0 return end - local.get $2 + local.get $3 if (result i32) - local.get $3 + local.get $2 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $3 - i32.const 1 local.get $2 + i32.const 1 local.get $3 + local.get $2 i32.const 9 i32.shl i32.clz i32.sub - local.tee $2 + local.tee $3 i32.sub i32.shl end local.set $1 loop $continue|0 - local.get $2 + local.get $3 i32.const 127 i32.gt_s if @@ -162,10 +147,10 @@ i32.const 1 i32.shl local.set $1 - local.get $2 + local.get $3 i32.const 1 i32.sub - local.set $2 + local.set $3 br $continue|0 end end @@ -187,27 +172,27 @@ i32.const 8 i32.shl i32.clz - local.tee $3 + local.tee $1 i32.shl - local.set $1 - local.get $2 + local.set $2 local.get $3 + local.get $1 i32.sub - local.tee $2 + local.tee $1 i32.const 0 i32.gt_s if (result i32) - local.get $1 + local.get $2 i32.const 8388608 i32.sub - local.get $2 + local.get $1 i32.const 23 i32.shl i32.or else - local.get $1 - i32.const 1 local.get $2 + i32.const 1 + local.get $1 i32.sub i32.shr_u end @@ -220,60 +205,30 @@ local.get $0 f32.mul ) - (func $~lib/math/NativeMathf.pow (; 2 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) - (local $1 i32) - (local $2 i32) - block (result i32) - local.get $0 - i32.reinterpret_f32 - local.tee $2 - i32.const 2147483647 - i32.and - i32.const 2139095040 - i32.gt_s - local.tee $1 - i32.eqz - if - i32.const 0 - local.set $1 - end - local.get $1 - end - if - local.get $0 - f32.const 1 - f32.add - return - end - local.get $0 - ) - (func $~lib/math/NativeMath.mod (; 3 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) + (func $~lib/math/NativeMath.mod (; 2 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 i32) - (local $5 i64) + (local $4 i64) local.get $0 i64.reinterpret_f64 - local.tee $1 + local.tee $2 i64.const 63 i64.shr_u - local.set $5 - local.get $1 + local.set $4 + local.get $2 i64.const 52 i64.shr_u i64.const 2047 i64.and - local.tee $2 + local.tee $3 i64.const 2047 i64.eq - local.tee $4 - i32.eqz - if + if (result i32) + i32.const 1 + else i32.const 0 - local.set $4 end - local.get $4 if local.get $0 local.get $0 @@ -281,38 +236,38 @@ return end block $folding-inner0 - local.get $1 + local.get $2 i64.const 1 i64.shl - local.tee $3 + local.tee $1 i64.const 9214364837600034816 i64.le_u if - local.get $3 + local.get $1 i64.const 9214364837600034816 i64.eq br_if $folding-inner0 local.get $0 return end - local.get $2 + local.get $3 i64.eqz if (result i64) - local.get $1 - i64.const 0 local.get $2 - local.get $1 + i64.const 0 + local.get $3 + local.get $2 i64.const 12 i64.shl i64.clz i64.sub - local.tee $2 + local.tee $3 i64.sub i64.const 1 i64.add i64.shl else - local.get $1 + local.get $2 i64.const 4503599627370495 i64.and i64.const 4503599627370496 @@ -320,7 +275,7 @@ end local.set $1 loop $continue|0 - local.get $2 + local.get $3 i64.const 1023 i64.gt_s if @@ -341,10 +296,10 @@ i64.const 1 i64.shl local.set $1 - local.get $2 + local.get $3 i64.const 1 i64.sub - local.set $2 + local.set $3 br $continue|0 end end @@ -366,33 +321,33 @@ i64.const 11 i64.shl i64.clz - local.tee $3 + local.tee $1 i64.shl - local.set $1 - local.get $2 + local.set $2 local.get $3 + local.get $1 i64.sub - local.tee $2 + local.tee $1 i64.const 0 i64.gt_s if (result i64) - local.get $1 + local.get $2 i64.const 4503599627370496 i64.sub - local.get $2 + local.get $1 i64.const 52 i64.shl i64.or else - local.get $1 - i64.const 0 local.get $2 + i64.const 0 + local.get $1 i64.sub i64.const 1 i64.add i64.shr_u end - local.get $5 + local.get $4 i64.const 63 i64.shl i64.or @@ -403,10 +358,10 @@ local.get $0 f64.mul ) - (func $start:binary (; 4 ;) (type $FUNCSIG$v) + (func $start:binary (; 3 ;) (type $FUNCSIG$v) (local $0 i32) - (local $1 i64) - (local $2 f32) + (local $1 f32) + (local $2 i64) (local $3 f64) (local $4 i32) global.get $binary/i @@ -520,39 +475,39 @@ i32.xor global.set $binary/i global.get $binary/I - local.tee $1 + local.tee $2 i64.const 1 i64.rem_s drop - local.get $1 + local.get $2 f64.convert_i64_s call $~lib/math/NativeMath.pow drop global.get $binary/I - local.tee $1 + local.tee $2 i64.const 1 i64.lt_s global.set $binary/b - local.get $1 + local.get $2 i64.const 1 i64.gt_s global.set $binary/b - local.get $1 + local.get $2 i64.const 1 i64.le_s global.set $binary/b - local.get $1 + local.get $2 i64.const 1 i64.ge_s global.set $binary/b - local.get $1 + local.get $2 i64.const 1 i64.eq local.tee $0 global.set $binary/b local.get $0 global.set $binary/b - local.get $1 + local.get $2 i64.const 1 i64.add global.set $binary/I @@ -632,34 +587,43 @@ global.get $binary/f call $~lib/math/NativeMathf.mod drop + block $__inlined_func$~lib/math/NativeMathf.pow + i32.const 1 + i32.const 0 + global.get $binary/f + i32.reinterpret_f32 + i32.const 2147483647 + i32.and + i32.const 2139095040 + i32.gt_s + select + br_if $__inlined_func$~lib/math/NativeMathf.pow + end global.get $binary/f - call $~lib/math/NativeMathf.pow - drop - global.get $binary/f - local.tee $2 + local.tee $1 f32.const 1 f32.lt global.set $binary/b - local.get $2 + local.get $1 f32.const 1 f32.gt global.set $binary/b - local.get $2 + local.get $1 f32.const 1 f32.le global.set $binary/b - local.get $2 + local.get $1 f32.const 1 f32.ge global.set $binary/b - local.get $2 + local.get $1 f32.const 1 f32.eq local.tee $0 global.set $binary/b local.get $0 global.set $binary/b - local.get $2 + local.get $1 f32.const 1 f32.add global.set $binary/f @@ -670,8 +634,23 @@ global.get $binary/f call $~lib/math/NativeMathf.mod global.set $binary/f + i32.const 1 + i32.const 0 global.get $binary/f - call $~lib/math/NativeMathf.pow + local.tee $1 + i32.reinterpret_f32 + i32.const 2147483647 + i32.and + i32.const 2139095040 + i32.gt_s + select + if + local.get $1 + f32.const 1 + f32.add + local.set $1 + end + local.get $1 global.set $binary/f global.get $binary/f f32.const 1 @@ -684,8 +663,23 @@ global.get $binary/f call $~lib/math/NativeMathf.mod global.set $binary/f + i32.const 1 + i32.const 0 global.get $binary/f - call $~lib/math/NativeMathf.pow + local.tee $1 + i32.reinterpret_f32 + i32.const 2147483647 + i32.and + i32.const 2139095040 + i32.gt_s + select + if + local.get $1 + f32.const 1 + f32.add + local.set $1 + end + local.get $1 global.set $binary/f global.get $binary/F call $~lib/math/NativeMath.mod @@ -746,10 +740,10 @@ call $~lib/math/NativeMath.pow global.set $binary/F ) - (func $start (; 5 ;) (type $FUNCSIG$v) + (func $start (; 4 ;) (type $FUNCSIG$v) call $start:binary ) - (func $null (; 6 ;) (type $FUNCSIG$v) + (func $null (; 5 ;) (type $FUNCSIG$v) nop ) ) diff --git a/tests/compiler/binary.untouched.wat b/tests/compiler/binary.untouched.wat index effa386c..899c6070 100644 --- a/tests/compiler/binary.untouched.wat +++ b/tests/compiler/binary.untouched.wat @@ -190,44 +190,39 @@ local.get $7 i32.const 2146435072 i32.gt_s - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $7 i32.const 2146435072 i32.eq - local.tee $9 if (result i32) local.get $4 i32.const 0 i32.ne else - local.get $9 + i32.const 0 end end - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $8 i32.const 2146435072 i32.gt_s end - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $8 i32.const 2146435072 i32.eq - local.tee $9 if (result i32) local.get $6 i32.const 0 i32.ne else - local.get $9 + i32.const 0 end end if @@ -237,7 +232,7 @@ return end i32.const 0 - local.set $10 + local.set $9 local.get $3 i32.const 0 i32.lt_s @@ -247,7 +242,7 @@ i32.ge_s if i32.const 2 - local.set $10 + local.set $9 else local.get $8 i32.const 1072693248 @@ -258,21 +253,21 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 - local.get $11 + local.set $10 + local.get $10 i32.const 20 i32.gt_s - local.set $9 + local.set $11 i32.const 52 i32.const 20 - local.get $9 - select local.get $11 + select + local.get $10 i32.sub local.set $12 local.get $6 local.get $8 - local.get $9 + local.get $11 select local.set $13 local.get $13 @@ -290,7 +285,7 @@ i32.const 1 i32.and i32.sub - local.set $10 + local.set $9 end end end @@ -393,17 +388,15 @@ local.get $7 i32.const 0 i32.eq - local.tee $14 if (result i32) - local.get $14 + i32.const 1 else local.get $7 i32.const 2146435072 i32.eq end - local.tee $14 if (result i32) - local.get $14 + i32.const 1 else local.get $7 i32.const 1072693248 @@ -428,7 +421,7 @@ local.get $7 i32.const 1072693248 i32.sub - local.get $10 + local.get $9 i32.or i32.const 0 i32.eq @@ -442,7 +435,7 @@ f64.div local.set $16 else - local.get $10 + local.get $9 i32.const 1 i32.eq if @@ -462,7 +455,7 @@ i32.const 0 i32.lt_s if - local.get $10 + local.get $9 i32.const 0 i32.eq if @@ -475,7 +468,7 @@ f64.div return end - local.get $10 + local.get $9 i32.const 1 i32.eq if @@ -661,17 +654,17 @@ i32.le_s if i32.const 0 - local.set $11 + local.set $10 else local.get $28 i32.const 767610 i32.lt_s if i32.const 1 - local.set $11 + local.set $10 else i32.const 0 - local.set $11 + local.set $10 local.get $29 i32.const 1 i32.add @@ -695,7 +688,7 @@ local.set $15 f64.const 1.5 f64.const 1 - local.get $11 + local.get $10 select local.set $35 local.get $15 @@ -727,7 +720,7 @@ i32.or i32.const 524288 i32.add - local.get $11 + local.get $10 i32.const 18 i32.shl i32.add @@ -850,7 +843,7 @@ local.set $36 f64.const 1.350039202129749e-08 f64.const 0 - local.get $11 + local.get $10 select local.set $37 f64.const -7.028461650952758e-09 @@ -868,7 +861,7 @@ local.set $24 f64.const 0.5849624872207642 f64.const 0 - local.get $11 + local.get $10 select local.set $39 local.get $36 @@ -1013,7 +1006,7 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 + local.set $10 i32.const 0 local.set $29 local.get $41 @@ -1022,7 +1015,7 @@ if local.get $28 i32.const 1048576 - local.get $11 + local.get $10 i32.const 1 i32.add i32.shr_s @@ -1035,12 +1028,12 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 + local.set $10 f64.const 0 local.set $24 local.get $29 i32.const 1048575 - local.get $11 + local.get $10 i32.shr_s i32.const -1 i32.xor @@ -1056,7 +1049,7 @@ i32.const 1048576 i32.or i32.const 20 - local.get $11 + local.get $10 i32.sub i32.shr_s local.set $29 @@ -1207,10 +1200,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 f32) + (local $8 f32) + (local $9 i32) (local $10 i32) - (local $11 i32) local.get $0 i32.reinterpret_f32 local.set $2 @@ -1240,17 +1232,15 @@ local.get $7 i32.const 0 i32.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i32.const 255 i32.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -1259,21 +1249,21 @@ local.get $0 local.get $1 f32.mul - local.set $9 - local.get $9 - local.get $9 + local.set $8 + local.get $8 + local.get $8 f32.div return end local.get $2 i32.const 1 i32.shl - local.set $10 - local.get $10 + local.set $9 + local.get $9 local.get $7 i32.le_u if - local.get $10 + local.get $9 local.get $7 i32.eq if @@ -1409,13 +1399,13 @@ i32.const 8 i32.shl i32.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i32.sub local.set $4 local.get $2 - local.get $11 + local.get $10 i32.shl local.set $2 local.get $4 @@ -1601,9 +1591,8 @@ local.get $4 i32.const 2139095040 i32.gt_s - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $5 i32.const 2139095040 @@ -1616,7 +1605,7 @@ return end i32.const 0 - local.set $7 + local.set $6 local.get $2 i32.const 0 i32.lt_s @@ -1626,7 +1615,7 @@ i32.ge_s if i32.const 2 - local.set $7 + local.set $6 else local.get $5 i32.const 1065353216 @@ -1637,27 +1626,27 @@ i32.shr_s i32.const 127 i32.sub - local.set $9 - i32.const 23 - local.get $9 - i32.sub - local.set $6 - local.get $5 - local.get $6 - i32.shr_s local.set $8 + i32.const 23 local.get $8 - local.get $6 + i32.sub + local.set $9 + local.get $5 + local.get $9 + i32.shr_s + local.set $7 + local.get $7 + local.get $9 i32.shl local.get $5 i32.eq if i32.const 2 - local.get $8 + local.get $7 i32.const 1 i32.and i32.sub - local.set $7 + local.set $6 end end end @@ -1747,17 +1736,15 @@ local.get $4 i32.const 2139095040 i32.eq - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $4 i32.const 0 i32.eq end - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $4 i32.const 1065353216 @@ -1782,7 +1769,7 @@ local.get $4 i32.const 1065353216 i32.sub - local.get $7 + local.get $6 i32.or i32.const 0 i32.eq @@ -1796,7 +1783,7 @@ f32.div local.set $11 else - local.get $7 + local.get $6 i32.const 1 i32.eq if @@ -1815,7 +1802,7 @@ i32.const 0 i32.lt_s if - local.get $7 + local.get $6 i32.const 0 i32.eq if @@ -1828,7 +1815,7 @@ f32.div return end - local.get $7 + local.get $6 i32.const 1 i32.eq if @@ -1962,27 +1949,27 @@ local.get $4 i32.const 8388607 i32.and - local.set $8 - local.get $8 + local.set $7 + local.get $7 i32.const 1065353216 i32.or local.set $4 - local.get $8 + local.get $7 i32.const 1885297 i32.le_s if i32.const 0 - local.set $9 + local.set $8 else - local.get $8 + local.get $7 i32.const 6140887 i32.lt_s if i32.const 1 - local.set $9 + local.set $8 else i32.const 0 - local.set $9 + local.set $8 local.get $24 i32.const 1 i32.add @@ -1998,7 +1985,7 @@ local.set $10 f32.const 1.5 f32.const 1 - local.get $9 + local.get $8 select local.set $30 local.get $10 @@ -2036,7 +2023,7 @@ local.get $25 i32.const 4194304 i32.add - local.get $9 + local.get $8 i32.const 21 i32.shl i32.add @@ -2160,7 +2147,7 @@ local.set $31 f32.const 1.5632208487659227e-06 f32.const 0 - local.get $9 + local.get $8 select local.set $32 f32.const -1.1736857413779944e-04 @@ -2178,7 +2165,7 @@ local.set $18 f32.const 0.5849609375 f32.const 0 - local.get $9 + local.get $8 select local.set $34 local.get $31 @@ -2236,8 +2223,8 @@ local.set $11 local.get $11 i32.reinterpret_f32 - local.set $8 - local.get $8 + local.set $7 + local.get $7 i32.const 1124073472 i32.gt_s if @@ -2248,7 +2235,7 @@ f32.mul return else - local.get $8 + local.get $7 i32.const 1124073472 i32.eq if @@ -2268,7 +2255,7 @@ return end else - local.get $8 + local.get $7 i32.const 2147483647 i32.and i32.const 1125515264 @@ -2281,7 +2268,7 @@ f32.mul return else - local.get $8 + local.get $7 i32.const -1021968384 i32.eq if @@ -2302,7 +2289,7 @@ end end end - local.get $8 + local.get $7 i32.const 2147483647 i32.and local.set $36 @@ -2311,16 +2298,16 @@ i32.shr_s i32.const 127 i32.sub - local.set $9 + local.set $8 i32.const 0 local.set $24 local.get $36 i32.const 1056964608 i32.gt_s if - local.get $8 + local.get $7 i32.const 8388608 - local.get $9 + local.get $8 i32.const 1 i32.add i32.shr_s @@ -2333,10 +2320,10 @@ i32.shr_s i32.const 127 i32.sub - local.set $9 + local.set $8 local.get $24 i32.const 8388607 - local.get $9 + local.get $8 i32.shr_s i32.const -1 i32.xor @@ -2349,11 +2336,11 @@ i32.const 8388608 i32.or i32.const 23 - local.get $9 + local.get $8 i32.sub i32.shr_s local.set $24 - local.get $8 + local.get $7 i32.const 0 i32.lt_s if @@ -2453,14 +2440,14 @@ local.set $11 local.get $11 i32.reinterpret_f32 - local.set $8 - local.get $8 + local.set $7 + local.get $7 local.get $24 i32.const 23 i32.shl i32.add - local.set $8 - local.get $8 + local.set $7 + local.get $7 i32.const 23 i32.shr_s i32.const 0 @@ -2471,7 +2458,7 @@ call $~lib/math/NativeMathf.scalbn local.set $11 else - local.get $8 + local.get $7 f32.reinterpret_i32 local.set $11 end @@ -2491,10 +2478,9 @@ (local $5 i64) (local $6 i64) (local $7 i64) - (local $8 i32) - (local $9 f64) + (local $8 f64) + (local $9 i64) (local $10 i64) - (local $11 i64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -2524,17 +2510,15 @@ local.get $7 i64.const 0 i64.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i64.const 2047 i64.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -2543,21 +2527,21 @@ local.get $0 local.get $1 f64.mul - local.set $9 - local.get $9 - local.get $9 + local.set $8 + local.get $8 + local.get $8 f64.div return end local.get $2 i64.const 1 i64.shl - local.set $10 - local.get $10 + local.set $9 + local.get $9 local.get $7 i64.le_u if - local.get $10 + local.get $9 local.get $7 i64.eq if @@ -2693,13 +2677,13 @@ i64.const 11 i64.shl i64.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i64.sub local.set $4 local.get $2 - local.get $11 + local.get $10 i64.shl local.set $2 local.get $4 diff --git a/tests/compiler/gc/itcm/trace.optimized.wat b/tests/compiler/gc/itcm/trace.optimized.wat index 49923f72..e8fcbdcd 100644 --- a/tests/compiler/gc/itcm/trace.optimized.wat +++ b/tests/compiler/gc/itcm/trace.optimized.wat @@ -657,7 +657,6 @@ i32.store offset=8 ) (func $~lib/collector/itcm/__ref_link (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) i32.const 648 i32.const 2 local.get $0 @@ -674,12 +673,11 @@ local.get $1 i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.load offset=8 i32.const 3 i32.and i32.eq - local.tee $1 if (result i32) global.get $~lib/collector/itcm/white local.get $0 @@ -690,10 +688,10 @@ i32.and i32.eq else - local.get $1 + i32.const 0 end if - local.get $2 + local.get $1 call $~lib/collector/itcm/ManagedObject#makeGray end ) diff --git a/tests/compiler/gc/itcm/trace.untouched.wat b/tests/compiler/gc/itcm/trace.untouched.wat index 992f483b..c5753e0d 100644 --- a/tests/compiler/gc/itcm/trace.untouched.wat +++ b/tests/compiler/gc/itcm/trace.untouched.wat @@ -839,7 +839,6 @@ global.get $~lib/collector/itcm/white i32.eqz i32.eq - local.tee $2 if (result i32) block $~lib/collector/itcm/refToObj|inlined.3 (result i32) local.get $0 @@ -852,7 +851,7 @@ global.get $~lib/collector/itcm/white i32.eq else - local.get $2 + i32.const 0 end if local.get $3 diff --git a/tests/compiler/logical.untouched.wat b/tests/compiler/logical.untouched.wat index 9e67493c..0433ecb6 100644 --- a/tests/compiler/logical.untouched.wat +++ b/tests/compiler/logical.untouched.wat @@ -13,8 +13,6 @@ (export "memory" (memory $0)) (start $start) (func $start:logical (; 1 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 f64) i32.const 0 if (result i32) unreachable @@ -25,10 +23,12 @@ f64.const 0 f64.const 0 f64.ne - if (result f64) + if (result i32) + unreachable + f64.const 0 unreachable else - f64.const 0 + i32.const 0 end drop i32.const 1 @@ -41,10 +41,12 @@ f64.const 1 f64.const 0 f64.ne - if (result f64) - f64.const 1 + if (result i32) + i32.const 1 else unreachable + f64.const 0 + unreachable end drop i32.const 1 @@ -53,9 +55,8 @@ else i32.const 1 end - local.tee $0 if (result i32) - local.get $0 + i32.const 1 else unreachable end @@ -68,13 +69,14 @@ else f64.const 1 end - local.tee $1 f64.const 0 f64.ne - if (result f64) - local.get $1 + if (result i32) + i32.const 1 else unreachable + f64.const 0 + unreachable end drop i32.const 1 diff --git a/tests/compiler/mandelbrot.optimized.wat b/tests/compiler/mandelbrot.optimized.wat index 9288c535..4e919e73 100644 --- a/tests/compiler/mandelbrot.optimized.wat +++ b/tests/compiler/mandelbrot.optimized.wat @@ -7,6 +7,176 @@ (export "computeLine" (func $../../examples/mandelbrot/assembly/index/computeLine)) (func $~lib/math/NativeMath.log (; 0 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 i32) + (local $2 i64) + (local $3 f64) + (local $4 f64) + (local $5 i32) + (local $6 f64) + local.get $0 + i64.reinterpret_f64 + local.tee $2 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.tee $1 + i32.const 1048576 + i32.lt_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 31 + i32.shr_u + end + if + local.get $2 + i64.const 1 + i64.shl + i64.const 0 + i64.eq + if + f64.const -1 + local.get $0 + local.get $0 + f64.mul + f64.div + return + end + local.get $1 + i32.const 31 + i32.shr_u + if + local.get $0 + local.get $0 + f64.sub + f64.const 0 + f64.div + return + end + i32.const -54 + local.set $5 + local.get $0 + f64.const 18014398509481984 + f64.mul + i64.reinterpret_f64 + local.tee $2 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.set $1 + else + local.get $1 + i32.const 2146435072 + i32.ge_u + if + local.get $0 + return + else + local.get $2 + i64.const 32 + i64.shl + i64.const 0 + i64.eq + i32.const 0 + local.get $1 + i32.const 1072693248 + i32.eq + select + if + f64.const 0 + return + end + end + end + local.get $2 + i64.const 4294967295 + i64.and + local.get $1 + i32.const 614242 + i32.add + local.tee $1 + i32.const 1048575 + i32.and + i32.const 1072079006 + i32.add + i64.extend_i32_u + i64.const 32 + i64.shl + i64.or + f64.reinterpret_i64 + f64.const 1 + f64.sub + local.tee $3 + f64.const 2 + local.get $3 + f64.add + f64.div + local.tee $4 + local.get $4 + f64.mul + local.tee $6 + local.get $6 + f64.mul + local.set $0 + local.get $4 + f64.const 0.5 + local.get $3 + f64.mul + local.get $3 + f64.mul + local.tee $4 + local.get $6 + f64.const 0.6666666666666735 + local.get $0 + f64.const 0.2857142874366239 + local.get $0 + f64.const 0.1818357216161805 + local.get $0 + f64.const 0.14798198605116586 + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + local.get $0 + f64.const 0.3999999999940942 + local.get $0 + f64.const 0.22222198432149784 + local.get $0 + f64.const 0.15313837699209373 + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.add + f64.mul + local.get $1 + i32.const 20 + i32.shr_s + i32.const 1023 + i32.sub + local.get $5 + i32.add + f64.convert_i32_s + local.tee $0 + f64.const 1.9082149292705877e-10 + f64.mul + f64.add + local.get $4 + f64.sub + local.get $3 + f64.add + local.get $0 + f64.const 0.6931471803691238 + f64.mul + f64.add + ) + (func $~lib/math/NativeMath.log2 (; 1 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) + (local $1 f64) (local $2 i32) (local $3 i64) (local $4 f64) @@ -22,15 +192,13 @@ local.tee $2 i32.const 1048576 i32.lt_u - local.tee $1 - i32.eqz - if + if (result i32) + i32.const 1 + else local.get $2 i32.const 31 i32.shr_u - local.set $1 end - local.get $1 if local.get $3 i64.const 1 @@ -71,210 +239,30 @@ local.get $2 i32.const 2146435072 i32.ge_u - if - local.get $0 - return - else - local.get $2 - i32.const 1072693248 - i32.eq - local.tee $1 - if - local.get $3 - i64.const 32 - i64.shl - i64.const 0 - i64.eq - local.set $1 - end - local.get $1 - if - f64.const 0 - return - end - end - end - local.get $3 - i64.const 4294967295 - i64.and - local.get $2 - i32.const 614242 - i32.add - local.tee $1 - i32.const 1048575 - i32.and - i32.const 1072079006 - i32.add - i64.extend_i32_u - i64.const 32 - i64.shl - i64.or - f64.reinterpret_i64 - f64.const 1 - f64.sub - local.tee $4 - f64.const 2 - local.get $4 - f64.add - f64.div - local.tee $5 - local.get $5 - f64.mul - local.tee $7 - local.get $7 - f64.mul - local.set $0 - local.get $5 - f64.const 0.5 - local.get $4 - f64.mul - local.get $4 - f64.mul - local.tee $5 - local.get $7 - f64.const 0.6666666666666735 - local.get $0 - f64.const 0.2857142874366239 - local.get $0 - f64.const 0.1818357216161805 - local.get $0 - f64.const 0.14798198605116586 - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - local.get $0 - f64.const 0.3999999999940942 - local.get $0 - f64.const 0.22222198432149784 - local.get $0 - f64.const 0.15313837699209373 - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.add - f64.mul - local.get $1 - i32.const 20 - i32.shr_s - i32.const 1023 - i32.sub - local.get $6 - i32.add - f64.convert_i32_s - local.tee $0 - f64.const 1.9082149292705877e-10 - f64.mul - f64.add - local.get $5 - f64.sub - local.get $4 - f64.add - local.get $0 - f64.const 0.6931471803691238 - f64.mul - f64.add - ) - (func $~lib/math/NativeMath.log2 (; 1 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) - (local $1 f64) - (local $2 i32) - (local $3 i32) - (local $4 i64) - (local $5 f64) - (local $6 f64) - (local $7 i32) - (local $8 f64) - local.get $0 - i64.reinterpret_f64 - local.tee $4 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.tee $3 - i32.const 1048576 - i32.lt_u - local.tee $2 - i32.eqz - if - local.get $3 - i32.const 31 - i32.shr_u - local.set $2 - end - local.get $2 - if - local.get $4 - i64.const 1 - i64.shl - i64.const 0 - i64.eq - if - f64.const -1 - local.get $0 - local.get $0 - f64.mul - f64.div - return - end - local.get $3 - i32.const 31 - i32.shr_u - if - local.get $0 - local.get $0 - f64.sub - f64.const 0 - f64.div - return - end - i32.const -54 - local.set $7 - local.get $0 - f64.const 18014398509481984 - f64.mul - i64.reinterpret_f64 - local.tee $4 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.set $3 - else - local.get $3 - i32.const 2146435072 - i32.ge_u if local.get $0 return else local.get $3 + i64.const 32 + i64.shl + i64.const 0 + i64.eq + i32.const 0 + local.get $2 i32.const 1072693248 i32.eq - local.tee $2 - if - local.get $4 - i64.const 32 - i64.shl - i64.const 0 - i64.eq - local.set $2 - end - local.get $2 + select if f64.const 0 return end end end - local.get $4 + local.get $3 i64.const 4294967295 i64.and - local.get $3 + local.get $2 i32.const 614242 i32.add local.tee $2 @@ -294,12 +282,12 @@ local.get $1 f64.add f64.div + local.tee $4 + local.get $4 + f64.mul local.tee $5 local.get $5 f64.mul - local.tee $6 - local.get $6 - f64.mul local.set $0 local.get $1 local.get $1 @@ -314,13 +302,13 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $8 + local.tee $7 f64.sub local.get $1 f64.sub + local.get $4 + local.get $1 local.get $5 - local.get $1 - local.get $6 f64.const 0.6666666666666735 local.get $0 f64.const 0.2857142874366239 @@ -356,18 +344,18 @@ i32.shr_u i32.const 1023 i32.sub - local.get $7 + local.get $6 i32.add f64.convert_i32_s - local.tee $5 - local.get $8 + local.tee $4 + local.get $7 f64.const 1.4426950407214463 f64.mul - local.tee $6 + local.tee $5 f64.add local.set $1 local.get $0 - local.get $8 + local.get $7 f64.add f64.const 1.6751713164886512e-10 f64.mul @@ -375,10 +363,10 @@ f64.const 1.4426950407214463 f64.mul f64.add - local.get $5 + local.get $4 local.get $1 f64.sub - local.get $6 + local.get $5 f64.add f64.add local.get $1 diff --git a/tests/compiler/mandelbrot.untouched.wat b/tests/compiler/mandelbrot.untouched.wat index d9af864b..39c67f7a 100644 --- a/tests/compiler/mandelbrot.untouched.wat +++ b/tests/compiler/mandelbrot.untouched.wat @@ -13,7 +13,7 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) (local $6 f64) (local $7 f64) @@ -21,8 +21,7 @@ (local $9 f64) (local $10 f64) (local $11 f64) - (local $12 f64) - (local $13 i32) + (local $12 i32) local.get $0 i64.reinterpret_f64 local.set $1 @@ -36,9 +35,8 @@ local.get $2 i32.const 1048576 i32.lt_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 i32.const 31 @@ -96,7 +94,6 @@ local.get $2 i32.const 1072693248 i32.eq - local.tee $4 if (result i32) local.get $1 i64.const 32 @@ -104,7 +101,7 @@ i64.const 0 i64.eq else - local.get $4 + i32.const 0 end if f64.const 0 @@ -147,46 +144,46 @@ local.get $0 f64.const 1 f64.sub - local.set $5 + local.set $4 f64.const 0.5 - local.get $5 + local.get $4 f64.mul - local.get $5 + local.get $4 f64.mul - local.set $6 - local.get $5 + local.set $5 + local.get $4 f64.const 2 - local.get $5 + local.get $4 f64.add f64.div + local.set $6 + local.get $6 + local.get $6 + f64.mul local.set $7 local.get $7 local.get $7 f64.mul local.set $8 local.get $8 - local.get $8 - f64.mul - local.set $9 - local.get $9 f64.const 0.3999999999940942 - local.get $9 + local.get $8 f64.const 0.22222198432149784 - local.get $9 + local.get $8 f64.const 0.15313837699209373 f64.mul f64.add f64.mul f64.add f64.mul - local.set $10 - local.get $8 + local.set $9 + local.get $7 f64.const 0.6666666666666735 - local.get $9 + local.get $8 f64.const 0.2857142874366239 - local.get $9 + local.get $8 f64.const 0.1818357216161805 - local.get $9 + local.get $8 f64.const 0.14798198605116586 f64.mul f64.add @@ -195,28 +192,28 @@ f64.mul f64.add f64.mul - local.set $11 - local.get $11 + local.set $10 local.get $10 + local.get $9 f64.add - local.set $12 + local.set $11 local.get $3 - local.set $13 - local.get $7 + local.set $12 local.get $6 - local.get $12 + local.get $5 + local.get $11 f64.add f64.mul - local.get $13 + local.get $12 f64.convert_i32_s f64.const 1.9082149292705877e-10 f64.mul f64.add - local.get $6 - f64.sub local.get $5 + f64.sub + local.get $4 f64.add - local.get $13 + local.get $12 f64.convert_i32_s f64.const 0.6931471803691238 f64.mul @@ -226,7 +223,7 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) (local $6 f64) (local $7 f64) @@ -239,7 +236,6 @@ (local $14 f64) (local $15 f64) (local $16 f64) - (local $17 f64) local.get $0 i64.reinterpret_f64 local.set $1 @@ -253,9 +249,8 @@ local.get $2 i32.const 1048576 i32.lt_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 i32.const 31 @@ -313,7 +308,6 @@ local.get $2 i32.const 1072693248 i32.eq - local.tee $4 if (result i32) local.get $1 i64.const 32 @@ -321,7 +315,7 @@ i64.const 0 i64.eq else - local.get $4 + i32.const 0 end if f64.const 0 @@ -364,46 +358,46 @@ local.get $0 f64.const 1 f64.sub - local.set $5 + local.set $4 f64.const 0.5 - local.get $5 + local.get $4 f64.mul - local.get $5 + local.get $4 f64.mul - local.set $6 - local.get $5 + local.set $5 + local.get $4 f64.const 2 - local.get $5 + local.get $4 f64.add f64.div + local.set $6 + local.get $6 + local.get $6 + f64.mul local.set $7 local.get $7 local.get $7 f64.mul local.set $8 local.get $8 - local.get $8 - f64.mul - local.set $9 - local.get $9 f64.const 0.3999999999940942 - local.get $9 + local.get $8 f64.const 0.22222198432149784 - local.get $9 + local.get $8 f64.const 0.15313837699209373 f64.mul f64.add f64.mul f64.add f64.mul - local.set $10 - local.get $8 + local.set $9 + local.get $7 f64.const 0.6666666666666735 - local.get $9 + local.get $8 f64.const 0.2857142874366239 - local.get $9 + local.get $8 f64.const 0.1818357216161805 - local.get $9 + local.get $8 f64.const 0.14798198605116586 f64.mul f64.add @@ -412,16 +406,16 @@ f64.mul f64.add f64.mul - local.set $11 - local.get $11 + local.set $10 local.get $10 + local.get $9 f64.add - local.set $12 + local.set $11 + local.get $4 local.get $5 - local.get $6 f64.sub - local.set $13 - local.get $13 + local.set $12 + local.get $12 i64.reinterpret_f64 local.set $1 local.get $1 @@ -430,52 +424,52 @@ local.set $1 local.get $1 f64.reinterpret_i64 - local.set $13 - local.get $5 - local.get $13 - f64.sub - local.get $6 - f64.sub - local.get $7 - local.get $6 + local.set $12 + local.get $4 local.get $12 + f64.sub + local.get $5 + f64.sub + local.get $6 + local.get $5 + local.get $11 f64.add f64.mul f64.add - local.set $14 - local.get $13 + local.set $13 + local.get $12 f64.const 1.4426950407214463 f64.mul - local.set $15 - local.get $14 + local.set $14 local.get $13 + local.get $12 f64.add f64.const 1.6751713164886512e-10 f64.mul - local.get $14 + local.get $13 f64.const 1.4426950407214463 f64.mul f64.add - local.set $16 + local.set $15 local.get $3 f64.convert_i32_s - local.set $17 - local.get $17 - local.get $15 - f64.add - local.set $9 - local.get $16 - local.get $17 - local.get $9 - f64.sub - local.get $15 - f64.add - f64.add local.set $16 - local.get $9 - local.set $15 local.get $16 + local.get $14 + f64.add + local.set $8 local.get $15 + local.get $16 + local.get $8 + f64.sub + local.get $14 + f64.add + f64.add + local.set $15 + local.get $8 + local.set $14 + local.get $15 + local.get $14 f64.add ) (func $../../examples/mandelbrot/assembly/index/clamp (; 2 ;) (type $FUNCSIG$dddd) (param $0 f64) (param $1 f64) (param $2 f64) (result f64) diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index 27fa46a9..4abc28ce 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -21,7 +21,7 @@ local.get $1 i32.const 3 i32.and - local.get $2 + i32.const 0 local.get $2 select if diff --git a/tests/compiler/memcpy.untouched.wat b/tests/compiler/memcpy.untouched.wat index 24a043ac..5e7661bb 100644 --- a/tests/compiler/memcpy.untouched.wat +++ b/tests/compiler/memcpy.untouched.wat @@ -27,7 +27,7 @@ i32.const 4 i32.rem_u else - local.get $2 + i32.const 0 end if block diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index fecf4a30..a176036c 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -403,7 +403,7 @@ local.tee $3 i32.eqz else - local.get $2 + i32.const 0 end if local.get $2 @@ -432,15 +432,11 @@ i32.const 1 return end - local.get $0 + local.get $1 i32.eqz - local.tee $2 - if (result i32) - local.get $2 - else - local.get $1 - i32.eqz - end + i32.const 1 + local.get $0 + select if i32.const 0 return @@ -474,8 +470,8 @@ (local $7 i32) (local $8 i64) (local $9 i64) - (local $10 i64) - (local $11 i32) + (local $10 i32) + (local $11 i64) (local $12 i32) (local $13 i64) (local $14 i32) @@ -484,22 +480,22 @@ local.get $3 local.get $1 i64.sub - local.set $8 + local.set $9 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $11 + local.tee $10 i64.extend_i32_s local.tee $1 i64.shl - local.tee $9 + local.tee $11 i64.const 1 i64.sub local.tee $13 local.get $3 i64.and - local.set $10 + local.set $8 local.get $3 local.get $1 i64.shr_u @@ -668,10 +664,10 @@ local.set $4 local.get $6 i64.extend_i32_u - local.get $11 + local.get $10 i64.extend_i32_s i64.shl - local.get $10 + local.get $8 i64.add local.tee $1 local.get $5 @@ -687,7 +683,7 @@ local.get $12 i32.add i64.load32_u - local.get $11 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -702,43 +698,34 @@ i32.load16_u local.set $4 loop $continue|2 - block (result i32) - local.get $1 - local.get $8 - i64.lt_u - local.tee $0 - if - local.get $5 - local.get $1 - i64.sub - local.get $3 - i64.ge_u - local.set $0 - end - local.get $0 - end + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 + local.get $1 + local.get $9 + i64.lt_u + select if (result i32) + i32.const 1 + local.get $9 + local.get $1 + i64.sub local.get $1 local.get $3 i64.add + local.tee $8 + local.get $9 + i64.sub + i64.gt_u local.get $8 + local.get $9 i64.lt_u - local.tee $0 - if (result i32) - local.get $0 - else - local.get $8 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.get $8 - i64.sub - i64.gt_u - end + select else - local.get $0 + i32.const 0 end if local.get $4 @@ -766,11 +753,11 @@ i64.const 10 i64.mul local.set $5 - local.get $10 + local.get $8 i64.const 10 i64.mul local.tee $1 - local.get $11 + local.get $10 i64.extend_i32_s i64.shr_u local.tee $3 @@ -805,7 +792,7 @@ local.get $1 local.get $13 i64.and - local.tee $10 + local.tee $8 local.get $5 i64.ge_u br_if $continue|3 @@ -814,7 +801,7 @@ local.get $4 i32.add global.set $~lib/util/number/_K - local.get $10 + local.get $8 local.set $1 i32.const 0 local.get $4 @@ -824,7 +811,7 @@ local.get $12 i32.add i64.load32_u - local.get $8 + local.get $9 i64.mul local.set $3 local.get $2 @@ -838,43 +825,34 @@ i32.load16_u local.set $4 loop $continue|4 - block (result i32) - local.get $1 - local.get $3 - i64.lt_u - local.tee $0 - if - local.get $5 - local.get $1 - i64.sub - local.get $9 - i64.ge_u - local.set $0 - end - local.get $0 - end + local.get $5 + local.get $1 + i64.sub + local.get $11 + i64.ge_u + i32.const 0 + local.get $1 + local.get $3 + i64.lt_u + select if (result i32) + i32.const 1 + local.get $3 local.get $1 - local.get $9 + i64.sub + local.get $1 + local.get $11 i64.add + local.tee $8 + local.get $3 + i64.sub + i64.gt_u + local.get $8 local.get $3 i64.lt_u - local.tee $0 - if (result i32) - local.get $0 - else - local.get $3 - local.get $1 - i64.sub - local.get $1 - local.get $9 - i64.add - local.get $3 - i64.sub - i64.gt_u - end + select else - local.get $0 + i32.const 0 end if local.get $4 @@ -882,7 +860,7 @@ i32.sub local.set $4 local.get $1 - local.get $9 + local.get $11 i64.add local.set $1 br $continue|4 @@ -1066,7 +1044,6 @@ ) (func $~lib/util/number/prettify (; 11 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $2 i32.eqz if @@ -1088,14 +1065,13 @@ i32.add local.tee $3 i32.le_s - local.tee $4 - if + if (result i32) local.get $3 i32.const 21 i32.le_s - local.set $4 + else + i32.const 0 end - local.get $4 if (result i32) loop $repeat|0 block $break|0 @@ -1128,17 +1104,14 @@ i32.const 2 i32.add else + local.get $3 + i32.const 21 + i32.le_s + i32.const 0 local.get $3 i32.const 0 i32.gt_s - local.tee $4 - if - local.get $3 - i32.const 21 - i32.le_s - local.set $4 - end - local.get $4 + select if (result i32) local.get $3 i32.const 1 @@ -1162,22 +1135,19 @@ i32.const 1 i32.add else + local.get $3 + i32.const 0 + i32.le_s + i32.const 0 i32.const -6 local.get $3 i32.lt_s - local.tee $2 - if - local.get $3 - i32.const 0 - i32.le_s - local.set $2 - end - local.get $2 + select if (result i32) i32.const 2 local.get $3 i32.sub - local.tee $4 + local.tee $3 i32.const 1 i32.shl local.get $0 @@ -1195,7 +1165,7 @@ loop $repeat|1 block $break|1 local.get $2 - local.get $4 + local.get $3 i32.ge_s br_if $break|1 local.get $2 @@ -1213,7 +1183,7 @@ end end local.get $1 - local.get $4 + local.get $3 i32.add else local.get $1 @@ -1292,7 +1262,7 @@ local.tee $0 i32.const 0 i32.lt_s - local.tee $4 + local.tee $3 if i32.const 0 local.get $0 @@ -1310,7 +1280,7 @@ local.get $2 i32.const 45 i32.const 43 - local.get $4 + local.get $3 select i32.store16 local.get $0 @@ -1503,7 +1473,6 @@ (func $~lib/string/String#substring (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) local.get $0 i32.eqz if @@ -1539,34 +1508,34 @@ local.get $2 i32.lt_s select - local.tee $1 + local.tee $2 local.get $3 - local.get $1 + local.get $2 i32.gt_s select i32.const 1 i32.shl - local.tee $4 + local.tee $1 local.get $3 - local.get $1 + local.get $2 local.get $3 - local.get $1 + local.get $2 i32.lt_s select i32.const 1 i32.shl - local.tee $2 - i32.sub local.tee $3 + i32.sub + local.tee $2 i32.eqz if i32.const 1840 return end - local.get $2 - i32.eqz - local.tee $1 - if + local.get $3 + if (result i32) + i32.const 0 + else local.get $0 i32.const 16 i32.sub @@ -1575,22 +1544,20 @@ i32.shr_u i32.const 1 i32.shl - local.get $4 + local.get $1 i32.eq - local.set $1 end - local.get $1 if local.get $0 return end - local.get $3 + local.get $2 call $~lib/util/runtime/allocate local.tee $1 local.get $0 - local.get $2 - i32.add local.get $3 + i32.add + local.get $2 call $~lib/memory/memory.copy local.get $1 call $~lib/util/runtime/register diff --git a/tests/compiler/number.untouched.wat b/tests/compiler/number.untouched.wat index a135d5f2..3f63b140 100644 --- a/tests/compiler/number.untouched.wat +++ b/tests/compiler/number.untouched.wat @@ -528,7 +528,7 @@ local.tee $5 i32.eqz else - local.get $4 + i32.const 0 end if block @@ -553,7 +553,6 @@ ) (func $~lib/string/String.__eq (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - (local $3 i32) local.get $0 local.get $1 i32.eq @@ -564,9 +563,8 @@ local.get $0 i32.const 0 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -578,8 +576,8 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 - local.get $3 + local.set $2 + local.get $2 local.get $1 call $~lib/string/String#get:length i32.ne @@ -591,7 +589,7 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 + local.get $2 call $~lib/util/string/compareImpl i32.eqz ) @@ -646,7 +644,6 @@ (local $24 i64) (local $25 i32) (local $26 i32) - (local $27 i32) i32.const 0 local.get $4 i32.sub @@ -971,7 +968,6 @@ local.get $23 local.get $21 i64.lt_u - local.tee $27 if (result i32) local.get $24 local.get $23 @@ -979,18 +975,16 @@ local.get $22 i64.ge_u else - local.get $27 + i32.const 0 end - local.tee $27 if (result i32) local.get $23 local.get $22 i64.add local.get $21 i64.lt_u - local.tee $27 if (result i32) - local.get $27 + i32.const 1 else local.get $21 local.get $23 @@ -1003,7 +997,7 @@ i64.gt_u end else - local.get $27 + i32.const 0 end if block @@ -1133,7 +1127,6 @@ local.get $23 local.get $21 i64.lt_u - local.tee $20 if (result i32) local.get $24 local.get $23 @@ -1141,18 +1134,16 @@ local.get $22 i64.ge_u else - local.get $20 + i32.const 0 end - local.tee $20 if (result i32) local.get $23 local.get $22 i64.add local.get $21 i64.lt_u - local.tee $20 if (result i32) - local.get $20 + i32.const 1 else local.get $21 local.get $23 @@ -1165,7 +1156,7 @@ i64.gt_u end else - local.get $20 + i32.const 0 end if block @@ -1441,13 +1432,12 @@ local.get $1 local.get $3 i32.le_s - local.tee $4 if (result i32) local.get $3 i32.const 21 i32.le_s else - local.get $4 + i32.const 0 end if block $break|0 @@ -1494,13 +1484,12 @@ local.get $3 i32.const 0 i32.gt_s - local.tee $4 if (result i32) local.get $3 i32.const 21 i32.le_s else - local.get $4 + i32.const 0 end if local.get $0 @@ -1534,13 +1523,12 @@ i32.const -6 local.get $3 i32.lt_s - local.tee $4 if (result i32) local.get $3 i32.const 0 i32.le_s else - local.get $4 + i32.const 0 end if i32.const 2 @@ -2266,7 +2254,6 @@ end local.get $8 i32.eqz - local.tee $4 if (result i32) local.get $9 local.get $0 @@ -2275,7 +2262,7 @@ i32.shl i32.eq else - local.get $4 + i32.const 0 end if local.get $0 @@ -2388,8 +2375,6 @@ ) (func $~lib/number/Bool#toString (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 0 - i32.ne if (result i32) i32.const 1976 else @@ -2402,19 +2387,17 @@ f32.ne ) (func $~lib/number/F32.isSafeInteger (; 30 ;) (type $FUNCSIG$if) (param $0 f32) (result i32) - (local $1 i32) local.get $0 f32.abs global.get $~lib/builtins/f32.MAX_SAFE_INTEGER f32.le - local.tee $1 if (result i32) local.get $0 f32.trunc local.get $0 f32.eq else - local.get $1 + i32.const 0 end ) (func $~lib/builtins/isFinite (; 31 ;) (type $FUNCSIG$if) (param $0 f32) (result i32) @@ -2425,47 +2408,41 @@ f32.eq ) (func $~lib/number/F32.isInteger (; 32 ;) (type $FUNCSIG$if) (param $0 f32) (result i32) - (local $1 i32) local.get $0 call $~lib/builtins/isFinite - local.tee $1 if (result i32) local.get $0 f32.trunc local.get $0 f32.eq else - local.get $1 + i32.const 0 end ) (func $~lib/number/F64.isSafeInteger (; 33 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) - (local $1 i32) local.get $0 f64.abs global.get $~lib/builtins/f64.MAX_SAFE_INTEGER f64.le - local.tee $1 if (result i32) local.get $0 f64.trunc local.get $0 f64.eq else - local.get $1 + i32.const 0 end ) (func $~lib/number/F64.isInteger (; 34 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) - (local $1 i32) local.get $0 call $~lib/builtins/isFinite - local.tee $1 if (result i32) local.get $0 f64.trunc local.get $0 f64.eq else - local.get $1 + i32.const 0 end ) (func $start:number (; 35 ;) (type $FUNCSIG$v) diff --git a/tests/compiler/possibly-null.json b/tests/compiler/possibly-null.json new file mode 100644 index 00000000..b1da366f --- /dev/null +++ b/tests/compiler/possibly-null.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/possibly-null.optimized.wat b/tests/compiler/possibly-null.optimized.wat new file mode 100644 index 00000000..634a749a --- /dev/null +++ b/tests/compiler/possibly-null.optimized.wat @@ -0,0 +1,58 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (memory $0 0) + (export "memory" (memory $0)) + (export "testTrue" (func $possibly-null/testTrue)) + (export "testFalseElse" (func $possibly-null/testTrue)) + (export "testFalseContinuation" (func $possibly-null/testTrue)) + (export "testNeNull" (func $possibly-null/testTrue)) + (export "testEqNullElse" (func $possibly-null/testTrue)) + (export "testEqNullContinuation" (func $possibly-null/testTrue)) + (export "testNotEqNull" (func $possibly-null/testTrue)) + (export "testNotNeNullElse" (func $possibly-null/testTrue)) + (export "testNotNeNullContinuation" (func $possibly-null/testTrue)) + (export "testWhile" (func $possibly-null/testWhile)) + (export "testWhile2" (func $possibly-null/testWhile2)) + (export "testWhile3" (func $possibly-null/testWhile3)) + (func $possibly-null/testTrue (; 0 ;) (type $FUNCSIG$vi) (param $0 i32) + nop + ) + (func $possibly-null/testWhile (; 1 ;) (type $FUNCSIG$vi) (param $0 i32) + loop $continue|0 + local.get $0 + if + i32.const 0 + local.set $0 + br $continue|0 + end + end + ) + (func $possibly-null/testWhile2 (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + loop $continue|0 + local.get $0 + if + local.get $1 + local.set $0 + br $continue|0 + end + end + ) + (func $possibly-null/testWhile3 (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + loop $continue|0 + local.get $0 + if + local.get $1 + local.get $0 + local.get $1 + select + local.set $0 + br $continue|0 + end + end + ) + (func $null (; 4 ;) (type $FUNCSIG$v) + nop + ) +) diff --git a/tests/compiler/possibly-null.ts b/tests/compiler/possibly-null.ts new file mode 100644 index 00000000..86185671 --- /dev/null +++ b/tests/compiler/possibly-null.ts @@ -0,0 +1,98 @@ +class Ref {} + +// the following makes use of the fact that branches that can be eliminated statically +// won't become compiled, hence the ERROR statement is never executed. + +export function testTrue(a: Ref | null): void { + if (a) { + if (isNullable(a)) ERROR("should be non-nullable"); + } +} + +export function testFalseElse(a: Ref | null): void { + if (!a) return; + else { + if (isNullable(a)) ERROR("should be non-nullable"); + } +} + +export function testFalseContinuation(a: Ref | null): void { + if (!a) return; + if (isNullable(a)) ERROR("should be non-nullable"); +} + +export function testNeNull(a: Ref | null): void { + if (a != null) { + if (isNullable(a)) ERROR("should be non-nullable"); + } +} + +export function testEqNullElse(a: Ref | null): void { + if (a == null) return; + else { + if (isNullable(a)) ERROR("should be non-nullable"); + } +} + +export function testEqNullContinuation(a: Ref | null): void { + if (a == null) return; + if (isNullable(a)) ERROR("should be non-nullable"); +} + +export function testNotEqNull(a: Ref | null): void { + if (!(a == null)) { + if (isNullable(a)) ERROR("should be non-nullable"); + } +} + +export function testNotNeNullElse(a: Ref | null): void { + if (!(a != null)) return; + else { + if (isNullable(a)) ERROR("should be non-nullable"); + } +} + +export function testNotNeNullContinuation(a: Ref | null): void { + if (!(a != null)) return; + if (isNullable(a)) ERROR("should be non-nullable"); +} + +export function testWhile(a: Ref | null): void { + while (a) { + if (isNullable(a)) ERROR("should be non-nullable"); + a = null; + if (!isNullable(a)) ERROR("should be nullable again"); + } +} + +export function testWhile2(a: Ref | null, b: Ref | null): void { + while (a) { + if (isNullable(a)) ERROR("should be non-nullable"); + a = b; + if (!isNullable(a)) ERROR("should be nullable again"); + } +} + +export function testWhile3(a: Ref | null, b: Ref | null): void { + while (a) { + if (isNullable(a)) ERROR("should be non-nullable"); + if (b) { + a = b; + if (isNullable(a)) ERROR("should be non-nullable still"); + } + } +} + +// TODO: + +// function requireNonNull(a: Ref): Ref { +// return a; +// } + +// export function testLogicalAnd(a: Ref | null): void { +// a && requireNonNull(a); +// } + +// export function testLogicalOr(a: Ref | null): void { +// !a || requireNonNull(a); +// } diff --git a/tests/compiler/possibly-null.untouched.wat b/tests/compiler/possibly-null.untouched.wat new file mode 100644 index 00000000..04f6b77d --- /dev/null +++ b/tests/compiler/possibly-null.untouched.wat @@ -0,0 +1,133 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (memory $0 0) + (table $0 1 funcref) + (elem (i32.const 0) $null) + (export "memory" (memory $0)) + (export "testTrue" (func $possibly-null/testTrue)) + (export "testFalseElse" (func $possibly-null/testFalseElse)) + (export "testFalseContinuation" (func $possibly-null/testFalseContinuation)) + (export "testNeNull" (func $possibly-null/testNeNull)) + (export "testEqNullElse" (func $possibly-null/testEqNullElse)) + (export "testEqNullContinuation" (func $possibly-null/testEqNullContinuation)) + (export "testNotEqNull" (func $possibly-null/testNotEqNull)) + (export "testNotNeNullElse" (func $possibly-null/testNotNeNullElse)) + (export "testNotNeNullContinuation" (func $possibly-null/testNotNeNullContinuation)) + (export "testWhile" (func $possibly-null/testWhile)) + (export "testWhile2" (func $possibly-null/testWhile2)) + (export "testWhile3" (func $possibly-null/testWhile3)) + (func $possibly-null/testTrue (; 0 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + if + nop + end + ) + (func $possibly-null/testFalseElse (; 1 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.eqz + if + return + else + nop + end + ) + (func $possibly-null/testFalseContinuation (; 2 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.eqz + if + return + end + ) + (func $possibly-null/testNeNull (; 3 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 0 + i32.ne + if + nop + end + ) + (func $possibly-null/testEqNullElse (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 0 + i32.eq + if + return + else + nop + end + ) + (func $possibly-null/testEqNullContinuation (; 5 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 0 + i32.eq + if + return + end + ) + (func $possibly-null/testNotEqNull (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 0 + i32.eq + i32.eqz + if + nop + end + ) + (func $possibly-null/testNotNeNullElse (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 0 + i32.ne + i32.eqz + if + return + else + nop + end + ) + (func $possibly-null/testNotNeNullContinuation (; 8 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 0 + i32.ne + i32.eqz + if + return + end + ) + (func $possibly-null/testWhile (; 9 ;) (type $FUNCSIG$vi) (param $0 i32) + loop $continue|0 + local.get $0 + if + i32.const 0 + local.set $0 + br $continue|0 + end + end + ) + (func $possibly-null/testWhile2 (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + loop $continue|0 + local.get $0 + if + local.get $1 + local.set $0 + br $continue|0 + end + end + ) + (func $possibly-null/testWhile3 (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + loop $continue|0 + local.get $0 + if + local.get $1 + if + local.get $1 + local.set $0 + end + br $continue|0 + end + end + ) + (func $null (; 12 ;) (type $FUNCSIG$v) + ) +) diff --git a/tests/compiler/runtime-arena.optimized.wat b/tests/compiler/runtime-arena.optimized.wat index 70b22033..bdacf260 100644 --- a/tests/compiler/runtime-arena.optimized.wat +++ b/tests/compiler/runtime-arena.optimized.wat @@ -36,7 +36,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -60,19 +60,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 112 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -225,15 +221,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 112 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/runtime-arena.untouched.wat b/tests/compiler/runtime-arena.untouched.wat index 4f82fb75..b8ba66a3 100644 --- a/tests/compiler/runtime-arena.untouched.wat +++ b/tests/compiler/runtime-arena.untouched.wat @@ -46,7 +46,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -71,14 +71,12 @@ ) (func $~lib/runtime/runtime.flags (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/runtime-default.optimized.wat b/tests/compiler/runtime-default.optimized.wat index cee27ccd..145b7c80 100644 --- a/tests/compiler/runtime-default.optimized.wat +++ b/tests/compiler/runtime-default.optimized.wat @@ -44,7 +44,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -68,19 +68,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 128 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -257,7 +253,7 @@ (local $5 i32) local.get $1 i32.load - local.tee $2 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -269,20 +265,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const -4 i32.and - local.tee $3 + local.tee $2 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $3 + if (result i32) + local.get $2 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -292,67 +287,67 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 256 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 8 i32.div_u local.set $4 i32.const 0 else - local.get $3 - local.get $3 + local.get $2 + local.get $2 call $~lib/allocator/tlsf/fls - local.tee $2 + local.tee $3 i32.const 5 i32.sub i32.shr_u i32.const 32 i32.xor local.set $4 - local.get $2 + local.get $3 i32.const 7 i32.sub end - local.set $2 + local.set $3 local.get $1 i32.load offset=8 - local.set $3 + local.set $2 local.get $1 i32.load offset=4 local.tee $5 if local.get $5 - local.get $3 + local.get $2 i32.store offset=8 end - local.get $3 + local.get $2 if - local.get $3 + local.get $2 local.get $5 i32.store offset=4 end local.get $0 - local.get $2 + local.get $3 local.get $4 call $~lib/allocator/tlsf/Root#getHead local.get $1 i32.eq if local.get $0 - local.get $2 + local.get $3 local.get $4 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#setHead - local.get $3 + local.get $2 i32.eqz if local.get $0 - local.get $2 + local.get $3 local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#getSLMap i32.const 1 local.get $4 @@ -369,7 +364,7 @@ local.get $0 i32.load i32.const 1 - local.get $2 + local.get $3 i32.shl i32.const -1 i32.xor @@ -471,7 +466,7 @@ end local.get $1 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz @@ -487,17 +482,16 @@ i32.load i32.const -4 i32.and - local.tee $4 + local.tee $3 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $4 + if (result i32) + local.get $3 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -509,7 +503,7 @@ end local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $2 + local.tee $3 i32.eqz if i32.const 0 @@ -519,14 +513,14 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.load local.tee $4 i32.const 1 i32.and if local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#remove local.get $1 local.get $4 @@ -534,17 +528,17 @@ i32.and i32.const 8 i32.add - local.get $3 + local.get $2 i32.add - local.tee $3 + local.tee $2 i32.store local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $2 + local.tee $3 i32.load local.set $4 end - local.get $3 + local.get $2 i32.const 2 i32.and if @@ -578,38 +572,37 @@ local.get $1 call $~lib/allocator/tlsf/Root#remove local.get $1 - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 8 i32.add local.get $5 i32.add - local.tee $3 + local.tee $2 i32.store end - local.get $2 + local.get $3 local.get $4 i32.const 2 i32.or i32.store local.get $1 - local.get $2 - call $~lib/allocator/tlsf/Root#setJump local.get $3 + call $~lib/allocator/tlsf/Root#setJump + local.get $2 i32.const -4 i32.and - local.tee $3 + local.tee $2 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $3 + if (result i32) + local.get $2 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -620,32 +613,32 @@ unreachable end local.get $0 - local.get $3 + local.get $2 i32.const 256 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 8 i32.div_u - local.set $3 + local.set $2 i32.const 0 else - local.get $3 - local.get $3 + local.get $2 + local.get $2 call $~lib/allocator/tlsf/fls - local.tee $2 + local.tee $3 i32.const 5 i32.sub i32.shr_u i32.const 32 i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.const 7 i32.sub end - local.tee $2 - local.get $3 + local.tee $3 + local.get $2 call $~lib/allocator/tlsf/Root#getHead local.set $4 local.get $1 @@ -661,25 +654,25 @@ i32.store offset=4 end local.get $0 - local.get $2 local.get $3 + local.get $2 local.get $1 call $~lib/allocator/tlsf/Root#setHead local.get $0 local.get $0 i32.load i32.const 1 - local.get $2 + local.get $3 i32.shl i32.or i32.store local.get $0 - local.get $2 + local.get $3 local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#getSLMap i32.const 1 - local.get $3 + local.get $2 i32.shl i32.or call $~lib/allocator/tlsf/Root#setSLMap @@ -825,16 +818,13 @@ (local $2 i32) (local $3 i32) local.get $1 + i32.const 1073741824 + i32.lt_u + i32.const 0 + local.get $1 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $1 - i32.const 1073741824 - i32.lt_u - local.set $2 - end - local.get $2 + select i32.eqz if i32.const 0 @@ -848,8 +838,6 @@ i32.const 256 i32.lt_u if (result i32) - i32.const 0 - local.set $2 local.get $1 i32.const 8 i32.div_u @@ -938,7 +926,7 @@ (local $4 i32) local.get $1 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -951,16 +939,13 @@ unreachable end local.get $2 + i32.const 1073741824 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - local.tee $3 - if - local.get $2 - i32.const 1073741824 - i32.lt_u - local.set $3 - end - local.get $3 + select i32.eqz if i32.const 0 @@ -984,17 +969,17 @@ local.get $0 local.get $1 call $~lib/allocator/tlsf/Root#remove - local.get $4 + local.get $3 i32.const -4 i32.and local.get $2 i32.sub - local.tee $3 + local.tee $4 i32.const 24 i32.ge_u if local.get $1 - local.get $4 + local.get $3 i32.const 2 i32.and local.get $2 @@ -1006,7 +991,7 @@ local.get $2 i32.add local.tee $2 - local.get $3 + local.get $4 i32.const 8 i32.sub i32.const 1 @@ -1017,7 +1002,7 @@ call $~lib/allocator/tlsf/Root#insert else local.get $1 - local.get $4 + local.get $3 i32.const -2 i32.and i32.store @@ -1054,18 +1039,17 @@ if i32.const 1 current_memory - local.tee $1 - i32.gt_s local.tee $2 + i32.gt_s if (result i32) i32.const 1 - local.get $1 + local.get $2 i32.sub grow_memory i32.const 0 i32.lt_s else - local.get $2 + i32.const 0 end if unreachable @@ -1080,8 +1064,6 @@ i32.const 280 i32.const 0 i32.store - i32.const 0 - local.set $1 loop $repeat|0 local.get $1 i32.const 22 @@ -1425,19 +1407,17 @@ i32.store offset=8 ) (func $~lib/collector/itcm/__ref_link (; 27 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) call $~lib/collector/itcm/maybeInit global.get $~lib/collector/itcm/white i32.eqz local.get $1 i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.load offset=8 i32.const 3 i32.and i32.eq - local.tee $1 if (result i32) global.get $~lib/collector/itcm/white local.get $0 @@ -1448,10 +1428,10 @@ i32.and i32.eq else - local.get $1 + i32.const 0 end if - local.get $2 + local.get $1 call $~lib/collector/itcm/ManagedObject#makeGray end ) @@ -1462,15 +1442,13 @@ (local $5 i32) local.get $0 local.tee $3 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $3 i32.const 128 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/runtime-default.untouched.wat b/tests/compiler/runtime-default.untouched.wat index 57c79cd8..b1b64287 100644 --- a/tests/compiler/runtime-default.untouched.wat +++ b/tests/compiler/runtime-default.untouched.wat @@ -70,7 +70,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -95,14 +95,12 @@ ) (func $~lib/runtime/runtime.flags (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 @@ -345,13 +343,12 @@ local.get $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -367,17 +364,17 @@ i32.lt_u if i32.const 0 - local.set $5 + local.set $4 local.get $3 i32.const 8 i32.div_u - local.set $6 + local.set $5 else local.get $3 call $~lib/allocator/tlsf/fls - local.set $5 + local.set $4 local.get $3 - local.get $5 + local.get $4 global.get $~lib/allocator/tlsf/SL_BITS i32.sub i32.shr_u @@ -385,70 +382,70 @@ global.get $~lib/allocator/tlsf/SL_BITS i32.shl i32.xor - local.set $6 - local.get $5 + local.set $5 + local.get $4 global.get $~lib/allocator/tlsf/SB_BITS i32.const 1 i32.sub i32.sub - local.set $5 + local.set $4 end local.get $1 i32.load offset=4 - local.set $7 + local.set $6 local.get $1 i32.load offset=8 - local.set $8 + local.set $7 + local.get $6 + if + local.get $6 + local.get $7 + i32.store offset=8 + end local.get $7 if local.get $7 - local.get $8 - i32.store offset=8 - end - local.get $8 - if - local.get $8 - local.get $7 + local.get $6 i32.store offset=4 end local.get $1 local.get $0 + local.get $4 local.get $5 - local.get $6 call $~lib/allocator/tlsf/Root#getHead i32.eq if local.get $0 + local.get $4 local.get $5 - local.get $6 - local.get $8 + local.get $7 call $~lib/allocator/tlsf/Root#setHead - local.get $8 + local.get $7 i32.eqz if local.get $0 - local.get $5 - call $~lib/allocator/tlsf/Root#getSLMap - local.set $4 - local.get $0 - local.get $5 local.get $4 + call $~lib/allocator/tlsf/Root#getSLMap + local.set $8 + local.get $0 + local.get $4 + local.get $8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.const -1 i32.xor i32.and - local.tee $4 + local.tee $8 call $~lib/allocator/tlsf/Root#setSLMap - local.get $4 + local.get $8 i32.eqz if local.get $0 local.get $0 i32.load i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor @@ -580,13 +577,12 @@ local.tee $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -713,13 +709,12 @@ local.get $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $7 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $7 + i32.const 0 end i32.eqz if @@ -997,13 +992,12 @@ local.get $1 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $2 if (result i32) local.get $1 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $2 + i32.const 0 end i32.eqz if @@ -1019,17 +1013,17 @@ i32.lt_u if i32.const 0 - local.set $3 + local.set $2 local.get $1 i32.const 8 i32.div_u - local.set $4 + local.set $3 else local.get $1 call $~lib/allocator/tlsf/fls - local.set $3 + local.set $2 local.get $1 - local.get $3 + local.get $2 global.get $~lib/allocator/tlsf/SL_BITS i32.sub i32.shr_u @@ -1037,43 +1031,43 @@ global.get $~lib/allocator/tlsf/SL_BITS i32.shl i32.xor - local.set $4 - local.get $3 + local.set $3 + local.get $2 global.get $~lib/allocator/tlsf/SB_BITS i32.const 1 i32.sub i32.sub - local.set $3 - local.get $4 + local.set $2 + local.get $3 global.get $~lib/allocator/tlsf/SL_SIZE i32.const 1 i32.sub i32.lt_u if - local.get $4 - i32.const 1 - i32.add - local.set $4 - else local.get $3 i32.const 1 i32.add local.set $3 + else + local.get $2 + i32.const 1 + i32.add + local.set $2 i32.const 0 - local.set $4 + local.set $3 end end local.get $0 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#getSLMap i32.const 0 i32.const -1 i32.xor - local.get $4 + local.get $3 i32.shl i32.and - local.set $5 - local.get $5 + local.set $4 + local.get $4 i32.eqz if local.get $0 @@ -1081,23 +1075,23 @@ i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.const 1 i32.add i32.shl i32.and - local.set $2 - local.get $2 + local.set $6 + local.get $6 i32.eqz if i32.const 0 - local.set $6 + local.set $5 else - local.get $2 + local.get $6 call $~lib/allocator/tlsf/ffs - local.set $3 + local.set $2 local.get $0 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#getSLMap local.tee $7 if (result i32) @@ -1110,23 +1104,23 @@ call $~lib/builtins/abort unreachable end - local.set $5 + local.set $4 local.get $0 - local.get $3 - local.get $5 + local.get $2 + local.get $4 call $~lib/allocator/tlsf/ffs call $~lib/allocator/tlsf/Root#getHead - local.set $6 + local.set $5 end else local.get $0 - local.get $3 - local.get $5 + local.get $2 + local.get $4 call $~lib/allocator/tlsf/ffs call $~lib/allocator/tlsf/Root#getHead - local.set $6 + local.set $5 end - local.get $6 + local.get $5 ) (func $~lib/allocator/tlsf/Root#use (; 20 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -1150,13 +1144,12 @@ local.get $2 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $2 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -1190,8 +1183,8 @@ i32.and local.get $2 i32.sub - local.set $5 - local.get $5 + local.set $4 + local.get $4 global.get $~lib/allocator/tlsf/Block.INFO global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.add @@ -1209,16 +1202,16 @@ i32.add local.get $2 i32.add - local.set $4 - local.get $4 + local.set $5 local.get $5 + local.get $4 global.get $~lib/allocator/tlsf/Block.INFO i32.sub global.get $~lib/allocator/tlsf/FREE i32.or i32.store local.get $0 - local.get $4 + local.get $5 call $~lib/allocator/tlsf/Root#insert else local.get $1 @@ -1230,7 +1223,7 @@ i32.store local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $4 + local.tee $5 i32.eqz if (result i32) i32.const 0 @@ -1240,11 +1233,11 @@ call $~lib/builtins/abort unreachable else - local.get $4 + local.get $5 end - local.set $4 - local.get $4 - local.get $4 + local.set $5 + local.get $5 + local.get $5 i32.load global.get $~lib/allocator/tlsf/LEFT_FREE i32.const -1 @@ -1294,7 +1287,6 @@ local.get $4 local.get $3 i32.gt_s - local.tee $5 if (result i32) local.get $4 local.get $3 @@ -1303,7 +1295,7 @@ i32.const 0 i32.lt_s else - local.get $5 + i32.const 0 end if unreachable @@ -1753,7 +1745,6 @@ global.get $~lib/collector/itcm/white i32.eqz i32.eq - local.tee $2 if (result i32) block $~lib/collector/itcm/refToObj|inlined.3 (result i32) local.get $0 @@ -1766,7 +1757,7 @@ global.get $~lib/collector/itcm/white i32.eq else - local.get $2 + i32.const 0 end if local.get $3 diff --git a/tests/compiler/runtime/flags.optimized.wat b/tests/compiler/runtime/flags.optimized.wat index bd9956a2..055591b5 100644 --- a/tests/compiler/runtime/flags.optimized.wat +++ b/tests/compiler/runtime/flags.optimized.wat @@ -39,19 +39,15 @@ (export "$.collect" (func $~lib/runtime/runtime.collect)) (start $start) (func $~lib/runtime/runtime.flags (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 176 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -940,7 +936,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -1128,7 +1124,7 @@ (local $5 i32) local.get $1 i32.load - local.tee $2 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -1140,20 +1136,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const -4 i32.and - local.tee $3 + local.tee $2 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $3 + if (result i32) + local.get $2 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -1163,67 +1158,67 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 256 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 8 i32.div_u local.set $4 i32.const 0 else - local.get $3 - local.get $3 + local.get $2 + local.get $2 call $~lib/allocator/tlsf/fls - local.tee $2 + local.tee $3 i32.const 5 i32.sub i32.shr_u i32.const 32 i32.xor local.set $4 - local.get $2 + local.get $3 i32.const 7 i32.sub end - local.set $2 + local.set $3 local.get $1 i32.load offset=8 - local.set $3 + local.set $2 local.get $1 i32.load offset=4 local.tee $5 if local.get $5 - local.get $3 + local.get $2 i32.store offset=8 end - local.get $3 + local.get $2 if - local.get $3 + local.get $2 local.get $5 i32.store offset=4 end local.get $0 - local.get $2 + local.get $3 local.get $4 call $~lib/allocator/tlsf/Root#getHead local.get $1 i32.eq if local.get $0 - local.get $2 + local.get $3 local.get $4 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#setHead - local.get $3 + local.get $2 i32.eqz if local.get $0 - local.get $2 + local.get $3 local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#getSLMap i32.const 1 local.get $4 @@ -1240,7 +1235,7 @@ local.get $0 i32.load i32.const 1 - local.get $2 + local.get $3 i32.shl i32.const -1 i32.xor @@ -1342,7 +1337,7 @@ end local.get $1 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz @@ -1358,17 +1353,16 @@ i32.load i32.const -4 i32.and - local.tee $4 + local.tee $3 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $4 + if (result i32) + local.get $3 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -1380,7 +1374,7 @@ end local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $2 + local.tee $3 i32.eqz if i32.const 0 @@ -1390,14 +1384,14 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.load local.tee $4 i32.const 1 i32.and if local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#remove local.get $1 local.get $4 @@ -1405,17 +1399,17 @@ i32.and i32.const 8 i32.add - local.get $3 + local.get $2 i32.add - local.tee $3 + local.tee $2 i32.store local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $2 + local.tee $3 i32.load local.set $4 end - local.get $3 + local.get $2 i32.const 2 i32.and if @@ -1449,38 +1443,37 @@ local.get $1 call $~lib/allocator/tlsf/Root#remove local.get $1 - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 8 i32.add local.get $5 i32.add - local.tee $3 + local.tee $2 i32.store end - local.get $2 + local.get $3 local.get $4 i32.const 2 i32.or i32.store local.get $1 - local.get $2 - call $~lib/allocator/tlsf/Root#setJump local.get $3 + call $~lib/allocator/tlsf/Root#setJump + local.get $2 i32.const -4 i32.and - local.tee $3 + local.tee $2 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $3 + if (result i32) + local.get $2 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -1491,32 +1484,32 @@ unreachable end local.get $0 - local.get $3 + local.get $2 i32.const 256 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 8 i32.div_u - local.set $3 + local.set $2 i32.const 0 else - local.get $3 - local.get $3 + local.get $2 + local.get $2 call $~lib/allocator/tlsf/fls - local.tee $2 + local.tee $3 i32.const 5 i32.sub i32.shr_u i32.const 32 i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.const 7 i32.sub end - local.tee $2 - local.get $3 + local.tee $3 + local.get $2 call $~lib/allocator/tlsf/Root#getHead local.set $4 local.get $1 @@ -1532,25 +1525,25 @@ i32.store offset=4 end local.get $0 - local.get $2 local.get $3 + local.get $2 local.get $1 call $~lib/allocator/tlsf/Root#setHead local.get $0 local.get $0 i32.load i32.const 1 - local.get $2 + local.get $3 i32.shl i32.or i32.store local.get $0 - local.get $2 + local.get $3 local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#getSLMap i32.const 1 - local.get $3 + local.get $2 i32.shl i32.or call $~lib/allocator/tlsf/Root#setSLMap @@ -1696,16 +1689,13 @@ (local $2 i32) (local $3 i32) local.get $1 + i32.const 1073741824 + i32.lt_u + i32.const 0 + local.get $1 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $1 - i32.const 1073741824 - i32.lt_u - local.set $2 - end - local.get $2 + select i32.eqz if i32.const 0 @@ -1719,8 +1709,6 @@ i32.const 256 i32.lt_u if (result i32) - i32.const 0 - local.set $2 local.get $1 i32.const 8 i32.div_u @@ -1809,7 +1797,7 @@ (local $4 i32) local.get $1 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -1822,16 +1810,13 @@ unreachable end local.get $2 + i32.const 1073741824 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - local.tee $3 - if - local.get $2 - i32.const 1073741824 - i32.lt_u - local.set $3 - end - local.get $3 + select i32.eqz if i32.const 0 @@ -1855,17 +1840,17 @@ local.get $0 local.get $1 call $~lib/allocator/tlsf/Root#remove - local.get $4 + local.get $3 i32.const -4 i32.and local.get $2 i32.sub - local.tee $3 + local.tee $4 i32.const 24 i32.ge_u if local.get $1 - local.get $4 + local.get $3 i32.const 2 i32.and local.get $2 @@ -1877,7 +1862,7 @@ local.get $2 i32.add local.tee $2 - local.get $3 + local.get $4 i32.const 8 i32.sub i32.const 1 @@ -1888,7 +1873,7 @@ call $~lib/allocator/tlsf/Root#insert else local.get $1 - local.get $4 + local.get $3 i32.const -2 i32.and i32.store @@ -1925,18 +1910,17 @@ if i32.const 1 current_memory - local.tee $1 - i32.gt_s local.tee $2 + i32.gt_s if (result i32) i32.const 1 - local.get $1 + local.get $2 i32.sub grow_memory i32.const 0 i32.lt_s else - local.get $2 + i32.const 0 end if unreachable @@ -1951,8 +1935,6 @@ i32.const 656 i32.const 0 i32.store - i32.const 0 - local.set $1 loop $repeat|0 local.get $1 i32.const 22 @@ -2296,19 +2278,17 @@ i32.store offset=8 ) (func $~lib/collector/itcm/__ref_link (; 63 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) call $~lib/collector/itcm/maybeInit global.get $~lib/collector/itcm/white i32.eqz local.get $1 i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.load offset=8 i32.const 3 i32.and i32.eq - local.tee $1 if (result i32) global.get $~lib/collector/itcm/white local.get $0 @@ -2319,10 +2299,10 @@ i32.and i32.eq else - local.get $1 + i32.const 0 end if - local.get $2 + local.get $1 call $~lib/collector/itcm/ManagedObject#makeGray end ) @@ -2333,15 +2313,13 @@ (local $5 i32) local.get $0 local.tee $3 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $3 i32.const 176 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/runtime/flags.untouched.wat b/tests/compiler/runtime/flags.untouched.wat index 128e1654..7d6d5c7f 100644 --- a/tests/compiler/runtime/flags.untouched.wat +++ b/tests/compiler/runtime/flags.untouched.wat @@ -58,14 +58,12 @@ (start $start) (func $~lib/runtime/runtime.flags (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 @@ -845,7 +843,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -1093,13 +1091,12 @@ local.get $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -1115,17 +1112,17 @@ i32.lt_u if i32.const 0 - local.set $5 + local.set $4 local.get $3 i32.const 8 i32.div_u - local.set $6 + local.set $5 else local.get $3 call $~lib/allocator/tlsf/fls - local.set $5 + local.set $4 local.get $3 - local.get $5 + local.get $4 global.get $~lib/allocator/tlsf/SL_BITS i32.sub i32.shr_u @@ -1133,70 +1130,70 @@ global.get $~lib/allocator/tlsf/SL_BITS i32.shl i32.xor - local.set $6 - local.get $5 + local.set $5 + local.get $4 global.get $~lib/allocator/tlsf/SB_BITS i32.const 1 i32.sub i32.sub - local.set $5 + local.set $4 end local.get $1 i32.load offset=4 - local.set $7 + local.set $6 local.get $1 i32.load offset=8 - local.set $8 + local.set $7 + local.get $6 + if + local.get $6 + local.get $7 + i32.store offset=8 + end local.get $7 if local.get $7 - local.get $8 - i32.store offset=8 - end - local.get $8 - if - local.get $8 - local.get $7 + local.get $6 i32.store offset=4 end local.get $1 local.get $0 + local.get $4 local.get $5 - local.get $6 call $~lib/allocator/tlsf/Root#getHead i32.eq if local.get $0 + local.get $4 local.get $5 - local.get $6 - local.get $8 + local.get $7 call $~lib/allocator/tlsf/Root#setHead - local.get $8 + local.get $7 i32.eqz if local.get $0 - local.get $5 - call $~lib/allocator/tlsf/Root#getSLMap - local.set $4 - local.get $0 - local.get $5 local.get $4 + call $~lib/allocator/tlsf/Root#getSLMap + local.set $8 + local.get $0 + local.get $4 + local.get $8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.const -1 i32.xor i32.and - local.tee $4 + local.tee $8 call $~lib/allocator/tlsf/Root#setSLMap - local.get $4 + local.get $8 i32.eqz if local.get $0 local.get $0 i32.load i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor @@ -1328,13 +1325,12 @@ local.tee $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -1461,13 +1457,12 @@ local.get $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $7 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $7 + i32.const 0 end i32.eqz if @@ -1745,13 +1740,12 @@ local.get $1 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $2 if (result i32) local.get $1 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $2 + i32.const 0 end i32.eqz if @@ -1767,17 +1761,17 @@ i32.lt_u if i32.const 0 - local.set $3 + local.set $2 local.get $1 i32.const 8 i32.div_u - local.set $4 + local.set $3 else local.get $1 call $~lib/allocator/tlsf/fls - local.set $3 + local.set $2 local.get $1 - local.get $3 + local.get $2 global.get $~lib/allocator/tlsf/SL_BITS i32.sub i32.shr_u @@ -1785,43 +1779,43 @@ global.get $~lib/allocator/tlsf/SL_BITS i32.shl i32.xor - local.set $4 - local.get $3 + local.set $3 + local.get $2 global.get $~lib/allocator/tlsf/SB_BITS i32.const 1 i32.sub i32.sub - local.set $3 - local.get $4 + local.set $2 + local.get $3 global.get $~lib/allocator/tlsf/SL_SIZE i32.const 1 i32.sub i32.lt_u if - local.get $4 - i32.const 1 - i32.add - local.set $4 - else local.get $3 i32.const 1 i32.add local.set $3 + else + local.get $2 + i32.const 1 + i32.add + local.set $2 i32.const 0 - local.set $4 + local.set $3 end end local.get $0 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#getSLMap i32.const 0 i32.const -1 i32.xor - local.get $4 + local.get $3 i32.shl i32.and - local.set $5 - local.get $5 + local.set $4 + local.get $4 i32.eqz if local.get $0 @@ -1829,23 +1823,23 @@ i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.const 1 i32.add i32.shl i32.and - local.set $2 - local.get $2 + local.set $6 + local.get $6 i32.eqz if i32.const 0 - local.set $6 + local.set $5 else - local.get $2 + local.get $6 call $~lib/allocator/tlsf/ffs - local.set $3 + local.set $2 local.get $0 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#getSLMap local.tee $7 if (result i32) @@ -1858,23 +1852,23 @@ call $~lib/builtins/abort unreachable end - local.set $5 + local.set $4 local.get $0 - local.get $3 - local.get $5 + local.get $2 + local.get $4 call $~lib/allocator/tlsf/ffs call $~lib/allocator/tlsf/Root#getHead - local.set $6 + local.set $5 end else local.get $0 - local.get $3 - local.get $5 + local.get $2 + local.get $4 call $~lib/allocator/tlsf/ffs call $~lib/allocator/tlsf/Root#getHead - local.set $6 + local.set $5 end - local.get $6 + local.get $5 ) (func $~lib/allocator/tlsf/Root#use (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -1898,13 +1892,12 @@ local.get $2 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $2 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -1938,8 +1931,8 @@ i32.and local.get $2 i32.sub - local.set $5 - local.get $5 + local.set $4 + local.get $4 global.get $~lib/allocator/tlsf/Block.INFO global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.add @@ -1957,16 +1950,16 @@ i32.add local.get $2 i32.add - local.set $4 - local.get $4 + local.set $5 local.get $5 + local.get $4 global.get $~lib/allocator/tlsf/Block.INFO i32.sub global.get $~lib/allocator/tlsf/FREE i32.or i32.store local.get $0 - local.get $4 + local.get $5 call $~lib/allocator/tlsf/Root#insert else local.get $1 @@ -1978,7 +1971,7 @@ i32.store local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $4 + local.tee $5 i32.eqz if (result i32) i32.const 0 @@ -1988,11 +1981,11 @@ call $~lib/builtins/abort unreachable else - local.get $4 + local.get $5 end - local.set $4 - local.get $4 - local.get $4 + local.set $5 + local.get $5 + local.get $5 i32.load global.get $~lib/allocator/tlsf/LEFT_FREE i32.const -1 @@ -2042,7 +2035,6 @@ local.get $4 local.get $3 i32.gt_s - local.tee $5 if (result i32) local.get $4 local.get $3 @@ -2051,7 +2043,7 @@ i32.const 0 i32.lt_s else - local.get $5 + i32.const 0 end if unreachable @@ -2501,7 +2493,6 @@ global.get $~lib/collector/itcm/white i32.eqz i32.eq - local.tee $2 if (result i32) block $~lib/collector/itcm/refToObj|inlined.3 (result i32) local.get $0 @@ -2514,7 +2505,7 @@ global.get $~lib/collector/itcm/white i32.eq else - local.get $2 + i32.const 0 end if local.get $3 diff --git a/tests/compiler/runtime/instanceof.optimized.wat b/tests/compiler/runtime/instanceof.optimized.wat index 843f42d3..0f9b512d 100644 --- a/tests/compiler/runtime/instanceof.optimized.wat +++ b/tests/compiler/runtime/instanceof.optimized.wat @@ -239,7 +239,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -669,19 +669,15 @@ end ) (func $~lib/runtime/runtime.flags (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 280 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -759,15 +755,13 @@ (local $6 i32) local.get $0 local.tee $3 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $3 i32.const 280 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/runtime/instanceof.untouched.wat b/tests/compiler/runtime/instanceof.untouched.wat index 1b646882..d3bee43c 100644 --- a/tests/compiler/runtime/instanceof.untouched.wat +++ b/tests/compiler/runtime/instanceof.untouched.wat @@ -290,7 +290,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -826,14 +826,12 @@ ) (func $~lib/runtime/runtime.flags (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/allocator_arena.optimized.wat b/tests/compiler/std/allocator_arena.optimized.wat index 7a87a4ea..7e7d9d62 100644 --- a/tests/compiler/std/allocator_arena.optimized.wat +++ b/tests/compiler/std/allocator_arena.optimized.wat @@ -436,7 +436,6 @@ (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) i32.const 72 global.set $~lib/allocator/arena/startOffset global.get $~lib/allocator/arena/startOffset @@ -534,18 +533,15 @@ drop loop $continue|2 local.get $0 - i32.const 0 - i32.ne - local.tee $3 - if + if (result i32) local.get $2 i32.load8_u local.get $1 i32.load8_u i32.eq - local.set $3 + else + i32.const 0 end - local.get $3 if local.get $0 i32.const 1 diff --git a/tests/compiler/std/allocator_arena.untouched.wat b/tests/compiler/std/allocator_arena.untouched.wat index c61ed815..bab984aa 100644 --- a/tests/compiler/std/allocator_arena.untouched.wat +++ b/tests/compiler/std/allocator_arena.untouched.wat @@ -589,7 +589,6 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) global.get $~lib/memory/HEAP_BASE i32.const 7 i32.add @@ -718,7 +717,6 @@ local.get $3 i32.const 0 i32.ne - local.tee $6 if (result i32) local.get $5 i32.load8_u @@ -726,7 +724,7 @@ i32.load8_u i32.eq else - local.get $6 + i32.const 0 end if block diff --git a/tests/compiler/std/array-access.optimized.wat b/tests/compiler/std/array-access.optimized.wat index 5d36b739..e70fc97c 100644 --- a/tests/compiler/std/array-access.optimized.wat +++ b/tests/compiler/std/array-access.optimized.wat @@ -93,45 +93,44 @@ ) (func $~lib/util/string/compareImpl (; 5 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) - i32.const 72 - local.set $3 local.get $1 i32.const 1 i32.shl local.get $0 i32.add + local.set $0 + i32.const 72 local.set $1 loop $continue|0 local.get $2 if (result i32) + local.get $0 + i32.load16_u local.get $1 i32.load16_u - local.get $3 - i32.load16_u i32.sub - local.tee $4 + local.tee $3 i32.eqz else - local.get $2 + i32.const 0 end if local.get $2 i32.const 1 i32.sub local.set $2 + local.get $0 + i32.const 2 + i32.add + local.set $0 local.get $1 i32.const 2 i32.add local.set $1 - local.get $3 - i32.const 2 - i32.add - local.set $3 br $continue|0 end end - local.get $4 + local.get $3 ) (func $~lib/string/String#startsWith (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/std/array-access.untouched.wat b/tests/compiler/std/array-access.untouched.wat index 247837bc..518cfbf2 100644 --- a/tests/compiler/std/array-access.untouched.wat +++ b/tests/compiler/std/array-access.untouched.wat @@ -179,7 +179,7 @@ local.tee $5 i32.eqz else - local.get $4 + i32.const 0 end if block diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index 5e06fcff..81fc76cd 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -595,7 +595,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -619,19 +619,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 336 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -667,15 +663,13 @@ (local $4 i32) local.get $0 local.tee $2 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $2 i32.const 336 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/array-literal.untouched.wat b/tests/compiler/std/array-literal.untouched.wat index a728ff0e..f51516df 100644 --- a/tests/compiler/std/array-literal.untouched.wat +++ b/tests/compiler/std/array-literal.untouched.wat @@ -1037,7 +1037,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -1062,14 +1062,12 @@ ) (func $~lib/runtime/runtime.flags (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 9f49ff39..d488ca16 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -1751,34 +1751,31 @@ local.get $4 i32.lt_s select - local.set $4 + local.set $3 + local.get $1 + local.get $2 + local.get $3 + i32.add + i32.lt_s + i32.const 0 local.get $2 local.get $1 i32.lt_s - local.tee $3 + select if - local.get $1 - local.get $2 - local.get $4 - i32.add - i32.lt_s - local.set $3 - end - local.get $3 - if - local.get $4 + local.get $3 i32.const 1 i32.sub - local.tee $3 + local.tee $4 local.get $2 i32.add local.set $2 local.get $1 - local.get $3 + local.get $4 i32.add local.set $1 loop $continue|0 - local.get $4 + local.get $3 if local.get $1 i32.const 2 @@ -1800,10 +1797,10 @@ i32.const 1 i32.sub local.set $1 - local.get $4 + local.get $3 i32.const 1 i32.sub - local.set $4 + local.set $3 br $continue|0 end end @@ -1818,7 +1815,7 @@ i32.shl local.get $5 i32.add - local.get $4 + local.get $3 i32.const 2 i32.shl call $~lib/memory/memory.copy @@ -1948,20 +1945,16 @@ ) (func $~lib/array/Array#indexOf (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load offset=12 local.tee $3 - i32.eqz - local.tee $4 - i32.eqz - if + if (result i32) local.get $2 local.get $3 i32.ge_s - local.set $4 + else + i32.const 1 end - local.get $4 if i32.const -1 return @@ -2849,26 +2842,20 @@ local.get $2 ) (func $start:std/array~anonymous|31 (; 67 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + i32.const 1 + local.get $1 + i32.const 2 + i32.gt_s local.get $0 - i32.eqz - if - local.get $1 - i32.const 2 - i32.gt_s - local.set $0 - end - local.get $0 + select ) (func $start:std/array~anonymous|32 (; 68 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + i32.const 1 + local.get $1 + i32.const 100 + i32.gt_s local.get $0 - i32.eqz - if - local.get $1 - i32.const 100 - i32.gt_s - local.set $0 - end - local.get $0 + select ) (func $start:std/array~anonymous|33 (; 69 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $3 @@ -4990,7 +4977,7 @@ local.tee $3 i32.eqz else - local.get $2 + i32.const 0 end if local.get $2 @@ -5013,64 +5000,49 @@ (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 110 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) - block (result i32) - local.get $0 - local.get $1 - i32.eq - local.tee $2 - i32.eqz - if - local.get $0 - i32.eqz - local.set $2 - end - local.get $2 - i32.eqz - end - if (result i32) - local.get $1 - i32.eqz - else - local.get $2 - end + i32.const 1 + local.get $1 + i32.eqz + i32.const 1 + local.get $0 + i32.eqz + local.get $0 + local.get $1 + i32.eq + select + select if i32.const 0 return end + i32.const 0 local.get $1 i32.const 16 i32.sub i32.load offset=4 i32.const 1 i32.shr_u - local.set $3 + local.tee $2 + i32.eqz local.get $0 i32.const 16 i32.sub i32.load offset=4 i32.const 1 i32.shr_u - local.tee $4 - i32.eqz - local.tee $2 - if (result i32) - local.get $3 - i32.eqz - else - local.get $2 - end + local.tee $3 + select if i32.const 0 return end - local.get $4 + local.get $3 i32.eqz if i32.const -1 return end - local.get $3 + local.get $2 i32.eqz if i32.const 1 @@ -5078,10 +5050,10 @@ end local.get $0 local.get $1 - local.get $4 local.get $3 - local.get $4 + local.get $2 local.get $3 + local.get $2 i32.lt_s select call $~lib/util/string/compareImpl @@ -5125,15 +5097,11 @@ i32.const 1 return end - local.get $0 + local.get $1 i32.eqz - local.tee $2 - if (result i32) - local.get $2 - else - local.get $1 - i32.eqz - end + i32.const 1 + local.get $0 + select if i32.const 0 return @@ -5372,7 +5340,6 @@ (func $~lib/string/String#substring (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) local.get $0 i32.eqz if @@ -5408,34 +5375,34 @@ local.get $2 i32.lt_s select - local.tee $1 + local.tee $2 local.get $3 - local.get $1 + local.get $2 i32.gt_s select i32.const 1 i32.shl - local.tee $4 + local.tee $1 local.get $3 - local.get $1 + local.get $2 local.get $3 - local.get $1 + local.get $2 i32.lt_s select i32.const 1 i32.shl - local.tee $2 - i32.sub local.tee $3 + i32.sub + local.tee $2 i32.eqz if i32.const 4208 return end - local.get $2 - i32.eqz - local.tee $1 - if + local.get $3 + if (result i32) + i32.const 0 + else local.get $0 i32.const 16 i32.sub @@ -5444,22 +5411,20 @@ i32.shr_u i32.const 1 i32.shl - local.get $4 + local.get $1 i32.eq - local.set $1 end - local.get $1 if local.get $0 return end - local.get $3 + local.get $2 call $~lib/util/runtime/allocate local.tee $1 local.get $0 - local.get $2 - i32.add local.get $3 + i32.add + local.get $2 call $~lib/memory/memory.copy local.get $1 i32.const 16 @@ -5552,8 +5517,6 @@ local.get $5 i32.add i32.load8_u - i32.const 0 - i32.ne local.tee $8 i32.eqz i32.const 4 @@ -5604,8 +5567,6 @@ local.get $3 i32.add i32.load8_u - i32.const 0 - i32.ne local.tee $3 i32.eqz i32.const 4 @@ -6417,41 +6378,36 @@ i32.load16_u local.set $4 loop $continue|2 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 local.get $1 local.get $9 i64.lt_u - local.tee $0 - if - local.get $5 + select + if (result i32) + i32.const 1 + local.get $9 local.get $1 i64.sub + local.get $1 local.get $3 - i64.ge_u - local.set $0 - end - local.get $0 - if + i64.add + local.get $9 + i64.sub + i64.gt_u local.get $1 local.get $3 i64.add local.get $9 i64.lt_u - local.tee $0 - i32.eqz - if - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.sub - i64.gt_u - local.set $0 - end + select + else + i32.const 0 end - local.get $0 if local.get $4 i32.const 1 @@ -6549,41 +6505,36 @@ i32.load16_u local.set $4 loop $continue|4 + local.get $5 + local.get $1 + i64.sub + local.get $10 + i64.ge_u + i32.const 0 local.get $1 local.get $3 i64.lt_u - local.tee $0 - if - local.get $5 + select + if (result i32) + i32.const 1 + local.get $3 local.get $1 i64.sub + local.get $1 local.get $10 - i64.ge_u - local.set $0 - end - local.get $0 - if + i64.add + local.get $3 + i64.sub + i64.gt_u local.get $1 local.get $10 i64.add local.get $3 i64.lt_u - local.tee $0 - i32.eqz - if - local.get $3 - local.get $1 - i64.sub - local.get $1 - local.get $10 - i64.add - local.get $3 - i64.sub - i64.gt_u - local.set $0 - end + select + else + i32.const 0 end - local.get $0 if local.get $4 i32.const 1 @@ -6604,7 +6555,6 @@ ) (func $~lib/util/number/prettify (; 134 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $2 i32.eqz if @@ -6626,14 +6576,13 @@ i32.add local.tee $3 i32.le_s - local.tee $4 - if + if (result i32) local.get $3 i32.const 21 i32.le_s - local.set $4 + else + i32.const 0 end - local.get $4 if (result i32) loop $repeat|0 block $break|0 @@ -6666,17 +6615,14 @@ i32.const 2 i32.add else + local.get $3 + i32.const 21 + i32.le_s + i32.const 0 local.get $3 i32.const 0 i32.gt_s - local.tee $4 - if - local.get $3 - i32.const 21 - i32.le_s - local.set $4 - end - local.get $4 + select if (result i32) local.get $3 i32.const 1 @@ -6700,22 +6646,19 @@ i32.const 1 i32.add else + local.get $3 + i32.const 0 + i32.le_s + i32.const 0 i32.const -6 local.get $3 i32.lt_s - local.tee $2 - if - local.get $3 - i32.const 0 - i32.le_s - local.set $2 - end - local.get $2 + select if (result i32) i32.const 2 local.get $3 i32.sub - local.tee $4 + local.tee $3 i32.const 1 i32.shl local.get $0 @@ -6733,7 +6676,7 @@ loop $repeat|1 block $break|1 local.get $2 - local.get $4 + local.get $3 i32.ge_s br_if $break|1 local.get $2 @@ -6751,7 +6694,7 @@ end end local.get $1 - local.get $4 + local.get $3 i32.add else local.get $1 @@ -6830,7 +6773,7 @@ local.tee $0 i32.const 0 i32.lt_s - local.tee $4 + local.tee $3 if i32.const 0 local.get $0 @@ -6848,7 +6791,7 @@ local.get $2 i32.const 45 i32.const 43 - local.get $4 + local.get $3 select i32.store16 local.get $0 @@ -13504,7 +13447,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -13528,19 +13471,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 166 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 8072 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -13576,15 +13515,13 @@ (local $4 i32) local.get $0 local.tee $2 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $2 i32.const 8072 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index c76fdbce..153a667d 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -857,7 +857,7 @@ i32.const 0 i32.ne else - i32.const 1 + i32.const 0 end ) (func $~lib/array/Array.isArray<~lib/array/Array> (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) @@ -867,7 +867,7 @@ i32.const 0 i32.ne else - i32.const 1 + i32.const 0 end ) (func $std/array/P#constructor (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) @@ -2022,7 +2022,6 @@ local.get $9 local.get $8 i32.lt_s - local.tee $6 if (result i32) local.get $8 local.get $9 @@ -2030,7 +2029,7 @@ i32.add i32.lt_s else - local.get $6 + i32.const 0 end if local.get $9 @@ -2300,9 +2299,8 @@ local.get $3 i32.const 0 i32.eq - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 local.get $3 @@ -2564,8 +2562,6 @@ local.get $1 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $2 return @@ -2752,8 +2748,6 @@ local.get $1 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if i32.const 1 return @@ -3271,8 +3265,6 @@ local.get $1 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $3 local.get $5 @@ -3395,10 +3387,8 @@ ) (func $start:std/array~anonymous|31 (; 98 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $0 - i32.const 0 - i32.ne if (result i32) - local.get $0 + i32.const 1 else local.get $1 i32.const 2 @@ -3465,10 +3455,8 @@ ) (func $start:std/array~anonymous|32 (; 100 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $0 - i32.const 0 - i32.ne if (result i32) - local.get $0 + i32.const 1 else local.get $1 i32.const 100 @@ -3554,10 +3542,8 @@ ) (func $start:std/array~anonymous|38 (; 107 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $0 - i32.const 0 - i32.ne if (result i32) - local.get $0 + i32.const 1 else local.get $1 i32.const 2 @@ -3611,10 +3597,8 @@ ) (func $start:std/array~anonymous|39 (; 109 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $0 - i32.const 0 - i32.ne if (result i32) - local.get $0 + i32.const 1 else local.get $1 i32.const 100 @@ -7444,7 +7428,7 @@ local.tee $5 i32.eqz else - local.get $4 + i32.const 0 end if block @@ -7475,17 +7459,15 @@ local.get $0 local.get $1 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 i32.const 0 i32.eq end - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -7497,30 +7479,29 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 + local.set $2 local.get $1 call $~lib/string/String#get:length - local.set $4 - local.get $3 + local.set $3 + local.get $2 i32.eqz - local.tee $2 if (result i32) - local.get $4 + local.get $3 i32.eqz else - local.get $2 + i32.const 0 end if i32.const 0 return end - local.get $3 + local.get $2 i32.eqz if i32.const -1 return end - local.get $4 + local.get $3 i32.eqz if i32.const 1 @@ -7530,11 +7511,11 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 - local.tee $2 - local.get $4 - local.tee $5 local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 local.get $5 i32.lt_s select @@ -7563,7 +7544,6 @@ ) (func $~lib/string/String.__eq (; 191 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - (local $3 i32) local.get $0 local.get $1 i32.eq @@ -7574,9 +7554,8 @@ local.get $0 i32.const 0 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -7588,8 +7567,8 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 - local.get $3 + local.set $2 + local.get $2 local.get $1 call $~lib/string/String#get:length i32.ne @@ -7601,7 +7580,7 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 + local.get $2 call $~lib/util/string/compareImpl i32.eqz ) @@ -8232,17 +8211,15 @@ local.get $0 local.get $1 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 i32.const 0 i32.eq end - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -8254,30 +8231,29 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 + local.set $2 local.get $1 call $~lib/string/String#get:length - local.set $4 - local.get $3 + local.set $3 + local.get $2 i32.eqz - local.tee $2 if (result i32) - local.get $4 + local.get $3 i32.eqz else - local.get $2 + i32.const 0 end if i32.const 0 return end - local.get $3 + local.get $2 i32.eqz if i32.const -1 return end - local.get $4 + local.get $3 i32.eqz if i32.const 1 @@ -8287,11 +8263,11 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 - local.tee $2 - local.get $4 - local.tee $5 local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 local.get $5 i32.lt_s select @@ -8408,7 +8384,6 @@ end local.get $8 i32.eqz - local.tee $4 if (result i32) local.get $9 local.get $0 @@ -8417,7 +8392,7 @@ i32.shl i32.eq else - local.get $4 + i32.const 0 end if local.get $0 @@ -8502,8 +8477,6 @@ i32.const 4504 local.get $3 i32.load8_u - i32.const 0 - i32.ne select return end @@ -8557,8 +8530,6 @@ i32.const 4480 i32.const 4504 local.get $9 - i32.const 0 - i32.ne select local.get $5 i32.const 1 @@ -8615,8 +8586,6 @@ i32.const 4480 i32.const 4504 local.get $9 - i32.const 0 - i32.ne select local.get $5 i32.const 1 @@ -9386,7 +9355,6 @@ (local $24 i64) (local $25 i32) (local $26 i32) - (local $27 i32) i32.const 0 local.get $4 i32.sub @@ -9711,7 +9679,6 @@ local.get $23 local.get $21 i64.lt_u - local.tee $27 if (result i32) local.get $24 local.get $23 @@ -9719,18 +9686,16 @@ local.get $22 i64.ge_u else - local.get $27 + i32.const 0 end - local.tee $27 if (result i32) local.get $23 local.get $22 i64.add local.get $21 i64.lt_u - local.tee $27 if (result i32) - local.get $27 + i32.const 1 else local.get $21 local.get $23 @@ -9743,7 +9708,7 @@ i64.gt_u end else - local.get $27 + i32.const 0 end if block @@ -9873,7 +9838,6 @@ local.get $23 local.get $21 i64.lt_u - local.tee $20 if (result i32) local.get $24 local.get $23 @@ -9881,18 +9845,16 @@ local.get $22 i64.ge_u else - local.get $20 + i32.const 0 end - local.tee $20 if (result i32) local.get $23 local.get $22 i64.add local.get $21 i64.lt_u - local.tee $20 if (result i32) - local.get $20 + i32.const 1 else local.get $21 local.get $23 @@ -9905,7 +9867,7 @@ i64.gt_u end else - local.get $20 + i32.const 0 end if block @@ -9972,13 +9934,12 @@ local.get $1 local.get $3 i32.le_s - local.tee $4 if (result i32) local.get $3 i32.const 21 i32.le_s else - local.get $4 + i32.const 0 end if block $break|0 @@ -10025,13 +9986,12 @@ local.get $3 i32.const 0 i32.gt_s - local.tee $4 if (result i32) local.get $3 i32.const 21 i32.le_s else - local.get $4 + i32.const 0 end if local.get $0 @@ -10065,13 +10025,12 @@ i32.const -6 local.get $3 i32.lt_s - local.tee $4 if (result i32) local.get $3 i32.const 0 i32.le_s else - local.get $4 + i32.const 0 end if i32.const 2 @@ -18055,7 +18014,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -18080,14 +18039,12 @@ ) (func $~lib/runtime/runtime.flags (; 289 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 844b0fc5..4373eeb8 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -1046,7 +1046,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -1070,19 +1070,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 296 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -1117,15 +1113,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 296 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index aa140afe..40fb69f7 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -1884,7 +1884,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -1909,14 +1909,12 @@ ) (func $~lib/runtime/runtime.flags (; 25 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index ecae1044..65338200 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -2555,7 +2555,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -2579,19 +2579,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 320 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -2626,15 +2622,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 320 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/dataview.untouched.wat b/tests/compiler/std/dataview.untouched.wat index 7e06a048..55cad3ba 100644 --- a/tests/compiler/std/dataview.untouched.wat +++ b/tests/compiler/std/dataview.untouched.wat @@ -675,8 +675,6 @@ unreachable end local.get $2 - i32.const 0 - i32.ne if (result f32) local.get $0 i32.load offset=4 @@ -752,8 +750,6 @@ unreachable end local.get $2 - i32.const 0 - i32.ne if (result f64) local.get $0 i32.load offset=4 @@ -832,8 +828,6 @@ i32.load16_s local.set $3 local.get $2 - i32.const 0 - i32.ne if (result i32) local.get $3 else @@ -882,8 +876,6 @@ i32.load local.set $3 local.get $2 - i32.const 0 - i32.ne if (result i32) local.get $3 else @@ -957,8 +949,6 @@ i64.load local.set $3 local.get $2 - i32.const 0 - i32.ne if (result i64) local.get $3 else @@ -1026,8 +1016,6 @@ i32.load16_u local.set $3 local.get $2 - i32.const 0 - i32.ne if (result i32) local.get $3 else @@ -1062,8 +1050,6 @@ i32.load local.set $3 local.get $2 - i32.const 0 - i32.ne if (result i32) local.get $3 else @@ -1098,8 +1084,6 @@ i64.load local.set $3 local.get $2 - i32.const 0 - i32.ne if (result i64) local.get $3 else @@ -1127,8 +1111,6 @@ unreachable end local.get $3 - i32.const 0 - i32.ne if local.get $0 i32.load offset=4 @@ -1167,8 +1149,6 @@ unreachable end local.get $3 - i32.const 0 - i32.ne if local.get $0 i32.load offset=4 @@ -1231,8 +1211,6 @@ local.get $1 i32.add local.get $3 - i32.const 0 - i32.ne if (result i32) local.get $2 else @@ -1265,8 +1243,6 @@ local.get $1 i32.add local.get $3 - i32.const 0 - i32.ne if (result i32) local.get $2 else @@ -1299,8 +1275,6 @@ local.get $1 i32.add local.get $3 - i32.const 0 - i32.ne if (result i64) local.get $2 else @@ -1353,8 +1327,6 @@ local.get $1 i32.add local.get $3 - i32.const 0 - i32.ne if (result i32) local.get $2 else @@ -1387,8 +1359,6 @@ local.get $1 i32.add local.get $3 - i32.const 0 - i32.ne if (result i32) local.get $2 else @@ -1421,8 +1391,6 @@ local.get $1 i32.add local.get $3 - i32.const 0 - i32.ne if (result i64) local.get $2 else @@ -3214,7 +3182,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -3239,14 +3207,12 @@ ) (func $~lib/runtime/runtime.flags (; 47 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index df16427a..e5f42c2f 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -284,7 +284,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -308,19 +308,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 152 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -355,15 +351,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 152 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index e0115afe..7819724e 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -419,7 +419,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -444,14 +444,12 @@ ) (func $~lib/runtime/runtime.flags (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/libm.optimized.wat b/tests/compiler/std/libm.optimized.wat index 3ac8166d..67dda680 100644 --- a/tests/compiler/std/libm.optimized.wat +++ b/tests/compiler/std/libm.optimized.wat @@ -235,32 +235,29 @@ (local $1 f64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) - (local $6 f64) - (local $7 i64) - (local $8 f64) + (local $6 i64) + (local $7 f64) i32.const 1 - local.set $2 + local.set $3 local.get $0 i64.reinterpret_f64 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $2 i32.const 1071284858 i32.lt_u - local.tee $4 - i32.eqz - if - local.get $3 + if (result i32) + i32.const 1 + else + local.get $2 i32.const 31 i32.shr_u - local.set $4 end - local.get $4 if - local.get $3 + local.get $2 i32.const -1074790400 i32.ge_u if @@ -280,7 +277,7 @@ f64.div return end - local.get $3 + local.get $2 i32.const 1 i32.shl i32.const 2034237440 @@ -289,17 +286,17 @@ local.get $0 return end - local.get $3 + local.get $2 i32.const -1076707644 i32.le_u if i32.const 0 - local.set $2 + local.set $3 local.get $0 local.set $1 end else - local.get $3 + local.get $2 i32.const 2146435072 i32.ge_u if @@ -307,28 +304,28 @@ return end end - local.get $2 + local.get $3 if f64.const 1 local.get $0 f64.add i64.reinterpret_f64 - local.tee $7 + local.tee $6 i64.const 32 i64.shr_u i32.wrap_i64 i32.const 614242 i32.add - local.tee $4 + local.tee $2 i32.const 20 i32.shr_u i32.const 1023 i32.sub - local.tee $2 + local.tee $3 i32.const 54 i32.lt_s if (result f64) - local.get $7 + local.get $6 f64.reinterpret_i64 local.set $1 f64.const 1 @@ -341,7 +338,7 @@ f64.const 1 f64.sub f64.sub - local.get $2 + local.get $3 i32.const 2 i32.ge_s select @@ -350,11 +347,11 @@ else f64.const 0 end - local.set $6 - local.get $7 + local.set $5 + local.get $6 i64.const 4294967295 i64.and - local.get $4 + local.get $2 i32.const 1048575 i32.and i32.const 1072079006 @@ -373,21 +370,21 @@ local.get $1 f64.add f64.div - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.mul - local.tee $8 - local.get $8 + local.tee $7 + local.get $7 f64.mul local.set $0 - local.get $5 + local.get $4 f64.const 0.5 local.get $1 f64.mul local.get $1 f64.mul - local.tee $5 - local.get $8 + local.tee $4 + local.get $7 f64.const 0.6666666666666735 local.get $0 f64.const 0.2857142874366239 @@ -416,15 +413,15 @@ f64.add f64.add f64.mul - local.get $2 + local.get $3 f64.convert_i32_s local.tee $0 f64.const 1.9082149292705877e-10 f64.mul - local.get $6 - f64.add - f64.add local.get $5 + f64.add + f64.add + local.get $4 f64.sub local.get $1 f64.add @@ -435,32 +432,29 @@ ) (func $~lib/math/NativeMath.log (; 5 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 i32) - (local $2 i32) - (local $3 i64) + (local $2 i64) + (local $3 f64) (local $4 f64) - (local $5 f64) - (local $6 i32) - (local $7 f64) + (local $5 i32) + (local $6 f64) local.get $0 i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $2 + local.tee $1 i32.const 1048576 i32.lt_u - local.tee $1 - i32.eqz - if - local.get $2 + if (result i32) + i32.const 1 + else + local.get $1 i32.const 31 i32.shr_u - local.set $1 end - local.get $1 if - local.get $3 + local.get $2 i64.const 1 i64.shl i64.const 0 @@ -473,7 +467,7 @@ f64.div return end - local.get $2 + local.get $1 i32.const 31 i32.shr_u if @@ -485,18 +479,18 @@ return end i32.const -54 - local.set $6 + local.set $5 local.get $0 f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 2146435072 i32.ge_u if @@ -504,28 +498,25 @@ return else local.get $2 + i64.const 32 + i64.shl + i64.const 0 + i64.eq + i32.const 0 + local.get $1 i32.const 1072693248 i32.eq - local.tee $1 - if - local.get $3 - i64.const 32 - i64.shl - i64.const 0 - i64.eq - local.set $1 - end - local.get $1 + select if f64.const 0 return end end end - local.get $3 + local.get $2 i64.const 4294967295 i64.and - local.get $2 + local.get $1 i32.const 614242 i32.add local.tee $1 @@ -540,26 +531,26 @@ f64.reinterpret_i64 f64.const 1 f64.sub - local.tee $4 + local.tee $3 f64.const 2 - local.get $4 + local.get $3 f64.add f64.div - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.mul - local.tee $7 - local.get $7 + local.tee $6 + local.get $6 f64.mul local.set $0 - local.get $5 + local.get $4 f64.const 0.5 - local.get $4 + local.get $3 f64.mul - local.get $4 + local.get $3 f64.mul - local.tee $5 - local.get $7 + local.tee $4 + local.get $6 f64.const 0.6666666666666735 local.get $0 f64.const 0.2857142874366239 @@ -593,16 +584,16 @@ i32.shr_s i32.const 1023 i32.sub - local.get $6 + local.get $5 i32.add f64.convert_i32_s local.tee $0 f64.const 1.9082149292705877e-10 f64.mul f64.add - local.get $5 - f64.sub local.get $4 + f64.sub + local.get $3 f64.add local.get $0 f64.const 0.6931471803691238 @@ -670,14 +661,14 @@ (func $~lib/math/NativeMath.asin (; 8 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 f64) (local $2 i32) - (local $3 i32) - (local $4 f64) + (local $3 f64) + (local $4 i32) local.get $0 i64.reinterpret_f64 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $4 i32.const 2147483647 i32.and local.tee $2 @@ -711,17 +702,14 @@ i32.const 1071644672 i32.lt_u if + local.get $2 + i32.const 1048576 + i32.ge_u + i32.const 0 local.get $2 i32.const 1045430272 i32.lt_u - local.tee $3 - if - local.get $2 - i32.const 1048576 - i32.ge_u - local.set $3 - end - local.get $3 + select if local.get $0 return @@ -747,7 +735,7 @@ local.set $0 local.get $1 call $~lib/math/R - local.set $4 + local.set $3 local.get $2 i32.const 1072640819 i32.ge_u @@ -756,7 +744,7 @@ f64.const 2 local.get $0 local.get $0 - local.get $4 + local.get $3 f64.mul f64.add f64.mul @@ -768,7 +756,7 @@ f64.const 2 local.get $0 f64.mul - local.get $4 + local.get $3 f64.mul f64.const 6.123233995736766e-17 f64.const 2 @@ -798,7 +786,7 @@ f64.sub end local.set $0 - local.get $3 + local.get $4 i32.const 31 i32.shr_u if @@ -1178,19 +1166,16 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 i64) + (local $5 i64) + (local $6 i32) (local $7 i32) - local.get $1 - local.get $1 - f64.ne - local.tee $3 - local.set $2 - local.get $2 + i32.const 1 local.get $0 local.get $0 f64.ne - local.get $3 + local.get $1 + local.get $1 + f64.ne select if local.get $1 @@ -1200,20 +1185,20 @@ end local.get $0 i64.reinterpret_f64 - local.tee $6 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 local.set $3 - local.get $6 + local.get $5 i32.wrap_i64 - local.set $5 + local.set $6 local.get $1 i64.reinterpret_f64 - local.tee $6 + local.tee $5 i32.wrap_i64 local.tee $7 - local.get $6 + local.get $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -1241,11 +1226,11 @@ i32.const 2147483647 i32.and local.set $4 - local.get $5 local.get $3 i32.const 2147483647 i32.and - local.tee $5 + local.tee $3 + local.get $6 i32.or i32.eqz if @@ -1284,7 +1269,7 @@ i32.const 2146435072 i32.eq if - local.get $5 + local.get $3 i32.const 2146435072 i32.eq if @@ -1337,33 +1322,27 @@ end end end + i32.const 1 + local.get $3 + i32.const 2146435072 + i32.eq local.get $4 i32.const 67108864 i32.add - local.get $5 + local.get $3 i32.lt_u - local.tee $3 - if (result i32) - local.get $3 - else - local.get $5 - i32.const 2146435072 - i32.eq - end + select br_if $folding-inner0 + local.get $3 + i32.const 67108864 + i32.add + local.get $4 + i32.lt_u + i32.const 0 local.get $2 i32.const 2 i32.and - local.tee $3 - if (result i32) - local.get $5 - i32.const 67108864 - i32.add - local.get $4 - i32.lt_u - else - local.get $3 - end + select if (result f64) f64.const 0 else @@ -1595,14 +1574,14 @@ i64.const 63 i64.shr_u i32.wrap_i64 - local.set $5 + local.set $6 local.get $8 i64.const 32 i64.shr_u i64.const 2147483647 i64.and i32.wrap_i64 - local.tee $6 + local.tee $5 i32.const 1078159482 i32.ge_u if @@ -1613,7 +1592,7 @@ local.get $0 return end - local.get $5 + local.get $6 if f64.const -1 return @@ -1628,13 +1607,13 @@ return end end - local.get $6 + local.get $5 i32.const 1071001154 i32.gt_u if local.get $0 i32.const 1 - local.get $5 + local.get $6 i32.const 1 i32.shl i32.sub @@ -1646,7 +1625,7 @@ f64.copysign f64.add i32.trunc_f64_s - local.get $6 + local.get $5 i32.const 1072734898 i32.lt_u select @@ -1669,7 +1648,7 @@ f64.sub local.set $7 else - local.get $6 + local.get $5 i32.const 1016070144 i32.lt_u if @@ -1795,17 +1774,14 @@ i64.shl f64.reinterpret_i64 local.set $1 + i32.const 1 + local.get $3 + i32.const 56 + i32.gt_s local.get $3 i32.const 0 i32.lt_s - local.tee $5 - if (result i32) - local.get $5 - else - local.get $3 - i32.const 56 - i32.gt_s - end + select if local.get $0 local.get $2 @@ -2179,9 +2155,8 @@ (local $7 f64) (local $8 f64) (local $9 i32) - (local $10 i32) - (local $11 f64) - (local $12 i64) + (local $10 f64) + (local $11 i64) local.get $0 i64.reinterpret_f64 i64.const 9223372036854775807 @@ -2195,10 +2170,10 @@ i64.lt_u if local.get $4 - local.set $12 + local.set $11 local.get $2 local.set $4 - local.get $12 + local.get $11 local.set $2 end local.get $4 @@ -2223,18 +2198,14 @@ local.get $4 f64.reinterpret_i64 local.set $0 + i32.const 1 + local.get $2 + i64.const 0 + i64.eq local.get $5 i32.const 2047 i32.eq - local.tee $10 - i32.eqz - if - local.get $2 - i64.const 0 - i64.eq - local.set $10 - end - local.get $10 + select if local.get $0 return @@ -2294,7 +2265,7 @@ f64.add local.tee $7 f64.sub - local.set $11 + local.set $10 local.get $1 local.get $1 local.get $1 @@ -2335,9 +2306,9 @@ f64.const 2 local.get $7 f64.mul - local.get $11 + local.get $10 f64.add - local.get $11 + local.get $10 f64.mul f64.add f64.add @@ -2402,33 +2373,30 @@ (func $~lib/math/NativeMath.log10 (; 38 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 f64) (local $2 i32) - (local $3 i32) - (local $4 i64) - (local $5 f64) - (local $6 i32) + (local $3 i64) + (local $4 f64) + (local $5 i32) + (local $6 f64) (local $7 f64) (local $8 f64) - (local $9 f64) local.get $0 i64.reinterpret_f64 - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $2 i32.const 1048576 i32.lt_u - local.tee $2 - i32.eqz - if - local.get $3 + if (result i32) + i32.const 1 + else + local.get $2 i32.const 31 i32.shr_u - local.set $2 end - local.get $2 if - local.get $4 + local.get $3 i64.const 1 i64.shl i64.const 0 @@ -2441,7 +2409,7 @@ f64.div return end - local.get $3 + local.get $2 i32.const 31 i32.shr_u if @@ -2453,18 +2421,18 @@ return end i32.const -54 - local.set $6 + local.set $5 local.get $0 f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $3 + local.set $2 else - local.get $3 + local.get $2 i32.const 2146435072 i32.ge_u if @@ -2472,28 +2440,25 @@ return else local.get $3 + i64.const 32 + i64.shl + i64.const 0 + i64.eq + i32.const 0 + local.get $2 i32.const 1072693248 i32.eq - local.tee $2 - if - local.get $4 - i64.const 32 - i64.shl - i64.const 0 - i64.eq - local.set $2 - end - local.get $2 + select if f64.const 0 return end end end - local.get $4 + local.get $3 i64.const 4294967295 i64.and - local.get $3 + local.get $2 i32.const 614242 i32.add local.tee $2 @@ -2513,26 +2478,26 @@ local.get $1 f64.add f64.div + local.tee $6 + local.get $6 + f64.mul local.tee $7 local.get $7 f64.mul - local.tee $8 - local.get $8 - f64.mul local.set $0 local.get $2 i32.const 20 i32.shr_u i32.const 1023 i32.sub - local.get $6 + local.get $5 i32.add f64.convert_i32_s - local.tee $5 + local.tee $4 f64.const 0.30102999566361177 f64.mul - local.set $9 - local.get $5 + local.set $8 + local.get $4 f64.const 3.694239077158931e-13 f64.mul local.get $1 @@ -2548,13 +2513,13 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $5 + local.tee $4 f64.sub local.get $1 f64.sub + local.get $6 + local.get $1 local.get $7 - local.get $1 - local.get $8 f64.const 0.6666666666666735 local.get $0 f64.const 0.2857142874366239 @@ -2585,7 +2550,7 @@ f64.mul f64.add local.tee $0 - local.get $5 + local.get $4 f64.add f64.const 2.5082946711645275e-11 f64.mul @@ -2594,9 +2559,9 @@ f64.const 0.4342944818781689 f64.mul f64.add - local.get $9 - local.get $9 - local.get $5 + local.get $8 + local.get $8 + local.get $4 f64.const 0.4342944818781689 f64.mul local.tee $0 @@ -2620,32 +2585,29 @@ (func $~lib/math/NativeMath.log2 (; 41 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 f64) (local $2 i32) - (local $3 i32) - (local $4 i64) + (local $3 i64) + (local $4 f64) (local $5 f64) - (local $6 f64) - (local $7 i32) - (local $8 f64) + (local $6 i32) + (local $7 f64) local.get $0 i64.reinterpret_f64 - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $2 i32.const 1048576 i32.lt_u - local.tee $2 - i32.eqz - if - local.get $3 + if (result i32) + i32.const 1 + else + local.get $2 i32.const 31 i32.shr_u - local.set $2 end - local.get $2 if - local.get $4 + local.get $3 i64.const 1 i64.shl i64.const 0 @@ -2658,7 +2620,7 @@ f64.div return end - local.get $3 + local.get $2 i32.const 31 i32.shr_u if @@ -2670,18 +2632,18 @@ return end i32.const -54 - local.set $7 + local.set $6 local.get $0 f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $3 + local.set $2 else - local.get $3 + local.get $2 i32.const 2146435072 i32.ge_u if @@ -2689,28 +2651,25 @@ return else local.get $3 + i64.const 32 + i64.shl + i64.const 0 + i64.eq + i32.const 0 + local.get $2 i32.const 1072693248 i32.eq - local.tee $2 - if - local.get $4 - i64.const 32 - i64.shl - i64.const 0 - i64.eq - local.set $2 - end - local.get $2 + select if f64.const 0 return end end end - local.get $4 + local.get $3 i64.const 4294967295 i64.and - local.get $3 + local.get $2 i32.const 614242 i32.add local.tee $2 @@ -2730,12 +2689,12 @@ local.get $1 f64.add f64.div + local.tee $4 + local.get $4 + f64.mul local.tee $5 local.get $5 f64.mul - local.tee $6 - local.get $6 - f64.mul local.set $0 local.get $1 local.get $1 @@ -2750,13 +2709,13 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $8 + local.tee $7 f64.sub local.get $1 f64.sub + local.get $4 + local.get $1 local.get $5 - local.get $1 - local.get $6 f64.const 0.6666666666666735 local.get $0 f64.const 0.2857142874366239 @@ -2792,18 +2751,18 @@ i32.shr_u i32.const 1023 i32.sub - local.get $7 + local.get $6 i32.add f64.convert_i32_s - local.tee $5 - local.get $8 + local.tee $4 + local.get $7 f64.const 1.4426950407214463 f64.mul - local.tee $6 + local.tee $5 f64.add local.set $1 local.get $0 - local.get $8 + local.get $7 f64.add f64.const 1.6751713164886512e-10 f64.mul @@ -2811,10 +2770,10 @@ f64.const 1.4426950407214463 f64.mul f64.add - local.get $5 + local.get $4 local.get $1 f64.sub - local.get $6 + local.get $5 f64.add f64.add local.get $1 @@ -2835,9 +2794,9 @@ f64.min ) (func $~lib/math/NativeMath.pow (; 45 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64) - (local $2 i32) + (local $2 f64) (local $3 f64) - (local $4 f64) + (local $4 i32) (local $5 i32) (local $6 i32) (local $7 f64) @@ -2866,7 +2825,7 @@ local.tee $17 i32.const 2147483647 i32.and - local.set $5 + local.set $4 local.get $1 i64.reinterpret_f64 local.tee $16 @@ -2887,46 +2846,38 @@ f64.const 1 return end - local.get $5 + i32.const 1 + local.get $8 i32.const 2146435072 i32.gt_s - local.tee $2 - i32.eqz - if - local.get $5 + local.get $4 + i32.const 2146435072 + i32.gt_s + if (result i32) + i32.const 1 + else + local.get $19 + i32.const 0 + i32.ne + i32.const 0 + local.get $4 i32.const 2146435072 i32.eq - local.tee $2 - if - local.get $19 - i32.const 0 - i32.ne - local.set $2 - end + select end - local.get $2 - i32.eqz - if - local.get $8 - i32.const 2146435072 - i32.gt_s - local.set $2 - end - local.get $2 - i32.eqz - if + select + if (result i32) + i32.const 1 + else + local.get $6 + i32.const 0 + i32.ne + i32.const 0 local.get $8 i32.const 2146435072 i32.eq - local.tee $2 - if - local.get $6 - i32.const 0 - i32.ne - local.set $2 - end + select end - local.get $2 if local.get $0 local.get $1 @@ -2959,8 +2910,8 @@ i32.gt_s local.tee $13 select - local.tee $2 - local.get $2 + local.tee $5 + local.get $5 i32.const 52 i32.const 20 local.get $13 @@ -2969,13 +2920,13 @@ i32.sub local.tee $13 i32.shr_s - local.tee $2 + local.tee $5 local.get $13 i32.shl i32.eq if (result i32) i32.const 2 - local.get $2 + local.get $5 i32.const 1 i32.and i32.sub @@ -2995,13 +2946,13 @@ i32.const 2146435072 i32.eq if - local.get $5 + local.get $4 i32.const 1072693248 i32.sub local.get $19 i32.or if - local.get $5 + local.get $4 i32.const 1072693248 i32.ge_s if @@ -3072,66 +3023,58 @@ end local.get $0 f64.abs - local.set $4 + local.set $3 local.get $19 i32.eqz if - local.get $5 - i32.eqz - local.tee $2 - i32.eqz - if - local.get $5 - i32.const 2146435072 - i32.eq - local.set $2 - end - local.get $2 - i32.eqz - if - local.get $5 - i32.const 1072693248 - i32.eq - local.set $2 - end - local.get $2 + i32.const 1 + local.get $4 + i32.const 1072693248 + i32.eq + local.get $4 + i32.const 2146435072 + i32.eq + i32.const 1 + local.get $4 + select + select if f64.const 1 - local.get $4 + local.get $3 f64.div - local.get $4 + local.get $3 local.get $9 i32.const 0 i32.lt_s select - local.set $4 + local.set $3 local.get $17 i32.const 0 i32.lt_s if (result f64) - local.get $5 + local.get $4 i32.const 1072693248 i32.sub local.get $11 i32.or if (result f64) - local.get $4 + local.get $3 f64.neg - local.get $4 + local.get $3 local.get $11 i32.const 1 i32.eq select else - local.get $4 - local.get $4 + local.get $3 + local.get $3 f64.sub local.tee $0 local.get $0 f64.div end else - local.get $4 + local.get $3 end return end @@ -3169,7 +3112,7 @@ i32.const 1139802112 i32.gt_s if - local.get $5 + local.get $4 i32.const 1072693247 i32.le_s if @@ -3181,7 +3124,7 @@ select return end - local.get $5 + local.get $4 i32.const 1072693248 i32.ge_s if @@ -3194,7 +3137,7 @@ return end end - local.get $5 + local.get $4 i32.const 1072693247 i32.lt_s if @@ -3216,7 +3159,7 @@ end return end - local.get $5 + local.get $4 i32.const 1072693248 i32.gt_s if @@ -3238,16 +3181,16 @@ end return end - local.get $4 + local.get $3 f64.const 1 f64.sub - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f64.mul f64.const 0.5 - local.get $3 + local.get $2 f64.const 0.3333333333333333 - local.get $3 + local.get $2 f64.const 0.25 f64.mul f64.sub @@ -3256,10 +3199,10 @@ f64.mul local.set $0 f64.const 1.4426950216293335 - local.get $3 + local.get $2 f64.mul - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 f64.const 1.9259629911266175e-08 f64.mul local.get $0 @@ -3275,50 +3218,50 @@ local.set $10 local.get $0 local.get $10 - local.get $4 + local.get $3 f64.sub f64.sub else i32.const 0 local.set $6 - local.get $5 + local.get $4 i32.const 1048576 i32.lt_s if (result i32) - local.get $4 + local.get $3 f64.const 9007199254740992 f64.mul - local.tee $4 + local.tee $3 i64.reinterpret_f64 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $5 + local.set $4 i32.const -53 else i32.const 0 end - local.get $5 + local.get $4 i32.const 20 i32.shr_s i32.const 1023 i32.sub i32.add local.set $6 - local.get $5 + local.get $4 i32.const 1048575 i32.and - local.tee $2 + local.tee $5 i32.const 1072693248 i32.or - local.set $5 - local.get $2 + local.set $4 + local.get $5 i32.const 235662 i32.le_s if (result i32) i32.const 0 else - local.get $2 + local.get $5 i32.const 767610 i32.lt_s if (result i32) @@ -3328,38 +3271,38 @@ i32.const 1 i32.add local.set $6 - local.get $5 + local.get $4 i32.const -1048576 i32.add - local.set $5 + local.set $4 i32.const 0 end end - local.set $2 - local.get $4 + local.set $5 + local.get $3 i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $5 + local.get $4 i64.extend_i32_s i64.const 32 i64.shl i64.or f64.reinterpret_i64 - local.tee $4 + local.tee $3 f64.const 1.5 f64.const 1 - local.get $2 + local.get $5 select local.tee $0 f64.sub local.tee $10 f64.const 1 - local.get $4 + local.get $3 local.get $0 f64.add f64.div - local.tee $3 + local.tee $2 f64.mul local.tee $18 i64.reinterpret_f64 @@ -3367,15 +3310,15 @@ i64.and f64.reinterpret_i64 local.set $14 + local.get $3 local.get $4 - local.get $5 i32.const 1 i32.shr_s i32.const 536870912 i32.or i32.const 524288 i32.add - local.get $2 + local.get $5 i32.const 18 i32.shl i32.add @@ -3383,7 +3326,7 @@ i64.const 32 i64.shl f64.reinterpret_i64 - local.tee $4 + local.tee $3 local.get $0 f64.sub f64.sub @@ -3424,10 +3367,10 @@ f64.mul f64.add f64.mul - local.get $3 + local.get $2 local.get $10 local.get $14 - local.get $4 + local.get $3 f64.mul f64.sub local.get $14 @@ -3435,7 +3378,7 @@ f64.mul f64.sub f64.mul - local.tee $3 + local.tee $2 local.get $14 local.get $18 f64.add @@ -3449,8 +3392,8 @@ f64.reinterpret_i64 local.tee $10 f64.mul - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 local.get $10 f64.mul local.get $0 @@ -3469,15 +3412,15 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $3 + local.tee $2 f64.mul local.tee $20 f64.const -7.028461650952758e-09 - local.get $3 + local.get $2 f64.mul local.get $0 + local.get $2 local.get $3 - local.get $4 f64.sub f64.sub f64.const 0.9617966939259756 @@ -3485,16 +3428,16 @@ f64.add f64.const 1.350039202129749e-08 f64.const 0 - local.get $2 + local.get $5 select f64.add - local.tee $3 + local.tee $2 f64.add f64.const 0.5849624872207642 f64.const 0 - local.get $2 + local.get $5 select - local.tee $4 + local.tee $3 f64.add local.get $6 f64.convert_i32_s @@ -3505,17 +3448,17 @@ i64.and f64.reinterpret_i64 local.set $10 - local.get $3 + local.get $2 local.get $10 local.get $0 f64.sub - local.get $4 + local.get $3 f64.sub local.get $20 f64.sub f64.sub end - local.set $4 + local.set $3 local.get $1 local.get $1 i64.reinterpret_f64 @@ -3527,20 +3470,20 @@ local.get $10 f64.mul local.get $1 - local.get $4 + local.get $3 f64.mul f64.add local.tee $1 local.get $0 local.get $10 f64.mul - local.tee $3 + local.tee $2 f64.add local.tee $0 i64.reinterpret_f64 local.tee $16 i32.wrap_i64 - local.set $2 + local.set $5 block $folding-inner1 block $folding-inner0 local.get $16 @@ -3554,14 +3497,14 @@ local.get $12 i32.const 1083179008 i32.sub - local.get $2 + local.get $5 i32.or br_if $folding-inner0 local.get $1 f64.const 8.008566259537294e-17 f64.add local.get $0 - local.get $3 + local.get $2 f64.sub f64.gt br_if $folding-inner0 @@ -3575,12 +3518,12 @@ local.get $12 i32.const -1064252416 i32.sub - local.get $2 + local.get $5 i32.or br_if $folding-inner1 local.get $1 local.get $0 - local.get $3 + local.get $2 f64.sub f64.le br_if $folding-inner1 @@ -3594,7 +3537,7 @@ i32.shr_s i32.const 1023 i32.sub - local.set $2 + local.set $5 i32.const 0 local.set $6 local.get $13 @@ -3602,7 +3545,7 @@ i32.gt_s if i32.const 1048576 - local.get $2 + local.get $5 i32.const 1 i32.add i32.shr_s @@ -3615,9 +3558,9 @@ i32.shr_s i32.const 1023 i32.sub - local.set $2 + local.set $5 i32.const 1048575 - local.get $2 + local.get $5 i32.shr_s i32.const -1 i32.xor @@ -3634,7 +3577,7 @@ i32.const 1048576 i32.or i32.const 20 - local.get $2 + local.get $5 i32.sub i32.shr_s local.set $6 @@ -3647,13 +3590,13 @@ i32.lt_s select local.set $6 - local.get $3 + local.get $2 local.get $0 f64.sub - local.set $3 + local.set $2 end local.get $1 - local.get $3 + local.get $2 f64.add i64.reinterpret_f64 i64.const -4294967296 @@ -3662,10 +3605,10 @@ local.tee $0 f64.const 0.6931471824645996 f64.mul - local.tee $4 + local.tee $3 local.get $1 local.get $0 - local.get $3 + local.get $2 f64.sub f64.sub f64.const 0.6931471805599453 @@ -3676,14 +3619,14 @@ f64.add local.tee $1 f64.add - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f64.mul local.set $0 local.get $7 f64.const 1 - local.get $3 - local.get $3 + local.get $2 + local.get $2 local.get $0 f64.const 0.16666666666666602 local.get $0 @@ -3711,17 +3654,17 @@ f64.sub f64.div local.get $1 + local.get $2 local.get $3 - local.get $4 f64.sub f64.sub local.tee $0 - local.get $3 + local.get $2 local.get $0 f64.mul f64.add f64.sub - local.get $3 + local.get $2 f64.sub f64.sub local.tee $0 @@ -3733,7 +3676,7 @@ i32.const 20 i32.shl i32.add - local.tee $2 + local.tee $5 i32.const 20 i32.shr_s i32.const 0 @@ -3747,7 +3690,7 @@ i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $2 + local.get $5 i64.extend_i32_s i64.const 32 i64.shl diff --git a/tests/compiler/std/libm.untouched.wat b/tests/compiler/std/libm.untouched.wat index 2a93d70e..f1cdd665 100644 --- a/tests/compiler/std/libm.untouched.wat +++ b/tests/compiler/std/libm.untouched.wat @@ -313,9 +313,8 @@ local.get $2 i32.const 1071284858 i32.lt_u - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $2 i32.const 31 @@ -529,7 +528,7 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) (local $6 f64) (local $7 f64) @@ -537,8 +536,7 @@ (local $9 f64) (local $10 f64) (local $11 f64) - (local $12 f64) - (local $13 i32) + (local $12 i32) local.get $0 i64.reinterpret_f64 local.set $1 @@ -552,9 +550,8 @@ local.get $2 i32.const 1048576 i32.lt_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 i32.const 31 @@ -612,7 +609,6 @@ local.get $2 i32.const 1072693248 i32.eq - local.tee $4 if (result i32) local.get $1 i64.const 32 @@ -620,7 +616,7 @@ i64.const 0 i64.eq else - local.get $4 + i32.const 0 end if f64.const 0 @@ -663,46 +659,46 @@ local.get $0 f64.const 1 f64.sub - local.set $5 + local.set $4 f64.const 0.5 - local.get $5 + local.get $4 f64.mul - local.get $5 + local.get $4 f64.mul - local.set $6 - local.get $5 + local.set $5 + local.get $4 f64.const 2 - local.get $5 + local.get $4 f64.add f64.div + local.set $6 + local.get $6 + local.get $6 + f64.mul local.set $7 local.get $7 local.get $7 f64.mul local.set $8 local.get $8 - local.get $8 - f64.mul - local.set $9 - local.get $9 f64.const 0.3999999999940942 - local.get $9 + local.get $8 f64.const 0.22222198432149784 - local.get $9 + local.get $8 f64.const 0.15313837699209373 f64.mul f64.add f64.mul f64.add f64.mul - local.set $10 - local.get $8 + local.set $9 + local.get $7 f64.const 0.6666666666666735 - local.get $9 + local.get $8 f64.const 0.2857142874366239 - local.get $9 + local.get $8 f64.const 0.1818357216161805 - local.get $9 + local.get $8 f64.const 0.14798198605116586 f64.mul f64.add @@ -711,28 +707,28 @@ f64.mul f64.add f64.mul - local.set $11 - local.get $11 + local.set $10 local.get $10 + local.get $9 f64.add - local.set $12 + local.set $11 local.get $3 - local.set $13 - local.get $7 + local.set $12 local.get $6 - local.get $12 + local.get $5 + local.get $11 f64.add f64.mul - local.get $13 + local.get $12 f64.convert_i32_s f64.const 1.9082149292705877e-10 f64.mul f64.add - local.get $6 - f64.sub local.get $5 + f64.sub + local.get $4 f64.add - local.get $13 + local.get $12 f64.convert_i32_s f64.const 0.6931471803691238 f64.mul @@ -863,13 +859,12 @@ local.get $2 i32.const 1045430272 i32.lt_u - local.tee $3 if (result i32) local.get $2 i32.const 1048576 i32.ge_u else - local.get $3 + i32.const 0 end if local.get $0 @@ -1415,8 +1410,8 @@ call $~lib/math/NativeMath.atanh ) (func $~lib/math/NativeMath.atan2 (; 17 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64) - (local $2 i32) - (local $3 i64) + (local $2 i64) + (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -1425,9 +1420,8 @@ (local $9 f64) local.get $1 call $~lib/builtins/isNaN - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 call $~lib/builtins/isNaN @@ -1440,30 +1434,30 @@ end local.get $1 i64.reinterpret_f64 - local.set $3 - local.get $3 + local.set $2 + local.get $2 i64.const 32 i64.shr_u i32.wrap_i64 + local.set $3 + local.get $2 + i32.wrap_i64 local.set $4 - local.get $3 - i32.wrap_i64 - local.set $5 local.get $0 i64.reinterpret_f64 - local.set $3 - local.get $3 + local.set $2 + local.get $2 i64.const 32 i64.shr_u i32.wrap_i64 + local.set $5 + local.get $2 + i32.wrap_i64 local.set $6 local.get $3 - i32.wrap_i64 - local.set $7 - local.get $4 i32.const 1072693248 i32.sub - local.get $5 + local.get $4 i32.or i32.const 0 i32.eq @@ -1472,28 +1466,28 @@ call $~lib/math/NativeMath.atan return end - local.get $6 + local.get $5 i32.const 31 i32.shr_u i32.const 1 i32.and - local.get $4 + local.get $3 i32.const 30 i32.shr_u i32.const 2 i32.and i32.or - local.set $8 - local.get $4 + local.set $7 + local.get $3 i32.const 2147483647 i32.and - local.set $4 - local.get $6 + local.set $3 + local.get $5 i32.const 2147483647 i32.and - local.set $6 + local.set $5 + local.get $5 local.get $6 - local.get $7 i32.or i32.const 0 i32.eq @@ -1503,21 +1497,21 @@ block $case2|0 block $case1|0 block $case0|0 + local.get $7 + local.set $8 local.get $8 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|0 - local.get $2 + local.get $8 i32.const 1 i32.eq br_if $case1|0 - local.get $2 + local.get $8 i32.const 2 i32.eq br_if $case2|0 - local.get $2 + local.get $8 i32.const 3 i32.eq br_if $case3|0 @@ -1535,13 +1529,13 @@ return end end + local.get $3 local.get $4 - local.get $5 i32.or i32.const 0 i32.eq if - local.get $8 + local.get $7 i32.const 1 i32.and if (result f64) @@ -1556,11 +1550,11 @@ end return end - local.get $4 + local.get $3 i32.const 2146435072 i32.eq if - local.get $6 + local.get $5 i32.const 2146435072 i32.eq if @@ -1569,21 +1563,21 @@ block $case2|1 block $case1|1 block $case0|1 + local.get $7 + local.set $8 local.get $8 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|1 - local.get $2 + local.get $8 i32.const 1 i32.eq br_if $case1|1 - local.get $2 + local.get $8 i32.const 2 i32.eq br_if $case2|1 - local.get $2 + local.get $8 i32.const 3 i32.eq br_if $case3|1 @@ -1620,21 +1614,21 @@ block $case2|2 block $case1|2 block $case0|2 + local.get $7 + local.set $8 local.get $8 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|2 - local.get $2 + local.get $8 i32.const 1 i32.eq br_if $case1|2 - local.get $2 + local.get $8 i32.const 2 i32.eq br_if $case2|2 - local.get $2 + local.get $8 i32.const 3 i32.eq br_if $case3|2 @@ -1655,23 +1649,22 @@ end end end - local.get $4 + local.get $3 i32.const 64 i32.const 20 i32.shl i32.add - local.get $6 + local.get $5 i32.lt_u - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else - local.get $6 + local.get $5 i32.const 2146435072 i32.eq end if - local.get $8 + local.get $7 i32.const 1 i32.and if (result f64) @@ -1686,20 +1679,19 @@ end return end - local.get $8 + local.get $7 i32.const 2 i32.and - local.tee $2 if (result i32) - local.get $6 + local.get $5 i32.const 64 i32.const 20 i32.shl i32.add - local.get $4 + local.get $3 i32.lt_u else - local.get $2 + i32.const 0 end if f64.const 0 @@ -1717,21 +1709,21 @@ block $case2|3 block $case1|3 block $case0|3 + local.get $7 + local.set $8 local.get $8 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|3 - local.get $2 + local.get $8 i32.const 1 i32.eq br_if $case1|3 - local.get $2 + local.get $8 i32.const 2 i32.eq br_if $case2|3 - local.get $2 + local.get $8 i32.const 3 i32.eq br_if $case3|3 @@ -1979,7 +1971,6 @@ (local $13 f64) (local $14 f64) (local $15 f64) - (local $16 i32) local.get $0 i64.reinterpret_f64 local.set $1 @@ -2207,9 +2198,8 @@ local.get $3 i32.const 0 i32.lt_s - local.tee $16 if (result i32) - local.get $16 + i32.const 1 else local.get $3 i32.const 56 @@ -2660,7 +2650,7 @@ (local $4 i64) (local $5 i32) (local $6 i32) - (local $7 i32) + (local $7 f64) (local $8 f64) (local $9 f64) (local $10 f64) @@ -2668,7 +2658,6 @@ (local $12 f64) (local $13 f64) (local $14 f64) - (local $15 f64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -2720,9 +2709,8 @@ local.get $5 i32.const 2047 i32.eq - local.tee $7 if (result i32) - local.get $7 + i32.const 1 else local.get $3 i64.const 0 @@ -2744,7 +2732,7 @@ return end f64.const 1 - local.set $8 + local.set $7 local.get $5 i32.const 1023 i32.const 510 @@ -2752,7 +2740,7 @@ i32.gt_s if f64.const 5260135901548373507240989e186 - local.set $8 + local.set $7 local.get $0 f64.const 1.90109156629516e-211 f64.mul @@ -2769,7 +2757,7 @@ i32.lt_s if f64.const 1.90109156629516e-211 - local.set $8 + local.set $7 local.get $0 f64.const 5260135901548373507240989e186 f64.mul @@ -2783,74 +2771,74 @@ local.get $0 f64.const 134217729 f64.mul + local.set $8 + local.get $0 + local.get $8 + f64.sub + local.get $8 + f64.add local.set $9 local.get $0 local.get $9 f64.sub - local.get $9 - f64.add local.set $10 local.get $0 - local.get $10 - f64.sub + local.get $0 + f64.mul local.set $11 - local.get $0 - local.get $0 + local.get $9 + local.get $9 f64.mul - local.set $12 - local.get $10 - local.get $10 - f64.mul - local.get $12 + local.get $11 f64.sub f64.const 2 + local.get $9 + f64.mul + local.get $10 + f64.add local.get $10 f64.mul - local.get $11 f64.add - local.get $11 - f64.mul - f64.add - local.set $13 + local.set $12 local.get $1 f64.const 134217729 f64.mul + local.set $8 + local.get $1 + local.get $8 + f64.sub + local.get $8 + f64.add local.set $9 local.get $1 local.get $9 f64.sub - local.get $9 - f64.add local.set $10 local.get $1 - local.get $10 - f64.sub - local.set $11 - local.get $1 local.get $1 f64.mul - local.set $14 - local.get $10 - local.get $10 + local.set $13 + local.get $9 + local.get $9 f64.mul - local.get $14 + local.get $13 f64.sub f64.const 2 + local.get $9 + f64.mul + local.get $10 + f64.add local.get $10 f64.mul - local.get $11 f64.add - local.get $11 - f64.mul + local.set $14 + local.get $7 + local.get $14 + local.get $12 f64.add - local.set $15 - local.get $8 - local.get $15 local.get $13 f64.add - local.get $14 - f64.add - local.get $12 + local.get $11 f64.add f64.sqrt f64.mul @@ -2906,7 +2894,7 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) (local $6 f64) (local $7 f64) @@ -2920,7 +2908,6 @@ (local $15 f64) (local $16 f64) (local $17 f64) - (local $18 f64) local.get $0 i64.reinterpret_f64 local.set $1 @@ -2934,9 +2921,8 @@ local.get $2 i32.const 1048576 i32.lt_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 i32.const 31 @@ -2994,7 +2980,6 @@ local.get $2 i32.const 1072693248 i32.eq - local.tee $4 if (result i32) local.get $1 i64.const 32 @@ -3002,7 +2987,7 @@ i64.const 0 i64.eq else - local.get $4 + i32.const 0 end if f64.const 0 @@ -3045,46 +3030,46 @@ local.get $0 f64.const 1 f64.sub - local.set $5 + local.set $4 f64.const 0.5 - local.get $5 + local.get $4 f64.mul - local.get $5 + local.get $4 f64.mul - local.set $6 - local.get $5 + local.set $5 + local.get $4 f64.const 2 - local.get $5 + local.get $4 f64.add f64.div + local.set $6 + local.get $6 + local.get $6 + f64.mul local.set $7 local.get $7 local.get $7 f64.mul local.set $8 local.get $8 - local.get $8 - f64.mul - local.set $9 - local.get $9 f64.const 0.3999999999940942 - local.get $9 + local.get $8 f64.const 0.22222198432149784 - local.get $9 + local.get $8 f64.const 0.15313837699209373 f64.mul f64.add f64.mul f64.add f64.mul - local.set $10 - local.get $8 + local.set $9 + local.get $7 f64.const 0.6666666666666735 - local.get $9 + local.get $8 f64.const 0.2857142874366239 - local.get $9 + local.get $8 f64.const 0.1818357216161805 - local.get $9 + local.get $8 f64.const 0.14798198605116586 f64.mul f64.add @@ -3093,16 +3078,16 @@ f64.mul f64.add f64.mul - local.set $11 - local.get $11 + local.set $10 local.get $10 + local.get $9 f64.add - local.set $12 + local.set $11 + local.get $4 local.get $5 - local.get $6 f64.sub - local.set $13 - local.get $13 + local.set $12 + local.get $12 i64.reinterpret_f64 local.set $1 local.get $1 @@ -3111,58 +3096,58 @@ local.set $1 local.get $1 f64.reinterpret_i64 - local.set $13 - local.get $5 - local.get $13 - f64.sub - local.get $6 - f64.sub - local.get $7 - local.get $6 + local.set $12 + local.get $4 local.get $12 + f64.sub + local.get $5 + f64.sub + local.get $6 + local.get $5 + local.get $11 f64.add f64.mul f64.add - local.set $14 - local.get $13 + local.set $13 + local.get $12 f64.const 0.4342944818781689 f64.mul - local.set $15 + local.set $14 local.get $3 f64.convert_i32_s - local.set $16 - local.get $16 + local.set $15 + local.get $15 f64.const 0.30102999566361177 f64.mul - local.set $17 - local.get $16 + local.set $16 + local.get $15 f64.const 3.694239077158931e-13 f64.mul - local.get $14 local.get $13 + local.get $12 f64.add f64.const 2.5082946711645275e-11 f64.mul f64.add - local.get $14 + local.get $13 f64.const 0.4342944818781689 f64.mul f64.add - local.set $18 - local.get $17 - local.get $15 + local.set $17 + local.get $16 + local.get $14 f64.add - local.set $9 - local.get $18 + local.set $8 local.get $17 - local.get $9 + local.get $16 + local.get $8 f64.sub - local.get $15 + local.get $14 f64.add f64.add - local.set $18 - local.get $18 - local.get $9 + local.set $17 + local.get $17 + local.get $8 f64.add ) (func $std/libm/log10 (; 42 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) @@ -3177,7 +3162,7 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) (local $6 f64) (local $7 f64) @@ -3190,7 +3175,6 @@ (local $14 f64) (local $15 f64) (local $16 f64) - (local $17 f64) local.get $0 i64.reinterpret_f64 local.set $1 @@ -3204,9 +3188,8 @@ local.get $2 i32.const 1048576 i32.lt_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 i32.const 31 @@ -3264,7 +3247,6 @@ local.get $2 i32.const 1072693248 i32.eq - local.tee $4 if (result i32) local.get $1 i64.const 32 @@ -3272,7 +3254,7 @@ i64.const 0 i64.eq else - local.get $4 + i32.const 0 end if f64.const 0 @@ -3315,46 +3297,46 @@ local.get $0 f64.const 1 f64.sub - local.set $5 + local.set $4 f64.const 0.5 - local.get $5 + local.get $4 f64.mul - local.get $5 + local.get $4 f64.mul - local.set $6 - local.get $5 + local.set $5 + local.get $4 f64.const 2 - local.get $5 + local.get $4 f64.add f64.div + local.set $6 + local.get $6 + local.get $6 + f64.mul local.set $7 local.get $7 local.get $7 f64.mul local.set $8 local.get $8 - local.get $8 - f64.mul - local.set $9 - local.get $9 f64.const 0.3999999999940942 - local.get $9 + local.get $8 f64.const 0.22222198432149784 - local.get $9 + local.get $8 f64.const 0.15313837699209373 f64.mul f64.add f64.mul f64.add f64.mul - local.set $10 - local.get $8 + local.set $9 + local.get $7 f64.const 0.6666666666666735 - local.get $9 + local.get $8 f64.const 0.2857142874366239 - local.get $9 + local.get $8 f64.const 0.1818357216161805 - local.get $9 + local.get $8 f64.const 0.14798198605116586 f64.mul f64.add @@ -3363,16 +3345,16 @@ f64.mul f64.add f64.mul - local.set $11 - local.get $11 + local.set $10 local.get $10 + local.get $9 f64.add - local.set $12 + local.set $11 + local.get $4 local.get $5 - local.get $6 f64.sub - local.set $13 - local.get $13 + local.set $12 + local.get $12 i64.reinterpret_f64 local.set $1 local.get $1 @@ -3381,52 +3363,52 @@ local.set $1 local.get $1 f64.reinterpret_i64 - local.set $13 - local.get $5 - local.get $13 - f64.sub - local.get $6 - f64.sub - local.get $7 - local.get $6 + local.set $12 + local.get $4 local.get $12 + f64.sub + local.get $5 + f64.sub + local.get $6 + local.get $5 + local.get $11 f64.add f64.mul f64.add - local.set $14 - local.get $13 + local.set $13 + local.get $12 f64.const 1.4426950407214463 f64.mul - local.set $15 - local.get $14 + local.set $14 local.get $13 + local.get $12 f64.add f64.const 1.6751713164886512e-10 f64.mul - local.get $14 + local.get $13 f64.const 1.4426950407214463 f64.mul f64.add - local.set $16 + local.set $15 local.get $3 f64.convert_i32_s - local.set $17 - local.get $17 - local.get $15 - f64.add - local.set $9 - local.get $16 - local.get $17 - local.get $9 - f64.sub - local.get $15 - f64.add - f64.add local.set $16 - local.get $9 - local.set $15 local.get $16 + local.get $14 + f64.add + local.set $8 local.get $15 + local.get $16 + local.get $8 + f64.sub + local.get $14 + f64.add + f64.add + local.set $15 + local.get $8 + local.set $14 + local.get $15 + local.get $14 f64.add ) (func $std/libm/log2 (; 45 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) @@ -3538,44 +3520,39 @@ local.get $7 i32.const 2146435072 i32.gt_s - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $7 i32.const 2146435072 i32.eq - local.tee $9 if (result i32) local.get $4 i32.const 0 i32.ne else - local.get $9 + i32.const 0 end end - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $8 i32.const 2146435072 i32.gt_s end - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $8 i32.const 2146435072 i32.eq - local.tee $9 if (result i32) local.get $6 i32.const 0 i32.ne else - local.get $9 + i32.const 0 end end if @@ -3585,7 +3562,7 @@ return end i32.const 0 - local.set $10 + local.set $9 local.get $3 i32.const 0 i32.lt_s @@ -3595,7 +3572,7 @@ i32.ge_s if i32.const 2 - local.set $10 + local.set $9 else local.get $8 i32.const 1072693248 @@ -3606,21 +3583,21 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 - local.get $11 + local.set $10 + local.get $10 i32.const 20 i32.gt_s - local.set $9 + local.set $11 i32.const 52 i32.const 20 - local.get $9 - select local.get $11 + select + local.get $10 i32.sub local.set $12 local.get $6 local.get $8 - local.get $9 + local.get $11 select local.set $13 local.get $13 @@ -3638,7 +3615,7 @@ i32.const 1 i32.and i32.sub - local.set $10 + local.set $9 end end end @@ -3741,17 +3718,15 @@ local.get $7 i32.const 0 i32.eq - local.tee $14 if (result i32) - local.get $14 + i32.const 1 else local.get $7 i32.const 2146435072 i32.eq end - local.tee $14 if (result i32) - local.get $14 + i32.const 1 else local.get $7 i32.const 1072693248 @@ -3776,7 +3751,7 @@ local.get $7 i32.const 1072693248 i32.sub - local.get $10 + local.get $9 i32.or i32.const 0 i32.eq @@ -3790,7 +3765,7 @@ f64.div local.set $16 else - local.get $10 + local.get $9 i32.const 1 i32.eq if @@ -3810,7 +3785,7 @@ i32.const 0 i32.lt_s if - local.get $10 + local.get $9 i32.const 0 i32.eq if @@ -3823,7 +3798,7 @@ f64.div return end - local.get $10 + local.get $9 i32.const 1 i32.eq if @@ -4009,17 +3984,17 @@ i32.le_s if i32.const 0 - local.set $11 + local.set $10 else local.get $28 i32.const 767610 i32.lt_s if i32.const 1 - local.set $11 + local.set $10 else i32.const 0 - local.set $11 + local.set $10 local.get $29 i32.const 1 i32.add @@ -4043,7 +4018,7 @@ local.set $15 f64.const 1.5 f64.const 1 - local.get $11 + local.get $10 select local.set $35 local.get $15 @@ -4075,7 +4050,7 @@ i32.or i32.const 524288 i32.add - local.get $11 + local.get $10 i32.const 18 i32.shl i32.add @@ -4198,7 +4173,7 @@ local.set $36 f64.const 1.350039202129749e-08 f64.const 0 - local.get $11 + local.get $10 select local.set $37 f64.const -7.028461650952758e-09 @@ -4216,7 +4191,7 @@ local.set $24 f64.const 0.5849624872207642 f64.const 0 - local.get $11 + local.get $10 select local.set $39 local.get $36 @@ -4361,7 +4336,7 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 + local.set $10 i32.const 0 local.set $29 local.get $41 @@ -4370,7 +4345,7 @@ if local.get $28 i32.const 1048576 - local.get $11 + local.get $10 i32.const 1 i32.add i32.shr_s @@ -4383,12 +4358,12 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 + local.set $10 f64.const 0 local.set $24 local.get $29 i32.const 1048575 - local.get $11 + local.get $10 i32.shr_s i32.const -1 i32.xor @@ -4404,7 +4379,7 @@ i32.const 1048576 i32.or i32.const 20 - local.get $11 + local.get $10 i32.sub i32.shr_s local.set $29 diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index f88a238f..66a50a9c 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -473,35 +473,33 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=8 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i32.load8_u local.get $1 i32.const 255 i32.and i32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=8 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -800,8 +798,7 @@ i32.gt_u select i32.ge_u - local.tee $1 - if + if (result i32) local.get $0 i32.load offset=20 local.get $0 @@ -811,9 +808,9 @@ f64.mul i32.trunc_f64_s i32.lt_s - local.set $1 + else + i32.const 0 end - local.get $1 if local.get $0 local.get $2 @@ -1477,8 +1474,7 @@ i32.gt_u select i32.ge_u - local.tee $1 - if + if (result i32) local.get $0 i32.load offset=20 local.get $0 @@ -1488,9 +1484,9 @@ f64.mul i32.trunc_f64_s i32.lt_s - local.set $1 + else + i32.const 0 end - local.get $1 if local.get $0 local.get $2 @@ -1866,35 +1862,33 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=8 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i32.load16_u local.get $1 i32.const 65535 i32.and i32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=8 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -2238,8 +2232,7 @@ i32.gt_u select i32.ge_u - local.tee $1 - if + if (result i32) local.get $0 i32.load offset=20 local.get $0 @@ -2249,9 +2242,9 @@ f64.mul i32.trunc_f64_s i32.lt_s - local.set $1 + else + i32.const 0 end - local.get $1 if local.get $0 local.get $2 @@ -2960,8 +2953,7 @@ i32.gt_u select i32.ge_u - local.tee $1 - if + if (result i32) local.get $0 i32.load offset=20 local.get $0 @@ -2971,9 +2963,9 @@ f64.mul i32.trunc_f64_s i32.lt_s - local.set $1 + else + i32.const 0 end - local.get $1 if local.get $0 local.get $2 @@ -3380,33 +3372,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=8 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i32.load local.get $1 i32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=8 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -3672,7 +3662,6 @@ i32.gt_u select i32.ge_u - local.tee $1 if (result i32) local.get $0 i32.load offset=20 @@ -3684,7 +3673,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $1 + i32.const 0 end if local.get $0 @@ -4492,33 +4481,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=12 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i64.load local.get $1 i64.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=12 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -4785,7 +4772,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -4797,7 +4783,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -5518,33 +5504,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=8 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 f32.load local.get $1 f32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=8 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -5816,7 +5800,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -5828,7 +5811,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -6198,33 +6181,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=12 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 f64.load local.get $1 f64.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=12 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -6496,7 +6477,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -6508,7 +6488,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -6851,7 +6831,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -6875,19 +6855,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 77 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 160 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -6923,15 +6899,13 @@ (local $4 i32) local.get $0 local.tee $2 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $2 i32.const 160 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/map.untouched.wat b/tests/compiler/std/map.untouched.wat index bf01c8cd..17e5e951 100644 --- a/tests/compiler/std/map.untouched.wat +++ b/tests/compiler/std/map.untouched.wat @@ -603,7 +603,6 @@ ) (func $~lib/map/Map#find (; 14 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -625,7 +624,6 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load8_s @@ -636,7 +634,7 @@ i32.shr_s i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -1043,7 +1041,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -1055,7 +1052,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -1553,7 +1550,6 @@ ) (func $~lib/map/Map#find (; 24 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -1575,7 +1571,6 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load8_u @@ -1584,7 +1579,7 @@ i32.and i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -1983,7 +1978,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -1995,7 +1989,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -2501,7 +2495,6 @@ ) (func $~lib/map/Map#find (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -2523,7 +2516,6 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load16_s @@ -2534,7 +2526,7 @@ i32.shr_s i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -2941,7 +2933,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -2953,7 +2944,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -3451,7 +3442,6 @@ ) (func $~lib/map/Map#find (; 45 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -3473,7 +3463,6 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load16_u @@ -3482,7 +3471,7 @@ i32.and i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -3881,7 +3870,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -3893,7 +3881,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -4419,7 +4407,6 @@ ) (func $~lib/map/Map#find (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -4441,14 +4428,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load local.get $1 i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -4839,7 +4825,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -4851,7 +4836,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -5321,7 +5306,6 @@ ) (func $~lib/map/Map#find (; 66 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -5343,14 +5327,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load local.get $1 i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -5741,7 +5724,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -5753,7 +5735,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -6311,7 +6293,6 @@ ) (func $~lib/map/Map#find (; 77 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -6333,14 +6314,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i64.load local.get $1 i64.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -6734,7 +6714,6 @@ i32.gt_u select i32.ge_u - local.tee $5 if (result i32) local.get $0 i32.load offset=20 @@ -6746,7 +6725,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $5 + i32.const 0 end if local.get $0 @@ -7223,7 +7202,6 @@ ) (func $~lib/map/Map#find (; 87 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -7245,14 +7223,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i64.load local.get $1 i64.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -7646,7 +7623,6 @@ i32.gt_u select i32.ge_u - local.tee $5 if (result i32) local.get $0 i32.load offset=20 @@ -7658,7 +7634,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $5 + i32.const 0 end if local.get $0 @@ -8135,7 +8111,6 @@ ) (func $~lib/map/Map#find (; 97 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -8157,14 +8132,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 f32.load local.get $1 f32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -8563,7 +8537,6 @@ i32.gt_u select i32.ge_u - local.tee $5 if (result i32) local.get $0 i32.load offset=20 @@ -8575,7 +8548,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $5 + i32.const 0 end if local.get $0 @@ -9052,7 +9025,6 @@ ) (func $~lib/map/Map#find (; 107 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -9074,14 +9046,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 f64.load local.get $1 f64.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -9480,7 +9451,6 @@ i32.gt_u select i32.ge_u - local.tee $5 if (result i32) local.get $0 i32.load offset=20 @@ -9492,7 +9462,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $5 + i32.const 0 end if local.get $0 @@ -9903,7 +9873,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -9928,14 +9898,12 @@ ) (func $~lib/runtime/runtime.flags (; 117 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 1832ea75..906f5ddc 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -155,17 +155,13 @@ ) (func $std/math/ulperr (; 31 ;) (type $FUNCSIG$dddd) (param $0 f64) (param $1 f64) (param $2 f64) (result f64) (local $3 i32) - (local $4 i32) - local.get $0 - local.get $0 - f64.ne - local.tee $4 - local.set $3 local.get $1 local.get $1 f64.ne - local.get $3 - local.get $4 + i32.const 0 + local.get $0 + local.get $0 + f64.ne select if f64.const 0 @@ -357,17 +353,13 @@ ) (func $std/math/ulperrf (; 34 ;) (type $FUNCSIG$ffff) (param $0 f32) (param $1 f32) (param $2 f32) (result f32) (local $3 i32) - (local $4 i32) - local.get $0 - local.get $0 - f32.ne - local.tee $4 - local.set $3 local.get $1 local.get $1 f32.ne - local.get $3 - local.get $4 + i32.const 0 + local.get $0 + local.get $0 + f32.ne select if f32.const 0 @@ -495,22 +487,20 @@ call $std/math/check ) (func $std/math/test_abs (; 38 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) - (local $2 i32) local.get $0 f64.abs local.get $1 f64.const 0 call $std/math/check - local.tee $2 - if + if (result i32) local.get $0 call $~lib/bindings/Math/abs local.get $1 f64.const 0 call $std/math/check - local.set $2 + else + i32.const 0 end - local.get $2 ) (func $std/math/test_absf (; 39 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) local.get $0 @@ -687,22 +677,20 @@ f64.mul ) (func $std/math/test_acos (; 42 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.acos local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/acos local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.acos (; 43 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 f32) @@ -879,32 +867,29 @@ (local $1 f64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) - (local $6 f64) - (local $7 i64) - (local $8 f64) + (local $6 i64) + (local $7 f64) i32.const 1 - local.set $2 + local.set $3 local.get $0 i64.reinterpret_f64 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $2 i32.const 1071284858 i32.lt_u - local.tee $4 - i32.eqz - if - local.get $3 + if (result i32) + i32.const 1 + else + local.get $2 i32.const 31 i32.shr_u - local.set $4 end - local.get $4 if - local.get $3 + local.get $2 i32.const -1074790400 i32.ge_u if @@ -924,7 +909,7 @@ f64.div return end - local.get $3 + local.get $2 i32.const 1 i32.shl i32.const 2034237440 @@ -933,17 +918,17 @@ local.get $0 return end - local.get $3 + local.get $2 i32.const -1076707644 i32.le_u if i32.const 0 - local.set $2 + local.set $3 local.get $0 local.set $1 end else - local.get $3 + local.get $2 i32.const 2146435072 i32.ge_u if @@ -951,28 +936,28 @@ return end end - local.get $2 + local.get $3 if f64.const 1 local.get $0 f64.add i64.reinterpret_f64 - local.tee $7 + local.tee $6 i64.const 32 i64.shr_u i32.wrap_i64 i32.const 614242 i32.add - local.tee $4 + local.tee $2 i32.const 20 i32.shr_u i32.const 1023 i32.sub - local.tee $2 + local.tee $3 i32.const 54 i32.lt_s if (result f64) - local.get $7 + local.get $6 f64.reinterpret_i64 local.set $1 f64.const 1 @@ -985,7 +970,7 @@ f64.const 1 f64.sub f64.sub - local.get $2 + local.get $3 i32.const 2 i32.ge_s select @@ -994,11 +979,11 @@ else f64.const 0 end - local.set $6 - local.get $7 + local.set $5 + local.get $6 i64.const 4294967295 i64.and - local.get $4 + local.get $2 i32.const 1048575 i32.and i32.const 1072079006 @@ -1017,21 +1002,21 @@ local.get $1 f64.add f64.div - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.mul - local.tee $8 - local.get $8 + local.tee $7 + local.get $7 f64.mul local.set $0 - local.get $5 + local.get $4 f64.const 0.5 local.get $1 f64.mul local.get $1 f64.mul - local.tee $5 - local.get $8 + local.tee $4 + local.get $7 f64.const 0.6666666666666735 local.get $0 f64.const 0.2857142874366239 @@ -1060,15 +1045,15 @@ f64.add f64.add f64.mul - local.get $2 + local.get $3 f64.convert_i32_s local.tee $0 f64.const 1.9082149292705877e-10 f64.mul - local.get $6 - f64.add - f64.add local.get $5 + f64.add + f64.add + local.get $4 f64.sub local.get $1 f64.add @@ -1079,32 +1064,29 @@ ) (func $~lib/math/NativeMath.log (; 46 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 i32) - (local $2 i32) - (local $3 i64) + (local $2 i64) + (local $3 f64) (local $4 f64) - (local $5 f64) - (local $6 i32) - (local $7 f64) + (local $5 i32) + (local $6 f64) local.get $0 i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $2 + local.tee $1 i32.const 1048576 i32.lt_u - local.tee $1 - i32.eqz - if - local.get $2 + if (result i32) + i32.const 1 + else + local.get $1 i32.const 31 i32.shr_u - local.set $1 end - local.get $1 if - local.get $3 + local.get $2 i64.const 1 i64.shl i64.const 0 @@ -1117,7 +1099,7 @@ f64.div return end - local.get $2 + local.get $1 i32.const 31 i32.shr_u if @@ -1129,18 +1111,18 @@ return end i32.const -54 - local.set $6 + local.set $5 local.get $0 f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 2146435072 i32.ge_u if @@ -1148,28 +1130,25 @@ return else local.get $2 + i64.const 32 + i64.shl + i64.const 0 + i64.eq + i32.const 0 + local.get $1 i32.const 1072693248 i32.eq - local.tee $1 - if - local.get $3 - i64.const 32 - i64.shl - i64.const 0 - i64.eq - local.set $1 - end - local.get $1 + select if f64.const 0 return end end end - local.get $3 + local.get $2 i64.const 4294967295 i64.and - local.get $2 + local.get $1 i32.const 614242 i32.add local.tee $1 @@ -1184,26 +1163,26 @@ f64.reinterpret_i64 f64.const 1 f64.sub - local.tee $4 + local.tee $3 f64.const 2 - local.get $4 + local.get $3 f64.add f64.div - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.mul - local.tee $7 - local.get $7 + local.tee $6 + local.get $6 f64.mul local.set $0 - local.get $5 + local.get $4 f64.const 0.5 - local.get $4 + local.get $3 f64.mul - local.get $4 + local.get $3 f64.mul - local.tee $5 - local.get $7 + local.tee $4 + local.get $6 f64.const 0.6666666666666735 local.get $0 f64.const 0.2857142874366239 @@ -1237,16 +1216,16 @@ i32.shr_s i32.const 1023 i32.sub - local.get $6 + local.get $5 i32.add f64.convert_i32_s local.tee $0 f64.const 1.9082149292705877e-10 f64.mul f64.add - local.get $5 - f64.sub local.get $4 + f64.sub + local.get $3 f64.add local.get $0 f64.const 0.6931471803691238 @@ -1308,49 +1287,44 @@ f64.add ) (func $std/math/test_acosh (; 48 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.acosh local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/acosh local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.log1p (; 49 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 f32) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f32) (local $5 f32) (local $6 f32) - (local $7 f32) i32.const 1 - local.set $2 + local.set $3 local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 i32.const 1054086096 i32.lt_u - local.tee $4 - i32.eqz - if - local.get $3 + if (result i32) + i32.const 1 + else + local.get $2 i32.const 31 i32.shr_u - local.set $4 end - local.get $4 if - local.get $3 + local.get $2 i32.const -1082130432 i32.ge_u if @@ -1370,7 +1344,7 @@ f32.div return end - local.get $3 + local.get $2 i32.const 1 i32.shl i32.const 1728053248 @@ -1379,17 +1353,17 @@ local.get $0 return end - local.get $3 + local.get $2 i32.const -1097468391 i32.le_u if i32.const 0 - local.set $2 + local.set $3 local.get $0 local.set $1 end else - local.get $3 + local.get $2 i32.const 2139095040 i32.ge_u if @@ -1397,7 +1371,7 @@ return end end - local.get $2 + local.get $3 if f32.const 1 local.get $0 @@ -1406,12 +1380,12 @@ i32.reinterpret_f32 i32.const 4913933 i32.add - local.tee $4 + local.tee $2 i32.const 23 i32.shr_u i32.const 127 i32.sub - local.tee $2 + local.tee $3 i32.const 25 i32.lt_s if (result f32) @@ -1425,7 +1399,7 @@ f32.const 1 f32.sub f32.sub - local.get $2 + local.get $3 i32.const 2 i32.ge_s select @@ -1434,8 +1408,8 @@ else f32.const 0 end - local.set $6 - local.get $4 + local.set $5 + local.get $2 i32.const 8388607 i32.and i32.const 1060439283 @@ -1450,21 +1424,21 @@ local.get $1 f32.add f32.div - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f32.mul - local.tee $7 - local.get $7 + local.tee $6 + local.get $6 f32.mul local.set $0 - local.get $5 + local.get $4 f32.const 0.5 local.get $1 f32.mul local.get $1 f32.mul - local.tee $5 - local.get $7 + local.tee $4 + local.get $6 f32.const 0.6666666269302368 local.get $0 f32.const 0.2849878668785095 @@ -1481,15 +1455,15 @@ f32.add f32.add f32.mul - local.get $2 + local.get $3 f32.convert_i32_s local.tee $0 f32.const 9.05800061445916e-06 f32.mul - local.get $6 - f32.add - f32.add local.get $5 + f32.add + f32.add + local.get $4 f32.sub local.get $1 f32.add @@ -1501,24 +1475,21 @@ (func $~lib/math/NativeMathf.log (; 50 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 i32) (local $2 f32) - (local $3 i32) - (local $4 f32) - (local $5 i32) - (local $6 f32) + (local $3 f32) + (local $4 i32) + (local $5 f32) local.get $0 i32.reinterpret_f32 local.tee $1 i32.const 8388608 i32.lt_u - local.tee $3 - i32.eqz - if + if (result i32) + i32.const 1 + else local.get $1 i32.const 31 i32.shr_u - local.set $3 end - local.get $3 if local.get $1 i32.const 1 @@ -1544,7 +1515,7 @@ return end i32.const -25 - local.set $5 + local.set $4 local.get $0 f32.const 33554432 f32.mul @@ -1570,7 +1541,7 @@ local.get $1 i32.const 4913933 i32.add - local.tee $3 + local.tee $1 i32.const 8388607 i32.and i32.const 1060439283 @@ -1583,21 +1554,21 @@ local.get $0 f32.add f32.div - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f32.mul - local.tee $6 - local.get $6 + local.tee $5 + local.get $5 f32.mul local.set $2 - local.get $4 + local.get $3 f32.const 0.5 local.get $0 f32.mul local.get $0 f32.mul - local.tee $4 - local.get $6 + local.tee $3 + local.get $5 f32.const 0.6666666269302368 local.get $2 f32.const 0.2849878668785095 @@ -1614,19 +1585,19 @@ f32.add f32.add f32.mul - local.get $3 + local.get $1 i32.const 23 i32.shr_s i32.const 127 i32.sub - local.get $5 + local.get $4 i32.add f32.convert_i32_s local.tee $2 f32.const 9.05800061445916e-06 f32.mul f32.add - local.get $4 + local.get $3 f32.sub local.get $0 f32.add @@ -1695,14 +1666,14 @@ (func $~lib/math/NativeMath.asin (; 53 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 f64) (local $2 i32) - (local $3 i32) - (local $4 f64) + (local $3 f64) + (local $4 i32) local.get $0 i64.reinterpret_f64 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $4 i32.const 2147483647 i32.and local.tee $2 @@ -1736,17 +1707,14 @@ i32.const 1071644672 i32.lt_u if + local.get $2 + i32.const 1048576 + i32.ge_u + i32.const 0 local.get $2 i32.const 1045430272 i32.lt_u - local.tee $3 - if - local.get $2 - i32.const 1048576 - i32.ge_u - local.set $3 - end - local.get $3 + select if local.get $0 return @@ -1772,7 +1740,7 @@ local.set $0 local.get $1 call $~lib/math/R - local.set $4 + local.set $3 local.get $2 i32.const 1072640819 i32.ge_u @@ -1781,7 +1749,7 @@ f64.const 2 local.get $0 local.get $0 - local.get $4 + local.get $3 f64.mul f64.add f64.mul @@ -1793,7 +1761,7 @@ f64.const 2 local.get $0 f64.mul - local.get $4 + local.get $3 f64.mul f64.const 6.123233995736766e-17 f64.const 2 @@ -1823,7 +1791,7 @@ f64.sub end local.set $0 - local.get $3 + local.get $4 i32.const 31 i32.shr_u if @@ -1834,29 +1802,26 @@ local.get $0 ) (func $std/math/test_asin (; 54 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.asin local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/asin local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.asin (; 55 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 i32) (local $2 f32) - (local $3 i32) - (local $4 f32) - (local $5 f64) + (local $3 f32) + (local $4 f64) local.get $0 i32.reinterpret_f32 i32.const 2147483647 @@ -1887,17 +1852,14 @@ i32.const 1056964608 i32.lt_u if + local.get $1 + i32.const 8388608 + i32.ge_u + i32.const 0 local.get $1 i32.const 964689920 i32.lt_u - local.tee $3 - if (result i32) - local.get $1 - i32.const 8388608 - i32.ge_u - else - local.get $3 - end + select if local.get $0 return @@ -1951,15 +1913,15 @@ f32.mul f32.add f32.div - local.set $4 + local.set $3 f64.const 1.5707963705062866 f64.const 2 local.get $2 f64.promote_f32 f64.sqrt - local.tee $5 - local.get $5 + local.tee $4 local.get $4 + local.get $3 f64.promote_f32 f64.mul f64.add @@ -2047,22 +2009,20 @@ f64.copysign ) (func $std/math/test_asinh (; 58 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.asinh local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/asinh local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.asinh (; 59 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 f32) @@ -2360,22 +2320,20 @@ f64.copysign ) (func $std/math/test_atan (; 62 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.atan local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/atan local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.atan (; 63 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 i32) @@ -2638,22 +2596,20 @@ f64.copysign ) (func $std/math/test_atanh (; 66 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.atanh local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/atanh local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.atanh (; 67 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 f32) @@ -2716,19 +2672,16 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 i64) + (local $5 i64) + (local $6 i32) (local $7 i32) - local.get $1 - local.get $1 - f64.ne - local.tee $3 - local.set $2 - local.get $2 + i32.const 1 local.get $0 local.get $0 f64.ne - local.get $3 + local.get $1 + local.get $1 + f64.ne select if local.get $1 @@ -2738,20 +2691,20 @@ end local.get $0 i64.reinterpret_f64 - local.tee $6 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 local.set $3 - local.get $6 + local.get $5 i32.wrap_i64 - local.set $5 + local.set $6 local.get $1 i64.reinterpret_f64 - local.tee $6 + local.tee $5 i32.wrap_i64 local.tee $7 - local.get $6 + local.get $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -2779,11 +2732,11 @@ i32.const 2147483647 i32.and local.set $4 - local.get $5 local.get $3 i32.const 2147483647 i32.and - local.tee $5 + local.tee $3 + local.get $6 i32.or i32.eqz if @@ -2822,7 +2775,7 @@ i32.const 2146435072 i32.eq if - local.get $5 + local.get $3 i32.const 2146435072 i32.eq if @@ -2875,33 +2828,27 @@ end end end + i32.const 1 + local.get $3 + i32.const 2146435072 + i32.eq local.get $4 i32.const 67108864 i32.add - local.get $5 + local.get $3 i32.lt_u - local.tee $3 - if (result i32) - local.get $3 - else - local.get $5 - i32.const 2146435072 - i32.eq - end + select br_if $folding-inner0 + local.get $3 + i32.const 67108864 + i32.add + local.get $4 + i32.lt_u + i32.const 0 local.get $2 i32.const 2 i32.and - local.tee $3 - if (result i32) - local.get $5 - i32.const 67108864 - i32.add - local.get $4 - i32.lt_u - else - local.get $3 - end + select if (result f64) f64.const 0 else @@ -2954,40 +2901,34 @@ select ) (func $std/math/test_atan2 (; 70 ;) (type $FUNCSIG$idddd) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (result i32) - (local $4 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.atan2 local.get $2 local.get $3 call $std/math/check - local.tee $4 - if + if (result i32) local.get $0 local.get $1 call $~lib/bindings/Math/atan2 local.get $2 local.get $3 call $std/math/check - local.set $4 + else + i32.const 0 end - local.get $4 ) (func $~lib/math/NativeMathf.atan2 (; 71 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 - local.get $1 - f32.ne - local.tee $3 - local.set $2 - local.get $2 + i32.const 1 local.get $0 local.get $0 f32.ne - local.get $3 + local.get $1 + local.get $1 + f32.ne select if local.get $1 @@ -3025,7 +2966,7 @@ local.get $3 i32.const 2147483647 i32.and - local.tee $5 + local.tee $3 i32.eqz if block $break|0 @@ -3061,7 +3002,7 @@ i32.const 2139095040 i32.eq if - local.get $5 + local.get $3 i32.const 2139095040 i32.eq if @@ -3114,33 +3055,27 @@ end end end + i32.const 1 + local.get $3 + i32.const 2139095040 + i32.eq local.get $4 i32.const 218103808 i32.add - local.get $5 + local.get $3 i32.lt_u - local.tee $3 - if (result i32) - local.get $3 - else - local.get $5 - i32.const 2139095040 - i32.eq - end + select br_if $folding-inner0 + local.get $3 + i32.const 218103808 + i32.add + local.get $4 + i32.lt_u + i32.const 0 local.get $2 i32.const 2 i32.and - local.tee $3 - if (result i32) - local.get $5 - i32.const 218103808 - i32.add - local.get $4 - i32.lt_u - else - local.get $3 - end + select if (result f32) f32.const 0 else @@ -3323,22 +3258,20 @@ f64.add ) (func $std/math/test_cbrt (; 74 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.cbrt local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/cbrt local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.cbrt (; 75 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 f64) @@ -3444,13 +3377,11 @@ call $std/math/check ) (func $std/math/test_ceil (; 77 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) - (local $2 i32) local.get $0 f64.ceil local.get $1 f64.const 0 call $std/math/check - local.tee $2 if (result i32) local.get $0 call $~lib/bindings/Math/ceil @@ -3458,7 +3389,7 @@ f64.const 0 call $std/math/check else - local.get $2 + i32.const 0 end ) (func $std/math/test_ceilf (; 78 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) @@ -3939,14 +3870,14 @@ i64.const 63 i64.shr_u i32.wrap_i64 - local.set $5 + local.set $6 local.get $8 i64.const 32 i64.shr_u i64.const 2147483647 i64.and i32.wrap_i64 - local.tee $6 + local.tee $5 i32.const 1078159482 i32.ge_u if @@ -3957,7 +3888,7 @@ local.get $0 return end - local.get $5 + local.get $6 if f64.const -1 return @@ -3972,13 +3903,13 @@ return end end - local.get $6 + local.get $5 i32.const 1071001154 i32.gt_u if local.get $0 i32.const 1 - local.get $5 + local.get $6 i32.const 1 i32.shl i32.sub @@ -3990,7 +3921,7 @@ f64.copysign f64.add i32.trunc_f64_s - local.get $6 + local.get $5 i32.const 1072734898 i32.lt_u select @@ -4013,7 +3944,7 @@ f64.sub local.set $7 else - local.get $6 + local.get $5 i32.const 1016070144 i32.lt_u if @@ -4139,17 +4070,14 @@ i64.shl f64.reinterpret_i64 local.set $1 + i32.const 1 + local.get $3 + i32.const 56 + i32.gt_s local.get $3 i32.const 0 i32.lt_s - local.tee $5 - if (result i32) - local.get $5 - else - local.get $3 - i32.const 56 - i32.gt_s - end + select if local.get $0 local.get $2 @@ -4418,51 +4346,49 @@ f64.mul ) (func $std/math/test_cosh (; 84 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.cosh local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/cosh local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.expm1 (; 85 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) - (local $1 f32) - (local $2 i32) + (local $1 i32) + (local $2 f32) (local $3 f32) - (local $4 i32) - (local $5 f32) + (local $4 f32) + (local $5 i32) (local $6 f32) local.get $0 i32.reinterpret_f32 - local.tee $4 + local.tee $1 i32.const 31 i32.shr_u - local.set $2 - local.get $4 + local.set $5 + local.get $1 i32.const 2147483647 i32.and - local.tee $4 + local.tee $1 i32.const 1100331076 i32.ge_u if - local.get $4 + local.get $1 i32.const 2139095040 i32.gt_u if local.get $0 return end - local.get $2 + local.get $5 if f32.const -1 return @@ -4477,13 +4403,13 @@ return end end - local.get $4 + local.get $1 i32.const 1051816472 i32.gt_u if local.get $0 i32.const 1 - local.get $2 + local.get $5 i32.const 1 i32.shl i32.sub @@ -4495,30 +4421,30 @@ f32.copysign f32.add i32.trunc_f32_s - local.get $4 + local.get $1 i32.const 1065686418 i32.lt_u select - local.tee $2 + local.tee $1 f32.convert_i32_s local.tee $0 f32.const 0.6931381225585938 f32.mul f32.sub - local.tee $1 - local.get $1 + local.tee $2 + local.get $2 local.get $0 f32.const 9.05800061445916e-06 f32.mul - local.tee $1 + local.tee $2 f32.sub local.tee $0 f32.sub - local.get $1 + local.get $2 f32.sub - local.set $5 + local.set $4 else - local.get $4 + local.get $1 i32.const 855638016 i32.lt_u if (result i32) @@ -4527,7 +4453,7 @@ else i32.const 0 end - local.set $2 + local.set $1 end f32.const 3 f32.const 1 @@ -4537,9 +4463,9 @@ f32.mul local.tee $3 f32.mul - local.tee $1 + local.tee $2 f32.const -0.03333321213722229 - local.get $1 + local.get $2 f32.const 1.5807170420885086e-03 f32.mul f32.add @@ -4550,7 +4476,7 @@ f32.mul f32.sub local.set $3 - local.get $1 + local.get $2 local.get $6 local.get $3 f32.sub @@ -4562,42 +4488,42 @@ f32.div f32.mul local.set $3 - local.get $2 + local.get $1 i32.eqz if local.get $0 local.get $0 local.get $3 f32.mul - local.get $1 + local.get $2 f32.sub f32.sub return end local.get $0 local.get $3 - local.get $5 + local.get $4 f32.sub f32.mul - local.get $5 + local.get $4 f32.sub - local.get $1 - f32.sub - local.set $1 local.get $2 + f32.sub + local.set $2 + local.get $1 i32.const -1 i32.eq if f32.const 0.5 local.get $0 - local.get $1 + local.get $2 f32.sub f32.mul f32.const 0.5 f32.sub return end - local.get $2 + local.get $1 i32.const 1 i32.eq if @@ -4606,7 +4532,7 @@ f32.lt if f32.const -2 - local.get $1 + local.get $2 local.get $0 f32.const 0.5 f32.add @@ -4617,39 +4543,35 @@ f32.const 1 f32.const 2 local.get $0 - local.get $1 + local.get $2 f32.sub f32.mul f32.add return end - local.get $2 + local.get $1 i32.const 127 i32.add i32.const 23 i32.shl f32.reinterpret_i32 - local.set $5 - local.get $2 + local.set $4 + i32.const 1 + local.get $1 + i32.const 56 + i32.gt_s + local.get $1 i32.const 0 i32.lt_s - local.tee $4 - i32.eqz - if - local.get $2 - i32.const 56 - i32.gt_s - local.set $4 - end - local.get $4 + select if local.get $0 - local.get $1 + local.get $2 f32.sub f32.const 1 f32.add local.set $0 - local.get $2 + local.get $1 i32.const 128 i32.eq if (result f32) @@ -4660,7 +4582,7 @@ f32.mul else local.get $0 - local.get $5 + local.get $4 f32.mul end f32.const 1 @@ -4668,7 +4590,7 @@ return end i32.const 127 - local.get $2 + local.get $1 i32.sub i32.const 23 i32.shl @@ -4678,19 +4600,19 @@ f32.const 1 local.get $3 f32.sub - local.get $1 + local.get $2 f32.sub f32.const 1 - local.get $1 + local.get $2 local.get $3 f32.add f32.sub - local.get $2 + local.get $1 i32.const 20 i32.lt_s select f32.add - local.get $5 + local.get $4 f32.mul ) (func $~lib/math/NativeMathf.exp (; 86 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -4888,22 +4810,20 @@ call $std/math/check ) (func $std/math/test_exp (; 89 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.exp local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/exp local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $std/math/test_expf (; 90 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) local.get $0 @@ -4913,22 +4833,20 @@ call $std/math/check ) (func $std/math/test_expm1 (; 91 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.expm1 local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/expm1 local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $std/math/test_expm1f (; 92 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) local.get $0 @@ -4938,13 +4856,11 @@ call $std/math/check ) (func $std/math/test_floor (; 93 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) - (local $2 i32) local.get $0 f64.floor local.get $1 f64.const 0 call $std/math/check - local.tee $2 if (result i32) local.get $0 call $~lib/bindings/Math/floor @@ -4952,7 +4868,7 @@ f64.const 0 call $std/math/check else - local.get $2 + i32.const 0 end ) (func $std/math/test_floorf (; 94 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) @@ -4971,9 +4887,8 @@ (local $7 f64) (local $8 f64) (local $9 i32) - (local $10 i32) - (local $11 f64) - (local $12 i64) + (local $10 f64) + (local $11 i64) local.get $0 i64.reinterpret_f64 i64.const 9223372036854775807 @@ -4987,10 +4902,10 @@ i64.lt_u if local.get $4 - local.set $12 + local.set $11 local.get $2 local.set $4 - local.get $12 + local.get $11 local.set $2 end local.get $4 @@ -5015,18 +4930,14 @@ local.get $4 f64.reinterpret_i64 local.set $0 + i32.const 1 + local.get $2 + i64.const 0 + i64.eq local.get $5 i32.const 2047 i32.eq - local.tee $10 - i32.eqz - if - local.get $2 - i64.const 0 - i64.eq - local.set $10 - end - local.get $10 + select if local.get $0 return @@ -5086,7 +4997,7 @@ f64.add local.tee $7 f64.sub - local.set $11 + local.set $10 local.get $1 local.get $1 local.get $1 @@ -5127,9 +5038,9 @@ f64.const 2 local.get $7 f64.mul - local.get $11 + local.get $10 f64.add - local.get $11 + local.get $10 f64.mul f64.add f64.add @@ -5141,31 +5052,29 @@ f64.mul ) (func $std/math/test_hypot (; 96 ;) (type $FUNCSIG$idddd) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (result i32) - (local $4 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.hypot local.get $2 local.get $3 call $std/math/check - local.tee $4 - if + if (result i32) local.get $0 local.get $1 call $~lib/bindings/Math/hypot local.get $2 local.get $3 call $std/math/check - local.set $4 + else + i32.const 0 end - local.get $4 ) (func $~lib/math/NativeMathf.hypot (; 97 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 f32) - (local $6 f64) + (local $4 f32) + (local $5 f64) + (local $6 i32) local.get $0 i32.reinterpret_f32 i32.const 2147483647 @@ -5179,10 +5088,10 @@ i32.lt_u if local.get $3 - local.set $4 + local.set $6 local.get $2 local.set $3 - local.get $4 + local.get $6 local.set $2 end local.get $3 @@ -5198,27 +5107,20 @@ local.get $1 return end + i32.const 1 + local.get $3 + local.get $2 + i32.sub + i32.const 209715200 + i32.ge_u + i32.const 1 + local.get $2 + i32.eqz local.get $3 i32.const 2139095040 i32.ge_u - local.tee $4 - i32.eqz - if - local.get $2 - i32.eqz - local.set $4 - end - local.get $4 - i32.eqz - if - local.get $3 - local.get $2 - i32.sub - i32.const 209715200 - i32.ge_u - local.set $4 - end - local.get $4 + select + select if local.get $0 local.get $1 @@ -5226,13 +5128,13 @@ return end f32.const 1 - local.set $5 + local.set $4 local.get $3 i32.const 1568669696 i32.ge_u if (result f32) f32.const 1237940039285380274899124e3 - local.set $5 + local.set $4 local.get $1 f32.const 8.077935669463161e-28 f32.mul @@ -5246,7 +5148,7 @@ i32.lt_u if (result f32) f32.const 8.077935669463161e-28 - local.set $5 + local.set $4 local.get $1 f32.const 1237940039285380274899124e3 f32.mul @@ -5259,16 +5161,16 @@ end end local.set $0 - local.get $5 + local.get $4 local.get $0 f64.promote_f32 - local.tee $6 - local.get $6 + local.tee $5 + local.get $5 f64.mul local.get $1 f64.promote_f32 - local.tee $6 - local.get $6 + local.tee $5 + local.get $5 f64.mul f64.add f32.demote_f64 @@ -5284,22 +5186,20 @@ call $std/math/check ) (func $std/math/test_log (; 99 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.log local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/log local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $std/math/test_logf (; 100 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) local.get $0 @@ -5311,33 +5211,30 @@ (func $~lib/math/NativeMath.log10 (; 101 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (local $1 f64) (local $2 i32) - (local $3 i32) - (local $4 i64) - (local $5 f64) - (local $6 i32) + (local $3 i64) + (local $4 f64) + (local $5 i32) + (local $6 f64) (local $7 f64) (local $8 f64) - (local $9 f64) local.get $0 i64.reinterpret_f64 - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $2 i32.const 1048576 i32.lt_u - local.tee $2 - i32.eqz - if - local.get $3 + if (result i32) + i32.const 1 + else + local.get $2 i32.const 31 i32.shr_u - local.set $2 end - local.get $2 if - local.get $4 + local.get $3 i64.const 1 i64.shl i64.const 0 @@ -5350,7 +5247,414 @@ f64.div return end + local.get $2 + i32.const 31 + i32.shr_u + if + local.get $0 + local.get $0 + f64.sub + f64.const 0 + f64.div + return + end + i32.const -54 + local.set $5 + local.get $0 + f64.const 18014398509481984 + f64.mul + i64.reinterpret_f64 + local.tee $3 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.set $2 + else + local.get $2 + i32.const 2146435072 + i32.ge_u + if + local.get $0 + return + else + local.get $3 + i64.const 32 + i64.shl + i64.const 0 + i64.eq + i32.const 0 + local.get $2 + i32.const 1072693248 + i32.eq + select + if + f64.const 0 + return + end + end + end + local.get $3 + i64.const 4294967295 + i64.and + local.get $2 + i32.const 614242 + i32.add + local.tee $2 + i32.const 1048575 + i32.and + i32.const 1072079006 + i32.add + i64.extend_i32_u + i64.const 32 + i64.shl + i64.or + f64.reinterpret_i64 + f64.const 1 + f64.sub + local.tee $1 + f64.const 2 + local.get $1 + f64.add + f64.div + local.tee $6 + local.get $6 + f64.mul + local.tee $7 + local.get $7 + f64.mul + local.set $0 + local.get $2 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + local.get $5 + i32.add + f64.convert_i32_s + local.tee $4 + f64.const 0.30102999566361177 + f64.mul + local.set $8 + local.get $4 + f64.const 3.694239077158931e-13 + f64.mul + local.get $1 + local.get $1 + f64.const 0.5 + local.get $1 + f64.mul + local.get $1 + f64.mul + local.tee $1 + f64.sub + i64.reinterpret_f64 + i64.const -4294967296 + i64.and + f64.reinterpret_i64 + local.tee $4 + f64.sub + local.get $1 + f64.sub + local.get $6 + local.get $1 + local.get $7 + f64.const 0.6666666666666735 + local.get $0 + f64.const 0.2857142874366239 + local.get $0 + f64.const 0.1818357216161805 + local.get $0 + f64.const 0.14798198605116586 + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + local.get $0 + f64.const 0.3999999999940942 + local.get $0 + f64.const 0.22222198432149784 + local.get $0 + f64.const 0.15313837699209373 + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.add + f64.mul + f64.add + local.tee $0 + local.get $4 + f64.add + f64.const 2.5082946711645275e-11 + f64.mul + f64.add + local.get $0 + f64.const 0.4342944818781689 + f64.mul + f64.add + local.get $8 + local.get $8 + local.get $4 + f64.const 0.4342944818781689 + f64.mul + local.tee $0 + f64.add + local.tee $1 + f64.sub + local.get $0 + f64.add + f64.add + local.get $1 + f64.add + ) + (func $std/math/test_log10 (; 102 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) + local.get $0 + call $~lib/math/NativeMath.log10 + local.get $1 + local.get $2 + call $std/math/check + if (result i32) + local.get $0 + call $~lib/bindings/Math/log10 + local.get $1 + local.get $2 + call $std/math/check + else + i32.const 0 + end + ) + (func $~lib/math/NativeMathf.log10 (; 103 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) + (local $1 i32) + (local $2 f32) + (local $3 i32) + (local $4 f32) + (local $5 f32) + (local $6 f32) + (local $7 f32) + local.get $0 + i32.reinterpret_f32 + local.tee $1 + i32.const 8388608 + i32.lt_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 31 + i32.shr_u + end + if + local.get $1 + i32.const 1 + i32.shl + i32.eqz + if + f32.const -1 + local.get $0 + local.get $0 + f32.mul + f32.div + return + end + local.get $1 + i32.const 31 + i32.shr_u + if + local.get $0 + local.get $0 + f32.sub + f32.const 0 + f32.div + return + end + i32.const -25 + local.set $3 + local.get $0 + f32.const 33554432 + f32.mul + i32.reinterpret_f32 + local.set $1 + else + local.get $1 + i32.const 2139095040 + i32.ge_u + if + local.get $0 + return + else + local.get $1 + i32.const 1065353216 + i32.eq + if + f32.const 0 + return + end + end + end + local.get $1 + i32.const 4913933 + i32.add + local.tee $1 + i32.const 8388607 + i32.and + i32.const 1060439283 + i32.add + f32.reinterpret_i32 + f32.const 1 + f32.sub + local.tee $0 + f32.const 2 + local.get $0 + f32.add + f32.div + local.tee $4 + local.get $4 + f32.mul + local.tee $5 + local.get $5 + f32.mul + local.set $2 + local.get $1 + i32.const 23 + i32.shr_u + i32.const 127 + i32.sub + local.get $3 + i32.add + f32.convert_i32_s + local.tee $7 + f32.const 7.903415166765626e-07 + f32.mul + local.get $0 + local.get $0 + f32.const 0.5 + local.get $0 + f32.mul + local.get $0 + f32.mul + local.tee $0 + f32.sub + i32.reinterpret_f32 + i32.const -4096 + i32.and + f32.reinterpret_i32 + local.tee $6 + f32.sub + local.get $0 + f32.sub + local.get $4 + local.get $0 + local.get $5 + f32.const 0.6666666269302368 + local.get $2 + f32.const 0.2849878668785095 + f32.mul + f32.add + f32.mul + local.get $2 + f32.const 0.40000972151756287 + local.get $2 + f32.const 0.24279078841209412 + f32.mul + f32.add + f32.mul + f32.add + f32.add + f32.mul + f32.add + local.tee $0 + local.get $6 + f32.add + f32.const -3.168997136526741e-05 + f32.mul + f32.add + local.get $0 + f32.const 0.434326171875 + f32.mul + f32.add + local.get $6 + f32.const 0.434326171875 + f32.mul + f32.add + local.get $7 + f32.const 0.3010292053222656 + f32.mul + f32.add + ) + (func $std/math/test_log10f (; 104 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) + local.get $0 + call $~lib/math/NativeMathf.log10 + local.get $1 + local.get $2 + call $std/math/check + ) + (func $std/math/test_log1p (; 105 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) + local.get $0 + call $~lib/math/NativeMath.log1p + local.get $1 + local.get $2 + call $std/math/check + if (result i32) + local.get $0 + call $~lib/bindings/Math/log1p + local.get $1 + local.get $2 + call $std/math/check + else + i32.const 0 + end + ) + (func $std/math/test_log1pf (; 106 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) + local.get $0 + call $~lib/math/NativeMathf.log1p + local.get $1 + local.get $2 + call $std/math/check + ) + (func $~lib/math/NativeMath.log2 (; 107 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) + (local $1 f64) + (local $2 i32) + (local $3 i64) + (local $4 f64) + (local $5 f64) + (local $6 i32) + (local $7 f64) + local.get $0 + i64.reinterpret_f64 + local.tee $3 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.tee $2 + i32.const 1048576 + i32.lt_u + if (result i32) + i32.const 1 + else + local.get $2 + i32.const 31 + i32.shr_u + end + if local.get $3 + i64.const 1 + i64.shl + i64.const 0 + i64.eq + if + f64.const -1 + local.get $0 + local.get $0 + f64.mul + f64.div + return + end + local.get $2 i32.const 31 i32.shr_u if @@ -5367,13 +5671,13 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $3 + local.set $2 else - local.get $3 + local.get $2 i32.const 2146435072 i32.ge_u if @@ -5381,28 +5685,25 @@ return else local.get $3 + i64.const 32 + i64.shl + i64.const 0 + i64.eq + i32.const 0 + local.get $2 i32.const 1072693248 i32.eq - local.tee $2 - if - local.get $4 - i64.const 32 - i64.shl - i64.const 0 - i64.eq - local.set $2 - end - local.get $2 + select if f64.const 0 return end end end - local.get $4 + local.get $3 i64.const 4294967295 i64.and - local.get $3 + local.get $2 i32.const 614242 i32.add local.tee $2 @@ -5422,432 +5723,12 @@ local.get $1 f64.add f64.div - local.tee $7 - local.get $7 - f64.mul - local.tee $8 - local.get $8 - f64.mul - local.set $0 - local.get $2 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - local.get $6 - i32.add - f64.convert_i32_s - local.tee $5 - f64.const 0.30102999566361177 - f64.mul - local.set $9 - local.get $5 - f64.const 3.694239077158931e-13 - f64.mul - local.get $1 - local.get $1 - f64.const 0.5 - local.get $1 - f64.mul - local.get $1 - f64.mul - local.tee $1 - f64.sub - i64.reinterpret_f64 - i64.const -4294967296 - i64.and - f64.reinterpret_i64 - local.tee $5 - f64.sub - local.get $1 - f64.sub - local.get $7 - local.get $1 - local.get $8 - f64.const 0.6666666666666735 - local.get $0 - f64.const 0.2857142874366239 - local.get $0 - f64.const 0.1818357216161805 - local.get $0 - f64.const 0.14798198605116586 - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - local.get $0 - f64.const 0.3999999999940942 - local.get $0 - f64.const 0.22222198432149784 - local.get $0 - f64.const 0.15313837699209373 - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.add - f64.mul - f64.add - local.tee $0 - local.get $5 - f64.add - f64.const 2.5082946711645275e-11 - f64.mul - f64.add - local.get $0 - f64.const 0.4342944818781689 - f64.mul - f64.add - local.get $9 - local.get $9 - local.get $5 - f64.const 0.4342944818781689 - f64.mul - local.tee $0 - f64.add - local.tee $1 - f64.sub - local.get $0 - f64.add - f64.add - local.get $1 - f64.add - ) - (func $std/math/test_log10 (; 102 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) - local.get $0 - call $~lib/math/NativeMath.log10 - local.get $1 - local.get $2 - call $std/math/check - local.tee $3 - if - local.get $0 - call $~lib/bindings/Math/log10 - local.get $1 - local.get $2 - call $std/math/check - local.set $3 - end - local.get $3 - ) - (func $~lib/math/NativeMathf.log10 (; 103 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) - (local $1 i32) - (local $2 i32) - (local $3 f32) - (local $4 i32) - (local $5 f32) - (local $6 f32) - (local $7 f32) - (local $8 f32) - local.get $0 - i32.reinterpret_f32 - local.tee $1 - i32.const 8388608 - i32.lt_u - local.tee $2 - i32.eqz - if - local.get $1 - i32.const 31 - i32.shr_u - local.set $2 - end - local.get $2 - if - local.get $1 - i32.const 1 - i32.shl - i32.eqz - if - f32.const -1 - local.get $0 - local.get $0 - f32.mul - f32.div - return - end - local.get $1 - i32.const 31 - i32.shr_u - if - local.get $0 - local.get $0 - f32.sub - f32.const 0 - f32.div - return - end - i32.const -25 - local.set $4 - local.get $0 - f32.const 33554432 - f32.mul - i32.reinterpret_f32 - local.set $1 - else - local.get $1 - i32.const 2139095040 - i32.ge_u - if - local.get $0 - return - else - local.get $1 - i32.const 1065353216 - i32.eq - if - f32.const 0 - return - end - end - end - local.get $1 - i32.const 4913933 - i32.add - local.tee $2 - i32.const 8388607 - i32.and - i32.const 1060439283 - i32.add - f32.reinterpret_i32 - f32.const 1 - f32.sub - local.tee $0 - f32.const 2 - local.get $0 - f32.add - f32.div - local.tee $5 - local.get $5 - f32.mul - local.tee $6 - local.get $6 - f32.mul - local.set $3 - local.get $2 - i32.const 23 - i32.shr_u - i32.const 127 - i32.sub - local.get $4 - i32.add - f32.convert_i32_s - local.tee $8 - f32.const 7.903415166765626e-07 - f32.mul - local.get $0 - local.get $0 - f32.const 0.5 - local.get $0 - f32.mul - local.get $0 - f32.mul - local.tee $0 - f32.sub - i32.reinterpret_f32 - i32.const -4096 - i32.and - f32.reinterpret_i32 - local.tee $7 - f32.sub - local.get $0 - f32.sub - local.get $5 - local.get $0 - local.get $6 - f32.const 0.6666666269302368 - local.get $3 - f32.const 0.2849878668785095 - f32.mul - f32.add - f32.mul - local.get $3 - f32.const 0.40000972151756287 - local.get $3 - f32.const 0.24279078841209412 - f32.mul - f32.add - f32.mul - f32.add - f32.add - f32.mul - f32.add - local.tee $0 - local.get $7 - f32.add - f32.const -3.168997136526741e-05 - f32.mul - f32.add - local.get $0 - f32.const 0.434326171875 - f32.mul - f32.add - local.get $7 - f32.const 0.434326171875 - f32.mul - f32.add - local.get $8 - f32.const 0.3010292053222656 - f32.mul - f32.add - ) - (func $std/math/test_log10f (; 104 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) - local.get $0 - call $~lib/math/NativeMathf.log10 - local.get $1 - local.get $2 - call $std/math/check - ) - (func $std/math/test_log1p (; 105 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) - local.get $0 - call $~lib/math/NativeMath.log1p - local.get $1 - local.get $2 - call $std/math/check - local.tee $3 - if - local.get $0 - call $~lib/bindings/Math/log1p - local.get $1 - local.get $2 - call $std/math/check - local.set $3 - end - local.get $3 - ) - (func $std/math/test_log1pf (; 106 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) - local.get $0 - call $~lib/math/NativeMathf.log1p - local.get $1 - local.get $2 - call $std/math/check - ) - (func $~lib/math/NativeMath.log2 (; 107 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) - (local $1 f64) - (local $2 i32) - (local $3 i32) - (local $4 i64) - (local $5 f64) - (local $6 f64) - (local $7 i32) - (local $8 f64) - local.get $0 - i64.reinterpret_f64 local.tee $4 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.tee $3 - i32.const 1048576 - i32.lt_u - local.tee $2 - i32.eqz - if - local.get $3 - i32.const 31 - i32.shr_u - local.set $2 - end - local.get $2 - if - local.get $4 - i64.const 1 - i64.shl - i64.const 0 - i64.eq - if - f64.const -1 - local.get $0 - local.get $0 - f64.mul - f64.div - return - end - local.get $3 - i32.const 31 - i32.shr_u - if - local.get $0 - local.get $0 - f64.sub - f64.const 0 - f64.div - return - end - i32.const -54 - local.set $7 - local.get $0 - f64.const 18014398509481984 - f64.mul - i64.reinterpret_f64 - local.tee $4 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.set $3 - else - local.get $3 - i32.const 2146435072 - i32.ge_u - if - local.get $0 - return - else - local.get $3 - i32.const 1072693248 - i32.eq - local.tee $2 - if - local.get $4 - i64.const 32 - i64.shl - i64.const 0 - i64.eq - local.set $2 - end - local.get $2 - if - f64.const 0 - return - end - end - end local.get $4 - i64.const 4294967295 - i64.and - local.get $3 - i32.const 614242 - i32.add - local.tee $2 - i32.const 1048575 - i32.and - i32.const 1072079006 - i32.add - i64.extend_i32_u - i64.const 32 - i64.shl - i64.or - f64.reinterpret_i64 - f64.const 1 - f64.sub - local.tee $1 - f64.const 2 - local.get $1 - f64.add - f64.div + f64.mul local.tee $5 local.get $5 f64.mul - local.tee $6 - local.get $6 - f64.mul local.set $0 local.get $1 local.get $1 @@ -5862,13 +5743,13 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $8 + local.tee $7 f64.sub local.get $1 f64.sub + local.get $4 + local.get $1 local.get $5 - local.get $1 - local.get $6 f64.const 0.6666666666666735 local.get $0 f64.const 0.2857142874366239 @@ -5904,18 +5785,18 @@ i32.shr_u i32.const 1023 i32.sub - local.get $7 + local.get $6 i32.add f64.convert_i32_s - local.tee $5 - local.get $8 + local.tee $4 + local.get $7 f64.const 1.4426950407214463 f64.mul - local.tee $6 + local.tee $5 f64.add local.set $1 local.get $0 - local.get $8 + local.get $7 f64.add f64.const 1.6751713164886512e-10 f64.mul @@ -5923,55 +5804,50 @@ f64.const 1.4426950407214463 f64.mul f64.add - local.get $5 + local.get $4 local.get $1 f64.sub - local.get $6 + local.get $5 f64.add f64.add local.get $1 f64.add ) (func $std/math/test_log2 (; 108 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.log2 local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/log2 local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.log2 (; 109 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 i32) - (local $2 i32) - (local $3 f32) - (local $4 i32) + (local $2 f32) + (local $3 i32) + (local $4 f32) (local $5 f32) (local $6 f32) - (local $7 f32) local.get $0 i32.reinterpret_f32 local.tee $1 i32.const 8388608 i32.lt_u - local.tee $2 - i32.eqz - if + if (result i32) + i32.const 1 + else local.get $1 i32.const 31 i32.shr_u - local.set $2 end - local.get $2 if local.get $1 i32.const 1 @@ -5997,7 +5873,7 @@ return end i32.const -25 - local.set $4 + local.set $3 local.get $0 f32.const 33554432 f32.mul @@ -6023,7 +5899,7 @@ local.get $1 i32.const 4913933 i32.add - local.tee $2 + local.tee $1 i32.const 8388607 i32.and i32.const 1060439283 @@ -6036,13 +5912,13 @@ local.get $0 f32.add f32.div + local.tee $4 + local.get $4 + f32.mul local.tee $5 local.get $5 f32.mul - local.tee $6 - local.get $6 - f32.mul - local.set $3 + local.set $2 local.get $0 local.get $0 f32.const 0.5 @@ -6056,22 +5932,22 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $7 + local.tee $6 f32.sub local.get $0 f32.sub + local.get $4 + local.get $0 local.get $5 - local.get $0 - local.get $6 f32.const 0.6666666269302368 - local.get $3 + local.get $2 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $3 + local.get $2 f32.const 0.40000972151756287 - local.get $3 + local.get $2 f32.const 0.24279078841209412 f32.mul f32.add @@ -6081,7 +5957,7 @@ f32.mul f32.add local.tee $0 - local.get $7 + local.get $6 f32.add f32.const -1.7605285393074155e-04 f32.mul @@ -6089,16 +5965,16 @@ f32.const 1.44287109375 f32.mul f32.add - local.get $7 + local.get $6 f32.const 1.44287109375 f32.mul f32.add - local.get $2 + local.get $1 i32.const 23 i32.shr_u i32.const 127 i32.sub - local.get $4 + local.get $3 i32.add f32.convert_i32_s f32.add @@ -6111,24 +5987,22 @@ call $std/math/check ) (func $std/math/test_max (; 111 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 local.get $1 f64.max local.get $2 f64.const 0 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 local.get $1 call $~lib/bindings/Math/max local.get $2 f64.const 0 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $std/math/test_maxf (; 112 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) local.get $0 @@ -6139,24 +6013,22 @@ call $std/math/check ) (func $std/math/test_min (; 113 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 local.get $1 f64.min local.get $2 f64.const 0 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 local.get $1 call $~lib/bindings/Math/min local.get $2 f64.const 0 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $std/math/test_minf (; 114 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) local.get $0 @@ -6171,10 +6043,9 @@ (local $3 i64) (local $4 i64) (local $5 i64) - (local $6 i32) + (local $6 i64) (local $7 i64) (local $8 i64) - (local $9 i64) local.get $0 i64.reinterpret_f64 local.tee $2 @@ -6194,31 +6065,26 @@ local.get $2 i64.const 63 i64.shr_u - local.set $8 - block (result i32) - local.get $3 - i64.const 1 - i64.shl - local.tee $7 - i64.const 0 + local.set $7 + local.get $3 + i64.const 1 + i64.shl + local.tee $6 + i64.const 0 + i64.eq + if (result i32) + i32.const 1 + else + local.get $4 + i64.const 2047 i64.eq - local.tee $6 - i32.eqz - if - local.get $4 - i64.const 2047 - i64.eq - local.set $6 - end - local.get $6 - i32.eqz end if (result i32) + i32.const 1 + else local.get $1 local.get $1 f64.ne - else - local.get $6 end if local.get $0 @@ -6233,12 +6099,12 @@ local.get $2 i64.const 1 i64.shl - local.tee $9 - local.get $7 + local.tee $8 + local.get $6 i64.le_u if - local.get $7 - local.get $9 + local.get $6 + local.get $8 i64.eq br_if $folding-inner0 local.get $0 @@ -6365,7 +6231,7 @@ i64.add i64.shr_u end - local.get $8 + local.get $7 i64.const 63 i64.shl i64.or @@ -6377,14 +6243,12 @@ f64.mul ) (func $std/math/test_mod (; 116 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.mod local.get $2 f64.const 0 call $std/math/check - local.tee $3 if (result i32) local.get $0 local.get $1 @@ -6393,7 +6257,7 @@ f64.const 0 call $std/math/check else - local.get $3 + i32.const 0 end ) (func $~lib/math/NativeMathf.mod (; 117 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) @@ -6406,7 +6270,7 @@ (local $8 i32) local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 i32.const 23 i32.shr_u i32.const 255 @@ -6414,39 +6278,33 @@ local.set $4 local.get $1 i32.reinterpret_f32 - local.tee $5 + local.tee $3 i32.const 23 i32.shr_u i32.const 255 i32.and - local.set $6 - local.get $3 + local.set $5 + local.get $2 i32.const -2147483648 i32.and - local.set $8 - block (result i32) - local.get $5 + local.set $7 + local.get $3 + i32.const 1 + i32.shl + local.tee $6 + if (result i32) + local.get $4 + i32.const 255 + i32.eq + else i32.const 1 - i32.shl - local.tee $7 - i32.eqz - local.tee $2 - i32.eqz - if - local.get $4 - i32.const 255 - i32.eq - local.set $2 - end - local.get $2 - i32.eqz end if (result i32) + i32.const 1 + else local.get $1 local.get $1 f32.ne - else - local.get $2 end if local.get $0 @@ -6458,15 +6316,15 @@ return end block $folding-inner0 - local.get $3 + local.get $2 i32.const 1 i32.shl - local.tee $2 - local.get $7 + local.tee $8 + local.get $6 i32.le_u if - local.get $2 - local.get $7 + local.get $6 + local.get $8 i32.eq br_if $folding-inner0 local.get $0 @@ -6474,16 +6332,16 @@ end local.get $4 if (result i32) - local.get $3 + local.get $2 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $3 + local.get $2 i32.const 1 local.get $4 - local.get $3 + local.get $2 i32.const 9 i32.shl i32.clz @@ -6493,30 +6351,30 @@ i32.shl end local.set $2 - local.get $6 + local.get $5 if (result i32) - local.get $5 + local.get $3 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $5 + local.get $3 i32.const 1 - local.get $6 local.get $5 + local.get $3 i32.const 9 i32.shl i32.clz i32.sub - local.tee $6 + local.tee $5 i32.sub i32.shl end local.set $3 loop $continue|0 local.get $4 - local.get $6 + local.get $5 i32.gt_s if local.get $2 @@ -6585,7 +6443,7 @@ i32.sub i32.shr_u end - local.get $8 + local.get $7 i32.or f32.reinterpret_i32 return @@ -6603,9 +6461,9 @@ call $std/math/check ) (func $~lib/math/NativeMath.pow (; 119 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64) - (local $2 i32) + (local $2 f64) (local $3 f64) - (local $4 f64) + (local $4 i32) (local $5 i32) (local $6 i32) (local $7 f64) @@ -6634,7 +6492,7 @@ local.tee $17 i32.const 2147483647 i32.and - local.set $5 + local.set $4 local.get $1 i64.reinterpret_f64 local.tee $16 @@ -6655,46 +6513,38 @@ f64.const 1 return end - local.get $5 + i32.const 1 + local.get $8 i32.const 2146435072 i32.gt_s - local.tee $2 - i32.eqz - if - local.get $5 + local.get $4 + i32.const 2146435072 + i32.gt_s + if (result i32) + i32.const 1 + else + local.get $19 + i32.const 0 + i32.ne + i32.const 0 + local.get $4 i32.const 2146435072 i32.eq - local.tee $2 - if - local.get $19 - i32.const 0 - i32.ne - local.set $2 - end + select end - local.get $2 - i32.eqz - if - local.get $8 - i32.const 2146435072 - i32.gt_s - local.set $2 - end - local.get $2 - i32.eqz - if + select + if (result i32) + i32.const 1 + else + local.get $6 + i32.const 0 + i32.ne + i32.const 0 local.get $8 i32.const 2146435072 i32.eq - local.tee $2 - if - local.get $6 - i32.const 0 - i32.ne - local.set $2 - end + select end - local.get $2 if local.get $0 local.get $1 @@ -6727,8 +6577,8 @@ i32.gt_s local.tee $13 select - local.tee $2 - local.get $2 + local.tee $5 + local.get $5 i32.const 52 i32.const 20 local.get $13 @@ -6737,13 +6587,13 @@ i32.sub local.tee $13 i32.shr_s - local.tee $2 + local.tee $5 local.get $13 i32.shl i32.eq if (result i32) i32.const 2 - local.get $2 + local.get $5 i32.const 1 i32.and i32.sub @@ -6763,13 +6613,13 @@ i32.const 2146435072 i32.eq if - local.get $5 + local.get $4 i32.const 1072693248 i32.sub local.get $19 i32.or if - local.get $5 + local.get $4 i32.const 1072693248 i32.ge_s if @@ -6840,66 +6690,58 @@ end local.get $0 f64.abs - local.set $4 + local.set $3 local.get $19 i32.eqz if - local.get $5 - i32.eqz - local.tee $2 - i32.eqz - if - local.get $5 - i32.const 2146435072 - i32.eq - local.set $2 - end - local.get $2 - i32.eqz - if - local.get $5 - i32.const 1072693248 - i32.eq - local.set $2 - end - local.get $2 + i32.const 1 + local.get $4 + i32.const 1072693248 + i32.eq + local.get $4 + i32.const 2146435072 + i32.eq + i32.const 1 + local.get $4 + select + select if f64.const 1 - local.get $4 + local.get $3 f64.div - local.get $4 + local.get $3 local.get $9 i32.const 0 i32.lt_s select - local.set $4 + local.set $3 local.get $17 i32.const 0 i32.lt_s if (result f64) - local.get $5 + local.get $4 i32.const 1072693248 i32.sub local.get $11 i32.or if (result f64) - local.get $4 + local.get $3 f64.neg - local.get $4 + local.get $3 local.get $11 i32.const 1 i32.eq select else - local.get $4 - local.get $4 + local.get $3 + local.get $3 f64.sub local.tee $0 local.get $0 f64.div end else - local.get $4 + local.get $3 end return end @@ -6937,7 +6779,7 @@ i32.const 1139802112 i32.gt_s if - local.get $5 + local.get $4 i32.const 1072693247 i32.le_s if @@ -6949,7 +6791,7 @@ select return end - local.get $5 + local.get $4 i32.const 1072693248 i32.ge_s if @@ -6962,7 +6804,7 @@ return end end - local.get $5 + local.get $4 i32.const 1072693247 i32.lt_s if @@ -6984,7 +6826,7 @@ end return end - local.get $5 + local.get $4 i32.const 1072693248 i32.gt_s if @@ -7006,16 +6848,16 @@ end return end - local.get $4 + local.get $3 f64.const 1 f64.sub - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f64.mul f64.const 0.5 - local.get $3 + local.get $2 f64.const 0.3333333333333333 - local.get $3 + local.get $2 f64.const 0.25 f64.mul f64.sub @@ -7024,10 +6866,10 @@ f64.mul local.set $0 f64.const 1.4426950216293335 - local.get $3 + local.get $2 f64.mul - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 f64.const 1.9259629911266175e-08 f64.mul local.get $0 @@ -7043,50 +6885,50 @@ local.set $10 local.get $0 local.get $10 - local.get $4 + local.get $3 f64.sub f64.sub else i32.const 0 local.set $6 - local.get $5 + local.get $4 i32.const 1048576 i32.lt_s if (result i32) - local.get $4 + local.get $3 f64.const 9007199254740992 f64.mul - local.tee $4 + local.tee $3 i64.reinterpret_f64 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $5 + local.set $4 i32.const -53 else i32.const 0 end - local.get $5 + local.get $4 i32.const 20 i32.shr_s i32.const 1023 i32.sub i32.add local.set $6 - local.get $5 + local.get $4 i32.const 1048575 i32.and - local.tee $2 + local.tee $5 i32.const 1072693248 i32.or - local.set $5 - local.get $2 + local.set $4 + local.get $5 i32.const 235662 i32.le_s if (result i32) i32.const 0 else - local.get $2 + local.get $5 i32.const 767610 i32.lt_s if (result i32) @@ -7096,38 +6938,38 @@ i32.const 1 i32.add local.set $6 - local.get $5 + local.get $4 i32.const -1048576 i32.add - local.set $5 + local.set $4 i32.const 0 end end - local.set $2 - local.get $4 + local.set $5 + local.get $3 i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $5 + local.get $4 i64.extend_i32_s i64.const 32 i64.shl i64.or f64.reinterpret_i64 - local.tee $4 + local.tee $3 f64.const 1.5 f64.const 1 - local.get $2 + local.get $5 select local.tee $0 f64.sub local.tee $10 f64.const 1 - local.get $4 + local.get $3 local.get $0 f64.add f64.div - local.tee $3 + local.tee $2 f64.mul local.tee $18 i64.reinterpret_f64 @@ -7135,15 +6977,15 @@ i64.and f64.reinterpret_i64 local.set $14 + local.get $3 local.get $4 - local.get $5 i32.const 1 i32.shr_s i32.const 536870912 i32.or i32.const 524288 i32.add - local.get $2 + local.get $5 i32.const 18 i32.shl i32.add @@ -7151,7 +6993,7 @@ i64.const 32 i64.shl f64.reinterpret_i64 - local.tee $4 + local.tee $3 local.get $0 f64.sub f64.sub @@ -7192,10 +7034,10 @@ f64.mul f64.add f64.mul - local.get $3 + local.get $2 local.get $10 local.get $14 - local.get $4 + local.get $3 f64.mul f64.sub local.get $14 @@ -7203,7 +7045,7 @@ f64.mul f64.sub f64.mul - local.tee $3 + local.tee $2 local.get $14 local.get $18 f64.add @@ -7217,8 +7059,8 @@ f64.reinterpret_i64 local.tee $10 f64.mul - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 local.get $10 f64.mul local.get $0 @@ -7237,15 +7079,15 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $3 + local.tee $2 f64.mul local.tee $20 f64.const -7.028461650952758e-09 - local.get $3 + local.get $2 f64.mul local.get $0 + local.get $2 local.get $3 - local.get $4 f64.sub f64.sub f64.const 0.9617966939259756 @@ -7253,16 +7095,16 @@ f64.add f64.const 1.350039202129749e-08 f64.const 0 - local.get $2 + local.get $5 select f64.add - local.tee $3 + local.tee $2 f64.add f64.const 0.5849624872207642 f64.const 0 - local.get $2 + local.get $5 select - local.tee $4 + local.tee $3 f64.add local.get $6 f64.convert_i32_s @@ -7273,17 +7115,17 @@ i64.and f64.reinterpret_i64 local.set $10 - local.get $3 + local.get $2 local.get $10 local.get $0 f64.sub - local.get $4 + local.get $3 f64.sub local.get $20 f64.sub f64.sub end - local.set $4 + local.set $3 local.get $1 local.get $1 i64.reinterpret_f64 @@ -7295,20 +7137,20 @@ local.get $10 f64.mul local.get $1 - local.get $4 + local.get $3 f64.mul f64.add local.tee $1 local.get $0 local.get $10 f64.mul - local.tee $3 + local.tee $2 f64.add local.tee $0 i64.reinterpret_f64 local.tee $16 i32.wrap_i64 - local.set $2 + local.set $5 block $folding-inner1 block $folding-inner0 local.get $16 @@ -7322,14 +7164,14 @@ local.get $12 i32.const 1083179008 i32.sub - local.get $2 + local.get $5 i32.or br_if $folding-inner0 local.get $1 f64.const 8.008566259537294e-17 f64.add local.get $0 - local.get $3 + local.get $2 f64.sub f64.gt br_if $folding-inner0 @@ -7343,12 +7185,12 @@ local.get $12 i32.const -1064252416 i32.sub - local.get $2 + local.get $5 i32.or br_if $folding-inner1 local.get $1 local.get $0 - local.get $3 + local.get $2 f64.sub f64.le br_if $folding-inner1 @@ -7362,7 +7204,7 @@ i32.shr_s i32.const 1023 i32.sub - local.set $2 + local.set $5 i32.const 0 local.set $6 local.get $13 @@ -7370,7 +7212,7 @@ i32.gt_s if i32.const 1048576 - local.get $2 + local.get $5 i32.const 1 i32.add i32.shr_s @@ -7383,9 +7225,9 @@ i32.shr_s i32.const 1023 i32.sub - local.set $2 + local.set $5 i32.const 1048575 - local.get $2 + local.get $5 i32.shr_s i32.const -1 i32.xor @@ -7402,7 +7244,7 @@ i32.const 1048576 i32.or i32.const 20 - local.get $2 + local.get $5 i32.sub i32.shr_s local.set $6 @@ -7415,13 +7257,13 @@ i32.lt_s select local.set $6 - local.get $3 + local.get $2 local.get $0 f64.sub - local.set $3 + local.set $2 end local.get $1 - local.get $3 + local.get $2 f64.add i64.reinterpret_f64 i64.const -4294967296 @@ -7430,10 +7272,10 @@ local.tee $0 f64.const 0.6931471824645996 f64.mul - local.tee $4 + local.tee $3 local.get $1 local.get $0 - local.get $3 + local.get $2 f64.sub f64.sub f64.const 0.6931471805599453 @@ -7444,14 +7286,14 @@ f64.add local.tee $1 f64.add - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f64.mul local.set $0 local.get $7 f64.const 1 - local.get $3 - local.get $3 + local.get $2 + local.get $2 local.get $0 f64.const 0.16666666666666602 local.get $0 @@ -7479,17 +7321,17 @@ f64.sub f64.div local.get $1 + local.get $2 local.get $3 - local.get $4 f64.sub f64.sub local.tee $0 - local.get $3 + local.get $2 local.get $0 f64.mul f64.add f64.sub - local.get $3 + local.get $2 f64.sub f64.sub local.tee $0 @@ -7501,7 +7343,7 @@ i32.const 20 i32.shl i32.add - local.tee $2 + local.tee $5 i32.const 20 i32.shr_s i32.const 0 @@ -7515,7 +7357,7 @@ i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $2 + local.get $5 i64.extend_i32_s i64.const 32 i64.shl @@ -7539,24 +7381,22 @@ f64.mul ) (func $std/math/test_pow (; 120 ;) (type $FUNCSIG$idddd) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (result i32) - (local $4 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.pow local.get $2 local.get $3 call $std/math/check - local.tee $4 - if + if (result i32) local.get $0 local.get $1 call $~lib/bindings/Math/pow local.get $2 local.get $3 call $std/math/check - local.set $4 + else + i32.const 0 end - local.get $4 ) (func $~lib/math/NativeMathf.pow (; 121 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) (local $2 f32) @@ -7579,7 +7419,7 @@ local.tee $8 i32.const 2147483647 i32.and - local.set $6 + local.set $5 local.get $1 i32.reinterpret_f32 local.tee $11 @@ -7591,18 +7431,14 @@ f32.const 1 return end - local.get $6 + i32.const 1 + local.get $10 i32.const 2139095040 i32.gt_s - local.tee $4 - i32.eqz - if - local.get $10 - i32.const 2139095040 - i32.gt_s - local.set $4 - end - local.get $4 + local.get $5 + i32.const 2139095040 + i32.gt_s + select if local.get $0 local.get $1 @@ -7631,14 +7467,14 @@ i32.sub local.tee $12 i32.shr_s - local.tee $4 + local.tee $6 local.get $12 i32.shl local.get $10 i32.eq if (result i32) i32.const 2 - local.get $4 + local.get $6 i32.const 1 i32.and i32.sub @@ -7649,20 +7485,20 @@ i32.const 0 end end - local.set $5 + local.set $4 end local.get $10 i32.const 2139095040 i32.eq if - local.get $6 + local.get $5 i32.const 1065353216 i32.eq if f32.const nan:0x400000 return else - local.get $6 + local.get $5 i32.const 1065353216 i32.gt_s if @@ -7730,25 +7566,18 @@ local.get $0 f32.abs local.set $3 - local.get $6 + i32.const 1 + local.get $5 + i32.const 1065353216 + i32.eq + i32.const 1 + local.get $5 + i32.eqz + local.get $5 i32.const 2139095040 i32.eq - local.tee $4 - i32.eqz - if - local.get $6 - i32.eqz - local.set $4 - end - local.get $4 - i32.eqz - if - local.get $6 - i32.const 1065353216 - i32.eq - local.set $4 - end - local.get $4 + select + select if f32.const 1 local.get $3 @@ -7763,16 +7592,16 @@ i32.const 0 i32.lt_s if (result f32) - local.get $6 + local.get $5 i32.const 1065353216 i32.sub - local.get $5 + local.get $4 i32.or if (result f32) local.get $3 f32.neg local.get $3 - local.get $5 + local.get $4 i32.const 1 i32.eq select @@ -7795,7 +7624,7 @@ i32.const 0 i32.lt_s if - local.get $5 + local.get $4 i32.eqz if local.get $0 @@ -7808,7 +7637,7 @@ end f32.const -1 f32.const 1 - local.get $5 + local.get $4 i32.const 1 i32.eq select @@ -7818,7 +7647,7 @@ i32.const 1291845632 i32.gt_s if (result f32) - local.get $6 + local.get $5 i32.const 1065353208 i32.lt_s if @@ -7840,7 +7669,7 @@ end return end - local.get $6 + local.get $5 i32.const 1065353223 i32.gt_s if @@ -7904,8 +7733,8 @@ f32.sub else i32.const 0 - local.set $5 - local.get $6 + local.set $4 + local.get $5 i32.const 8388608 i32.lt_s if (result i32) @@ -7913,55 +7742,55 @@ f32.const 16777216 f32.mul i32.reinterpret_f32 - local.set $6 + local.set $5 i32.const -24 else i32.const 0 end - local.get $6 + local.get $5 i32.const 23 i32.shr_s i32.const 127 i32.sub i32.add - local.set $5 - local.get $6 + local.set $4 + local.get $5 i32.const 8388607 i32.and - local.tee $4 + local.tee $6 i32.const 1065353216 i32.or - local.set $6 - local.get $4 + local.set $5 + local.get $6 i32.const 1885297 i32.le_s if (result i32) i32.const 0 else - local.get $4 + local.get $6 i32.const 6140887 i32.lt_s if (result i32) i32.const 1 else - local.get $5 + local.get $4 i32.const 1 i32.add - local.set $5 - local.get $6 + local.set $4 + local.get $5 i32.const 8388608 i32.sub - local.set $6 + local.set $5 i32.const 0 end end - local.set $4 - local.get $6 + local.set $6 + local.get $5 f32.reinterpret_i32 local.tee $3 f32.const 1.5 f32.const 1 - local.get $4 + local.get $6 select local.tee $0 f32.sub @@ -7980,7 +7809,7 @@ f32.reinterpret_i32 local.set $13 local.get $3 - local.get $6 + local.get $5 i32.const 1 i32.shr_s i32.const -4096 @@ -7989,7 +7818,7 @@ i32.or i32.const 4194304 i32.add - local.get $4 + local.get $6 i32.const 21 i32.shl i32.add @@ -8096,18 +7925,18 @@ f32.add f32.const 1.5632208487659227e-06 f32.const 0 - local.get $4 + local.get $6 select f32.add local.tee $2 f32.add f32.const 0.5849609375 f32.const 0 - local.get $4 + local.get $6 select local.tee $3 f32.add - local.get $5 + local.get $4 f32.convert_i32_s local.tee $0 f32.add @@ -8197,15 +8026,15 @@ i32.shr_s i32.const 127 i32.sub - local.set $4 + local.set $6 i32.const 0 - local.set $5 + local.set $4 local.get $12 i32.const 1056964608 i32.gt_s if i32.const 8388608 - local.get $4 + local.get $6 i32.const 1 i32.add i32.shr_s @@ -8218,9 +8047,9 @@ i32.shr_s i32.const 127 i32.sub - local.set $4 + local.set $6 i32.const 8388607 - local.get $4 + local.get $6 i32.shr_s i32.const -1 i32.xor @@ -8234,19 +8063,19 @@ i32.const 8388608 i32.or i32.const 23 - local.get $4 + local.get $6 i32.sub i32.shr_s - local.set $5 + local.set $4 i32.const 0 - local.get $5 + local.get $4 i32.sub - local.get $5 + local.get $4 local.get $8 i32.const 0 i32.lt_s select - local.set $5 + local.set $4 local.get $2 local.get $0 f32.sub @@ -8326,21 +8155,21 @@ f32.sub local.tee $0 i32.reinterpret_f32 - local.get $5 + local.get $4 i32.const 23 i32.shl i32.add - local.tee $4 + local.tee $6 i32.const 23 i32.shr_s i32.const 0 i32.le_s if (result f32) local.get $0 - local.get $5 + local.get $4 call $~lib/math/NativeMathf.scalbn else - local.get $4 + local.get $6 f32.reinterpret_i32 end f32.mul @@ -8581,7 +8410,6 @@ ) (func $std/math/test_sign (; 129 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) (local $2 f64) - (local $3 i32) local.get $0 local.set $2 f64.const 1 @@ -8598,16 +8426,15 @@ local.get $1 f64.const 0 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/sign local.get $1 f64.const 0 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $std/math/test_signf (; 130 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) f32.const 1 @@ -8629,19 +8456,10 @@ (local $2 i64) (local $3 i64) (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i32) - (local $8 f64) - (local $9 i32) - local.get $0 - i64.reinterpret_f64 - local.tee $2 - i64.const 52 - i64.shr_u - i64.const 2047 - i64.and - local.set $3 + (local $5 i64) + (local $6 i32) + (local $7 f64) + (local $8 i32) local.get $1 i64.reinterpret_f64 local.tee $4 @@ -8649,35 +8467,35 @@ i64.shr_u i64.const 2047 i64.and - local.set $6 - local.get $2 + local.set $5 + local.get $0 + i64.reinterpret_f64 + local.tee $2 i64.const 63 i64.shr_u i32.wrap_i64 - local.set $9 - block (result i32) - local.get $4 - i64.const 1 - i64.shl - i64.const 0 - i64.eq - local.tee $5 - i32.eqz - if - local.get $3 - i64.const 2047 - i64.eq - local.set $5 - end - local.get $5 - i32.eqz - end + local.set $8 + i32.const 1 + local.get $2 + i64.const 52 + i64.shr_u + i64.const 2047 + i64.and + local.tee $3 + i64.const 2047 + i64.eq + local.get $4 + i64.const 1 + i64.shl + i64.const 0 + i64.eq + select if (result i32) + i32.const 1 + else local.get $1 local.get $1 f64.ne - else - local.get $5 end if local.get $0 @@ -8721,18 +8539,18 @@ i64.or end local.set $2 - local.get $6 + local.get $5 i64.eqz if (result i64) local.get $4 i64.const 0 - local.get $6 + local.get $5 local.get $4 i64.const 12 i64.shl i64.clz i64.sub - local.tee $6 + local.tee $5 i64.sub i64.const 1 i64.add @@ -8747,13 +8565,13 @@ local.set $4 block $break|0 local.get $3 - local.get $6 + local.get $5 i64.lt_s if local.get $3 i64.const 1 i64.add - local.get $6 + local.get $5 i64.eq br_if $break|0 local.get $0 @@ -8761,30 +8579,30 @@ end loop $continue|1 local.get $3 - local.get $6 + local.get $5 i64.gt_s if local.get $2 local.get $4 i64.ge_u if - local.get $7 - i32.const 1 - i32.add - local.set $7 local.get $2 local.get $4 i64.sub local.set $2 + local.get $6 + i32.const 1 + i32.add + local.set $6 end local.get $2 i64.const 1 i64.shl local.set $2 - local.get $7 + local.get $6 i32.const 1 i32.shl - local.set $7 + local.set $6 local.get $3 i64.const 1 i64.sub @@ -8792,24 +8610,22 @@ br $continue|1 end end - block (result i32) + local.get $2 + local.get $4 + i64.ge_u + if local.get $2 local.get $4 - i64.ge_u - if - local.get $7 - i32.const 1 - i32.add - local.set $7 - local.get $2 - local.get $4 - i64.sub - local.set $2 - end - local.get $2 - i64.const 0 - i64.eq + i64.sub + local.set $2 + local.get $6 + i32.const 1 + i32.add + local.set $6 end + local.get $2 + i64.const 0 + i64.eq if i64.const -60 local.set $3 @@ -8830,7 +8646,7 @@ end local.get $1 f64.abs - local.set $0 + local.set $1 local.get $3 i64.const 0 i64.gt_s @@ -8852,49 +8668,43 @@ i64.shr_u end f64.reinterpret_i64 - local.tee $1 - local.get $1 - f64.add - local.set $8 - local.get $1 + local.tee $0 + local.get $0 + f64.add + local.set $7 local.get $0 - f64.sub local.get $1 + f64.sub + local.get $0 local.get $3 - local.get $6 + local.get $5 i64.eq - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $3 i64.const 1 i64.add - local.get $6 + local.get $5 i64.eq - local.tee $5 if (result i32) - local.get $8 - local.get $0 + local.get $7 + local.get $1 f64.gt - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else - local.get $8 - local.get $0 + local.get $6 + i32.const 1 + i32.and + i32.const 0 + local.get $7 + local.get $1 f64.eq - local.tee $5 - if (result i32) - local.get $7 - i32.const 1 - i32.and - else - local.get $5 - end + select end else - local.get $5 + i32.const 0 end end select @@ -8902,7 +8712,7 @@ local.get $0 f64.neg local.get $0 - local.get $9 + local.get $8 select ) (func $std/math/test_rem (; 132 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -8921,48 +8731,39 @@ (local $6 i32) (local $7 f32) (local $8 i32) - local.get $0 + local.get $1 i32.reinterpret_f32 local.tee $4 i32.const 23 i32.shr_u i32.const 255 i32.and - local.set $3 - local.get $1 + local.set $5 + local.get $0 i32.reinterpret_f32 - local.tee $5 + local.tee $2 + i32.const 31 + i32.shr_u + local.set $8 + local.get $2 i32.const 23 i32.shr_u i32.const 255 i32.and - local.set $6 + local.tee $3 + i32.const 255 + i32.eq + i32.const 1 local.get $4 - i32.const 31 - i32.shr_u - local.set $8 - block (result i32) - local.get $5 - i32.const 1 - i32.shl - i32.eqz - local.tee $2 - i32.eqz - if - local.get $3 - i32.const 255 - i32.eq - local.set $2 - end - local.get $2 - i32.eqz - end + i32.const 1 + i32.shl + select if (result i32) + i32.const 1 + else local.get $1 local.get $1 f32.ne - else - local.get $2 end if local.get $0 @@ -8973,7 +8774,7 @@ f32.div return end - local.get $4 + local.get $2 i32.const 1 i32.shl i32.eqz @@ -8983,16 +8784,16 @@ end local.get $3 if (result i32) - local.get $4 + local.get $2 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $4 + local.get $2 i32.const 1 local.get $3 - local.get $4 + local.get $2 i32.const 9 i32.shl i32.clz @@ -9002,38 +8803,36 @@ i32.shl end local.set $2 - local.get $6 + local.get $5 if (result i32) - local.get $5 + local.get $4 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $5 + local.get $4 i32.const 1 - local.get $6 local.get $5 + local.get $4 i32.const 9 i32.shl i32.clz i32.sub - local.tee $6 + local.tee $5 i32.sub i32.shl end local.set $4 - i32.const 0 - local.set $5 block $break|0 local.get $3 - local.get $6 + local.get $5 i32.lt_s if local.get $3 i32.const 1 i32.add - local.get $6 + local.get $5 i32.eq br_if $break|0 local.get $0 @@ -9041,30 +8840,30 @@ end loop $continue|1 local.get $3 - local.get $6 + local.get $5 i32.gt_s if local.get $2 local.get $4 i32.ge_u - if (result i32) - local.get $5 + if + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.sub - else - local.get $2 + local.set $2 end + local.get $2 i32.const 1 i32.shl local.set $2 - local.get $5 + local.get $6 i32.const 1 i32.shl - local.set $5 + local.set $6 local.get $3 i32.const 1 i32.sub @@ -9077,18 +8876,22 @@ local.get $4 i32.ge_u if - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.sub local.set $2 end local.get $2 + i32.eqz end if + i32.const -30 + local.set $3 + else local.get $3 local.get $2 i32.const 8 @@ -9101,14 +8904,11 @@ local.get $4 i32.shl local.set $2 - else - i32.const -30 - local.set $3 end end local.get $1 f32.abs - local.set $0 + local.set $1 local.get $3 i32.const 0 i32.gt_s @@ -9128,49 +8928,43 @@ i32.shr_u end f32.reinterpret_i32 - local.tee $1 - local.get $1 + local.tee $0 + local.get $0 f32.add local.set $7 - local.get $1 local.get $0 - f32.sub local.get $1 + f32.sub + local.get $0 local.get $3 - local.get $6 + local.get $5 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $3 i32.const 1 i32.add - local.get $6 + local.get $5 i32.eq - local.tee $2 if (result i32) local.get $7 - local.get $0 + local.get $1 f32.gt - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else + local.get $6 + i32.const 1 + i32.and + i32.const 0 local.get $7 - local.get $0 + local.get $1 f32.eq - local.tee $2 - if (result i32) - local.get $5 - i32.const 1 - i32.and - else - local.get $2 - end + select end else - local.get $2 + i32.const 0 end end select @@ -9779,22 +9573,20 @@ f64.mul ) (func $std/math/test_sinh (; 138 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.sinh local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/sinh local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.sinh (; 139 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 f32) @@ -9876,22 +9668,20 @@ call $std/math/check ) (func $std/math/test_sqrt (; 141 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 f64.sqrt local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/sqrt local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $std/math/test_sqrtf (; 142 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) local.get $0 @@ -10395,22 +10185,20 @@ f64.copysign ) (func $std/math/test_tanh (; 146 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 call $~lib/math/NativeMath.tanh local.get $1 local.get $2 call $std/math/check - local.tee $3 - if + if (result i32) local.get $0 call $~lib/bindings/Math/tanh local.get $1 local.get $2 call $std/math/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.tanh (; 147 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 f32) @@ -10494,13 +10282,11 @@ call $std/math/check ) (func $std/math/test_trunc (; 149 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) - (local $2 i32) local.get $0 f64.trunc local.get $1 f64.const 0 call $std/math/check - local.tee $2 if (result i32) local.get $0 call $~lib/bindings/Math/trunc @@ -10508,7 +10294,7 @@ f64.const 0 call $std/math/check else - local.get $2 + i32.const 0 end ) (func $std/math/test_truncf (; 150 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) @@ -10863,7 +10649,6 @@ (local $0 f64) (local $1 f32) (local $2 i32) - (local $3 i32) f64.const 2.718281828459045 global.get $~lib/bindings/Math/E f64.const 0 @@ -32399,13 +32184,12 @@ local.tee $0 f64.const 0 f64.ge - local.tee $3 if (result i32) local.get $0 f64.const 1 f64.lt else - local.get $3 + i32.const 0 end if local.get $2 @@ -32439,13 +32223,12 @@ local.tee $1 f32.const 0 f32.ge - local.tee $3 if (result i32) local.get $1 f32.const 1 f32.lt else - local.get $3 + i32.const 0 end if local.get $2 diff --git a/tests/compiler/std/math.untouched.wat b/tests/compiler/std/math.untouched.wat index 767383e8..ed77e58b 100644 --- a/tests/compiler/std/math.untouched.wat +++ b/tests/compiler/std/math.untouched.wat @@ -235,16 +235,14 @@ f64.mul ) (func $std/math/ulperr (; 34 ;) (type $FUNCSIG$dddd) (param $0 f64) (param $1 f64) (param $2 f64) (result f64) - (local $3 i32) - (local $4 f64) + (local $3 f64) local.get $0 call $~lib/builtins/isNaN - local.tee $3 if (result i32) local.get $1 call $~lib/builtins/isNaN else - local.get $3 + i32.const 0 end if f64.const 0 @@ -256,14 +254,14 @@ if block $~lib/math/NativeMath.signbit|inlined.2 (result i32) local.get $0 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $4 - local.get $4 + local.get $3 + local.get $3 f64.eq i32.and end @@ -271,14 +269,14 @@ i32.ne block $~lib/math/NativeMath.signbit|inlined.3 (result i32) local.get $1 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $4 - local.get $4 + local.get $3 + local.get $3 f64.eq i32.and end @@ -476,16 +474,14 @@ f32.mul ) (func $std/math/ulperrf (; 40 ;) (type $FUNCSIG$ffff) (param $0 f32) (param $1 f32) (param $2 f32) (result f32) - (local $3 i32) - (local $4 f32) + (local $3 f32) local.get $0 call $~lib/builtins/isNaN - local.tee $3 if (result i32) local.get $1 call $~lib/builtins/isNaN else - local.get $3 + i32.const 0 end if f32.const 0 @@ -497,13 +493,13 @@ if block $~lib/math/NativeMathf.signbit|inlined.2 (result i32) local.get $0 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -511,13 +507,13 @@ i32.ne block $~lib/math/NativeMathf.signbit|inlined.3 (result i32) local.get $1 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -606,7 +602,6 @@ ) (func $std/math/test_abs (; 44 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) (local $4 f64) - (local $5 i32) block $~lib/math/NativeMath.abs|inlined.0 (result f64) local.get $0 local.set $4 @@ -617,13 +612,11 @@ local.get $2 local.get $3 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 call $~lib/bindings/Math/abs @@ -633,7 +626,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $std/math/test_absf (; 45 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -851,20 +844,17 @@ f64.mul ) (func $std/math/test_acos (; 48 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.acos local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/acos @@ -874,7 +864,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/Rf (; 49 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -1083,9 +1073,8 @@ local.get $2 i32.const 1071284858 i32.lt_u - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $2 i32.const 31 @@ -1299,7 +1288,7 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) (local $6 f64) (local $7 f64) @@ -1307,8 +1296,7 @@ (local $9 f64) (local $10 f64) (local $11 f64) - (local $12 f64) - (local $13 i32) + (local $12 i32) local.get $0 i64.reinterpret_f64 local.set $1 @@ -1322,9 +1310,8 @@ local.get $2 i32.const 1048576 i32.lt_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 i32.const 31 @@ -1382,7 +1369,6 @@ local.get $2 i32.const 1072693248 i32.eq - local.tee $4 if (result i32) local.get $1 i64.const 32 @@ -1390,7 +1376,7 @@ i64.const 0 i64.eq else - local.get $4 + i32.const 0 end if f64.const 0 @@ -1433,46 +1419,46 @@ local.get $0 f64.const 1 f64.sub - local.set $5 + local.set $4 f64.const 0.5 - local.get $5 + local.get $4 f64.mul - local.get $5 + local.get $4 f64.mul - local.set $6 - local.get $5 + local.set $5 + local.get $4 f64.const 2 - local.get $5 + local.get $4 f64.add f64.div + local.set $6 + local.get $6 + local.get $6 + f64.mul local.set $7 local.get $7 local.get $7 f64.mul local.set $8 local.get $8 - local.get $8 - f64.mul - local.set $9 - local.get $9 f64.const 0.3999999999940942 - local.get $9 + local.get $8 f64.const 0.22222198432149784 - local.get $9 + local.get $8 f64.const 0.15313837699209373 f64.mul f64.add f64.mul f64.add f64.mul - local.set $10 - local.get $8 + local.set $9 + local.get $7 f64.const 0.6666666666666735 - local.get $9 + local.get $8 f64.const 0.2857142874366239 - local.get $9 + local.get $8 f64.const 0.1818357216161805 - local.get $9 + local.get $8 f64.const 0.14798198605116586 f64.mul f64.add @@ -1481,28 +1467,28 @@ f64.mul f64.add f64.mul - local.set $11 - local.get $11 + local.set $10 local.get $10 + local.get $9 f64.add - local.set $12 + local.set $11 local.get $3 - local.set $13 - local.get $7 + local.set $12 local.get $6 - local.get $12 + local.get $5 + local.get $11 f64.add f64.mul - local.get $13 + local.get $12 f64.convert_i32_s f64.const 1.9082149292705877e-10 f64.mul f64.add - local.get $6 - f64.sub local.get $5 + f64.sub + local.get $4 f64.add - local.get $13 + local.get $12 f64.convert_i32_s f64.const 0.6931471803691238 f64.mul @@ -1573,20 +1559,17 @@ f64.add ) (func $std/math/test_acosh (; 55 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.acosh local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/acosh @@ -1596,7 +1579,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.log1p (; 56 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -1604,8 +1587,8 @@ (local $2 f32) (local $3 f32) (local $4 i32) - (local $5 i32) - (local $6 f32) + (local $5 f32) + (local $6 i32) (local $7 f32) (local $8 f32) (local $9 f32) @@ -1626,9 +1609,8 @@ local.get $1 i32.const 1054086096 i32.lt_u - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $1 i32.const 31 @@ -1691,17 +1673,17 @@ f32.const 1 local.get $0 f32.add - local.set $6 - local.get $6 - i32.reinterpret_f32 local.set $5 local.get $5 + i32.reinterpret_f32 + local.set $6 + local.get $6 i32.const 1065353216 i32.const 1060439283 i32.sub i32.add - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 23 i32.shr_u i32.const 127 @@ -1716,33 +1698,33 @@ i32.ge_s if (result f32) f32.const 1 - local.get $6 + local.get $5 local.get $0 f32.sub f32.sub else local.get $0 - local.get $6 + local.get $5 f32.const 1 f32.sub f32.sub end local.set $2 local.get $2 - local.get $6 + local.get $5 f32.div local.set $2 else f32.const 0 local.set $2 end - local.get $5 + local.get $6 i32.const 8388607 i32.and i32.const 1060439283 i32.add - local.set $5 - local.get $5 + local.set $6 + local.get $6 f32.reinterpret_i32 f32.const 1 f32.sub @@ -1814,7 +1796,7 @@ (func $~lib/math/NativeMathf.log (; 57 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 i32) (local $2 i32) - (local $3 i32) + (local $3 f32) (local $4 f32) (local $5 f32) (local $6 f32) @@ -1823,7 +1805,6 @@ (local $9 f32) (local $10 f32) (local $11 f32) - (local $12 f32) local.get $0 i32.reinterpret_f32 local.set $1 @@ -1832,9 +1813,8 @@ local.get $1 i32.const 8388608 i32.lt_u - local.tee $3 if (result i32) - local.get $3 + i32.const 1 else local.get $1 i32.const 31 @@ -1919,64 +1899,64 @@ local.get $0 f32.const 1 f32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 f32.const 2 - local.get $4 + local.get $3 f32.add f32.div + local.set $4 + local.get $4 + local.get $4 + f32.mul local.set $5 local.get $5 local.get $5 f32.mul local.set $6 local.get $6 - local.get $6 - f32.mul - local.set $7 - local.get $7 f32.const 0.40000972151756287 - local.get $7 + local.get $6 f32.const 0.24279078841209412 f32.mul f32.add f32.mul - local.set $8 - local.get $6 + local.set $7 + local.get $5 f32.const 0.6666666269302368 - local.get $7 + local.get $6 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.set $9 - local.get $9 + local.set $8 local.get $8 + local.get $7 f32.add - local.set $10 + local.set $9 f32.const 0.5 - local.get $4 + local.get $3 f32.mul - local.get $4 + local.get $3 f32.mul - local.set $11 + local.set $10 local.get $2 f32.convert_i32_s - local.set $12 - local.get $5 - local.get $11 + local.set $11 + local.get $4 local.get $10 + local.get $9 f32.add f32.mul - local.get $12 + local.get $11 f32.const 9.05800061445916e-06 f32.mul f32.add - local.get $11 + local.get $10 f32.sub - local.get $4 + local.get $3 f32.add - local.get $12 + local.get $11 f32.const 0.6931381225585938 f32.mul f32.add @@ -2110,13 +2090,12 @@ local.get $2 i32.const 1045430272 i32.lt_u - local.tee $3 if (result i32) local.get $2 i32.const 1048576 i32.ge_u else - local.get $3 + i32.const 0 end if local.get $0 @@ -2214,20 +2193,17 @@ local.get $0 ) (func $std/math/test_asin (; 61 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.asin local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/asin @@ -2237,15 +2213,14 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.asin (; 62 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 f32) (local $2 i32) - (local $3 i32) - (local $4 f32) - (local $5 f64) + (local $3 f32) + (local $4 f64) local.get $0 local.set $1 local.get $0 @@ -2282,13 +2257,12 @@ local.get $2 i32.const 964689920 i32.lt_u - local.tee $3 if (result i32) local.get $2 i32.const 8388608 i32.ge_u else - local.get $3 + i32.const 0 end if local.get $0 @@ -2310,18 +2284,18 @@ f32.const 0.5 f32.mul f32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 f64.promote_f32 f64.sqrt - local.set $5 + local.set $4 f32.const 1.5707963705062866 f64.promote_f32 f32.const 2 f64.promote_f32 - local.get $5 - local.get $5 local.get $4 + local.get $4 + local.get $3 call $~lib/math/Rf f64.promote_f32 f64.mul @@ -2425,20 +2399,17 @@ f64.copysign ) (func $std/math/test_asinh (; 65 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.asinh local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/asinh @@ -2448,7 +2419,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.asinh (; 66 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -2814,20 +2785,17 @@ f64.copysign ) (func $std/math/test_atan (; 69 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.atan local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/atan @@ -2837,7 +2805,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.atan (; 70 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -3166,20 +3134,17 @@ f64.copysign ) (func $std/math/test_atanh (; 73 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.atanh local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/atanh @@ -3189,7 +3154,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.atanh (; 74 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -3263,8 +3228,8 @@ call $std/math/check ) (func $~lib/math/NativeMath.atan2 (; 76 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64) - (local $2 i32) - (local $3 i64) + (local $2 i64) + (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -3273,9 +3238,8 @@ (local $9 f64) local.get $1 call $~lib/builtins/isNaN - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 call $~lib/builtins/isNaN @@ -3288,30 +3252,30 @@ end local.get $1 i64.reinterpret_f64 - local.set $3 - local.get $3 + local.set $2 + local.get $2 i64.const 32 i64.shr_u i32.wrap_i64 + local.set $3 + local.get $2 + i32.wrap_i64 local.set $4 - local.get $3 - i32.wrap_i64 - local.set $5 local.get $0 i64.reinterpret_f64 - local.set $3 - local.get $3 + local.set $2 + local.get $2 i64.const 32 i64.shr_u i32.wrap_i64 + local.set $5 + local.get $2 + i32.wrap_i64 local.set $6 local.get $3 - i32.wrap_i64 - local.set $7 - local.get $4 i32.const 1072693248 i32.sub - local.get $5 + local.get $4 i32.or i32.const 0 i32.eq @@ -3320,28 +3284,28 @@ call $~lib/math/NativeMath.atan return end - local.get $6 + local.get $5 i32.const 31 i32.shr_u i32.const 1 i32.and - local.get $4 + local.get $3 i32.const 30 i32.shr_u i32.const 2 i32.and i32.or - local.set $8 - local.get $4 + local.set $7 + local.get $3 i32.const 2147483647 i32.and - local.set $4 - local.get $6 + local.set $3 + local.get $5 i32.const 2147483647 i32.and - local.set $6 + local.set $5 + local.get $5 local.get $6 - local.get $7 i32.or i32.const 0 i32.eq @@ -3351,21 +3315,21 @@ block $case2|0 block $case1|0 block $case0|0 + local.get $7 + local.set $8 local.get $8 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|0 - local.get $2 + local.get $8 i32.const 1 i32.eq br_if $case1|0 - local.get $2 + local.get $8 i32.const 2 i32.eq br_if $case2|0 - local.get $2 + local.get $8 i32.const 3 i32.eq br_if $case3|0 @@ -3383,13 +3347,13 @@ return end end + local.get $3 local.get $4 - local.get $5 i32.or i32.const 0 i32.eq if - local.get $8 + local.get $7 i32.const 1 i32.and if (result f64) @@ -3404,11 +3368,11 @@ end return end - local.get $4 + local.get $3 i32.const 2146435072 i32.eq if - local.get $6 + local.get $5 i32.const 2146435072 i32.eq if @@ -3417,21 +3381,21 @@ block $case2|1 block $case1|1 block $case0|1 + local.get $7 + local.set $8 local.get $8 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|1 - local.get $2 + local.get $8 i32.const 1 i32.eq br_if $case1|1 - local.get $2 + local.get $8 i32.const 2 i32.eq br_if $case2|1 - local.get $2 + local.get $8 i32.const 3 i32.eq br_if $case3|1 @@ -3468,21 +3432,21 @@ block $case2|2 block $case1|2 block $case0|2 + local.get $7 + local.set $8 local.get $8 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|2 - local.get $2 + local.get $8 i32.const 1 i32.eq br_if $case1|2 - local.get $2 + local.get $8 i32.const 2 i32.eq br_if $case2|2 - local.get $2 + local.get $8 i32.const 3 i32.eq br_if $case3|2 @@ -3503,23 +3467,22 @@ end end end - local.get $4 + local.get $3 i32.const 64 i32.const 20 i32.shl i32.add - local.get $6 + local.get $5 i32.lt_u - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else - local.get $6 + local.get $5 i32.const 2146435072 i32.eq end if - local.get $8 + local.get $7 i32.const 1 i32.and if (result f64) @@ -3534,20 +3497,19 @@ end return end - local.get $8 + local.get $7 i32.const 2 i32.and - local.tee $2 if (result i32) - local.get $6 + local.get $5 i32.const 64 i32.const 20 i32.shl i32.add - local.get $4 + local.get $3 i32.lt_u else - local.get $2 + i32.const 0 end if f64.const 0 @@ -3565,21 +3527,21 @@ block $case2|3 block $case1|3 block $case0|3 + local.get $7 + local.set $8 local.get $8 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|3 - local.get $2 + local.get $8 i32.const 1 i32.eq br_if $case1|3 - local.get $2 + local.get $8 i32.const 2 i32.eq br_if $case2|3 - local.get $2 + local.get $8 i32.const 3 i32.eq br_if $case3|3 @@ -3610,7 +3572,6 @@ f64.const 0 ) (func $std/math/test_atan2 (; 77 ;) (type $FUNCSIG$iddddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) - (local $5 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.atan2 @@ -3618,13 +3579,11 @@ local.get $3 local.get $4 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 local.get $1 @@ -3635,7 +3594,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $~lib/math/NativeMathf.atan2 (; 78 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) @@ -3646,9 +3605,8 @@ (local $6 f32) local.get $1 call $~lib/builtins/isNaN - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 call $~lib/builtins/isNaN @@ -3661,11 +3619,11 @@ end local.get $1 i32.reinterpret_f32 - local.set $3 + local.set $2 local.get $0 i32.reinterpret_f32 - local.set $4 - local.get $3 + local.set $3 + local.get $2 i32.const 1065353216 i32.eq if @@ -3673,27 +3631,27 @@ call $~lib/math/NativeMathf.atan return end - local.get $4 + local.get $3 i32.const 31 i32.shr_u i32.const 1 i32.and - local.get $3 + local.get $2 i32.const 30 i32.shr_u i32.const 2 i32.and i32.or - local.set $5 + local.set $4 + local.get $2 + i32.const 2147483647 + i32.and + local.set $2 local.get $3 i32.const 2147483647 i32.and local.set $3 - local.get $4 - i32.const 2147483647 - i32.and - local.set $4 - local.get $4 + local.get $3 i32.const 0 i32.eq if @@ -3702,21 +3660,21 @@ block $case2|0 block $case1|0 block $case0|0 + local.get $4 + local.set $5 local.get $5 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|0 - local.get $2 + local.get $5 i32.const 1 i32.eq br_if $case1|0 - local.get $2 + local.get $5 i32.const 2 i32.eq br_if $case2|0 - local.get $2 + local.get $5 i32.const 3 i32.eq br_if $case3|0 @@ -3734,11 +3692,11 @@ return end end - local.get $3 + local.get $2 i32.const 0 i32.eq if - local.get $5 + local.get $4 i32.const 1 i32.and if (result f32) @@ -3753,11 +3711,11 @@ end return end - local.get $3 + local.get $2 i32.const 2139095040 i32.eq if - local.get $4 + local.get $3 i32.const 2139095040 i32.eq if @@ -3766,21 +3724,21 @@ block $case2|1 block $case1|1 block $case0|1 + local.get $4 + local.set $5 local.get $5 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|1 - local.get $2 + local.get $5 i32.const 1 i32.eq br_if $case1|1 - local.get $2 + local.get $5 i32.const 2 i32.eq br_if $case2|1 - local.get $2 + local.get $5 i32.const 3 i32.eq br_if $case3|1 @@ -3817,21 +3775,21 @@ block $case2|2 block $case1|2 block $case0|2 + local.get $4 + local.set $5 local.get $5 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|2 - local.get $2 + local.get $5 i32.const 1 i32.eq br_if $case1|2 - local.get $2 + local.get $5 i32.const 2 i32.eq br_if $case2|2 - local.get $2 + local.get $5 i32.const 3 i32.eq br_if $case3|2 @@ -3852,23 +3810,22 @@ end end end - local.get $3 + local.get $2 i32.const 26 i32.const 23 i32.shl i32.add - local.get $4 + local.get $3 i32.lt_u - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else - local.get $4 + local.get $3 i32.const 2139095040 i32.eq end if - local.get $5 + local.get $4 i32.const 1 i32.and if (result f32) @@ -3883,20 +3840,19 @@ end return end - local.get $5 + local.get $4 i32.const 2 i32.and - local.tee $2 if (result i32) - local.get $4 + local.get $3 i32.const 26 i32.const 23 i32.shl i32.add - local.get $3 + local.get $2 i32.lt_u else - local.get $2 + i32.const 0 end if f32.const 0 @@ -3914,21 +3870,21 @@ block $case2|3 block $case1|3 block $case0|3 + local.get $4 + local.set $5 local.get $5 - local.set $2 - local.get $2 i32.const 0 i32.eq br_if $case0|3 - local.get $2 + local.get $5 i32.const 1 i32.eq br_if $case1|3 - local.get $2 + local.get $5 i32.const 2 i32.eq br_if $case2|3 - local.get $2 + local.get $5 i32.const 3 i32.eq br_if $case3|3 @@ -4112,20 +4068,17 @@ local.get $3 ) (func $std/math/test_cbrt (; 81 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.cbrt local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/cbrt @@ -4135,7 +4088,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.cbrt (; 82 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -4264,7 +4217,6 @@ ) (func $std/math/test_ceil (; 84 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) (local $4 f64) - (local $5 i32) block $~lib/math/NativeMath.ceil|inlined.0 (result f64) local.get $0 local.set $4 @@ -4275,13 +4227,11 @@ local.get $2 local.get $3 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 call $~lib/bindings/Math/ceil @@ -4291,7 +4241,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $std/math/test_ceilf (; 85 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -4973,7 +4923,6 @@ (local $13 f64) (local $14 f64) (local $15 f64) - (local $16 i32) local.get $0 i64.reinterpret_f64 local.set $1 @@ -5201,9 +5150,8 @@ local.get $3 i32.const 0 i32.lt_s - local.tee $16 if (result i32) - local.get $16 + i32.const 1 else local.get $3 i32.const 56 @@ -5532,20 +5480,17 @@ local.get $3 ) (func $std/math/test_cosh (; 92 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.cosh local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/cosh @@ -5555,7 +5500,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.expm1 (; 93 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -5573,7 +5518,6 @@ (local $12 f32) (local $13 f32) (local $14 f32) - (local $15 i32) local.get $0 i32.reinterpret_f32 local.set $1 @@ -5784,9 +5728,8 @@ local.get $6 i32.const 0 i32.lt_s - local.tee $15 if (result i32) - local.get $15 + i32.const 1 else local.get $6 i32.const 56 @@ -6089,20 +6032,17 @@ call $std/math/check ) (func $std/math/test_exp (; 97 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.exp local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/exp @@ -6112,7 +6052,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $std/math/test_expf (; 98 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -6124,20 +6064,17 @@ call $std/math/check ) (func $std/math/test_expm1 (; 99 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.expm1 local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/expm1 @@ -6147,7 +6084,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $std/math/test_expm1f (; 100 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -6160,7 +6097,6 @@ ) (func $std/math/test_floor (; 101 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) (local $4 f64) - (local $5 i32) block $~lib/math/NativeMath.floor|inlined.0 (result f64) local.get $0 local.set $4 @@ -6171,13 +6107,11 @@ local.get $2 local.get $3 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 call $~lib/bindings/Math/floor @@ -6187,7 +6121,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $std/math/test_floorf (; 102 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -6209,7 +6143,7 @@ (local $4 i64) (local $5 i32) (local $6 i32) - (local $7 i32) + (local $7 f64) (local $8 f64) (local $9 f64) (local $10 f64) @@ -6217,7 +6151,6 @@ (local $12 f64) (local $13 f64) (local $14 f64) - (local $15 f64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -6269,9 +6202,8 @@ local.get $5 i32.const 2047 i32.eq - local.tee $7 if (result i32) - local.get $7 + i32.const 1 else local.get $3 i64.const 0 @@ -6293,7 +6225,7 @@ return end f64.const 1 - local.set $8 + local.set $7 local.get $5 i32.const 1023 i32.const 510 @@ -6301,7 +6233,7 @@ i32.gt_s if f64.const 5260135901548373507240989e186 - local.set $8 + local.set $7 local.get $0 f64.const 1.90109156629516e-211 f64.mul @@ -6318,7 +6250,7 @@ i32.lt_s if f64.const 1.90109156629516e-211 - local.set $8 + local.set $7 local.get $0 f64.const 5260135901548373507240989e186 f64.mul @@ -6332,80 +6264,79 @@ local.get $0 f64.const 134217729 f64.mul + local.set $8 + local.get $0 + local.get $8 + f64.sub + local.get $8 + f64.add local.set $9 local.get $0 local.get $9 f64.sub - local.get $9 - f64.add local.set $10 local.get $0 - local.get $10 - f64.sub + local.get $0 + f64.mul local.set $11 - local.get $0 - local.get $0 + local.get $9 + local.get $9 f64.mul - local.set $12 - local.get $10 - local.get $10 - f64.mul - local.get $12 + local.get $11 f64.sub f64.const 2 + local.get $9 + f64.mul + local.get $10 + f64.add local.get $10 f64.mul - local.get $11 f64.add - local.get $11 - f64.mul - f64.add - local.set $13 + local.set $12 local.get $1 f64.const 134217729 f64.mul + local.set $8 + local.get $1 + local.get $8 + f64.sub + local.get $8 + f64.add local.set $9 local.get $1 local.get $9 f64.sub - local.get $9 - f64.add local.set $10 local.get $1 - local.get $10 - f64.sub - local.set $11 - local.get $1 local.get $1 f64.mul - local.set $14 - local.get $10 - local.get $10 + local.set $13 + local.get $9 + local.get $9 f64.mul - local.get $14 + local.get $13 f64.sub f64.const 2 + local.get $9 + f64.mul + local.get $10 + f64.add local.get $10 f64.mul - local.get $11 f64.add - local.get $11 - f64.mul + local.set $14 + local.get $7 + local.get $14 + local.get $12 f64.add - local.set $15 - local.get $8 - local.get $15 local.get $13 f64.add - local.get $14 - f64.add - local.get $12 + local.get $11 f64.add f64.sqrt f64.mul ) (func $std/math/test_hypot (; 104 ;) (type $FUNCSIG$iddddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) - (local $5 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.hypot @@ -6413,13 +6344,11 @@ local.get $3 local.get $4 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 local.get $1 @@ -6430,7 +6359,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $~lib/math/NativeMathf.hypot (; 105 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) @@ -6483,17 +6412,15 @@ i32.const 23 i32.shl i32.ge_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $3 i32.const 0 i32.eq end - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 local.get $3 @@ -6576,20 +6503,17 @@ call $std/math/check ) (func $std/math/test_log (; 107 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.log local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/log @@ -6599,7 +6523,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $std/math/test_logf (; 108 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -6614,7 +6538,7 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) (local $6 f64) (local $7 f64) @@ -6628,7 +6552,6 @@ (local $15 f64) (local $16 f64) (local $17 f64) - (local $18 f64) local.get $0 i64.reinterpret_f64 local.set $1 @@ -6642,9 +6565,8 @@ local.get $2 i32.const 1048576 i32.lt_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 i32.const 31 @@ -6702,7 +6624,6 @@ local.get $2 i32.const 1072693248 i32.eq - local.tee $4 if (result i32) local.get $1 i64.const 32 @@ -6710,7 +6631,7 @@ i64.const 0 i64.eq else - local.get $4 + i32.const 0 end if f64.const 0 @@ -6753,46 +6674,46 @@ local.get $0 f64.const 1 f64.sub - local.set $5 + local.set $4 f64.const 0.5 - local.get $5 + local.get $4 f64.mul - local.get $5 + local.get $4 f64.mul - local.set $6 - local.get $5 + local.set $5 + local.get $4 f64.const 2 - local.get $5 + local.get $4 f64.add f64.div + local.set $6 + local.get $6 + local.get $6 + f64.mul local.set $7 local.get $7 local.get $7 f64.mul local.set $8 local.get $8 - local.get $8 - f64.mul - local.set $9 - local.get $9 f64.const 0.3999999999940942 - local.get $9 + local.get $8 f64.const 0.22222198432149784 - local.get $9 + local.get $8 f64.const 0.15313837699209373 f64.mul f64.add f64.mul f64.add f64.mul - local.set $10 - local.get $8 + local.set $9 + local.get $7 f64.const 0.6666666666666735 - local.get $9 + local.get $8 f64.const 0.2857142874366239 - local.get $9 + local.get $8 f64.const 0.1818357216161805 - local.get $9 + local.get $8 f64.const 0.14798198605116586 f64.mul f64.add @@ -6801,16 +6722,16 @@ f64.mul f64.add f64.mul - local.set $11 - local.get $11 + local.set $10 local.get $10 + local.get $9 f64.add - local.set $12 + local.set $11 + local.get $4 local.get $5 - local.get $6 f64.sub - local.set $13 - local.get $13 + local.set $12 + local.get $12 i64.reinterpret_f64 local.set $1 local.get $1 @@ -6819,75 +6740,72 @@ local.set $1 local.get $1 f64.reinterpret_i64 - local.set $13 - local.get $5 - local.get $13 - f64.sub - local.get $6 - f64.sub - local.get $7 - local.get $6 + local.set $12 + local.get $4 local.get $12 + f64.sub + local.get $5 + f64.sub + local.get $6 + local.get $5 + local.get $11 f64.add f64.mul f64.add - local.set $14 - local.get $13 + local.set $13 + local.get $12 f64.const 0.4342944818781689 f64.mul - local.set $15 + local.set $14 local.get $3 f64.convert_i32_s - local.set $16 - local.get $16 + local.set $15 + local.get $15 f64.const 0.30102999566361177 f64.mul - local.set $17 - local.get $16 + local.set $16 + local.get $15 f64.const 3.694239077158931e-13 f64.mul - local.get $14 local.get $13 + local.get $12 f64.add f64.const 2.5082946711645275e-11 f64.mul f64.add - local.get $14 + local.get $13 f64.const 0.4342944818781689 f64.mul f64.add - local.set $18 - local.get $17 - local.get $15 + local.set $17 + local.get $16 + local.get $14 f64.add - local.set $9 - local.get $18 + local.set $8 local.get $17 - local.get $9 + local.get $16 + local.get $8 f64.sub - local.get $15 + local.get $14 f64.add f64.add - local.set $18 - local.get $18 - local.get $9 + local.set $17 + local.get $17 + local.get $8 f64.add ) (func $std/math/test_log10 (; 110 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.log10 local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/log10 @@ -6897,13 +6815,13 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.log10 (; 111 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 i32) (local $2 i32) - (local $3 i32) + (local $3 f32) (local $4 f32) (local $5 f32) (local $6 f32) @@ -6914,7 +6832,6 @@ (local $11 f32) (local $12 f32) (local $13 f32) - (local $14 f32) local.get $0 i32.reinterpret_f32 local.set $1 @@ -6923,9 +6840,8 @@ local.get $1 i32.const 8388608 i32.lt_u - local.tee $3 if (result i32) - local.get $3 + i32.const 1 else local.get $1 i32.const 31 @@ -7010,52 +6926,52 @@ local.get $0 f32.const 1 f32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 f32.const 2 - local.get $4 + local.get $3 f32.add f32.div + local.set $4 + local.get $4 + local.get $4 + f32.mul local.set $5 local.get $5 local.get $5 f32.mul local.set $6 local.get $6 - local.get $6 - f32.mul - local.set $7 - local.get $7 f32.const 0.40000972151756287 - local.get $7 + local.get $6 f32.const 0.24279078841209412 f32.mul f32.add f32.mul - local.set $8 - local.get $6 + local.set $7 + local.get $5 f32.const 0.6666666269302368 - local.get $7 + local.get $6 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.set $9 - local.get $9 + local.set $8 local.get $8 + local.get $7 f32.add - local.set $10 + local.set $9 f32.const 0.5 - local.get $4 + local.get $3 f32.mul - local.get $4 + local.get $3 f32.mul - local.set $11 - local.get $4 - local.get $11 + local.set $10 + local.get $3 + local.get $10 f32.sub - local.set $12 - local.get $12 + local.set $11 + local.get $11 i32.reinterpret_f32 local.set $1 local.get $1 @@ -7064,40 +6980,40 @@ local.set $1 local.get $1 f32.reinterpret_i32 - local.set $12 - local.get $4 - local.get $12 - f32.sub + local.set $11 + local.get $3 local.get $11 f32.sub - local.get $5 - local.get $11 local.get $10 + f32.sub + local.get $4 + local.get $10 + local.get $9 f32.add f32.mul f32.add - local.set $13 + local.set $12 local.get $2 f32.convert_i32_s - local.set $14 - local.get $14 + local.set $13 + local.get $13 f32.const 7.903415166765626e-07 f32.mul - local.get $13 local.get $12 + local.get $11 f32.add f32.const -3.168997136526741e-05 f32.mul f32.add - local.get $13 - f32.const 0.434326171875 - f32.mul - f32.add local.get $12 f32.const 0.434326171875 f32.mul f32.add - local.get $14 + local.get $11 + f32.const 0.434326171875 + f32.mul + f32.add + local.get $13 f32.const 0.3010292053222656 f32.mul f32.add @@ -7111,20 +7027,17 @@ call $std/math/check ) (func $std/math/test_log1p (; 113 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.log1p local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/log1p @@ -7134,7 +7047,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $std/math/test_log1pf (; 114 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -7149,7 +7062,7 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) (local $6 f64) (local $7 f64) @@ -7162,7 +7075,6 @@ (local $14 f64) (local $15 f64) (local $16 f64) - (local $17 f64) local.get $0 i64.reinterpret_f64 local.set $1 @@ -7176,9 +7088,8 @@ local.get $2 i32.const 1048576 i32.lt_u - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $2 i32.const 31 @@ -7236,7 +7147,6 @@ local.get $2 i32.const 1072693248 i32.eq - local.tee $4 if (result i32) local.get $1 i64.const 32 @@ -7244,7 +7154,7 @@ i64.const 0 i64.eq else - local.get $4 + i32.const 0 end if f64.const 0 @@ -7287,46 +7197,46 @@ local.get $0 f64.const 1 f64.sub - local.set $5 + local.set $4 f64.const 0.5 - local.get $5 + local.get $4 f64.mul - local.get $5 + local.get $4 f64.mul - local.set $6 - local.get $5 + local.set $5 + local.get $4 f64.const 2 - local.get $5 + local.get $4 f64.add f64.div + local.set $6 + local.get $6 + local.get $6 + f64.mul local.set $7 local.get $7 local.get $7 f64.mul local.set $8 local.get $8 - local.get $8 - f64.mul - local.set $9 - local.get $9 f64.const 0.3999999999940942 - local.get $9 + local.get $8 f64.const 0.22222198432149784 - local.get $9 + local.get $8 f64.const 0.15313837699209373 f64.mul f64.add f64.mul f64.add f64.mul - local.set $10 - local.get $8 + local.set $9 + local.get $7 f64.const 0.6666666666666735 - local.get $9 + local.get $8 f64.const 0.2857142874366239 - local.get $9 + local.get $8 f64.const 0.1818357216161805 - local.get $9 + local.get $8 f64.const 0.14798198605116586 f64.mul f64.add @@ -7335,16 +7245,16 @@ f64.mul f64.add f64.mul - local.set $11 - local.get $11 + local.set $10 local.get $10 + local.get $9 f64.add - local.set $12 + local.set $11 + local.get $4 local.get $5 - local.get $6 f64.sub - local.set $13 - local.get $13 + local.set $12 + local.get $12 i64.reinterpret_f64 local.set $1 local.get $1 @@ -7353,69 +7263,66 @@ local.set $1 local.get $1 f64.reinterpret_i64 - local.set $13 - local.get $5 - local.get $13 - f64.sub - local.get $6 - f64.sub - local.get $7 - local.get $6 + local.set $12 + local.get $4 local.get $12 + f64.sub + local.get $5 + f64.sub + local.get $6 + local.get $5 + local.get $11 f64.add f64.mul f64.add - local.set $14 - local.get $13 + local.set $13 + local.get $12 f64.const 1.4426950407214463 f64.mul - local.set $15 - local.get $14 + local.set $14 local.get $13 + local.get $12 f64.add f64.const 1.6751713164886512e-10 f64.mul - local.get $14 + local.get $13 f64.const 1.4426950407214463 f64.mul f64.add - local.set $16 + local.set $15 local.get $3 f64.convert_i32_s - local.set $17 - local.get $17 - local.get $15 - f64.add - local.set $9 - local.get $16 - local.get $17 - local.get $9 - f64.sub - local.get $15 - f64.add - f64.add local.set $16 - local.get $9 - local.set $15 local.get $16 + local.get $14 + f64.add + local.set $8 local.get $15 + local.get $16 + local.get $8 + f64.sub + local.get $14 + f64.add + f64.add + local.set $15 + local.get $8 + local.set $14 + local.get $15 + local.get $14 f64.add ) (func $std/math/test_log2 (; 116 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.log2 local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/log2 @@ -7425,13 +7332,13 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.log2 (; 117 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) (local $1 i32) (local $2 i32) - (local $3 i32) + (local $3 f32) (local $4 f32) (local $5 f32) (local $6 f32) @@ -7440,10 +7347,9 @@ (local $9 f32) (local $10 f32) (local $11 f32) - (local $12 f32) - (local $13 i32) + (local $12 i32) + (local $13 f32) (local $14 f32) - (local $15 f32) local.get $0 i32.reinterpret_f32 local.set $1 @@ -7452,9 +7358,8 @@ local.get $1 i32.const 8388608 i32.lt_u - local.tee $3 if (result i32) - local.get $3 + i32.const 1 else local.get $1 i32.const 31 @@ -7539,90 +7444,90 @@ local.get $0 f32.const 1 f32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 f32.const 2 - local.get $4 + local.get $3 f32.add f32.div + local.set $4 + local.get $4 + local.get $4 + f32.mul local.set $5 local.get $5 local.get $5 f32.mul local.set $6 local.get $6 - local.get $6 - f32.mul - local.set $7 - local.get $7 f32.const 0.40000972151756287 - local.get $7 + local.get $6 f32.const 0.24279078841209412 f32.mul f32.add f32.mul - local.set $8 - local.get $6 + local.set $7 + local.get $5 f32.const 0.6666666269302368 - local.get $7 + local.get $6 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.set $9 - local.get $9 + local.set $8 local.get $8 + local.get $7 f32.add - local.set $10 + local.set $9 f32.const 0.5 - local.get $4 + local.get $3 f32.mul - local.get $4 + local.get $3 f32.mul - local.set $11 - local.get $4 - local.get $11 + local.set $10 + local.get $3 + local.get $10 f32.sub + local.set $11 + local.get $11 + i32.reinterpret_f32 local.set $12 local.get $12 - i32.reinterpret_f32 - local.set $13 - local.get $13 i32.const -4096 i32.and - local.set $13 - local.get $13 - f32.reinterpret_i32 local.set $12 - local.get $4 local.get $12 - f32.sub + f32.reinterpret_i32 + local.set $11 + local.get $3 local.get $11 f32.sub - local.get $5 - local.get $11 local.get $10 + f32.sub + local.get $4 + local.get $10 + local.get $9 f32.add f32.mul f32.add - local.set $14 + local.set $13 local.get $2 f32.convert_i32_s - local.set $15 - local.get $14 - local.get $12 + local.set $14 + local.get $13 + local.get $11 f32.add f32.const -1.7605285393074155e-04 f32.mul + local.get $13 + f32.const 1.44287109375 + f32.mul + f32.add + local.get $11 + f32.const 1.44287109375 + f32.mul + f32.add local.get $14 - f32.const 1.44287109375 - f32.mul - f32.add - local.get $12 - f32.const 1.44287109375 - f32.mul - f32.add - local.get $15 f32.add ) (func $std/math/test_log2f (; 118 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -7636,7 +7541,6 @@ (func $std/math/test_max (; 119 ;) (type $FUNCSIG$iddddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) (local $5 f64) (local $6 f64) - (local $7 i32) block $~lib/math/NativeMath.max|inlined.0 (result f64) local.get $0 local.set $6 @@ -7650,13 +7554,11 @@ local.get $3 local.get $4 call $std/math/check - local.tee $7 if (result i32) global.get $std/math/js i32.eqz - local.tee $7 if (result i32) - local.get $7 + i32.const 1 else local.get $0 local.get $1 @@ -7667,7 +7569,7 @@ call $std/math/check end else - local.get $7 + i32.const 0 end ) (func $std/math/test_maxf (; 120 ;) (type $FUNCSIG$iffffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32) @@ -7690,7 +7592,6 @@ (func $std/math/test_min (; 121 ;) (type $FUNCSIG$iddddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) (local $5 f64) (local $6 f64) - (local $7 i32) block $~lib/math/NativeMath.min|inlined.0 (result f64) local.get $0 local.set $6 @@ -7704,13 +7605,11 @@ local.get $3 local.get $4 call $std/math/check - local.tee $7 if (result i32) global.get $std/math/js i32.eqz - local.tee $7 if (result i32) - local.get $7 + i32.const 1 else local.get $0 local.get $1 @@ -7721,7 +7620,7 @@ call $std/math/check end else - local.get $7 + i32.const 0 end ) (func $std/math/test_minf (; 122 ;) (type $FUNCSIG$iffffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32) @@ -7748,10 +7647,9 @@ (local $5 i64) (local $6 i64) (local $7 i64) - (local $8 i32) - (local $9 f64) + (local $8 f64) + (local $9 i64) (local $10 i64) - (local $11 i64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -7781,17 +7679,15 @@ local.get $7 i64.const 0 i64.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i64.const 2047 i64.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -7800,21 +7696,21 @@ local.get $0 local.get $1 f64.mul - local.set $9 - local.get $9 - local.get $9 + local.set $8 + local.get $8 + local.get $8 f64.div return end local.get $2 i64.const 1 i64.shl - local.set $10 - local.get $10 + local.set $9 + local.get $9 local.get $7 i64.le_u if - local.get $10 + local.get $9 local.get $7 i64.eq if @@ -7950,13 +7846,13 @@ i64.const 11 i64.shl i64.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i64.sub local.set $4 local.get $2 - local.get $11 + local.get $10 i64.shl local.set $2 local.get $4 @@ -7995,7 +7891,6 @@ f64.reinterpret_i64 ) (func $std/math/test_mod (; 124 ;) (type $FUNCSIG$iddddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) - (local $5 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.mod @@ -8003,13 +7898,11 @@ local.get $3 local.get $4 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 local.get $1 @@ -8020,7 +7913,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $~lib/math/NativeMathf.mod (; 125 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) @@ -8030,10 +7923,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 f32) + (local $8 f32) + (local $9 i32) (local $10 i32) - (local $11 i32) local.get $0 i32.reinterpret_f32 local.set $2 @@ -8063,17 +7955,15 @@ local.get $7 i32.const 0 i32.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i32.const 255 i32.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -8082,21 +7972,21 @@ local.get $0 local.get $1 f32.mul - local.set $9 - local.get $9 - local.get $9 + local.set $8 + local.get $8 + local.get $8 f32.div return end local.get $2 i32.const 1 i32.shl - local.set $10 - local.get $10 + local.set $9 + local.get $9 local.get $7 i32.le_u if - local.get $10 + local.get $9 local.get $7 i32.eq if @@ -8232,13 +8122,13 @@ i32.const 8 i32.shl i32.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i32.sub local.set $4 local.get $2 - local.get $11 + local.get $10 i32.shl local.set $2 local.get $4 @@ -8366,44 +8256,39 @@ local.get $7 i32.const 2146435072 i32.gt_s - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $7 i32.const 2146435072 i32.eq - local.tee $9 if (result i32) local.get $4 i32.const 0 i32.ne else - local.get $9 + i32.const 0 end end - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $8 i32.const 2146435072 i32.gt_s end - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $8 i32.const 2146435072 i32.eq - local.tee $9 if (result i32) local.get $6 i32.const 0 i32.ne else - local.get $9 + i32.const 0 end end if @@ -8413,7 +8298,7 @@ return end i32.const 0 - local.set $10 + local.set $9 local.get $3 i32.const 0 i32.lt_s @@ -8423,7 +8308,7 @@ i32.ge_s if i32.const 2 - local.set $10 + local.set $9 else local.get $8 i32.const 1072693248 @@ -8434,21 +8319,21 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 - local.get $11 + local.set $10 + local.get $10 i32.const 20 i32.gt_s - local.set $9 + local.set $11 i32.const 52 i32.const 20 - local.get $9 - select local.get $11 + select + local.get $10 i32.sub local.set $12 local.get $6 local.get $8 - local.get $9 + local.get $11 select local.set $13 local.get $13 @@ -8466,7 +8351,7 @@ i32.const 1 i32.and i32.sub - local.set $10 + local.set $9 end end end @@ -8569,17 +8454,15 @@ local.get $7 i32.const 0 i32.eq - local.tee $14 if (result i32) - local.get $14 + i32.const 1 else local.get $7 i32.const 2146435072 i32.eq end - local.tee $14 if (result i32) - local.get $14 + i32.const 1 else local.get $7 i32.const 1072693248 @@ -8604,7 +8487,7 @@ local.get $7 i32.const 1072693248 i32.sub - local.get $10 + local.get $9 i32.or i32.const 0 i32.eq @@ -8618,7 +8501,7 @@ f64.div local.set $16 else - local.get $10 + local.get $9 i32.const 1 i32.eq if @@ -8638,7 +8521,7 @@ i32.const 0 i32.lt_s if - local.get $10 + local.get $9 i32.const 0 i32.eq if @@ -8651,7 +8534,7 @@ f64.div return end - local.get $10 + local.get $9 i32.const 1 i32.eq if @@ -8837,17 +8720,17 @@ i32.le_s if i32.const 0 - local.set $11 + local.set $10 else local.get $28 i32.const 767610 i32.lt_s if i32.const 1 - local.set $11 + local.set $10 else i32.const 0 - local.set $11 + local.set $10 local.get $29 i32.const 1 i32.add @@ -8871,7 +8754,7 @@ local.set $15 f64.const 1.5 f64.const 1 - local.get $11 + local.get $10 select local.set $35 local.get $15 @@ -8903,7 +8786,7 @@ i32.or i32.const 524288 i32.add - local.get $11 + local.get $10 i32.const 18 i32.shl i32.add @@ -9026,7 +8909,7 @@ local.set $36 f64.const 1.350039202129749e-08 f64.const 0 - local.get $11 + local.get $10 select local.set $37 f64.const -7.028461650952758e-09 @@ -9044,7 +8927,7 @@ local.set $24 f64.const 0.5849624872207642 f64.const 0 - local.get $11 + local.get $10 select local.set $39 local.get $36 @@ -9189,7 +9072,7 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 + local.set $10 i32.const 0 local.set $29 local.get $41 @@ -9198,7 +9081,7 @@ if local.get $28 i32.const 1048576 - local.get $11 + local.get $10 i32.const 1 i32.add i32.shr_s @@ -9211,12 +9094,12 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 + local.set $10 f64.const 0 local.set $24 local.get $29 i32.const 1048575 - local.get $11 + local.get $10 i32.shr_s i32.const -1 i32.xor @@ -9232,7 +9115,7 @@ i32.const 1048576 i32.or i32.const 20 - local.get $11 + local.get $10 i32.sub i32.shr_s local.set $29 @@ -9372,7 +9255,6 @@ f64.mul ) (func $std/math/test_pow (; 128 ;) (type $FUNCSIG$iddddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) - (local $5 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.pow @@ -9380,13 +9262,11 @@ local.get $3 local.get $4 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 local.get $1 @@ -9397,7 +9277,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $~lib/math/NativeMathf.pow (; 129 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) @@ -9460,9 +9340,8 @@ local.get $4 i32.const 2139095040 i32.gt_s - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $5 i32.const 2139095040 @@ -9475,7 +9354,7 @@ return end i32.const 0 - local.set $7 + local.set $6 local.get $2 i32.const 0 i32.lt_s @@ -9485,7 +9364,7 @@ i32.ge_s if i32.const 2 - local.set $7 + local.set $6 else local.get $5 i32.const 1065353216 @@ -9496,27 +9375,27 @@ i32.shr_s i32.const 127 i32.sub - local.set $9 - i32.const 23 - local.get $9 - i32.sub - local.set $6 - local.get $5 - local.get $6 - i32.shr_s local.set $8 + i32.const 23 local.get $8 - local.get $6 + i32.sub + local.set $9 + local.get $5 + local.get $9 + i32.shr_s + local.set $7 + local.get $7 + local.get $9 i32.shl local.get $5 i32.eq if i32.const 2 - local.get $8 + local.get $7 i32.const 1 i32.and i32.sub - local.set $7 + local.set $6 end end end @@ -9606,17 +9485,15 @@ local.get $4 i32.const 2139095040 i32.eq - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $4 i32.const 0 i32.eq end - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $4 i32.const 1065353216 @@ -9641,7 +9518,7 @@ local.get $4 i32.const 1065353216 i32.sub - local.get $7 + local.get $6 i32.or i32.const 0 i32.eq @@ -9655,7 +9532,7 @@ f32.div local.set $11 else - local.get $7 + local.get $6 i32.const 1 i32.eq if @@ -9674,7 +9551,7 @@ i32.const 0 i32.lt_s if - local.get $7 + local.get $6 i32.const 0 i32.eq if @@ -9687,7 +9564,7 @@ f32.div return end - local.get $7 + local.get $6 i32.const 1 i32.eq if @@ -9821,27 +9698,27 @@ local.get $4 i32.const 8388607 i32.and - local.set $8 - local.get $8 + local.set $7 + local.get $7 i32.const 1065353216 i32.or local.set $4 - local.get $8 + local.get $7 i32.const 1885297 i32.le_s if i32.const 0 - local.set $9 + local.set $8 else - local.get $8 + local.get $7 i32.const 6140887 i32.lt_s if i32.const 1 - local.set $9 + local.set $8 else i32.const 0 - local.set $9 + local.set $8 local.get $24 i32.const 1 i32.add @@ -9857,7 +9734,7 @@ local.set $10 f32.const 1.5 f32.const 1 - local.get $9 + local.get $8 select local.set $30 local.get $10 @@ -9895,7 +9772,7 @@ local.get $25 i32.const 4194304 i32.add - local.get $9 + local.get $8 i32.const 21 i32.shl i32.add @@ -10019,7 +9896,7 @@ local.set $31 f32.const 1.5632208487659227e-06 f32.const 0 - local.get $9 + local.get $8 select local.set $32 f32.const -1.1736857413779944e-04 @@ -10037,7 +9914,7 @@ local.set $18 f32.const 0.5849609375 f32.const 0 - local.get $9 + local.get $8 select local.set $34 local.get $31 @@ -10095,8 +9972,8 @@ local.set $11 local.get $11 i32.reinterpret_f32 - local.set $8 - local.get $8 + local.set $7 + local.get $7 i32.const 1124073472 i32.gt_s if @@ -10107,7 +9984,7 @@ f32.mul return else - local.get $8 + local.get $7 i32.const 1124073472 i32.eq if @@ -10127,7 +10004,7 @@ return end else - local.get $8 + local.get $7 i32.const 2147483647 i32.and i32.const 1125515264 @@ -10140,7 +10017,7 @@ f32.mul return else - local.get $8 + local.get $7 i32.const -1021968384 i32.eq if @@ -10161,7 +10038,7 @@ end end end - local.get $8 + local.get $7 i32.const 2147483647 i32.and local.set $36 @@ -10170,16 +10047,16 @@ i32.shr_s i32.const 127 i32.sub - local.set $9 + local.set $8 i32.const 0 local.set $24 local.get $36 i32.const 1056964608 i32.gt_s if - local.get $8 + local.get $7 i32.const 8388608 - local.get $9 + local.get $8 i32.const 1 i32.add i32.shr_s @@ -10192,10 +10069,10 @@ i32.shr_s i32.const 127 i32.sub - local.set $9 + local.set $8 local.get $24 i32.const 8388607 - local.get $9 + local.get $8 i32.shr_s i32.const -1 i32.xor @@ -10208,11 +10085,11 @@ i32.const 8388608 i32.or i32.const 23 - local.get $9 + local.get $8 i32.sub i32.shr_s local.set $24 - local.get $8 + local.get $7 i32.const 0 i32.lt_s if @@ -10312,14 +10189,14 @@ local.set $11 local.get $11 i32.reinterpret_f32 - local.set $8 - local.get $8 + local.set $7 + local.get $7 local.get $24 i32.const 23 i32.shl i32.add - local.set $8 - local.get $8 + local.set $7 + local.get $7 i32.const 23 i32.shr_s i32.const 0 @@ -10330,7 +10207,7 @@ call $~lib/math/NativeMathf.scalbn local.set $11 else - local.get $8 + local.get $7 f32.reinterpret_i32 local.set $11 end @@ -10588,7 +10465,6 @@ ) (func $std/math/test_sign (; 138 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) (local $4 f64) - (local $5 i32) block $~lib/math/NativeMath.sign|inlined.0 (result f64) local.get $0 local.set $4 @@ -10613,13 +10489,11 @@ local.get $2 local.get $3 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 call $~lib/bindings/Math/sign @@ -10629,7 +10503,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $std/math/test_signf (; 139 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -10665,12 +10539,11 @@ (local $4 i64) (local $5 i64) (local $6 i32) - (local $7 i32) - (local $8 f64) - (local $9 i64) - (local $10 i32) - (local $11 i64) - (local $12 f64) + (local $7 f64) + (local $8 i64) + (local $9 i32) + (local $10 i64) + (local $11 f64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -10699,17 +10572,15 @@ i64.shl i64.const 0 i64.eq - local.tee $7 if (result i32) - local.get $7 + i32.const 1 else local.get $4 i64.const 2047 i64.eq end - local.tee $7 if (result i32) - local.get $7 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -10718,9 +10589,9 @@ local.get $0 local.get $1 f64.mul - local.set $8 - local.get $8 - local.get $8 + local.set $7 + local.get $7 + local.get $7 f64.div return end @@ -10734,38 +10605,38 @@ return end local.get $2 - local.set $9 + local.set $8 local.get $4 i64.eqz if local.get $4 - local.get $9 + local.get $8 i64.const 12 i64.shl i64.clz i64.sub local.set $4 - local.get $9 + local.get $8 i64.const 0 local.get $4 i64.sub i64.const 1 i64.add i64.shl - local.set $9 + local.set $8 else - local.get $9 + local.get $8 i64.const -1 i64.const 12 i64.shr_u i64.and - local.set $9 - local.get $9 + local.set $8 + local.get $8 i64.const 1 i64.const 52 i64.shl i64.or - local.set $9 + local.set $8 end local.get $5 i64.eqz @@ -10800,7 +10671,7 @@ local.set $3 end i32.const 0 - local.set $10 + local.set $9 block $break|0 loop $continue|0 local.get $4 @@ -10825,27 +10696,27 @@ i64.gt_s if block - local.get $9 + local.get $8 local.get $3 i64.ge_u if - local.get $9 + local.get $8 local.get $3 i64.sub - local.set $9 - local.get $10 + local.set $8 + local.get $9 i32.const 1 i32.add - local.set $10 + local.set $9 end - local.get $9 + local.get $8 i64.const 1 i64.shl - local.set $9 - local.get $10 + local.set $8 + local.get $9 i32.const 1 i32.shl - local.set $10 + local.set $9 local.get $4 i64.const 1 i64.sub @@ -10855,39 +10726,39 @@ end end end - local.get $9 + local.get $8 local.get $3 i64.ge_u if - local.get $9 + local.get $8 local.get $3 i64.sub - local.set $9 - local.get $10 + local.set $8 + local.get $9 i32.const 1 i32.add - local.set $10 + local.set $9 end - local.get $9 + local.get $8 i64.const 0 i64.eq if i64.const -60 local.set $4 else - local.get $9 + local.get $8 i64.const 11 i64.shl i64.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i64.sub local.set $4 - local.get $9 - local.get $11 + local.get $8 + local.get $10 i64.shl - local.set $9 + local.set $8 end br $break|0 unreachable @@ -10899,29 +10770,29 @@ i64.const 0 i64.gt_s if - local.get $9 + local.get $8 i64.const 1 i64.const 52 i64.shl i64.sub - local.set $9 - local.get $9 + local.set $8 + local.get $8 local.get $4 i64.const 52 i64.shl i64.or - local.set $9 + local.set $8 else - local.get $9 + local.get $8 i64.const 0 local.get $4 i64.sub i64.const 1 i64.add i64.shr_u - local.set $9 + local.set $8 end - local.get $9 + local.get $8 f64.reinterpret_i64 local.set $0 local.get $1 @@ -10930,42 +10801,38 @@ local.get $0 local.get $0 f64.add - local.set $12 + local.set $11 local.get $4 local.get $5 i64.eq - local.tee $7 if (result i32) - local.get $7 + i32.const 1 else local.get $4 i64.const 1 i64.add local.get $5 i64.eq - local.tee $7 if (result i32) - local.get $12 + local.get $11 local.get $1 f64.gt - local.tee $7 if (result i32) - local.get $7 + i32.const 1 else - local.get $12 + local.get $11 local.get $1 f64.eq - local.tee $7 if (result i32) - local.get $10 + local.get $9 i32.const 1 i32.and else - local.get $7 + i32.const 0 end end else - local.get $7 + i32.const 0 end end if @@ -11030,17 +10897,15 @@ i32.shl i32.const 0 i32.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i32.const 255 i32.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -11129,7 +10994,7 @@ local.set $3 end i32.const 0 - local.set $9 + local.set $8 block $break|0 loop $continue|0 local.get $4 @@ -11162,19 +11027,19 @@ local.get $3 i32.sub local.set $7 - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 end local.get $7 i32.const 1 i32.shl local.set $7 - local.get $9 + local.get $8 i32.const 1 i32.shl - local.set $9 + local.set $8 local.get $4 i32.const 1 i32.sub @@ -11192,10 +11057,10 @@ local.get $3 i32.sub local.set $7 - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 end local.get $7 i32.const 0 @@ -11208,13 +11073,13 @@ i32.const 8 i32.shl i32.clz - local.set $8 + local.set $9 local.get $4 - local.get $8 + local.get $9 i32.sub local.set $4 local.get $7 - local.get $8 + local.get $9 i32.shl local.set $7 end @@ -11263,38 +11128,34 @@ local.get $4 local.get $5 i32.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i32.const 1 i32.add local.get $5 i32.eq - local.tee $8 if (result i32) local.get $10 local.get $1 f32.gt - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $10 local.get $1 f32.eq - local.tee $8 if (result i32) - local.get $9 + local.get $8 i32.const 1 i32.and else - local.get $8 + i32.const 0 end end else - local.get $8 + i32.const 0 end end if @@ -12060,20 +11921,17 @@ local.get $4 ) (func $std/math/test_sinh (; 147 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.sinh local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/sinh @@ -12083,7 +11941,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.sinh (; 148 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -12191,7 +12049,6 @@ ) (func $std/math/test_sqrt (; 150 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) (local $4 f64) - (local $5 i32) block $~lib/math/NativeMath.sqrt|inlined.0 (result f64) local.get $0 local.set $4 @@ -12202,13 +12059,11 @@ local.get $2 local.get $3 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 call $~lib/bindings/Math/sqrt @@ -12218,7 +12073,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $std/math/test_sqrtf (; 151 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -13007,20 +12862,17 @@ f64.copysign ) (func $std/math/test_tanh (; 155 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) local.get $0 call $~lib/math/NativeMath.tanh local.get $1 local.get $2 local.get $3 call $std/math/check - local.tee $4 if (result i32) global.get $std/math/js i32.eqz - local.tee $4 if (result i32) - local.get $4 + i32.const 1 else local.get $0 call $~lib/bindings/Math/tanh @@ -13030,7 +12882,7 @@ call $std/math/check end else - local.get $4 + i32.const 0 end ) (func $~lib/math/NativeMathf.tanh (; 156 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) @@ -13129,7 +12981,6 @@ ) (func $std/math/test_trunc (; 158 ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) (local $4 f64) - (local $5 i32) block $~lib/math/NativeMath.trunc|inlined.0 (result f64) local.get $0 local.set $4 @@ -13140,13 +12991,11 @@ local.get $2 local.get $3 call $std/math/check - local.tee $5 if (result i32) global.get $std/math/js i32.eqz - local.tee $5 if (result i32) - local.get $5 + i32.const 1 else local.get $0 call $~lib/bindings/Math/trunc @@ -13156,7 +13005,7 @@ call $std/math/check end else - local.get $5 + i32.const 0 end ) (func $std/math/test_truncf (; 159 ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) @@ -13565,9 +13414,8 @@ (func $start:std/math (; 165 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 f64) - (local $2 i32) - (local $3 i64) - (local $4 f32) + (local $2 i64) + (local $3 f32) global.get $~lib/math/NativeMath.E global.get $~lib/math/NativeMath.E f64.eq @@ -37854,13 +37702,12 @@ local.get $1 f64.const 0 f64.ge - local.tee $2 if (result i32) local.get $1 f64.const 1 f64.lt else - local.get $2 + i32.const 0 end i32.eqz if @@ -37884,8 +37731,8 @@ block $~lib/math/NativeMathf.seedRandom|inlined.0 call $~lib/bindings/Math/random i64.reinterpret_f64 - local.set $3 - local.get $3 + local.set $2 + local.get $2 call $~lib/math/NativeMath.seedRandom end block $break|1 @@ -37900,17 +37747,16 @@ br_if $break|1 block call $~lib/math/NativeMathf.random - local.set $4 - local.get $4 + local.set $3 + local.get $3 f32.const 0 f32.ge - local.tee $2 if (result i32) - local.get $4 + local.get $3 f32.const 1 f32.lt else - local.get $2 + i32.const 0 end i32.eqz if @@ -39157,13 +39003,13 @@ end block $~lib/math/NativeMathf.signbit|inlined.4 (result i32) f32.const 0 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -39182,13 +39028,13 @@ end block $~lib/math/NativeMathf.signbit|inlined.5 (result i32) f32.const -0 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -39207,13 +39053,13 @@ end block $~lib/math/NativeMathf.signbit|inlined.6 (result i32) f32.const 1 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -39232,13 +39078,13 @@ end block $~lib/math/NativeMathf.signbit|inlined.7 (result i32) f32.const -1 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -39257,13 +39103,13 @@ end block $~lib/math/NativeMathf.signbit|inlined.8 (result i32) f32.const nan:0x400000 - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -39283,13 +39129,13 @@ block $~lib/math/NativeMathf.signbit|inlined.9 (result i32) f32.const nan:0x400000 f32.neg - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -39308,13 +39154,13 @@ end block $~lib/math/NativeMathf.signbit|inlined.10 (result i32) f32.const inf - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end @@ -39334,13 +39180,13 @@ block $~lib/math/NativeMathf.signbit|inlined.11 (result i32) f32.const inf f32.neg - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $4 - local.get $4 + local.get $3 + local.get $3 f32.eq i32.and end diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index 1fd03fae..e69838d6 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -20,10 +20,9 @@ (local $3 i64) (local $4 i64) (local $5 i64) - (local $6 i32) + (local $6 i64) (local $7 i64) (local $8 i64) - (local $9 i64) local.get $0 i64.reinterpret_f64 local.tee $2 @@ -43,31 +42,26 @@ local.get $2 i64.const 63 i64.shr_u - local.set $8 - block (result i32) - local.get $3 - i64.const 1 - i64.shl - local.tee $7 - i64.const 0 + local.set $7 + local.get $3 + i64.const 1 + i64.shl + local.tee $6 + i64.const 0 + i64.eq + if (result i32) + i32.const 1 + else + local.get $4 + i64.const 2047 i64.eq - local.tee $6 - i32.eqz - if - local.get $4 - i64.const 2047 - i64.eq - local.set $6 - end - local.get $6 - i32.eqz end if (result i32) + i32.const 1 + else local.get $1 local.get $1 f64.ne - else - local.get $6 end if local.get $0 @@ -82,12 +76,12 @@ local.get $2 i64.const 1 i64.shl - local.tee $9 - local.get $7 + local.tee $8 + local.get $6 i64.le_u if - local.get $7 - local.get $9 + local.get $6 + local.get $8 i64.eq br_if $folding-inner0 local.get $0 @@ -214,7 +208,7 @@ i64.add i64.shr_u end - local.get $8 + local.get $7 i64.const 63 i64.shl i64.or @@ -253,22 +247,20 @@ f64.eq ) (func $std/mod/test_fmod (; 4 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.mod local.get $2 call $std/mod/check - local.tee $3 - if + if (result i32) local.get $0 local.get $1 call $std/mod/mod local.get $2 call $std/mod/check - local.set $3 + else + i32.const 0 end - local.get $3 ) (func $~lib/math/NativeMathf.mod (; 5 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) (local $2 i32) @@ -280,7 +272,7 @@ (local $8 i32) local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 i32.const 23 i32.shr_u i32.const 255 @@ -288,39 +280,33 @@ local.set $4 local.get $1 i32.reinterpret_f32 - local.tee $5 + local.tee $3 i32.const 23 i32.shr_u i32.const 255 i32.and - local.set $6 - local.get $3 + local.set $5 + local.get $2 i32.const -2147483648 i32.and - local.set $8 - block (result i32) - local.get $5 + local.set $7 + local.get $3 + i32.const 1 + i32.shl + local.tee $6 + if (result i32) + local.get $4 + i32.const 255 + i32.eq + else i32.const 1 - i32.shl - local.tee $7 - i32.eqz - local.tee $2 - i32.eqz - if - local.get $4 - i32.const 255 - i32.eq - local.set $2 - end - local.get $2 - i32.eqz end if (result i32) + i32.const 1 + else local.get $1 local.get $1 f32.ne - else - local.get $2 end if local.get $0 @@ -332,15 +318,15 @@ return end block $folding-inner0 - local.get $3 + local.get $2 i32.const 1 i32.shl - local.tee $2 - local.get $7 + local.tee $8 + local.get $6 i32.le_u if - local.get $2 - local.get $7 + local.get $6 + local.get $8 i32.eq br_if $folding-inner0 local.get $0 @@ -348,16 +334,16 @@ end local.get $4 if (result i32) - local.get $3 + local.get $2 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $3 + local.get $2 i32.const 1 local.get $4 - local.get $3 + local.get $2 i32.const 9 i32.shl i32.clz @@ -367,30 +353,30 @@ i32.shl end local.set $2 - local.get $6 + local.get $5 if (result i32) - local.get $5 + local.get $3 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $5 + local.get $3 i32.const 1 - local.get $6 local.get $5 + local.get $3 i32.const 9 i32.shl i32.clz i32.sub - local.tee $6 + local.tee $5 i32.sub i32.shl end local.set $3 loop $continue|0 local.get $4 - local.get $6 + local.get $5 i32.gt_s if local.get $2 @@ -459,7 +445,7 @@ i32.sub i32.shr_u end - local.get $8 + local.get $7 i32.or f32.reinterpret_i32 return diff --git a/tests/compiler/std/mod.untouched.wat b/tests/compiler/std/mod.untouched.wat index c5757d42..3f997d2d 100644 --- a/tests/compiler/std/mod.untouched.wat +++ b/tests/compiler/std/mod.untouched.wat @@ -31,10 +31,9 @@ (local $5 i64) (local $6 i64) (local $7 i64) - (local $8 i32) - (local $9 f64) + (local $8 f64) + (local $9 i64) (local $10 i64) - (local $11 i64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -64,17 +63,15 @@ local.get $7 i64.const 0 i64.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i64.const 2047 i64.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -83,21 +80,21 @@ local.get $0 local.get $1 f64.mul - local.set $9 - local.get $9 - local.get $9 + local.set $8 + local.get $8 + local.get $8 f64.div return end local.get $2 i64.const 1 i64.shl - local.set $10 - local.get $10 + local.set $9 + local.get $9 local.get $7 i64.le_u if - local.get $10 + local.get $9 local.get $7 i64.eq if @@ -233,13 +230,13 @@ i64.const 11 i64.shl i64.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i64.sub local.set $4 local.get $2 - local.get $11 + local.get $10 i64.shl local.set $2 local.get $4 @@ -304,19 +301,16 @@ f64.eq ) (func $std/mod/test_fmod (; 5 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) - (local $3 i32) local.get $0 local.get $1 call $~lib/math/NativeMath.mod local.get $2 call $std/mod/check - local.tee $3 if (result i32) global.get $std/mod/js i32.eqz - local.tee $3 if (result i32) - local.get $3 + i32.const 1 else local.get $0 local.get $1 @@ -325,7 +319,7 @@ call $std/mod/check end else - local.get $3 + i32.const 0 end ) (func $~lib/builtins/isNaN (; 6 ;) (type $FUNCSIG$if) (param $0 f32) (result i32) @@ -340,10 +334,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 f32) + (local $8 f32) + (local $9 i32) (local $10 i32) - (local $11 i32) local.get $0 i32.reinterpret_f32 local.set $2 @@ -373,17 +366,15 @@ local.get $7 i32.const 0 i32.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i32.const 255 i32.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -392,21 +383,21 @@ local.get $0 local.get $1 f32.mul - local.set $9 - local.get $9 - local.get $9 + local.set $8 + local.get $8 + local.get $8 f32.div return end local.get $2 i32.const 1 i32.shl - local.set $10 - local.get $10 + local.set $9 + local.get $9 local.get $7 i32.le_u if - local.get $10 + local.get $9 local.get $7 i32.eq if @@ -542,13 +533,13 @@ i32.const 8 i32.shl i32.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i32.sub local.set $4 local.get $2 - local.get $11 + local.get $10 i32.shl local.set $2 local.get $4 diff --git a/tests/compiler/std/new.optimized.wat b/tests/compiler/std/new.optimized.wat index fe2e85af..d7b579f7 100644 --- a/tests/compiler/std/new.optimized.wat +++ b/tests/compiler/std/new.optimized.wat @@ -177,7 +177,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -201,19 +201,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 112 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -248,15 +244,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 112 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/new.untouched.wat b/tests/compiler/std/new.untouched.wat index ba40155b..f0193317 100644 --- a/tests/compiler/std/new.untouched.wat +++ b/tests/compiler/std/new.untouched.wat @@ -242,7 +242,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -267,14 +267,12 @@ ) (func $~lib/runtime/runtime.flags (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/object-literal.optimized.wat b/tests/compiler/std/object-literal.optimized.wat index 70dcb9eb..811595e0 100644 --- a/tests/compiler/std/object-literal.optimized.wat +++ b/tests/compiler/std/object-literal.optimized.wat @@ -165,7 +165,7 @@ local.tee $3 i32.eqz else - local.get $1 + i32.const 0 end if local.get $1 @@ -194,15 +194,10 @@ i32.const 1 return end + i32.const 0 + i32.const 1 local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if - i32.const 0 - local.set $1 - end - local.get $1 + select if i32.const 0 return @@ -323,7 +318,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -347,19 +342,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 168 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -395,15 +386,13 @@ (local $4 i32) local.get $0 local.tee $2 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $2 i32.const 168 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/object-literal.untouched.wat b/tests/compiler/std/object-literal.untouched.wat index 894a1030..b71be618 100644 --- a/tests/compiler/std/object-literal.untouched.wat +++ b/tests/compiler/std/object-literal.untouched.wat @@ -230,7 +230,7 @@ local.tee $5 i32.eqz else - local.get $4 + i32.const 0 end if block @@ -255,7 +255,6 @@ ) (func $~lib/string/String.__eq (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - (local $3 i32) local.get $0 local.get $1 i32.eq @@ -266,9 +265,8 @@ local.get $0 i32.const 0 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -280,8 +278,8 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 - local.get $3 + local.set $2 + local.get $2 local.get $1 call $~lib/string/String#get:length i32.ne @@ -293,7 +291,7 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 + local.get $2 call $~lib/util/string/compareImpl i32.eqz ) @@ -426,7 +424,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -451,14 +449,12 @@ ) (func $~lib/runtime/runtime.flags (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/operator-overloading.optimized.wat b/tests/compiler/std/operator-overloading.optimized.wat index bdca92a6..780ebff7 100644 --- a/tests/compiler/std/operator-overloading.optimized.wat +++ b/tests/compiler/std/operator-overloading.optimized.wat @@ -302,9 +302,9 @@ f64.mul ) (func $~lib/math/NativeMath.pow (; 6 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64) - (local $2 i32) + (local $2 f64) (local $3 f64) - (local $4 f64) + (local $4 i32) (local $5 i32) (local $6 i32) (local $7 f64) @@ -333,7 +333,7 @@ local.tee $17 i32.const 2147483647 i32.and - local.set $5 + local.set $4 local.get $1 i64.reinterpret_f64 local.tee $16 @@ -354,46 +354,38 @@ f64.const 1 return end - local.get $5 + i32.const 1 + local.get $8 i32.const 2146435072 i32.gt_s - local.tee $2 - i32.eqz - if - local.get $5 + local.get $4 + i32.const 2146435072 + i32.gt_s + if (result i32) + i32.const 1 + else + local.get $19 + i32.const 0 + i32.ne + i32.const 0 + local.get $4 i32.const 2146435072 i32.eq - local.tee $2 - if - local.get $19 - i32.const 0 - i32.ne - local.set $2 - end + select end - local.get $2 - i32.eqz - if - local.get $8 - i32.const 2146435072 - i32.gt_s - local.set $2 - end - local.get $2 - i32.eqz - if + select + if (result i32) + i32.const 1 + else + local.get $6 + i32.const 0 + i32.ne + i32.const 0 local.get $8 i32.const 2146435072 i32.eq - local.tee $2 - if - local.get $6 - i32.const 0 - i32.ne - local.set $2 - end + select end - local.get $2 if local.get $0 local.get $1 @@ -426,8 +418,8 @@ i32.gt_s local.tee $13 select - local.tee $2 - local.get $2 + local.tee $5 + local.get $5 i32.const 52 i32.const 20 local.get $13 @@ -436,13 +428,13 @@ i32.sub local.tee $13 i32.shr_s - local.tee $2 + local.tee $5 local.get $13 i32.shl i32.eq if (result i32) i32.const 2 - local.get $2 + local.get $5 i32.const 1 i32.and i32.sub @@ -462,13 +454,13 @@ i32.const 2146435072 i32.eq if - local.get $5 + local.get $4 i32.const 1072693248 i32.sub local.get $19 i32.or if - local.get $5 + local.get $4 i32.const 1072693248 i32.ge_s if @@ -539,66 +531,58 @@ end local.get $0 f64.abs - local.set $4 + local.set $3 local.get $19 i32.eqz if - local.get $5 - i32.eqz - local.tee $2 - i32.eqz - if - local.get $5 - i32.const 2146435072 - i32.eq - local.set $2 - end - local.get $2 - i32.eqz - if - local.get $5 - i32.const 1072693248 - i32.eq - local.set $2 - end - local.get $2 + i32.const 1 + local.get $4 + i32.const 1072693248 + i32.eq + local.get $4 + i32.const 2146435072 + i32.eq + i32.const 1 + local.get $4 + select + select if f64.const 1 - local.get $4 + local.get $3 f64.div - local.get $4 + local.get $3 local.get $9 i32.const 0 i32.lt_s select - local.set $4 + local.set $3 local.get $17 i32.const 0 i32.lt_s if (result f64) - local.get $5 + local.get $4 i32.const 1072693248 i32.sub local.get $11 i32.or if (result f64) - local.get $4 + local.get $3 f64.neg - local.get $4 + local.get $3 local.get $11 i32.const 1 i32.eq select else - local.get $4 - local.get $4 + local.get $3 + local.get $3 f64.sub local.tee $0 local.get $0 f64.div end else - local.get $4 + local.get $3 end return end @@ -636,7 +620,7 @@ i32.const 1139802112 i32.gt_s if - local.get $5 + local.get $4 i32.const 1072693247 i32.le_s if @@ -648,7 +632,7 @@ select return end - local.get $5 + local.get $4 i32.const 1072693248 i32.ge_s if @@ -661,7 +645,7 @@ return end end - local.get $5 + local.get $4 i32.const 1072693247 i32.lt_s if @@ -683,7 +667,7 @@ end return end - local.get $5 + local.get $4 i32.const 1072693248 i32.gt_s if @@ -705,16 +689,16 @@ end return end - local.get $4 + local.get $3 f64.const 1 f64.sub - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f64.mul f64.const 0.5 - local.get $3 + local.get $2 f64.const 0.3333333333333333 - local.get $3 + local.get $2 f64.const 0.25 f64.mul f64.sub @@ -723,10 +707,10 @@ f64.mul local.set $0 f64.const 1.4426950216293335 - local.get $3 + local.get $2 f64.mul - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 f64.const 1.9259629911266175e-08 f64.mul local.get $0 @@ -742,50 +726,50 @@ local.set $10 local.get $0 local.get $10 - local.get $4 + local.get $3 f64.sub f64.sub else i32.const 0 local.set $6 - local.get $5 + local.get $4 i32.const 1048576 i32.lt_s if (result i32) - local.get $4 + local.get $3 f64.const 9007199254740992 f64.mul - local.tee $4 + local.tee $3 i64.reinterpret_f64 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $5 + local.set $4 i32.const -53 else i32.const 0 end - local.get $5 + local.get $4 i32.const 20 i32.shr_s i32.const 1023 i32.sub i32.add local.set $6 - local.get $5 + local.get $4 i32.const 1048575 i32.and - local.tee $2 + local.tee $5 i32.const 1072693248 i32.or - local.set $5 - local.get $2 + local.set $4 + local.get $5 i32.const 235662 i32.le_s if (result i32) i32.const 0 else - local.get $2 + local.get $5 i32.const 767610 i32.lt_s if (result i32) @@ -795,38 +779,38 @@ i32.const 1 i32.add local.set $6 - local.get $5 + local.get $4 i32.const -1048576 i32.add - local.set $5 + local.set $4 i32.const 0 end end - local.set $2 - local.get $4 + local.set $5 + local.get $3 i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $5 + local.get $4 i64.extend_i32_s i64.const 32 i64.shl i64.or f64.reinterpret_i64 - local.tee $4 + local.tee $3 f64.const 1.5 f64.const 1 - local.get $2 + local.get $5 select local.tee $0 f64.sub local.tee $10 f64.const 1 - local.get $4 + local.get $3 local.get $0 f64.add f64.div - local.tee $3 + local.tee $2 f64.mul local.tee $18 i64.reinterpret_f64 @@ -834,15 +818,15 @@ i64.and f64.reinterpret_i64 local.set $14 + local.get $3 local.get $4 - local.get $5 i32.const 1 i32.shr_s i32.const 536870912 i32.or i32.const 524288 i32.add - local.get $2 + local.get $5 i32.const 18 i32.shl i32.add @@ -850,7 +834,7 @@ i64.const 32 i64.shl f64.reinterpret_i64 - local.tee $4 + local.tee $3 local.get $0 f64.sub f64.sub @@ -891,10 +875,10 @@ f64.mul f64.add f64.mul - local.get $3 + local.get $2 local.get $10 local.get $14 - local.get $4 + local.get $3 f64.mul f64.sub local.get $14 @@ -902,7 +886,7 @@ f64.mul f64.sub f64.mul - local.tee $3 + local.tee $2 local.get $14 local.get $18 f64.add @@ -916,8 +900,8 @@ f64.reinterpret_i64 local.tee $10 f64.mul - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 local.get $10 f64.mul local.get $0 @@ -936,15 +920,15 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $3 + local.tee $2 f64.mul local.tee $20 f64.const -7.028461650952758e-09 - local.get $3 + local.get $2 f64.mul local.get $0 + local.get $2 local.get $3 - local.get $4 f64.sub f64.sub f64.const 0.9617966939259756 @@ -952,16 +936,16 @@ f64.add f64.const 1.350039202129749e-08 f64.const 0 - local.get $2 + local.get $5 select f64.add - local.tee $3 + local.tee $2 f64.add f64.const 0.5849624872207642 f64.const 0 - local.get $2 + local.get $5 select - local.tee $4 + local.tee $3 f64.add local.get $6 f64.convert_i32_s @@ -972,17 +956,17 @@ i64.and f64.reinterpret_i64 local.set $10 - local.get $3 + local.get $2 local.get $10 local.get $0 f64.sub - local.get $4 + local.get $3 f64.sub local.get $20 f64.sub f64.sub end - local.set $4 + local.set $3 local.get $1 local.get $1 i64.reinterpret_f64 @@ -994,20 +978,20 @@ local.get $10 f64.mul local.get $1 - local.get $4 + local.get $3 f64.mul f64.add local.tee $1 local.get $0 local.get $10 f64.mul - local.tee $3 + local.tee $2 f64.add local.tee $0 i64.reinterpret_f64 local.tee $16 i32.wrap_i64 - local.set $2 + local.set $5 block $folding-inner1 block $folding-inner0 local.get $16 @@ -1021,14 +1005,14 @@ local.get $12 i32.const 1083179008 i32.sub - local.get $2 + local.get $5 i32.or br_if $folding-inner0 local.get $1 f64.const 8.008566259537294e-17 f64.add local.get $0 - local.get $3 + local.get $2 f64.sub f64.gt br_if $folding-inner0 @@ -1042,12 +1026,12 @@ local.get $12 i32.const -1064252416 i32.sub - local.get $2 + local.get $5 i32.or br_if $folding-inner1 local.get $1 local.get $0 - local.get $3 + local.get $2 f64.sub f64.le br_if $folding-inner1 @@ -1061,7 +1045,7 @@ i32.shr_s i32.const 1023 i32.sub - local.set $2 + local.set $5 i32.const 0 local.set $6 local.get $13 @@ -1069,7 +1053,7 @@ i32.gt_s if i32.const 1048576 - local.get $2 + local.get $5 i32.const 1 i32.add i32.shr_s @@ -1082,9 +1066,9 @@ i32.shr_s i32.const 1023 i32.sub - local.set $2 + local.set $5 i32.const 1048575 - local.get $2 + local.get $5 i32.shr_s i32.const -1 i32.xor @@ -1101,7 +1085,7 @@ i32.const 1048576 i32.or i32.const 20 - local.get $2 + local.get $5 i32.sub i32.shr_s local.set $6 @@ -1114,13 +1098,13 @@ i32.lt_s select local.set $6 - local.get $3 + local.get $2 local.get $0 f64.sub - local.set $3 + local.set $2 end local.get $1 - local.get $3 + local.get $2 f64.add i64.reinterpret_f64 i64.const -4294967296 @@ -1129,10 +1113,10 @@ local.tee $0 f64.const 0.6931471824645996 f64.mul - local.tee $4 + local.tee $3 local.get $1 local.get $0 - local.get $3 + local.get $2 f64.sub f64.sub f64.const 0.6931471805599453 @@ -1143,14 +1127,14 @@ f64.add local.tee $1 f64.add - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f64.mul local.set $0 local.get $7 f64.const 1 - local.get $3 - local.get $3 + local.get $2 + local.get $2 local.get $0 f64.const 0.16666666666666602 local.get $0 @@ -1178,17 +1162,17 @@ f64.sub f64.div local.get $1 + local.get $2 local.get $3 - local.get $4 f64.sub f64.sub local.tee $0 - local.get $3 + local.get $2 local.get $0 f64.mul f64.add f64.sub - local.get $3 + local.get $2 f64.sub f64.sub local.tee $0 @@ -1200,7 +1184,7 @@ i32.const 20 i32.shl i32.add - local.tee $2 + local.tee $5 i32.const 20 i32.shr_s i32.const 0 @@ -1214,7 +1198,7 @@ i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $2 + local.get $5 i64.extend_i32_s i64.const 32 i64.shl @@ -1287,7 +1271,6 @@ (func $start:std/operator-overloading (; 10 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) - (local $2 i32) i32.const 352 global.set $~lib/allocator/arena/startOffset global.get $~lib/allocator/arena/startOffset @@ -1318,14 +1301,13 @@ i32.load i32.const 3 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/a i32.load offset=4 i32.const 5 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1360,15 +1342,13 @@ global.set $std/operator-overloading/s global.get $std/operator-overloading/s i32.load - i32.eqz - local.tee $0 if (result i32) + i32.const 0 + else global.get $std/operator-overloading/s i32.load offset=4 i32.const 6 i32.eq - else - local.get $0 end i32.eqz if @@ -1405,14 +1385,13 @@ i32.load i32.const 6 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/m i32.load offset=4 i32.const 10 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1449,14 +1428,13 @@ i32.load i32.const 2 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/d i32.load offset=4 i32.const 5 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1493,13 +1471,12 @@ i32.load i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/f i32.load offset=4 i32.eqz else - local.get $0 + i32.const 0 end i32.eqz if @@ -1526,14 +1503,13 @@ i32.load i32.const 16 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/p i32.load offset=4 i32.const 243 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1570,14 +1546,13 @@ i32.load i32.const 15 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/n i32.load offset=4 i32.const 15 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1614,14 +1589,13 @@ i32.load i32.const 65535 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/o i32.load offset=4 i32.const 255 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1658,14 +1632,13 @@ i32.load i32.const 65535 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/x i32.load offset=4 i32.const 255 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1685,21 +1658,20 @@ call $std/operator-overloading/Tester#constructor global.set $std/operator-overloading/eq2 global.get $std/operator-overloading/eq1 - local.tee $1 + local.tee $0 i32.load global.get $std/operator-overloading/eq2 - local.tee $2 + local.tee $1 i32.load i32.eq - local.tee $0 if (result i32) - local.get $1 + local.get $0 i32.load offset=4 - local.get $2 + local.get $1 i32.load offset=4 i32.eq else - local.get $0 + i32.const 0 end global.set $std/operator-overloading/eq global.get $std/operator-overloading/eq @@ -1722,21 +1694,20 @@ call $std/operator-overloading/Tester#constructor global.set $std/operator-overloading/eq4 global.get $std/operator-overloading/eq3 - local.tee $1 + local.tee $0 i32.load global.get $std/operator-overloading/eq4 - local.tee $2 + local.tee $1 i32.load i32.eq - local.tee $0 if (result i32) - local.get $1 + local.get $0 i32.load offset=4 - local.get $2 + local.get $1 i32.load offset=4 i32.eq else - local.get $0 + i32.const 0 end global.set $std/operator-overloading/eqf global.get $std/operator-overloading/eqf @@ -1749,21 +1720,20 @@ unreachable end global.get $std/operator-overloading/eq1 - local.tee $1 + local.tee $0 i32.load global.get $std/operator-overloading/eq2 - local.tee $2 + local.tee $1 i32.load i32.ne - local.tee $0 if (result i32) - local.get $1 + local.get $0 i32.load offset=4 - local.get $2 + local.get $1 i32.load offset=4 i32.ne else - local.get $0 + i32.const 0 end global.set $std/operator-overloading/eq global.get $std/operator-overloading/eq @@ -1776,21 +1746,20 @@ unreachable end global.get $std/operator-overloading/eq3 - local.tee $1 + local.tee $0 i32.load global.get $std/operator-overloading/eq4 - local.tee $2 + local.tee $1 i32.load i32.ne - local.tee $0 if (result i32) - local.get $1 + local.get $0 i32.load offset=4 - local.get $2 + local.get $1 i32.load offset=4 i32.ne else - local.get $0 + i32.const 0 end global.set $std/operator-overloading/eqf global.get $std/operator-overloading/eqf @@ -1813,21 +1782,20 @@ call $std/operator-overloading/Tester#constructor global.set $std/operator-overloading/gt2 global.get $std/operator-overloading/gt1 - local.tee $1 + local.tee $0 i32.load global.get $std/operator-overloading/gt2 - local.tee $2 + local.tee $1 i32.load i32.gt_s - local.tee $0 if (result i32) - local.get $1 + local.get $0 i32.load offset=4 - local.get $2 + local.get $1 i32.load offset=4 i32.gt_s else - local.get $0 + i32.const 0 end global.set $std/operator-overloading/gt global.get $std/operator-overloading/gt @@ -1850,21 +1818,20 @@ call $std/operator-overloading/Tester#constructor global.set $std/operator-overloading/gte2 global.get $std/operator-overloading/gte1 - local.tee $1 + local.tee $0 i32.load global.get $std/operator-overloading/gte2 - local.tee $2 + local.tee $1 i32.load i32.ge_s - local.tee $0 if (result i32) - local.get $1 + local.get $0 i32.load offset=4 - local.get $2 + local.get $1 i32.load offset=4 i32.ge_s else - local.get $0 + i32.const 0 end global.set $std/operator-overloading/gte global.get $std/operator-overloading/gte @@ -1887,21 +1854,20 @@ call $std/operator-overloading/Tester#constructor global.set $std/operator-overloading/le2 global.get $std/operator-overloading/le1 - local.tee $1 + local.tee $0 i32.load global.get $std/operator-overloading/le2 - local.tee $2 + local.tee $1 i32.load i32.lt_s - local.tee $0 if (result i32) - local.get $1 + local.get $0 i32.load offset=4 - local.get $2 + local.get $1 i32.load offset=4 i32.lt_s else - local.get $0 + i32.const 0 end global.set $std/operator-overloading/le global.get $std/operator-overloading/le @@ -1924,21 +1890,20 @@ call $std/operator-overloading/Tester#constructor global.set $std/operator-overloading/leq2 global.get $std/operator-overloading/leq1 - local.tee $1 + local.tee $0 i32.load global.get $std/operator-overloading/leq2 - local.tee $2 + local.tee $1 i32.load i32.le_s - local.tee $0 if (result i32) - local.get $1 + local.get $0 i32.load offset=4 - local.get $2 + local.get $1 i32.load offset=4 i32.le_s else - local.get $0 + i32.const 0 end global.set $std/operator-overloading/leq global.get $std/operator-overloading/leq @@ -1971,14 +1936,13 @@ i32.load i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/sres i32.load offset=4 i32.const 2 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2008,14 +1972,13 @@ i32.load i32.const 536870911 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/ures i32.load offset=4 i32.const 536870910 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2045,14 +2008,13 @@ i32.load i32.const 8 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/sres i32.load offset=4 i32.const 16 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2079,7 +2041,6 @@ global.get $std/operator-overloading/pos i32.load i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/pres i32.load offset=4 @@ -2087,7 +2048,7 @@ i32.load offset=4 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2120,7 +2081,6 @@ i32.load i32.sub i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/nres i32.load offset=4 @@ -2130,7 +2090,7 @@ i32.sub i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2163,7 +2123,6 @@ i32.const -1 i32.xor i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/res i32.load offset=4 @@ -2173,7 +2132,7 @@ i32.xor i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2189,32 +2148,26 @@ call $std/operator-overloading/Tester#constructor global.set $std/operator-overloading/excl global.get $std/operator-overloading/excl - local.tee $1 - i32.load - i32.eqz local.tee $0 + i32.load if (result i32) - local.get $1 - i32.load offset=4 - i32.eqz + i32.const 0 else local.get $0 + i32.load offset=4 + i32.eqz end global.set $std/operator-overloading/bres - global.get $std/operator-overloading/bres - local.set $1 global.get $std/operator-overloading/excl i32.load - i32.eqz - local.tee $0 if (result i32) + i32.const 0 + else global.get $std/operator-overloading/excl i32.load offset=4 i32.eqz - else - local.get $0 end - local.get $1 + global.get $std/operator-overloading/bres i32.ne if i32.const 0 @@ -2258,14 +2211,13 @@ i32.load i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/incdec i32.load offset=4 i32.const 2 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2293,15 +2245,13 @@ global.set $std/operator-overloading/incdec global.get $std/operator-overloading/incdec i32.load - i32.eqz - local.tee $0 if (result i32) + i32.const 0 + else global.get $std/operator-overloading/incdec i32.load offset=4 i32.const 1 i32.eq - else - local.get $0 end i32.eqz if @@ -2331,15 +2281,13 @@ global.set $std/operator-overloading/tmp global.get $std/operator-overloading/tmp i32.load - i32.eqz - local.tee $0 if (result i32) + i32.const 0 + else global.get $std/operator-overloading/tmp i32.load offset=4 i32.const 1 i32.eq - else - local.get $0 end i32.eqz if @@ -2354,14 +2302,13 @@ i32.load i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/incdec i32.load offset=4 i32.const 2 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2389,14 +2336,13 @@ i32.load i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/tmp i32.load offset=4 i32.const 2 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2409,15 +2355,13 @@ end global.get $std/operator-overloading/incdec i32.load - i32.eqz - local.tee $0 if (result i32) + i32.const 0 + else global.get $std/operator-overloading/incdec i32.load offset=4 i32.const 1 i32.eq - else - local.get $0 end i32.eqz if @@ -2465,14 +2409,13 @@ i32.load i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/ais i32.load offset=4 i32.const 6 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2520,14 +2463,13 @@ i32.load i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/aii i32.load offset=4 i32.const 6 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2551,7 +2493,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -2575,19 +2517,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 184 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -2622,15 +2560,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 184 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/operator-overloading.untouched.wat b/tests/compiler/std/operator-overloading.untouched.wat index 70a16071..ddfe2fee 100644 --- a/tests/compiler/std/operator-overloading.untouched.wat +++ b/tests/compiler/std/operator-overloading.untouched.wat @@ -510,44 +510,39 @@ local.get $7 i32.const 2146435072 i32.gt_s - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $7 i32.const 2146435072 i32.eq - local.tee $9 if (result i32) local.get $4 i32.const 0 i32.ne else - local.get $9 + i32.const 0 end end - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $8 i32.const 2146435072 i32.gt_s end - local.tee $9 if (result i32) - local.get $9 + i32.const 1 else local.get $8 i32.const 2146435072 i32.eq - local.tee $9 if (result i32) local.get $6 i32.const 0 i32.ne else - local.get $9 + i32.const 0 end end if @@ -557,7 +552,7 @@ return end i32.const 0 - local.set $10 + local.set $9 local.get $3 i32.const 0 i32.lt_s @@ -567,7 +562,7 @@ i32.ge_s if i32.const 2 - local.set $10 + local.set $9 else local.get $8 i32.const 1072693248 @@ -578,21 +573,21 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 - local.get $11 + local.set $10 + local.get $10 i32.const 20 i32.gt_s - local.set $9 + local.set $11 i32.const 52 i32.const 20 - local.get $9 - select local.get $11 + select + local.get $10 i32.sub local.set $12 local.get $6 local.get $8 - local.get $9 + local.get $11 select local.set $13 local.get $13 @@ -610,7 +605,7 @@ i32.const 1 i32.and i32.sub - local.set $10 + local.set $9 end end end @@ -713,17 +708,15 @@ local.get $7 i32.const 0 i32.eq - local.tee $14 if (result i32) - local.get $14 + i32.const 1 else local.get $7 i32.const 2146435072 i32.eq end - local.tee $14 if (result i32) - local.get $14 + i32.const 1 else local.get $7 i32.const 1072693248 @@ -748,7 +741,7 @@ local.get $7 i32.const 1072693248 i32.sub - local.get $10 + local.get $9 i32.or i32.const 0 i32.eq @@ -762,7 +755,7 @@ f64.div local.set $16 else - local.get $10 + local.get $9 i32.const 1 i32.eq if @@ -782,7 +775,7 @@ i32.const 0 i32.lt_s if - local.get $10 + local.get $9 i32.const 0 i32.eq if @@ -795,7 +788,7 @@ f64.div return end - local.get $10 + local.get $9 i32.const 1 i32.eq if @@ -981,17 +974,17 @@ i32.le_s if i32.const 0 - local.set $11 + local.set $10 else local.get $28 i32.const 767610 i32.lt_s if i32.const 1 - local.set $11 + local.set $10 else i32.const 0 - local.set $11 + local.set $10 local.get $29 i32.const 1 i32.add @@ -1015,7 +1008,7 @@ local.set $15 f64.const 1.5 f64.const 1 - local.get $11 + local.get $10 select local.set $35 local.get $15 @@ -1047,7 +1040,7 @@ i32.or i32.const 524288 i32.add - local.get $11 + local.get $10 i32.const 18 i32.shl i32.add @@ -1170,7 +1163,7 @@ local.set $36 f64.const 1.350039202129749e-08 f64.const 0 - local.get $11 + local.get $10 select local.set $37 f64.const -7.028461650952758e-09 @@ -1188,7 +1181,7 @@ local.set $24 f64.const 0.5849624872207642 f64.const 0 - local.get $11 + local.get $10 select local.set $39 local.get $36 @@ -1333,7 +1326,7 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 + local.set $10 i32.const 0 local.set $29 local.get $41 @@ -1342,7 +1335,7 @@ if local.get $28 i32.const 1048576 - local.get $11 + local.get $10 i32.const 1 i32.add i32.shr_s @@ -1355,12 +1348,12 @@ i32.shr_s i32.const 1023 i32.sub - local.set $11 + local.set $10 f64.const 0 local.set $24 local.get $29 i32.const 1048575 - local.get $11 + local.get $10 i32.shr_s i32.const -1 i32.xor @@ -1376,7 +1369,7 @@ i32.const 1048576 i32.or i32.const 20 - local.get $11 + local.get $10 i32.sub i32.shr_s local.set $29 @@ -1578,13 +1571,11 @@ call $std/operator-overloading/Tester#constructor ) (func $std/operator-overloading/Tester.equals (; 18 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 i32.load local.get $1 i32.load i32.eq - local.tee $2 if (result i32) local.get $0 i32.load offset=4 @@ -1592,17 +1583,15 @@ i32.load offset=4 i32.eq else - local.get $2 + i32.const 0 end ) (func $std/operator-overloading/Tester.notEquals (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 i32.load local.get $1 i32.load i32.ne - local.tee $2 if (result i32) local.get $0 i32.load offset=4 @@ -1610,17 +1599,15 @@ i32.load offset=4 i32.ne else - local.get $2 + i32.const 0 end ) (func $std/operator-overloading/Tester.greater (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 i32.load local.get $1 i32.load i32.gt_s - local.tee $2 if (result i32) local.get $0 i32.load offset=4 @@ -1628,17 +1615,15 @@ i32.load offset=4 i32.gt_s else - local.get $2 + i32.const 0 end ) (func $std/operator-overloading/Tester.greaterEquals (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 i32.load local.get $1 i32.load i32.ge_s - local.tee $2 if (result i32) local.get $0 i32.load offset=4 @@ -1646,17 +1631,15 @@ i32.load offset=4 i32.ge_s else - local.get $2 + i32.const 0 end ) (func $std/operator-overloading/Tester.less (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 i32.load local.get $1 i32.load i32.lt_s - local.tee $2 if (result i32) local.get $0 i32.load offset=4 @@ -1664,17 +1647,15 @@ i32.load offset=4 i32.lt_s else - local.get $2 + i32.const 0 end ) (func $std/operator-overloading/Tester.lessEquals (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 i32.load local.get $1 i32.load i32.le_s - local.tee $2 if (result i32) local.get $0 i32.load offset=4 @@ -1682,7 +1663,7 @@ i32.load offset=4 i32.le_s else - local.get $2 + i32.const 0 end ) (func $std/operator-overloading/Tester.shr (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) @@ -1754,17 +1735,15 @@ call $std/operator-overloading/Tester#constructor ) (func $std/operator-overloading/Tester.excl (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 i32.load i32.eqz - local.tee $1 if (result i32) local.get $0 i32.load offset=4 i32.eqz else - local.get $1 + i32.const 0 end ) (func $std/operator-overloading/Tester#inc (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) @@ -1888,14 +1867,13 @@ i32.load i32.const 3 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/a i32.load offset=4 i32.const 5 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1924,14 +1902,13 @@ i32.load i32.const 0 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/s i32.load offset=4 i32.const 6 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1960,14 +1937,13 @@ i32.load i32.const 6 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/m i32.load offset=4 i32.const 10 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -1996,14 +1972,13 @@ i32.load i32.const 2 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/d i32.load offset=4 i32.const 5 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2032,14 +2007,13 @@ i32.load i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/f i32.load offset=4 i32.const 0 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2068,14 +2042,13 @@ i32.load i32.const 16 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/p i32.load offset=4 i32.const 243 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2104,14 +2077,13 @@ i32.load i32.const 15 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/n i32.load offset=4 i32.const 15 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2140,14 +2112,13 @@ i32.load i32.const 65535 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/o i32.load offset=4 i32.const 255 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2176,14 +2147,13 @@ i32.load i32.const 65535 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/x i32.load offset=4 i32.const 255 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2395,14 +2365,13 @@ i32.load i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/sres i32.load offset=4 i32.const 2 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2426,14 +2395,13 @@ i32.load i32.const 536870911 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/ures i32.load offset=4 i32.const 536870910 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2457,14 +2425,13 @@ i32.load i32.const 8 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/sres i32.load offset=4 i32.const 16 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2488,7 +2455,6 @@ global.get $std/operator-overloading/pos i32.load i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/pres i32.load offset=4 @@ -2496,7 +2462,7 @@ i32.load offset=4 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2522,7 +2488,6 @@ i32.load i32.sub i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/nres i32.load offset=4 @@ -2532,7 +2497,7 @@ i32.sub i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2558,7 +2523,6 @@ i32.const -1 i32.xor i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/res i32.load offset=4 @@ -2568,7 +2532,7 @@ i32.xor i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2591,13 +2555,12 @@ global.get $std/operator-overloading/excl i32.load i32.eqz - local.tee $0 if (result i32) global.get $std/operator-overloading/excl i32.load offset=4 i32.eqz else - local.get $0 + i32.const 0 end i32.eq i32.eqz @@ -2633,14 +2596,13 @@ i32.load i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/incdec i32.load offset=4 i32.const 2 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2658,14 +2620,13 @@ i32.load i32.const 0 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/incdec i32.load offset=4 i32.const 1 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2693,14 +2654,13 @@ i32.load i32.const 0 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/tmp i32.load offset=4 i32.const 1 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2715,14 +2675,13 @@ i32.load i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/incdec i32.load offset=4 i32.const 2 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2745,14 +2704,13 @@ i32.load i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/tmp i32.load offset=4 i32.const 2 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2767,14 +2725,13 @@ i32.load i32.const 0 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/incdec i32.load offset=4 i32.const 1 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2833,14 +2790,13 @@ i32.load i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/ais i32.load offset=4 i32.const 6 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2899,14 +2855,13 @@ i32.load i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/operator-overloading/aii i32.load offset=4 i32.const 6 i32.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -2935,7 +2890,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -2960,14 +2915,12 @@ ) (func $~lib/runtime/runtime.flags (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/runtime.optimized.wat b/tests/compiler/std/runtime.optimized.wat index 21985e82..f4b09ccb 100644 --- a/tests/compiler/std/runtime.optimized.wat +++ b/tests/compiler/std/runtime.optimized.wat @@ -204,7 +204,7 @@ (local $5 i32) local.get $1 i32.load - local.tee $2 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -216,20 +216,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const -4 i32.and - local.tee $3 + local.tee $2 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $3 + if (result i32) + local.get $2 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -239,67 +238,67 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 256 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 8 i32.div_u local.set $4 i32.const 0 else - local.get $3 - local.get $3 + local.get $2 + local.get $2 call $~lib/allocator/tlsf/fls - local.tee $2 + local.tee $3 i32.const 5 i32.sub i32.shr_u i32.const 32 i32.xor local.set $4 - local.get $2 + local.get $3 i32.const 7 i32.sub end - local.set $2 + local.set $3 local.get $1 i32.load offset=8 - local.set $3 + local.set $2 local.get $1 i32.load offset=4 local.tee $5 if local.get $5 - local.get $3 + local.get $2 i32.store offset=8 end - local.get $3 + local.get $2 if - local.get $3 + local.get $2 local.get $5 i32.store offset=4 end local.get $0 - local.get $2 + local.get $3 local.get $4 call $~lib/allocator/tlsf/Root#getHead local.get $1 i32.eq if local.get $0 - local.get $2 + local.get $3 local.get $4 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#setHead - local.get $3 + local.get $2 i32.eqz if local.get $0 - local.get $2 + local.get $3 local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#getSLMap i32.const 1 local.get $4 @@ -316,7 +315,7 @@ local.get $0 i32.load i32.const 1 - local.get $2 + local.get $3 i32.shl i32.const -1 i32.xor @@ -418,7 +417,7 @@ end local.get $1 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz @@ -434,17 +433,16 @@ i32.load i32.const -4 i32.and - local.tee $4 + local.tee $3 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $4 + if (result i32) + local.get $3 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -456,7 +454,7 @@ end local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $2 + local.tee $3 i32.eqz if i32.const 0 @@ -466,14 +464,14 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.load local.tee $4 i32.const 1 i32.and if local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#remove local.get $1 local.get $4 @@ -481,17 +479,17 @@ i32.and i32.const 8 i32.add - local.get $3 + local.get $2 i32.add - local.tee $3 + local.tee $2 i32.store local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $2 + local.tee $3 i32.load local.set $4 end - local.get $3 + local.get $2 i32.const 2 i32.and if @@ -525,38 +523,37 @@ local.get $1 call $~lib/allocator/tlsf/Root#remove local.get $1 - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 8 i32.add local.get $5 i32.add - local.tee $3 + local.tee $2 i32.store end - local.get $2 + local.get $3 local.get $4 i32.const 2 i32.or i32.store local.get $1 - local.get $2 - call $~lib/allocator/tlsf/Root#setJump local.get $3 + call $~lib/allocator/tlsf/Root#setJump + local.get $2 i32.const -4 i32.and - local.tee $3 + local.tee $2 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $3 + if (result i32) + local.get $2 i32.const 1073741824 i32.lt_u - local.set $2 + else + i32.const 0 end - local.get $2 i32.eqz if i32.const 0 @@ -567,32 +564,32 @@ unreachable end local.get $0 - local.get $3 + local.get $2 i32.const 256 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 8 i32.div_u - local.set $3 + local.set $2 i32.const 0 else - local.get $3 - local.get $3 + local.get $2 + local.get $2 call $~lib/allocator/tlsf/fls - local.tee $2 + local.tee $3 i32.const 5 i32.sub i32.shr_u i32.const 32 i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.const 7 i32.sub end - local.tee $2 - local.get $3 + local.tee $3 + local.get $2 call $~lib/allocator/tlsf/Root#getHead local.set $4 local.get $1 @@ -608,25 +605,25 @@ i32.store offset=4 end local.get $0 - local.get $2 local.get $3 + local.get $2 local.get $1 call $~lib/allocator/tlsf/Root#setHead local.get $0 local.get $0 i32.load i32.const 1 - local.get $2 + local.get $3 i32.shl i32.or i32.store local.get $0 - local.get $2 + local.get $3 local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#getSLMap i32.const 1 - local.get $3 + local.get $2 i32.shl i32.or call $~lib/allocator/tlsf/Root#setSLMap @@ -772,16 +769,13 @@ (local $2 i32) (local $3 i32) local.get $1 + i32.const 1073741824 + i32.lt_u + i32.const 0 + local.get $1 i32.const 16 i32.ge_u - local.tee $2 - if - local.get $1 - i32.const 1073741824 - i32.lt_u - local.set $2 - end - local.get $2 + select i32.eqz if i32.const 0 @@ -795,8 +789,6 @@ i32.const 256 i32.lt_u if (result i32) - i32.const 0 - local.set $2 local.get $1 i32.const 8 i32.div_u @@ -885,7 +877,7 @@ (local $4 i32) local.get $1 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -898,16 +890,13 @@ unreachable end local.get $2 + i32.const 1073741824 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - local.tee $3 - if - local.get $2 - i32.const 1073741824 - i32.lt_u - local.set $3 - end - local.get $3 + select i32.eqz if i32.const 0 @@ -931,17 +920,17 @@ local.get $0 local.get $1 call $~lib/allocator/tlsf/Root#remove - local.get $4 + local.get $3 i32.const -4 i32.and local.get $2 i32.sub - local.tee $3 + local.tee $4 i32.const 24 i32.ge_u if local.get $1 - local.get $4 + local.get $3 i32.const 2 i32.and local.get $2 @@ -953,7 +942,7 @@ local.get $2 i32.add local.tee $2 - local.get $3 + local.get $4 i32.const 8 i32.sub i32.const 1 @@ -964,7 +953,7 @@ call $~lib/allocator/tlsf/Root#insert else local.get $1 - local.get $4 + local.get $3 i32.const -2 i32.and i32.store @@ -1001,18 +990,17 @@ if i32.const 1 current_memory - local.tee $1 - i32.gt_s local.tee $2 + i32.gt_s if (result i32) i32.const 1 - local.get $1 + local.get $2 i32.sub grow_memory i32.const 0 i32.lt_s else - local.get $2 + i32.const 0 end if unreachable @@ -1027,8 +1015,6 @@ i32.const 272 i32.const 0 i32.store - i32.const 0 - local.set $1 loop $repeat|0 local.get $1 i32.const 22 @@ -1782,7 +1768,6 @@ (func $start:std/runtime (; 24 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) - (local $2 i32) loop $repeat|0 local.get $0 i32.const 9000 @@ -1797,19 +1782,14 @@ i32.sub i32.shl local.tee $1 + local.get $1 + i32.const 1 + i32.sub + i32.and + i32.eqz i32.const 0 - i32.ne - local.tee $2 - if (result i32) - local.get $1 - i32.const 1 - i32.sub - local.get $1 - i32.and - i32.eqz - else - local.get $2 - end + local.get $1 + select if local.get $0 i32.const 1 diff --git a/tests/compiler/std/runtime.untouched.wat b/tests/compiler/std/runtime.untouched.wat index bfe746e6..436f88bd 100644 --- a/tests/compiler/std/runtime.untouched.wat +++ b/tests/compiler/std/runtime.untouched.wat @@ -70,11 +70,9 @@ i32.shl ) (func $std/runtime/isPowerOf2 (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 i32.const 0 i32.ne - local.tee $1 if (result i32) local.get $0 local.get $0 @@ -84,7 +82,7 @@ i32.const 0 i32.eq else - local.get $1 + i32.const 0 end ) (func $~lib/allocator/tlsf/Root#set:tailRef (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) @@ -300,13 +298,12 @@ local.get $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -322,17 +319,17 @@ i32.lt_u if i32.const 0 - local.set $5 + local.set $4 local.get $3 i32.const 8 i32.div_u - local.set $6 + local.set $5 else local.get $3 call $~lib/allocator/tlsf/fls - local.set $5 + local.set $4 local.get $3 - local.get $5 + local.get $4 global.get $~lib/allocator/tlsf/SL_BITS i32.sub i32.shr_u @@ -340,70 +337,70 @@ global.get $~lib/allocator/tlsf/SL_BITS i32.shl i32.xor - local.set $6 - local.get $5 + local.set $5 + local.get $4 global.get $~lib/allocator/tlsf/SB_BITS i32.const 1 i32.sub i32.sub - local.set $5 + local.set $4 end local.get $1 i32.load offset=4 - local.set $7 + local.set $6 local.get $1 i32.load offset=8 - local.set $8 + local.set $7 + local.get $6 + if + local.get $6 + local.get $7 + i32.store offset=8 + end local.get $7 if local.get $7 - local.get $8 - i32.store offset=8 - end - local.get $8 - if - local.get $8 - local.get $7 + local.get $6 i32.store offset=4 end local.get $1 local.get $0 + local.get $4 local.get $5 - local.get $6 call $~lib/allocator/tlsf/Root#getHead i32.eq if local.get $0 + local.get $4 local.get $5 - local.get $6 - local.get $8 + local.get $7 call $~lib/allocator/tlsf/Root#setHead - local.get $8 + local.get $7 i32.eqz if local.get $0 - local.get $5 - call $~lib/allocator/tlsf/Root#getSLMap - local.set $4 - local.get $0 - local.get $5 local.get $4 + call $~lib/allocator/tlsf/Root#getSLMap + local.set $8 + local.get $0 + local.get $4 + local.get $8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.const -1 i32.xor i32.and - local.tee $4 + local.tee $8 call $~lib/allocator/tlsf/Root#setSLMap - local.get $4 + local.get $8 i32.eqz if local.get $0 local.get $0 i32.load i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor @@ -535,13 +532,12 @@ local.tee $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -668,13 +664,12 @@ local.get $3 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $7 if (result i32) local.get $3 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $7 + i32.const 0 end i32.eqz if @@ -952,13 +947,12 @@ local.get $1 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $2 if (result i32) local.get $1 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $2 + i32.const 0 end i32.eqz if @@ -974,17 +968,17 @@ i32.lt_u if i32.const 0 - local.set $3 + local.set $2 local.get $1 i32.const 8 i32.div_u - local.set $4 + local.set $3 else local.get $1 call $~lib/allocator/tlsf/fls - local.set $3 + local.set $2 local.get $1 - local.get $3 + local.get $2 global.get $~lib/allocator/tlsf/SL_BITS i32.sub i32.shr_u @@ -992,43 +986,43 @@ global.get $~lib/allocator/tlsf/SL_BITS i32.shl i32.xor - local.set $4 - local.get $3 + local.set $3 + local.get $2 global.get $~lib/allocator/tlsf/SB_BITS i32.const 1 i32.sub i32.sub - local.set $3 - local.get $4 + local.set $2 + local.get $3 global.get $~lib/allocator/tlsf/SL_SIZE i32.const 1 i32.sub i32.lt_u if - local.get $4 - i32.const 1 - i32.add - local.set $4 - else local.get $3 i32.const 1 i32.add local.set $3 + else + local.get $2 + i32.const 1 + i32.add + local.set $2 i32.const 0 - local.set $4 + local.set $3 end end local.get $0 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#getSLMap i32.const 0 i32.const -1 i32.xor - local.get $4 + local.get $3 i32.shl i32.and - local.set $5 - local.get $5 + local.set $4 + local.get $4 i32.eqz if local.get $0 @@ -1036,23 +1030,23 @@ i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.const 1 i32.add i32.shl i32.and - local.set $2 - local.get $2 + local.set $6 + local.get $6 i32.eqz if i32.const 0 - local.set $6 + local.set $5 else - local.get $2 + local.get $6 call $~lib/allocator/tlsf/ffs - local.set $3 + local.set $2 local.get $0 - local.get $3 + local.get $2 call $~lib/allocator/tlsf/Root#getSLMap local.tee $7 if (result i32) @@ -1065,23 +1059,23 @@ call $~lib/builtins/abort unreachable end - local.set $5 + local.set $4 local.get $0 - local.get $3 - local.get $5 + local.get $2 + local.get $4 call $~lib/allocator/tlsf/ffs call $~lib/allocator/tlsf/Root#getHead - local.set $6 + local.set $5 end else local.get $0 - local.get $3 - local.get $5 + local.get $2 + local.get $4 call $~lib/allocator/tlsf/ffs call $~lib/allocator/tlsf/Root#getHead - local.set $6 + local.set $5 end - local.get $6 + local.get $5 ) (func $~lib/allocator/tlsf/Root#use (; 20 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -1105,13 +1099,12 @@ local.get $2 global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.ge_u - local.tee $4 if (result i32) local.get $2 global.get $~lib/allocator/tlsf/Block.MAX_SIZE i32.lt_u else - local.get $4 + i32.const 0 end i32.eqz if @@ -1145,8 +1138,8 @@ i32.and local.get $2 i32.sub - local.set $5 - local.get $5 + local.set $4 + local.get $4 global.get $~lib/allocator/tlsf/Block.INFO global.get $~lib/allocator/tlsf/Block.MIN_SIZE i32.add @@ -1164,16 +1157,16 @@ i32.add local.get $2 i32.add - local.set $4 - local.get $4 + local.set $5 local.get $5 + local.get $4 global.get $~lib/allocator/tlsf/Block.INFO i32.sub global.get $~lib/allocator/tlsf/FREE i32.or i32.store local.get $0 - local.get $4 + local.get $5 call $~lib/allocator/tlsf/Root#insert else local.get $1 @@ -1185,7 +1178,7 @@ i32.store local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $4 + local.tee $5 i32.eqz if (result i32) i32.const 0 @@ -1195,11 +1188,11 @@ call $~lib/builtins/abort unreachable else - local.get $4 + local.get $5 end - local.set $4 - local.get $4 - local.get $4 + local.set $5 + local.get $5 + local.get $5 i32.load global.get $~lib/allocator/tlsf/LEFT_FREE i32.const -1 @@ -1249,7 +1242,6 @@ local.get $4 local.get $3 i32.gt_s - local.tee $5 if (result i32) local.get $4 local.get $3 @@ -1258,7 +1250,7 @@ i32.const 0 i32.lt_s else - local.get $5 + i32.const 0 end if unreachable diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index bf17eb5c..8194d76d 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -469,35 +469,33 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=4 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i32.load8_u local.get $1 i32.const 255 i32.and i32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=4 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -764,8 +762,7 @@ i32.gt_u select i32.ge_u - local.tee $1 - if + if (result i32) local.get $0 i32.load offset=20 local.get $0 @@ -775,9 +772,9 @@ f64.mul i32.trunc_f64_s i32.lt_s - local.set $1 + else + i32.const 0 end - local.get $1 if local.get $0 local.get $2 @@ -1312,8 +1309,7 @@ i32.gt_u select i32.ge_u - local.tee $1 - if + if (result i32) local.get $0 i32.load offset=20 local.get $0 @@ -1323,9 +1319,9 @@ f64.mul i32.trunc_f64_s i32.lt_s - local.set $1 + else + i32.const 0 end - local.get $1 if local.get $0 local.get $2 @@ -1616,35 +1612,33 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=4 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i32.load16_u local.get $1 i32.const 65535 i32.and i32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=4 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -1947,8 +1941,7 @@ i32.gt_u select i32.ge_u - local.tee $1 - if + if (result i32) local.get $0 i32.load offset=20 local.get $0 @@ -1958,9 +1951,9 @@ f64.mul i32.trunc_f64_s i32.lt_s - local.set $1 + else + i32.const 0 end - local.get $1 if local.get $0 local.get $2 @@ -2531,8 +2524,7 @@ i32.gt_u select i32.ge_u - local.tee $1 - if + if (result i32) local.get $0 i32.load offset=20 local.get $0 @@ -2542,9 +2534,9 @@ f64.mul i32.trunc_f64_s i32.lt_s - local.set $1 + else + i32.const 0 end - local.get $1 if local.get $0 local.get $2 @@ -2866,33 +2858,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=4 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i32.load local.get $1 i32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=4 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -3133,7 +3123,6 @@ i32.gt_u select i32.ge_u - local.tee $1 if (result i32) local.get $0 i32.load offset=20 @@ -3145,7 +3134,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $1 + i32.const 0 end if local.get $0 @@ -3811,33 +3800,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=8 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i64.load local.get $1 i64.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=8 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -4079,7 +4066,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -4091,7 +4077,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -4656,33 +4642,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=4 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 f32.load local.get $1 f32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=4 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -4928,7 +4912,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -4940,7 +4923,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -5232,33 +5215,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=8 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 f64.load local.get $1 f64.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=8 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -5504,7 +5485,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -5516,7 +5496,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -5781,7 +5761,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -5805,19 +5785,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 69 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 160 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -5853,15 +5829,13 @@ (local $4 i32) local.get $0 local.tee $2 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $2 i32.const 160 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index a650f319..02b1cb55 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -603,7 +603,6 @@ ) (func $~lib/set/Set#find (; 14 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -625,7 +624,6 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load8_s @@ -636,7 +634,7 @@ i32.shr_s i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -1007,7 +1005,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -1019,7 +1016,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -1416,7 +1413,6 @@ ) (func $~lib/set/Set#find (; 23 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -1438,7 +1434,6 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load8_u @@ -1447,7 +1442,7 @@ i32.and i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -1812,7 +1807,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -1824,7 +1818,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -2243,7 +2237,6 @@ ) (func $~lib/set/Set#find (; 33 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -2265,7 +2258,6 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load16_s @@ -2276,7 +2268,7 @@ i32.shr_s i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -2647,7 +2639,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -2659,7 +2650,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -3056,7 +3047,6 @@ ) (func $~lib/set/Set#find (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -3078,7 +3068,6 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load16_u @@ -3087,7 +3076,7 @@ i32.and i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -3452,7 +3441,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -3464,7 +3452,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -3903,7 +3891,6 @@ ) (func $~lib/set/Set#find (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -3925,14 +3912,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load local.get $1 i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -4291,7 +4277,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -4303,7 +4288,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -4700,7 +4685,6 @@ ) (func $~lib/set/Set#find (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -4722,14 +4706,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load local.get $1 i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -5088,7 +5071,6 @@ i32.gt_u select i32.ge_u - local.tee $2 if (result i32) local.get $0 i32.load offset=20 @@ -5100,7 +5082,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $2 + i32.const 0 end if local.get $0 @@ -5585,7 +5567,6 @@ ) (func $~lib/set/Set#find (; 71 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -5607,14 +5588,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i64.load local.get $1 i64.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -5976,7 +5956,6 @@ i32.gt_u select i32.ge_u - local.tee $5 if (result i32) local.get $0 i32.load offset=20 @@ -5988,7 +5967,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $5 + i32.const 0 end if local.get $0 @@ -6385,7 +6364,6 @@ ) (func $~lib/set/Set#find (; 80 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -6407,14 +6385,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i64.load local.get $1 i64.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -6776,7 +6753,6 @@ i32.gt_u select i32.ge_u - local.tee $5 if (result i32) local.get $0 i32.load offset=20 @@ -6788,7 +6764,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $5 + i32.const 0 end if local.get $0 @@ -7185,7 +7161,6 @@ ) (func $~lib/set/Set#find (; 89 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -7207,14 +7182,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 f32.load local.get $1 f32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -7580,7 +7554,6 @@ i32.gt_u select i32.ge_u - local.tee $5 if (result i32) local.get $0 i32.load offset=20 @@ -7592,7 +7565,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $5 + i32.const 0 end if local.get $0 @@ -7989,7 +7962,6 @@ ) (func $~lib/set/Set#find (; 98 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -8011,14 +7983,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 f64.load local.get $1 f64.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -8384,7 +8355,6 @@ i32.gt_u select i32.ge_u - local.tee $5 if (result i32) local.get $0 i32.load offset=20 @@ -8396,7 +8366,7 @@ i32.trunc_f64_s i32.lt_s else - local.get $5 + i32.const 0 end if local.get $0 @@ -8727,7 +8697,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -8752,14 +8722,12 @@ ) (func $~lib/runtime/runtime.flags (; 107 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index a8e8b03a..8c54411a 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -1030,7 +1030,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -1054,19 +1054,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 456 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -1157,15 +1153,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 456 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/static-array.untouched.wat b/tests/compiler/std/static-array.untouched.wat index 420582c1..be3f14d9 100644 --- a/tests/compiler/std/static-array.untouched.wat +++ b/tests/compiler/std/static-array.untouched.wat @@ -1305,7 +1305,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -1330,14 +1330,12 @@ ) (func $~lib/runtime/runtime.flags (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/string-utf8.optimized.wat b/tests/compiler/std/string-utf8.optimized.wat index c2c17d77..f7a404ca 100644 --- a/tests/compiler/std/string-utf8.optimized.wat +++ b/tests/compiler/std/string-utf8.optimized.wat @@ -56,10 +56,10 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 + local.set $3 loop $continue|0 local.get $2 - local.get $4 + local.get $3 i32.lt_u if local.get $2 @@ -68,7 +68,7 @@ local.get $0 i32.add i32.load16_u - local.tee $3 + local.tee $4 i32.const 128 i32.lt_u if (result i32) @@ -80,7 +80,7 @@ i32.const 1 i32.add else - local.get $3 + local.get $4 i32.const 2048 i32.lt_u if (result i32) @@ -92,23 +92,18 @@ i32.const 1 i32.add else - block (result i32) - local.get $3 - i32.const 64512 - i32.and - i32.const 55296 - i32.eq - local.tee $3 - if - local.get $2 - i32.const 1 - i32.add - local.get $4 - i32.lt_u - local.set $3 - end - local.get $3 - end + local.get $2 + i32.const 1 + i32.add + local.get $3 + i32.lt_u + i32.const 0 + local.get $4 + i32.const 64512 + i32.and + i32.const 55296 + i32.eq + select if (result i32) local.get $2 i32.const 1 @@ -123,7 +118,7 @@ i32.const 56320 i32.eq else - local.get $3 + i32.const 0 end if (result i32) local.get $1 @@ -230,10 +225,10 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $7 + local.set $6 loop $continue|0 local.get $4 - local.get $7 + local.get $6 i32.lt_u if local.get $4 @@ -284,21 +279,18 @@ local.get $5 i32.add local.set $3 + local.get $4 + i32.const 1 + i32.add + local.get $6 + i32.lt_u + i32.const 0 local.get $1 i32.const 64512 i32.and i32.const 55296 i32.eq - local.tee $6 - if (result i32) - local.get $4 - i32.const 1 - i32.add - local.get $7 - i32.lt_u - else - local.get $6 - end + select if local.get $4 i32.const 1 @@ -308,7 +300,7 @@ local.get $0 i32.add i32.load16_u - local.tee $6 + local.tee $7 i32.const 64512 i32.and i32.const 56320 @@ -322,7 +314,7 @@ i32.shl i32.const 65536 i32.add - local.get $6 + local.get $7 i32.const 1023 i32.and i32.add @@ -663,35 +655,32 @@ i32.lt_u if local.get $2 - local.tee $3 + local.tee $4 i32.const 1 i32.add local.set $2 local.get $0 - local.get $3 + local.get $4 i32.add i32.load8_u - local.tee $4 + local.tee $3 i32.const 128 i32.lt_u if local.get $5 local.get $6 i32.add - local.get $4 + local.get $3 i32.store16 else - local.get $4 + local.get $3 + i32.const 224 + i32.lt_u + i32.const 0 + local.get $3 i32.const 191 i32.gt_u - local.tee $3 - if - local.get $4 - i32.const 224 - i32.lt_u - local.set $3 - end - local.get $3 + select if local.get $2 i32.const 1 @@ -707,7 +696,7 @@ unreachable end local.get $2 - local.tee $3 + local.tee $4 i32.const 1 i32.add local.set $2 @@ -715,12 +704,12 @@ local.get $6 i32.add local.get $0 - local.get $3 + local.get $4 i32.add i32.load8_u i32.const 63 i32.and - local.get $4 + local.get $3 i32.const 31 i32.and i32.const 6 @@ -728,17 +717,14 @@ i32.or i32.store16 else - local.get $4 + local.get $3 + i32.const 365 + i32.lt_u + i32.const 0 + local.get $3 i32.const 239 i32.gt_u - local.tee $3 - if - local.get $4 - i32.const 365 - i32.lt_u - local.set $3 - end - local.get $3 + select if local.get $2 i32.const 3 @@ -753,7 +739,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 7 i32.and i32.const 18 @@ -779,11 +765,11 @@ i32.const 6 i32.shl i32.or - local.set $3 + local.set $4 local.get $2 i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 1 i32.add local.set $2 @@ -791,16 +777,16 @@ local.get $6 i32.add local.get $0 - local.get $4 + local.get $3 i32.add i32.load8_u i32.const 63 i32.and - local.get $3 + local.get $4 i32.or i32.const 65536 i32.sub - local.tee $3 + local.tee $4 i32.const 10 i32.shr_u i32.const 55296 @@ -812,7 +798,7 @@ i32.add local.tee $5 i32.add - local.get $3 + local.get $4 i32.const 1023 i32.and i32.const 56320 @@ -832,7 +818,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 15 i32.and i32.const 12 @@ -846,11 +832,11 @@ i32.const 6 i32.shl i32.or - local.set $3 + local.set $4 local.get $2 i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 1 i32.add local.set $2 @@ -858,12 +844,12 @@ local.get $6 i32.add local.get $0 - local.get $4 + local.get $3 i32.add i32.load8_u i32.const 63 i32.and - local.get $3 + local.get $4 i32.or i32.store16 end @@ -910,7 +896,7 @@ local.tee $3 i32.eqz else - local.get $2 + i32.const 0 end if local.get $2 @@ -939,15 +925,11 @@ i32.const 1 return end - local.get $0 + local.get $1 i32.eqz - local.tee $2 - if (result i32) - local.get $2 - else - local.get $1 - i32.eqz - end + i32.const 1 + local.get $0 + select if i32.const 0 return @@ -1233,7 +1215,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -1257,19 +1239,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 360 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -1304,15 +1282,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 360 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/string-utf8.untouched.wat b/tests/compiler/std/string-utf8.untouched.wat index dc5492f8..2ae5f61b 100644 --- a/tests/compiler/std/string-utf8.untouched.wat +++ b/tests/compiler/std/string-utf8.untouched.wat @@ -55,7 +55,6 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) i32.const 1 local.set $1 i32.const 0 @@ -108,7 +107,6 @@ i32.and i32.const 55296 i32.eq - local.tee $5 if (result i32) local.get $2 i32.const 1 @@ -116,9 +114,8 @@ local.get $3 i32.lt_u else - local.get $5 + i32.const 0 end - local.tee $5 if (result i32) local.get $0 local.get $2 @@ -133,7 +130,7 @@ i32.const 56320 i32.eq else - local.get $5 + i32.const 0 end if local.get $1 @@ -338,7 +335,6 @@ i32.and i32.const 55296 i32.eq - local.tee $7 if (result i32) local.get $2 i32.const 1 @@ -346,7 +342,7 @@ local.get $3 i32.lt_u else - local.get $7 + i32.const 0 end if local.get $0 @@ -803,13 +799,12 @@ local.get $5 i32.const 191 i32.gt_u - local.tee $6 if (result i32) local.get $5 i32.const 224 i32.lt_u else - local.get $6 + i32.const 0 end if local.get $2 @@ -857,13 +852,12 @@ local.get $5 i32.const 239 i32.gt_u - local.tee $6 if (result i32) local.get $5 i32.const 365 i32.lt_u else - local.get $6 + i32.const 0 end if local.get $2 @@ -1081,7 +1075,7 @@ local.tee $5 i32.eqz else - local.get $4 + i32.const 0 end if block @@ -1106,7 +1100,6 @@ ) (func $~lib/string/String.__eq (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - (local $3 i32) local.get $0 local.get $1 i32.eq @@ -1117,9 +1110,8 @@ local.get $0 i32.const 0 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -1131,8 +1123,8 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 - local.get $3 + local.set $2 + local.get $2 local.get $1 call $~lib/string/String#get:length i32.ne @@ -1144,7 +1136,7 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 + local.get $2 call $~lib/util/string/compareImpl i32.eqz ) @@ -1432,7 +1424,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -1457,14 +1449,12 @@ ) (func $~lib/runtime/runtime.flags (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index c81d1902..203a3b56 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -493,33 +493,35 @@ i32.shl local.get $0 i32.add + local.set $0 + local.get $2 local.set $1 loop $continue|0 local.get $3 if (result i32) - local.get $1 + local.get $0 i32.load16_u - local.get $2 + local.get $1 i32.load16_u i32.sub local.tee $4 i32.eqz else - local.get $3 + i32.const 0 end if local.get $3 i32.const 1 i32.sub local.set $3 + local.get $0 + i32.const 2 + i32.add + local.set $0 local.get $1 i32.const 2 i32.add local.set $1 - local.get $2 - i32.const 2 - i32.add - local.set $2 br $continue|0 end end @@ -534,15 +536,11 @@ i32.const 1 return end - local.get $0 + local.get $1 i32.eqz - local.tee $2 - if (result i32) - local.get $2 - else - local.get $1 - i32.eqz - end + i32.const 1 + local.get $0 + select if i32.const 0 return @@ -1041,9 +1039,8 @@ i32.shl local.tee $5 i32.lt_u - local.tee $1 if (result i32) - local.get $1 + i32.const 1 else local.get $3 i32.eqz @@ -1125,7 +1122,7 @@ local.get $1 i32.const 1 i32.shl - local.tee $5 + local.tee $4 local.get $0 i32.const 16 i32.sub @@ -1134,11 +1131,10 @@ i32.shr_u i32.const 1 i32.shl - local.tee $4 - i32.lt_u local.tee $1 + i32.lt_u if (result i32) - local.get $1 + i32.const 1 else local.get $3 i32.eqz @@ -1147,23 +1143,23 @@ local.get $0 return end - local.get $5 + local.get $4 call $~lib/util/runtime/allocate - local.tee $1 + local.tee $5 local.get $0 - local.get $4 + local.get $1 call $~lib/memory/memory.copy - local.get $5 local.get $4 + local.get $1 i32.sub local.tee $0 local.get $3 i32.gt_u if local.get $1 - local.get $4 + local.get $5 i32.add - local.tee $4 + local.tee $1 local.get $2 local.get $3 local.get $0 @@ -1171,11 +1167,11 @@ i32.sub local.get $3 i32.div_u - local.tee $5 + local.tee $4 call $~lib/memory/memory.repeat - local.get $4 + local.get $1 local.get $3 - local.get $5 + local.get $4 i32.mul local.tee $3 i32.add @@ -1186,13 +1182,13 @@ call $~lib/memory/memory.copy else local.get $1 - local.get $4 + local.get $5 i32.add local.get $2 local.get $0 call $~lib/memory/memory.copy end - local.get $1 + local.get $5 i32.const 16 call $~lib/util/runtime/register ) @@ -1283,9 +1279,8 @@ (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 f64) (local $5 f64) - (local $6 f64) local.get $0 i32.const 16 i32.sub @@ -1343,18 +1338,15 @@ end f64.const 1 end - local.set $6 + local.set $5 + local.get $2 + i32.const 2 + i32.gt_s + i32.const 0 local.get $1 i32.const 48 i32.eq - local.tee $1 - if - local.get $2 - i32.const 2 - i32.gt_s - local.set $1 - end - local.get $1 + select if (result i32) block $break|0 (result i32) block $case6|0 @@ -1429,7 +1421,7 @@ else i32.const 10 end - local.set $4 + local.set $3 loop $continue|1 block $break|1 local.get $2 @@ -1441,68 +1433,61 @@ if local.get $0 i32.load16_u - local.tee $3 + local.tee $1 i32.const 48 i32.ge_s - local.tee $1 - if - local.get $3 + if (result i32) + local.get $1 i32.const 57 i32.le_s - local.set $1 + else + i32.const 0 end - local.get $1 if (result i32) - local.get $3 + local.get $1 i32.const 48 i32.sub else - local.get $3 + local.get $1 + i32.const 90 + i32.le_s + i32.const 0 + local.get $1 i32.const 65 i32.ge_s - local.tee $1 - if - local.get $3 - i32.const 90 - i32.le_s - local.set $1 - end - local.get $1 + select if (result i32) - local.get $3 + local.get $1 i32.const 55 i32.sub else - local.get $3 + local.get $1 + i32.const 122 + i32.le_s + i32.const 0 + local.get $1 i32.const 97 i32.ge_s - local.tee $1 - if - local.get $3 - i32.const 122 - i32.le_s - local.set $1 - end - local.get $1 + select i32.eqz br_if $break|1 - local.get $3 + local.get $1 i32.const 87 i32.sub end end local.tee $1 - local.get $4 + local.get $3 i32.ge_s br_if $break|1 - local.get $5 local.get $4 + local.get $3 f64.convert_i32_s f64.mul local.get $1 f64.convert_i32_s f64.add - local.set $5 + local.set $4 local.get $0 i32.const 2 i32.add @@ -1511,8 +1496,8 @@ end end end - local.get $6 local.get $5 + local.get $4 f64.mul ) (func $~lib/string/parseFloat (; 17 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) @@ -1521,7 +1506,6 @@ (local $3 f64) (local $4 f64) (local $5 f64) - (local $6 i32) local.get $0 i32.const 16 i32.sub @@ -1615,9 +1599,8 @@ local.tee $1 i32.const 69 i32.eq - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $1 i32.const 101 @@ -1751,26 +1734,17 @@ (func $~lib/string/String.__gt (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - block (result i32) - local.get $0 - local.get $1 - i32.eq - local.tee $2 - i32.eqz - if - local.get $0 - i32.eqz - local.set $2 - end - local.get $2 - i32.eqz - end - if (result i32) - local.get $1 - i32.eqz - else - local.get $2 - end + i32.const 1 + local.get $1 + i32.eqz + i32.const 1 + local.get $0 + i32.eqz + local.get $0 + local.get $1 + i32.eq + select + select if i32.const 0 return @@ -1816,26 +1790,17 @@ (func $~lib/string/String.__lt (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - block (result i32) - local.get $0 - local.get $1 - i32.eq - local.tee $2 - i32.eqz - if - local.get $0 - i32.eqz - local.set $2 - end - local.get $2 - i32.eqz - end - if (result i32) - local.get $1 - i32.eqz - else - local.get $2 - end + i32.const 1 + local.get $1 + i32.eqz + i32.const 1 + local.get $0 + i32.eqz + local.get $0 + local.get $1 + i32.eq + select + select if i32.const 0 return @@ -1909,15 +1874,14 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $3 + local.set $2 local.get $1 i32.const 0 i32.lt_s - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else - local.get $3 + local.get $2 i64.extend_i32_s local.get $1 i64.extend_i32_s @@ -1933,15 +1897,11 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $2 i32.eqz - local.tee $2 - if (result i32) - local.get $2 - else - local.get $3 - i32.eqz - end + i32.const 1 + local.get $1 + select if i32.const 120 return @@ -1954,19 +1914,19 @@ return end local.get $1 - local.get $3 + local.get $2 i32.mul i32.const 1 i32.shl call $~lib/util/runtime/allocate - local.tee $2 + local.tee $3 local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shl local.get $1 call $~lib/memory/memory.repeat - local.get $2 + local.get $3 i32.const 16 call $~lib/util/runtime/register ) @@ -2602,11 +2562,6 @@ call $~lib/util/runtime/makeArray local.set $2 loop $continue|1 - local.get $1 - i32.eqz - if - unreachable - end local.get $0 local.get $1 local.get $4 @@ -3469,41 +3424,36 @@ i32.load16_u local.set $4 loop $continue|2 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 local.get $1 local.get $9 i64.lt_u - local.tee $0 - if - local.get $5 + select + if (result i32) + i32.const 1 + local.get $9 local.get $1 i64.sub + local.get $1 local.get $3 - i64.ge_u - local.set $0 - end - local.get $0 - if + i64.add + local.get $9 + i64.sub + i64.gt_u local.get $1 local.get $3 i64.add local.get $9 i64.lt_u - local.tee $0 - i32.eqz - if - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.sub - i64.gt_u - local.set $0 - end + select + else + i32.const 0 end - local.get $0 if local.get $4 i32.const 1 @@ -3601,41 +3551,36 @@ i32.load16_u local.set $4 loop $continue|4 + local.get $5 + local.get $1 + i64.sub + local.get $10 + i64.ge_u + i32.const 0 local.get $1 local.get $3 i64.lt_u - local.tee $0 - if - local.get $5 + select + if (result i32) + i32.const 1 + local.get $3 local.get $1 i64.sub + local.get $1 local.get $10 - i64.ge_u - local.set $0 - end - local.get $0 - if + i64.add + local.get $3 + i64.sub + i64.gt_u local.get $1 local.get $10 i64.add local.get $3 i64.lt_u - local.tee $0 - i32.eqz - if - local.get $3 - local.get $1 - i64.sub - local.get $1 - local.get $10 - i64.add - local.get $3 - i64.sub - i64.gt_u - local.set $0 - end + select + else + i32.const 0 end - local.get $0 if local.get $4 i32.const 1 @@ -3656,7 +3601,6 @@ ) (func $~lib/util/number/prettify (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $2 i32.eqz if @@ -3678,14 +3622,13 @@ i32.add local.tee $3 i32.le_s - local.tee $4 - if + if (result i32) local.get $3 i32.const 21 i32.le_s - local.set $4 + else + i32.const 0 end - local.get $4 if (result i32) loop $repeat|0 block $break|0 @@ -3718,17 +3661,14 @@ i32.const 2 i32.add else + local.get $3 + i32.const 21 + i32.le_s + i32.const 0 local.get $3 i32.const 0 i32.gt_s - local.tee $4 - if - local.get $3 - i32.const 21 - i32.le_s - local.set $4 - end - local.get $4 + select if (result i32) local.get $3 i32.const 1 @@ -3752,22 +3692,19 @@ i32.const 1 i32.add else + local.get $3 + i32.const 0 + i32.le_s + i32.const 0 i32.const -6 local.get $3 i32.lt_s - local.tee $2 - if - local.get $3 - i32.const 0 - i32.le_s - local.set $2 - end - local.get $2 + select if (result i32) i32.const 2 local.get $3 i32.sub - local.tee $4 + local.tee $3 i32.const 1 i32.shl local.get $0 @@ -3785,7 +3722,7 @@ loop $repeat|1 block $break|1 local.get $2 - local.get $4 + local.get $3 i32.ge_s br_if $break|1 local.get $2 @@ -3803,7 +3740,7 @@ end end local.get $1 - local.get $4 + local.get $3 i32.add else local.get $1 @@ -3882,7 +3819,7 @@ local.tee $0 i32.const 0 i32.lt_s - local.tee $4 + local.tee $3 if i32.const 0 local.get $0 @@ -3900,7 +3837,7 @@ local.get $2 i32.const 45 i32.const 43 - local.get $4 + local.get $3 select i32.store16 local.get $0 @@ -4204,7 +4141,6 @@ (func $~lib/string/String#substring (; 45 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) local.get $0 i32.eqz if @@ -4240,34 +4176,34 @@ local.get $2 i32.lt_s select - local.tee $1 + local.tee $2 local.get $3 - local.get $1 + local.get $2 i32.gt_s select i32.const 1 i32.shl - local.tee $4 + local.tee $1 local.get $3 - local.get $1 + local.get $2 local.get $3 - local.get $1 + local.get $2 i32.lt_s select i32.const 1 i32.shl - local.tee $2 - i32.sub local.tee $3 + i32.sub + local.tee $2 i32.eqz if i32.const 120 return end - local.get $2 - i32.eqz - local.tee $1 - if + local.get $3 + if (result i32) + i32.const 0 + else local.get $0 i32.const 16 i32.sub @@ -4276,22 +4212,20 @@ i32.shr_u i32.const 1 i32.shl - local.get $4 + local.get $1 i32.eq - local.set $1 end - local.get $1 if local.get $0 return end - local.get $3 + local.get $2 call $~lib/util/runtime/allocate local.tee $1 local.get $0 - local.get $2 - i32.add local.get $3 + i32.add + local.get $2 call $~lib/memory/memory.copy local.get $1 i32.const 16 @@ -5912,16 +5846,15 @@ i32.load offset=12 i32.const 1 i32.eq - local.tee $0 - if + if (result i32) global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get i32.const 120 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -5955,16 +5888,15 @@ i32.load offset=12 i32.const 1 i32.eq - local.tee $0 - if + if (result i32) global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get i32.const 120 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -5983,16 +5915,15 @@ i32.load offset=12 i32.const 1 i32.eq - local.tee $0 - if + if (result i32) global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get i32.const 1968 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6007,42 +5938,37 @@ i32.const 2147483647 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 3 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 3 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 2 call $~lib/array/Array<~lib/string/String>#__get i32.const 2024 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6057,42 +5983,37 @@ i32.const 2147483647 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 3 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 3 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 2 call $~lib/array/Array<~lib/string/String>#__get i32.const 2024 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6107,53 +6028,46 @@ i32.const 2147483647 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 4 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 120 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 4 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) + global.get $std/string/sa + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 120 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 3 call $~lib/array/Array<~lib/string/String>#__get i32.const 2024 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6168,53 +6082,46 @@ i32.const 2147483647 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 4 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 120 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 4 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 120 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) + global.get $std/string/sa + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 3 call $~lib/array/Array<~lib/string/String>#__get i32.const 2024 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6229,53 +6136,46 @@ i32.const 2147483647 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 4 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 2024 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 4 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) + global.get $std/string/sa + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 2024 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 3 call $~lib/array/Array<~lib/string/String>#__get i32.const 120 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6290,42 +6190,37 @@ i32.const 2147483647 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 3 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 3 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 2 call $~lib/array/Array<~lib/string/String>#__get i32.const 2024 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6359,16 +6254,15 @@ i32.load offset=12 i32.const 1 i32.eq - local.tee $0 - if + if (result i32) global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get i32.const 160 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6387,16 +6281,15 @@ i32.load offset=12 i32.const 1 i32.eq - local.tee $0 - if + if (result i32) global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get i32.const 160 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6411,42 +6304,37 @@ i32.const 4 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 3 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 3 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 2 call $~lib/array/Array<~lib/string/String>#__get i32.const 2024 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6461,42 +6349,37 @@ i32.const -1 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 3 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 3 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 2 call $~lib/array/Array<~lib/string/String>#__get i32.const 2024 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -6511,42 +6394,37 @@ i32.const -1 call $~lib/string/String#split global.set $std/string/sa - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=12 - i32.const 3 - i32.eq - local.tee $0 - if - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 160 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1152 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 + global.get $std/string/sa + i32.load offset=12 + i32.const 3 + i32.eq + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 160 + call $~lib/string/String.__eq + else + i32.const 0 end - if + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1152 + call $~lib/string/String.__eq + else + i32.const 0 + end + if (result i32) global.get $std/string/sa i32.const 2 call $~lib/array/Array<~lib/string/String>#__get i32.const 2024 call $~lib/string/String.__eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -7755,7 +7633,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -7779,19 +7657,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 6744 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -7827,15 +7701,13 @@ (local $4 i32) local.get $0 local.tee $2 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $2 i32.const 6744 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index 940885c0..93d8323d 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -245,13 +245,11 @@ i32.load16_u ) (func $~lib/string/String.__not (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 i32.const 0 i32.eq - local.tee $1 if (result i32) - local.get $1 + i32.const 1 else local.get $0 call $~lib/string/String#get:length @@ -459,7 +457,7 @@ local.tee $5 i32.eqz else - local.get $4 + i32.const 0 end if block @@ -484,7 +482,6 @@ ) (func $~lib/string/String.__eq (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - (local $3 i32) local.get $0 local.get $1 i32.eq @@ -495,9 +492,8 @@ local.get $0 i32.const 0 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -509,8 +505,8 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 - local.get $3 + local.set $2 + local.get $2 local.get $1 call $~lib/string/String#get:length i32.ne @@ -522,7 +518,7 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 + local.get $2 call $~lib/util/string/compareImpl i32.eqz ) @@ -1093,9 +1089,8 @@ local.get $4 local.get $3 i32.lt_u - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $5 i32.eqz @@ -1107,52 +1102,52 @@ local.get $4 local.get $3 i32.sub - local.set $7 + local.set $6 local.get $4 call $~lib/util/runtime/allocate - local.set $8 - local.get $7 + local.set $7 + local.get $6 local.get $5 i32.gt_u if - local.get $7 + local.get $6 i32.const 2 i32.sub local.get $5 i32.div_u - local.set $6 - local.get $6 + local.set $8 + local.get $8 local.get $5 i32.mul local.set $9 - local.get $7 + local.get $6 local.get $9 i32.sub local.set $10 - local.get $8 + local.get $7 local.get $2 local.get $5 - local.get $6 - call $~lib/memory/memory.repeat local.get $8 + call $~lib/memory/memory.repeat + local.get $7 local.get $9 i32.add local.get $2 local.get $10 call $~lib/memory/memory.copy else - local.get $8 - local.get $2 local.get $7 + local.get $2 + local.get $6 call $~lib/memory/memory.copy end - local.get $8 local.get $7 + local.get $6 i32.add local.get $0 local.get $3 call $~lib/memory/memory.copy - local.get $8 + local.get $7 i32.const 16 call $~lib/util/runtime/register ) @@ -1194,9 +1189,8 @@ local.get $4 local.get $3 i32.lt_u - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $5 i32.eqz @@ -1208,40 +1202,40 @@ local.get $4 local.get $3 i32.sub - local.set $7 + local.set $6 local.get $4 call $~lib/util/runtime/allocate - local.set $8 - local.get $8 + local.set $7 + local.get $7 local.get $0 local.get $3 call $~lib/memory/memory.copy - local.get $7 + local.get $6 local.get $5 i32.gt_u if - local.get $7 + local.get $6 i32.const 2 i32.sub local.get $5 i32.div_u - local.set $6 - local.get $6 + local.set $8 + local.get $8 local.get $5 i32.mul local.set $9 - local.get $7 + local.get $6 local.get $9 i32.sub local.set $10 - local.get $8 + local.get $7 local.get $3 i32.add local.get $2 local.get $5 - local.get $6 - call $~lib/memory/memory.repeat local.get $8 + call $~lib/memory/memory.repeat + local.get $7 local.get $3 i32.add local.get $9 @@ -1250,14 +1244,14 @@ local.get $10 call $~lib/memory/memory.copy else - local.get $8 + local.get $7 local.get $3 i32.add local.get $2 - local.get $7 + local.get $6 call $~lib/memory/memory.copy end - local.get $8 + local.get $7 i32.const 16 call $~lib/util/runtime/register ) @@ -1428,13 +1422,12 @@ local.get $4 i32.const 48 i32.eq - local.tee $6 if (result i32) local.get $2 i32.const 2 i32.gt_s else - local.get $6 + i32.const 0 end if block $break|0 @@ -1538,9 +1531,8 @@ local.get $1 i32.const 2 i32.lt_s - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $1 i32.const 36 @@ -1571,13 +1563,12 @@ local.get $4 i32.const 48 i32.ge_s - local.tee $6 if (result i32) local.get $4 i32.const 57 i32.le_s else - local.get $6 + i32.const 0 end if local.get $4 @@ -1588,13 +1579,12 @@ local.get $4 i32.const 65 i32.ge_s - local.tee $6 if (result i32) local.get $4 i32.const 90 i32.le_s else - local.get $6 + i32.const 0 end if local.get $4 @@ -1607,13 +1597,12 @@ local.get $4 i32.const 97 i32.ge_s - local.tee $6 if (result i32) local.get $4 i32.const 122 i32.le_s else - local.get $6 + i32.const 0 end if local.get $4 @@ -1774,9 +1763,8 @@ local.get $3 i32.const 69 i32.eq - local.tee $6 if (result i32) - local.get $6 + i32.const 1 else local.get $3 i32.const 101 @@ -1930,17 +1918,15 @@ local.get $0 local.get $1 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 i32.const 0 i32.eq end - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -1952,17 +1938,17 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 + local.set $2 local.get $1 call $~lib/string/String#get:length - local.set $4 - local.get $3 + local.set $3 + local.get $2 i32.eqz if i32.const 0 return end - local.get $4 + local.get $3 i32.eqz if i32.const 1 @@ -1972,11 +1958,11 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 - local.tee $2 - local.get $4 - local.tee $5 local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 local.get $5 i32.lt_s select @@ -1992,17 +1978,15 @@ local.get $0 local.get $1 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 i32.const 0 i32.eq end - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -2014,17 +1998,17 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 + local.set $2 local.get $1 call $~lib/string/String#get:length - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if i32.const 0 return end - local.get $3 + local.get $2 i32.eqz if i32.const 1 @@ -2034,11 +2018,11 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 - local.tee $2 - local.get $4 - local.tee $5 local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 local.get $5 i32.lt_s select @@ -2061,7 +2045,6 @@ (func $~lib/string/String#repeat (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) local.get $0 i32.const 0 i32.ne @@ -2080,9 +2063,8 @@ local.get $1 i32.const 0 i32.lt_s - local.tee $3 if (result i32) - local.get $3 + i32.const 1 else local.get $2 i64.extend_i32_s @@ -2105,9 +2087,8 @@ local.get $1 i32.const 0 i32.eq - local.tee $3 if (result i32) - local.get $3 + i32.const 1 else local.get $2 i32.eqz @@ -2129,15 +2110,15 @@ i32.const 1 i32.shl call $~lib/util/runtime/allocate - local.set $4 - local.get $4 + local.set $3 + local.get $3 local.get $0 local.get $2 i32.const 1 i32.shl local.get $1 call $~lib/memory/memory.repeat - local.get $4 + local.get $3 i32.const 16 call $~lib/util/runtime/register ) @@ -3031,12 +3012,6 @@ loop $continue|1 local.get $0 local.get $1 - local.tee $3 - if (result i32) - local.get $3 - else - unreachable - end local.get $11 call $~lib/string/String#indexOf local.tee $10 @@ -3909,7 +3884,6 @@ (local $24 i64) (local $25 i32) (local $26 i32) - (local $27 i32) i32.const 0 local.get $4 i32.sub @@ -4234,7 +4208,6 @@ local.get $23 local.get $21 i64.lt_u - local.tee $27 if (result i32) local.get $24 local.get $23 @@ -4242,18 +4215,16 @@ local.get $22 i64.ge_u else - local.get $27 + i32.const 0 end - local.tee $27 if (result i32) local.get $23 local.get $22 i64.add local.get $21 i64.lt_u - local.tee $27 if (result i32) - local.get $27 + i32.const 1 else local.get $21 local.get $23 @@ -4266,7 +4237,7 @@ i64.gt_u end else - local.get $27 + i32.const 0 end if block @@ -4396,7 +4367,6 @@ local.get $23 local.get $21 i64.lt_u - local.tee $20 if (result i32) local.get $24 local.get $23 @@ -4404,18 +4374,16 @@ local.get $22 i64.ge_u else - local.get $20 + i32.const 0 end - local.tee $20 if (result i32) local.get $23 local.get $22 i64.add local.get $21 i64.lt_u - local.tee $20 if (result i32) - local.get $20 + i32.const 1 else local.get $21 local.get $23 @@ -4428,7 +4396,7 @@ i64.gt_u end else - local.get $20 + i32.const 0 end if block @@ -4495,13 +4463,12 @@ local.get $1 local.get $3 i32.le_s - local.tee $4 if (result i32) local.get $3 i32.const 21 i32.le_s else - local.get $4 + i32.const 0 end if block $break|0 @@ -4548,13 +4515,12 @@ local.get $3 i32.const 0 i32.gt_s - local.tee $4 if (result i32) local.get $3 i32.const 21 i32.le_s else - local.get $4 + i32.const 0 end if local.get $0 @@ -4588,13 +4554,12 @@ i32.const -6 local.get $3 i32.lt_s - local.tee $4 if (result i32) local.get $3 i32.const 0 i32.le_s else - local.get $4 + i32.const 0 end if i32.const 2 @@ -5320,7 +5285,6 @@ end local.get $8 i32.eqz - local.tee $4 if (result i32) local.get $9 local.get $0 @@ -5329,7 +5293,7 @@ i32.shl i32.eq else - local.get $4 + i32.const 0 end if local.get $0 @@ -7045,7 +7009,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7053,7 +7016,7 @@ i32.const 120 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7091,7 +7054,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7099,7 +7061,7 @@ i32.const 120 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7119,7 +7081,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7127,7 +7088,7 @@ i32.const 1968 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7147,7 +7108,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7155,9 +7115,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7165,9 +7124,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7175,7 +7133,7 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7195,7 +7153,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7203,9 +7160,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7213,9 +7169,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7223,7 +7178,7 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7243,7 +7198,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7251,9 +7205,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7261,9 +7214,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7271,9 +7223,8 @@ i32.const 120 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 3 @@ -7281,7 +7232,7 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7301,7 +7252,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7309,9 +7259,8 @@ i32.const 120 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7319,9 +7268,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7329,9 +7277,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 3 @@ -7339,7 +7286,7 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7359,7 +7306,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 4 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7367,9 +7313,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7377,9 +7322,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7387,9 +7331,8 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 3 @@ -7397,7 +7340,7 @@ i32.const 120 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7417,7 +7360,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7425,9 +7367,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7435,9 +7376,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7445,7 +7385,7 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7483,7 +7423,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7491,7 +7430,7 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7511,7 +7450,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 1 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7519,7 +7457,7 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7539,7 +7477,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7547,9 +7484,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7557,9 +7493,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7567,7 +7502,7 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7587,7 +7522,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7595,9 +7529,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7605,9 +7538,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7615,7 +7547,7 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -7635,7 +7567,6 @@ call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq - local.tee $0 if (result i32) global.get $std/string/sa i32.const 0 @@ -7643,9 +7574,8 @@ i32.const 160 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 1 @@ -7653,9 +7583,8 @@ i32.const 1152 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/string/sa i32.const 2 @@ -7663,7 +7592,7 @@ i32.const 2024 call $~lib/string/String.__eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -8883,7 +8812,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -8908,14 +8837,12 @@ ) (func $~lib/runtime/runtime.flags (; 69 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index ebb11c3b..a9129fb9 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -568,7 +568,7 @@ local.tee $3 i32.eqz else - local.get $2 + i32.const 0 end if local.get $2 @@ -597,15 +597,11 @@ i32.const 1 return end - local.get $0 + local.get $1 i32.eqz - local.tee $2 - if (result i32) - local.get $2 - else - local.get $1 - i32.eqz - end + i32.const 1 + local.get $0 + select if i32.const 0 return @@ -645,33 +641,31 @@ i32.shl i32.add i32.load - local.set $1 + local.set $0 loop $continue|0 - local.get $1 + local.get $0 if - local.get $1 + local.get $0 i32.load offset=8 i32.const 1 i32.and - i32.eqz - local.tee $0 if (result i32) - local.get $1 + i32.const 0 + else + local.get $0 i32.load i32.const 24 call $~lib/string/String.__eq - else - local.get $0 end if - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.load offset=8 i32.const -2 i32.and - local.set $1 + local.set $0 br $continue|0 end end @@ -909,33 +903,31 @@ i32.shl i32.add i32.load - local.set $2 + local.set $0 loop $continue|0 - local.get $2 + local.get $0 if - local.get $2 + local.get $0 i32.load offset=8 i32.const 1 i32.and - i32.eqz - local.tee $0 - if - local.get $2 + if (result i32) + i32.const 0 + else + local.get $0 i32.load local.get $1 i32.eq - local.set $0 end - local.get $0 if - local.get $2 + local.get $0 return end - local.get $2 + local.get $0 i32.load offset=8 i32.const -2 i32.and - local.set $2 + local.set $0 br $continue|0 end end @@ -1202,18 +1194,14 @@ end ) (func $~lib/symbol/_Symbol.keyFor (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) global.get $~lib/symbol/idToString - i32.const 0 - i32.ne - local.tee $1 - if + if (result i32) global.get $~lib/symbol/idToString local.get $0 call $~lib/map/Map#has - local.set $1 + else + i32.const 0 end - local.get $1 if (result i32) global.get $~lib/symbol/idToString local.get $0 @@ -1454,7 +1442,7 @@ (local $1 i32) (local $2 i32) i32.const 208 - local.set $2 + local.set $1 i32.const 632 block $break|0 (result i32) block $case11|0 @@ -1473,12 +1461,12 @@ i32.ne if local.get $0 - local.tee $1 + local.tee $2 i32.const 2 i32.eq br_if $case1|0 block $tablify|0 - local.get $1 + local.get $2 i32.const 3 i32.sub br_table $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $tablify|0 @@ -1519,16 +1507,13 @@ br $break|0 end global.get $~lib/symbol/idToString - i32.const 0 - i32.ne - local.tee $1 - if + if (result i32) global.get $~lib/symbol/idToString local.get $0 call $~lib/map/Map#has - local.set $1 + else + i32.const 0 end - local.get $1 if (result i32) global.get $~lib/symbol/idToString local.get $0 @@ -1742,7 +1727,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -1766,19 +1751,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 944 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -1813,15 +1794,13 @@ (local $3 i32) (local $4 i32) local.get $0 - i32.eqz - local.tee $2 if (result i32) - local.get $2 - else local.get $0 i32.const 944 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/symbol.untouched.wat b/tests/compiler/std/symbol.untouched.wat index b004f6b7..d5a21860 100644 --- a/tests/compiler/std/symbol.untouched.wat +++ b/tests/compiler/std/symbol.untouched.wat @@ -724,7 +724,7 @@ local.tee $5 i32.eqz else - local.get $4 + i32.const 0 end if block @@ -749,7 +749,6 @@ ) (func $~lib/string/String.__eq (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - (local $3 i32) local.get $0 local.get $1 i32.eq @@ -760,9 +759,8 @@ local.get $0 i32.const 0 i32.eq - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $1 i32.const 0 @@ -774,8 +772,8 @@ end local.get $0 call $~lib/string/String#get:length - local.set $3 - local.get $3 + local.set $2 + local.get $2 local.get $1 call $~lib/string/String#get:length i32.ne @@ -787,13 +785,12 @@ i32.const 0 local.get $1 i32.const 0 - local.get $3 + local.get $2 call $~lib/util/string/compareImpl i32.eqz ) (func $~lib/map/Map<~lib/string/String,usize>#find (; 17 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -815,14 +812,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load local.get $1 call $~lib/string/String.__eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -1161,7 +1157,6 @@ ) (func $~lib/map/Map#find (; 23 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $2 @@ -1183,14 +1178,13 @@ i32.const 1 i32.and i32.eqz - local.tee $4 if (result i32) local.get $3 i32.load local.get $1 i32.eq else - local.get $4 + i32.const 0 end if local.get $3 @@ -1533,17 +1527,15 @@ end ) (func $~lib/symbol/_Symbol.keyFor (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) global.get $~lib/symbol/idToString i32.const 0 i32.ne - local.tee $1 if (result i32) global.get $~lib/symbol/idToString local.get $0 call $~lib/map/Map#has else - local.get $1 + i32.const 0 end if (result i32) global.get $~lib/symbol/idToString @@ -1983,13 +1975,12 @@ global.get $~lib/symbol/idToString i32.const 0 i32.ne - local.tee $3 if (result i32) global.get $~lib/symbol/idToString local.get $1 call $~lib/map/Map#has else - local.get $3 + i32.const 0 end if global.get $~lib/symbol/idToString @@ -2207,7 +2198,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -2232,14 +2223,12 @@ ) (func $~lib/runtime/runtime.flags (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 80bf5ac9..0042d0a3 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -7726,25 +7726,23 @@ (local $4 i32) local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 i32.const -2147483648 i32.and local.set $4 - local.get $3 + local.get $2 i32.const 23 i32.shr_u i32.const 255 i32.and - local.tee $2 + local.tee $3 i32.const 255 i32.eq - local.tee $1 - i32.eqz - if + if (result i32) + i32.const 1 + else i32.const 0 - local.set $1 end - local.get $1 if local.get $0 f32.const 2 @@ -7755,7 +7753,7 @@ return end block $folding-inner0 - local.get $3 + local.get $2 i32.const 1 i32.shl local.tee $1 @@ -7769,29 +7767,29 @@ local.get $0 return end - local.get $2 + local.get $3 if (result i32) - local.get $3 + local.get $2 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $3 - i32.const 1 local.get $2 + i32.const 1 local.get $3 + local.get $2 i32.const 9 i32.shl i32.clz i32.sub - local.tee $2 + local.tee $3 i32.sub i32.shl end local.set $1 loop $continue|0 - local.get $2 + local.get $3 i32.const 128 i32.gt_s if @@ -7812,10 +7810,10 @@ i32.const 1 i32.shl local.set $1 - local.get $2 + local.get $3 i32.const 1 i32.sub - local.set $2 + local.set $3 br $continue|0 end end @@ -7837,27 +7835,27 @@ i32.const 8 i32.shl i32.clz - local.tee $3 + local.tee $1 i32.shl - local.set $1 - local.get $2 + local.set $2 local.get $3 + local.get $1 i32.sub - local.tee $2 + local.tee $1 i32.const 0 i32.gt_s if (result i32) - local.get $1 + local.get $2 i32.const 8388608 i32.sub - local.get $2 + local.get $1 i32.const 23 i32.shl i32.or else - local.get $1 - i32.const 1 local.get $2 + i32.const 1 + local.get $1 i32.sub i32.shr_u end @@ -7964,29 +7962,26 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 i32) - (local $5 i64) + (local $4 i64) local.get $0 i64.reinterpret_f64 - local.tee $1 + local.tee $2 i64.const 63 i64.shr_u - local.set $5 - local.get $1 + local.set $4 + local.get $2 i64.const 52 i64.shr_u i64.const 2047 i64.and - local.tee $2 + local.tee $3 i64.const 2047 i64.eq - local.tee $4 - i32.eqz - if + if (result i32) + i32.const 1 + else i32.const 0 - local.set $4 end - local.get $4 if local.get $0 f64.const 2 @@ -7997,38 +7992,38 @@ return end block $folding-inner0 - local.get $1 + local.get $2 i64.const 1 i64.shl - local.tee $3 + local.tee $1 i64.const -9223372036854775808 i64.le_u if - local.get $3 + local.get $1 i64.const -9223372036854775808 i64.eq br_if $folding-inner0 local.get $0 return end - local.get $2 + local.get $3 i64.eqz if (result i64) - local.get $1 - i64.const 0 local.get $2 - local.get $1 + i64.const 0 + local.get $3 + local.get $2 i64.const 12 i64.shl i64.clz i64.sub - local.tee $2 + local.tee $3 i64.sub i64.const 1 i64.add i64.shl else - local.get $1 + local.get $2 i64.const 4503599627370495 i64.and i64.const 4503599627370496 @@ -8036,7 +8031,7 @@ end local.set $1 loop $continue|0 - local.get $2 + local.get $3 i64.const 1024 i64.gt_s if @@ -8057,10 +8052,10 @@ i64.const 1 i64.shl local.set $1 - local.get $2 + local.get $3 i64.const 1 i64.sub - local.set $2 + local.set $3 br $continue|0 end end @@ -8082,33 +8077,33 @@ i64.const 11 i64.shl i64.clz - local.tee $3 + local.tee $1 i64.shl - local.set $1 - local.get $2 + local.set $2 local.get $3 + local.get $1 i64.sub - local.tee $2 + local.tee $1 i64.const 0 i64.gt_s if (result i64) - local.get $1 + local.get $2 i64.const 4503599627370496 i64.sub - local.get $2 + local.get $1 i64.const 52 i64.shl i64.or else - local.get $1 - i64.const 0 local.get $2 + i64.const 0 + local.get $1 i64.sub i64.const 1 i64.add i64.shr_u end - local.get $5 + local.get $4 i64.const 63 i64.shl i64.or @@ -11913,43 +11908,38 @@ local.get $1 local.get $0 call $~lib/typedarray/Float64Array#sort - block (result i32) - block (result i32) - global.get $std/typedarray/af64 - i32.const 0 - call $~lib/typedarray/Float64Array#__get - f64.const 4 - f64.eq - local.tee $0 - if - global.get $std/typedarray/af64 - i32.const 1 - call $~lib/typedarray/Float64Array#__get - f64.const 5 - f64.eq - local.set $0 - end - local.get $0 - end - if - global.get $std/typedarray/af64 - i32.const 2 - call $~lib/typedarray/Float64Array#__get - f64.const 6 - f64.eq - local.set $0 - end - local.get $0 + global.get $std/typedarray/af64 + i32.const 0 + call $~lib/typedarray/Float64Array#__get + f64.const 4 + f64.eq + if (result i32) + global.get $std/typedarray/af64 + i32.const 1 + call $~lib/typedarray/Float64Array#__get + f64.const 5 + f64.eq + else + i32.const 0 end - if + if (result i32) + global.get $std/typedarray/af64 + i32.const 2 + call $~lib/typedarray/Float64Array#__get + f64.const 6 + f64.eq + else + i32.const 0 + end + if (result i32) global.get $std/typedarray/af64 i32.const 3 call $~lib/typedarray/Float64Array#__get f64.const 7 f64.eq - local.set $0 + else + i32.const 0 end - local.get $0 i32.eqz if i32.const 0 @@ -12738,7 +12728,7 @@ i32.load i32.le_u else - local.get $0 + i32.const 0 end if loop $continue|0 @@ -12762,19 +12752,15 @@ i32.const 0 ) (func $~lib/runtime/runtime.flags (; 263 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) local.get $0 - i32.eqz - local.tee $1 - i32.eqz - if + if (result i32) local.get $0 i32.const 1448 i32.load i32.gt_u - local.set $1 + else + i32.const 1 end - local.get $1 if (result i32) unreachable else @@ -12810,15 +12796,13 @@ (local $4 i32) local.get $0 local.tee $2 - i32.eqz - local.tee $0 if (result i32) - local.get $0 - else local.get $2 i32.const 1448 i32.load i32.gt_u + else + i32.const 1 end if (result i32) unreachable diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index 84d4f5e4..be12393a 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -7164,8 +7164,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 @@ -7294,8 +7292,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 @@ -7422,8 +7418,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 @@ -7552,8 +7546,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 @@ -7682,8 +7674,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 @@ -7808,8 +7798,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 @@ -7932,8 +7920,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Uint32Array,u32>|inlined.0 @@ -8056,8 +8042,6 @@ local.get $2 call_indirect (type $FUNCSIG$ijii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 @@ -8180,8 +8164,6 @@ local.get $2 call_indirect (type $FUNCSIG$ijii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Uint64Array,u64>|inlined.0 @@ -8304,8 +8286,6 @@ local.get $2 call_indirect (type $FUNCSIG$ifii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 @@ -8428,8 +8408,6 @@ local.get $2 call_indirect (type $FUNCSIG$idii) end - i32.const 0 - i32.ne if i32.const 1 br $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 @@ -8556,8 +8534,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0 @@ -8685,8 +8661,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0 @@ -8812,8 +8786,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 @@ -8941,8 +8913,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0 @@ -9070,8 +9040,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0 @@ -9195,8 +9163,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0 @@ -9318,8 +9284,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint32Array,u32>|inlined.0 @@ -9441,8 +9405,6 @@ local.get $2 call_indirect (type $FUNCSIG$ijii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0 @@ -9564,8 +9526,6 @@ local.get $2 call_indirect (type $FUNCSIG$ijii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint64Array,u64>|inlined.0 @@ -9687,8 +9647,6 @@ local.get $2 call_indirect (type $FUNCSIG$ifii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0 @@ -9810,8 +9768,6 @@ local.get $2 call_indirect (type $FUNCSIG$idii) end - i32.const 0 - i32.ne if local.get $5 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0 @@ -9941,8 +9897,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -10080,8 +10034,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -10217,8 +10169,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -10356,8 +10306,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -10495,8 +10443,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -10630,8 +10576,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -10763,8 +10707,6 @@ local.get $2 call_indirect (type $FUNCSIG$iiii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -10896,8 +10838,6 @@ local.get $2 call_indirect (type $FUNCSIG$ijii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -11029,8 +10969,6 @@ local.get $2 call_indirect (type $FUNCSIG$ijii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -11123,10 +11061,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 f32) + (local $8 f32) + (local $9 i32) (local $10 i32) - (local $11 i32) local.get $0 i32.reinterpret_f32 local.set $2 @@ -11156,17 +11093,15 @@ local.get $7 i32.const 0 i32.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i32.const 255 i32.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -11175,21 +11110,21 @@ local.get $0 local.get $1 f32.mul - local.set $9 - local.get $9 - local.get $9 + local.set $8 + local.get $8 + local.get $8 f32.div return end local.get $2 i32.const 1 i32.shl - local.set $10 - local.get $10 + local.set $9 + local.get $9 local.get $7 i32.le_u if - local.get $10 + local.get $9 local.get $7 i32.eq if @@ -11325,13 +11260,13 @@ i32.const 8 i32.shl i32.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i32.sub local.set $4 local.get $2 - local.get $11 + local.get $10 i32.shl local.set $2 local.get $4 @@ -11418,8 +11353,6 @@ local.get $2 call_indirect (type $FUNCSIG$ifii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -11512,10 +11445,9 @@ (local $5 i64) (local $6 i64) (local $7 i64) - (local $8 i32) - (local $9 f64) + (local $8 f64) + (local $9 i64) (local $10 i64) - (local $11 i64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -11545,17 +11477,15 @@ local.get $7 i64.const 0 i64.eq - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $4 i64.const 2047 i64.eq end - local.tee $8 if (result i32) - local.get $8 + i32.const 1 else local.get $1 call $~lib/builtins/isNaN @@ -11564,21 +11494,21 @@ local.get $0 local.get $1 f64.mul - local.set $9 - local.get $9 - local.get $9 + local.set $8 + local.get $8 + local.get $8 f64.div return end local.get $2 i64.const 1 i64.shl - local.set $10 - local.get $10 + local.set $9 + local.get $9 local.get $7 i64.le_u if - local.get $10 + local.get $9 local.get $7 i64.eq if @@ -11714,13 +11644,13 @@ i64.const 11 i64.shl i64.clz - local.set $11 + local.set $10 local.get $4 - local.get $11 + local.get $10 i64.sub local.set $4 local.get $2 - local.get $11 + local.get $10 i64.shl local.set $2 local.get $4 @@ -11809,8 +11739,6 @@ local.get $2 call_indirect (type $FUNCSIG$idii) end - i32.const 0 - i32.ne if br $continue|0 end @@ -17002,7 +16930,6 @@ end ) (func $start:std/typedarray (; 379 ;) (type $FUNCSIG$v) - (local $0 i32) global.get $~lib/typedarray/Int8Array.BYTES_PER_ELEMENT i32.const 1 i32.eq @@ -17407,7 +17334,6 @@ call $~lib/typedarray/Float64Array#__get f64.const 4 f64.eq - local.tee $0 if (result i32) global.get $std/typedarray/af64 i32.const 1 @@ -17415,9 +17341,8 @@ f64.const 5 f64.eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/typedarray/af64 i32.const 2 @@ -17425,9 +17350,8 @@ f64.const 6 f64.eq else - local.get $0 + i32.const 0 end - local.tee $0 if (result i32) global.get $std/typedarray/af64 i32.const 3 @@ -17435,7 +17359,7 @@ f64.const 7 f64.eq else - local.get $0 + i32.const 0 end i32.eqz if @@ -18252,7 +18176,7 @@ i32.load i32.le_u else - local.get $2 + i32.const 0 end if loop $continue|0 @@ -18277,14 +18201,12 @@ ) (func $~lib/runtime/runtime.flags (; 381 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - (local $2 i32) global.get $~lib/runtime/RTTI_BASE local.set $1 local.get $0 i32.eqz - local.tee $2 if (result i32) - local.get $2 + i32.const 1 else local.get $0 local.get $1 diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index c8018f68..863d496d 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -146,6 +146,9 @@ i32.add local.tee $0 global.set $while/m + else + i32.const 0 + local.set $0 end local.get $0 br_if $continue|3 diff --git a/tests/compiler/while.untouched.wat b/tests/compiler/while.untouched.wat index 05b86d40..2838d8dc 100644 --- a/tests/compiler/while.untouched.wat +++ b/tests/compiler/while.untouched.wat @@ -169,7 +169,6 @@ global.set $while/n local.get $0 end - local.tee $0 if (result i32) global.get $while/m i32.const 1 @@ -178,7 +177,7 @@ global.set $while/m local.get $0 else - local.get $0 + i32.const 0 end if nop