alias locals when inlining a tail call

This commit is contained in:
dcode 2019-03-17 00:11:16 +01:00
parent 0c388ca4c6
commit 2d76da9465
14 changed files with 1342 additions and 1402 deletions

View File

@ -56,18 +56,17 @@ import {
import { import {
ElementKind, ElementKind,
OperatorKind,
FunctionPrototype, FunctionPrototype,
Class, Class,
Field, Field,
Global, Global,
DecoratorFlags, DecoratorFlags,
ClassPrototype,
Local Local
} from "./program"; } from "./program";
import { import {
FlowFlags, Flow FlowFlags,
Flow
} from "./flow"; } from "./flow";
import { import {

View File

@ -75,6 +75,7 @@ export enum CommonFlags {
// Other // Other
/** Is quoted. */
QUOTED = 1 << 28 QUOTED = 1 << 28
} }

View File

@ -39,7 +39,8 @@ import {
getBlockChildCount, getBlockChildCount,
getBlockChild, getBlockChild,
getBlockName, getBlockName,
needsExplicitUnreachable needsExplicitUnreachable,
getGetLocalIndex
} from "./module"; } from "./module";
import { import {
@ -1467,7 +1468,10 @@ export class Compiler extends DiagnosticEmitter {
} }
} }
compileStatement(statement: Statement, isLastStatementInBody: bool = false): ExpressionRef { compileStatement(
statement: Statement,
isLastStatementInBody: bool = false
): ExpressionRef {
var module = this.module; var module = this.module;
var stmt: ExpressionRef; var stmt: ExpressionRef;
switch (statement.kind) { switch (statement.kind) {
@ -1492,7 +1496,7 @@ export class Compiler extends DiagnosticEmitter {
break; break;
} }
case NodeKind.EXPRESSION: { case NodeKind.EXPRESSION: {
stmt = this.compileExpressionStatement(<ExpressionStatement>statement); stmt = this.compileExpressionStatement(<ExpressionStatement>statement, isLastStatementInBody);
break; break;
} }
case NodeKind.FOR: { case NodeKind.FOR: {
@ -1691,8 +1695,15 @@ export class Compiler extends DiagnosticEmitter {
return this.module.createNop(); return this.module.createNop();
} }
compileExpressionStatement(statement: ExpressionStatement): ExpressionRef { compileExpressionStatement(statement: ExpressionStatement, isLastStatementInBody: bool = false): ExpressionRef {
var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE); var expr = this.compileExpression(
statement.expression,
Type.void,
ConversionKind.NONE,
WrapMode.NONE,
null,
isLastStatementInBody
);
if (this.currentType != Type.void) { if (this.currentType != Type.void) {
expr = this.module.createDrop(expr); expr = this.module.createDrop(expr);
this.currentType = Type.void; this.currentType = Type.void;
@ -2342,7 +2353,8 @@ export class Compiler extends DiagnosticEmitter {
contextualType: Type, contextualType: Type,
conversionKind: ConversionKind, conversionKind: ConversionKind,
wrapMode: WrapMode, wrapMode: WrapMode,
context: Element | null = null context: Element | null = null,
isLastStatementInBody: bool = false
): ExpressionRef { ): ExpressionRef {
this.currentType = contextualType; this.currentType = contextualType;
var expr: ExpressionRef; var expr: ExpressionRef;
@ -2356,7 +2368,7 @@ export class Compiler extends DiagnosticEmitter {
break; break;
} }
case NodeKind.CALL: { case NodeKind.CALL: {
expr = this.compileCallExpression(<CallExpression>expression, contextualType); expr = this.compileCallExpression(<CallExpression>expression, contextualType, isLastStatementInBody);
break; break;
} }
case NodeKind.COMMA: { case NodeKind.COMMA: {
@ -4988,7 +5000,11 @@ export class Compiler extends DiagnosticEmitter {
return module.createUnreachable(); return module.createUnreachable();
} }
compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef { compileCallExpression(
expression: CallExpression,
contextualType: Type,
isLastStatementInBody: bool = false
): ExpressionRef {
var module = this.module; var module = this.module;
var flow = this.currentFlow; var flow = this.currentFlow;
@ -5184,7 +5200,8 @@ export class Compiler extends DiagnosticEmitter {
instance, instance,
expression.arguments, expression.arguments,
expression, expression,
thisExpr thisExpr,
isLastStatementInBody
); );
} }
@ -5413,7 +5430,8 @@ export class Compiler extends DiagnosticEmitter {
instance: Function, instance: Function,
argumentExpressions: Expression[], argumentExpressions: Expression[],
reportNode: Node, reportNode: Node,
thisArg: ExpressionRef = 0 thisArg: ExpressionRef = 0,
inlineCanAlias: bool = false
): ExpressionRef { ): ExpressionRef {
var numArguments = argumentExpressions.length; var numArguments = argumentExpressions.length;
var signature = instance.signature; var signature = instance.signature;
@ -5437,7 +5455,7 @@ export class Compiler extends DiagnosticEmitter {
); );
} else { } else {
this.currentInlineFunctions.push(instance); this.currentInlineFunctions.push(instance);
let expr = this.compileCallInlinePrechecked(instance, argumentExpressions, thisArg); let expr = this.compileCallInlinePrechecked(instance, argumentExpressions, thisArg, inlineCanAlias);
this.currentInlineFunctions.pop(); this.currentInlineFunctions.pop();
return expr; return expr;
} }
@ -5468,7 +5486,8 @@ export class Compiler extends DiagnosticEmitter {
private compileCallInlinePrechecked( private compileCallInlinePrechecked(
instance: Function, instance: Function,
argumentExpressions: Expression[], argumentExpressions: Expression[],
thisArg: ExpressionRef = 0 thisArg: ExpressionRef = 0,
canAlias: bool = false
): ExpressionRef { ): ExpressionRef {
var module = this.module; var module = this.module;
@ -5483,12 +5502,18 @@ export class Compiler extends DiagnosticEmitter {
if (thisArg) { if (thisArg) {
let classInstance = assert(instance.parent); assert(classInstance.kind == ElementKind.CLASS); let classInstance = assert(instance.parent); assert(classInstance.kind == ElementKind.CLASS);
let thisType = assert(instance.signature.thisType); let thisType = assert(instance.signature.thisType);
let thisLocal = flow.addScopedLocal(CommonSymbols.this_, thisType, false); if (canAlias && getExpressionId(thisArg) == ExpressionId.GetLocal) {
body.push( flow.addScopedAlias(CommonSymbols.this_, thisType, getGetLocalIndex(thisArg));
module.createSetLocal(thisLocal.index, thisArg) let baseInstance = (<Class>classInstance).base;
); if (baseInstance) flow.addScopedAlias(CommonSymbols.super_, baseInstance.type, getGetLocalIndex(thisArg));
let baseInstance = (<Class>classInstance).base; } else {
if (baseInstance) flow.addScopedAlias(CommonSymbols.super_, baseInstance.type, thisLocal.index); let thisLocal = flow.addScopedLocal(CommonSymbols.this_, thisType, false);
body.push(
module.createSetLocal(thisLocal.index, thisArg)
);
let baseInstance = (<Class>classInstance).base;
if (baseInstance) flow.addScopedAlias(CommonSymbols.super_, baseInstance.type, thisLocal.index);
}
} }
var numArguments = argumentExpressions.length; var numArguments = argumentExpressions.length;
@ -5501,14 +5526,18 @@ export class Compiler extends DiagnosticEmitter {
ConversionKind.IMPLICIT, ConversionKind.IMPLICIT,
WrapMode.NONE WrapMode.NONE
); );
let argumentLocal = flow.addScopedLocal( if (canAlias && getExpressionId(paramExpr) == ExpressionId.GetLocal) {
signature.getParameterName(i), flow.addScopedAlias(signature.getParameterName(i), parameterTypes[i], getGetLocalIndex(paramExpr));
parameterTypes[i], } else {
!previousFlow.canOverflow(paramExpr, parameterTypes[i]) let argumentLocal = flow.addScopedLocal(
); signature.getParameterName(i),
body.push( parameterTypes[i],
module.createSetLocal(argumentLocal.index, paramExpr) !previousFlow.canOverflow(paramExpr, parameterTypes[i])
); );
body.push(
module.createSetLocal(argumentLocal.index, paramExpr)
);
}
} }
// Compile optional parameter initializers in the scope of the inlined flow // Compile optional parameter initializers in the scope of the inlined flow
@ -5521,14 +5550,18 @@ export class Compiler extends DiagnosticEmitter {
ConversionKind.IMPLICIT, ConversionKind.IMPLICIT,
WrapMode.WRAP WrapMode.WRAP
); );
let argumentLocal = flow.addScopedLocal( if (canAlias && getExpressionId(initExpr) == ExpressionId.GetLocal) {
signature.getParameterName(i), flow.addScopedAlias(signature.getParameterName(i), parameterTypes[i], getGetLocalIndex(initExpr));
parameterTypes[i], } else {
!flow.canOverflow(initExpr, parameterTypes[i]) let argumentLocal = flow.addScopedLocal(
); signature.getParameterName(i),
body.push( parameterTypes[i],
module.createSetLocal(argumentLocal.index, initExpr) !flow.canOverflow(initExpr, parameterTypes[i])
); );
body.push(
module.createSetLocal(argumentLocal.index, initExpr)
);
}
} }
// Compile the called function's body in the scope of the inlined flow // Compile the called function's body in the scope of the inlined flow

View File

@ -84,7 +84,12 @@ import {
} from "./module"; } from "./module";
import { import {
CharCode, writeI32, writeI8, writeI16, writeF32, writeF64 CharCode,
writeI8,
writeI16,
writeI32,
writeF32,
writeF64
} from "./util"; } from "./util";
import { import {

View File

@ -40,7 +40,7 @@ export declare function CLASSID<T>(): u32;
export declare function ITERATEROOTS(fn: (ref: usize) => void): void; export declare function ITERATEROOTS(fn: (ref: usize) => void): void;
/** Adjusts an allocation to actual block size. Primarily targets TLSF. */ /** Adjusts an allocation to actual block size. Primarily targets TLSF. */
function adjustToBlock(payloadSize: usize): usize { export function ADJUSTOBLOCK(payloadSize: usize): usize {
// round up to power of 2, e.g. with HEADER_SIZE=8: // round up to power of 2, e.g. with HEADER_SIZE=8:
// 0 -> 2^3 = 8 // 0 -> 2^3 = 8
// 1..8 -> 2^4 = 16 // 1..8 -> 2^4 = 16
@ -58,7 +58,7 @@ export function ALLOCATE(payloadSize: usize): usize {
} }
function doAllocate(payloadSize: usize): usize { function doAllocate(payloadSize: usize): usize {
var header = changetype<HEADER>(memory.allocate(adjustToBlock(payloadSize))); var header = changetype<HEADER>(memory.allocate(ADJUSTOBLOCK(payloadSize)));
header.classId = HEADER_MAGIC; header.classId = HEADER_MAGIC;
header.payloadSize = payloadSize; header.payloadSize = payloadSize;
if (GC_IMPLEMENTED) { if (GC_IMPLEMENTED) {
@ -83,8 +83,8 @@ function doReallocate(ref: usize, newPayloadSize: usize): usize {
var header = changetype<HEADER>(ref - HEADER_SIZE); var header = changetype<HEADER>(ref - HEADER_SIZE);
var payloadSize = header.payloadSize; var payloadSize = header.payloadSize;
if (payloadSize < newPayloadSize) { if (payloadSize < newPayloadSize) {
let newAdjustedSize = adjustToBlock(newPayloadSize); let newAdjustedSize = ADJUSTOBLOCK(newPayloadSize);
if (select(adjustToBlock(payloadSize), 0, ref > HEAP_BASE) < newAdjustedSize) { if (select(ADJUSTOBLOCK(payloadSize), 0, ref > HEAP_BASE) < newAdjustedSize) {
// move if the allocation isn't large enough or not a heap object // move if the allocation isn't large enough or not a heap object
let newHeader = changetype<HEADER>(memory.allocate(newAdjustedSize)); let newHeader = changetype<HEADER>(memory.allocate(newAdjustedSize));
newHeader.classId = header.classId; newHeader.classId = header.classId;

View File

@ -35,7 +35,7 @@
(export "memory" (memory $0)) (export "memory" (memory $0))
(export "table" (table $0)) (export "table" (table $0))
(start $start) (start $start)
(func $~lib/runtime/adjustToBlock (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $~lib/runtime/ADJUSTOBLOCK (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 1 i32.const 1
i32.const 32 i32.const 32
local.get $0 local.get $0
@ -135,7 +135,7 @@
(func $~lib/runtime/doAllocate (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $~lib/runtime/doAllocate (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32) (local $1 i32)
local.get $0 local.get $0
call $~lib/runtime/adjustToBlock call $~lib/runtime/ADJUSTOBLOCK
call $~lib/memory/memory.allocate call $~lib/memory/memory.allocate
local.set $1 local.set $1
local.get $1 local.get $1
@ -194,261 +194,252 @@
(func $~lib/memory/memory.fill (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (func $~lib/memory/memory.fill (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
(local $5 i32) (local $5 i64)
(local $6 i32)
(local $7 i32)
(local $8 i64)
block $~lib/util/memory/memset|inlined.0 block $~lib/util/memory/memset|inlined.0
local.get $0
local.set $3
local.get $1
local.set $4
local.get $2 local.get $2
local.set $5
local.get $5
i32.eqz i32.eqz
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 1 i32.const 1
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 2 i32.const 2
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 1 i32.const 1
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
i32.const 2 i32.const 2
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 2 i32.const 2
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 3 i32.const 3
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 6 i32.const 6
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 3 i32.const 3
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 4 i32.const 4
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
i32.const 0 i32.const 0
local.get $3 local.get $0
i32.sub i32.sub
i32.const 3 i32.const 3
i32.and i32.and
local.set $6
local.get $3
local.get $6
i32.add
local.set $3 local.set $3
local.get $5 local.get $0
local.get $6 local.get $3
i32.add
local.set $0
local.get $2
local.get $3
i32.sub i32.sub
local.set $5 local.set $2
local.get $5 local.get $2
i32.const -4 i32.const -4
i32.and i32.and
local.set $5 local.set $2
i32.const -1 i32.const -1
i32.const 255 i32.const 255
i32.div_u i32.div_u
local.get $4 local.get $1
i32.const 255 i32.const 255
i32.and i32.and
i32.mul i32.mul
local.set $7 local.set $4
local.get $3 local.get $0
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 4 i32.const 4
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 4 i32.const 4
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 8 i32.const 8
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 12 i32.const 12
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 8 i32.const 8
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $5 local.get $2
i32.const 24 i32.const 24
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 12 i32.const 12
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 16 i32.const 16
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 20 i32.const 20
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 24 i32.const 24
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 28 i32.const 28
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 24 i32.const 24
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 20 i32.const 20
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 16 i32.const 16
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
i32.const 24 i32.const 24
local.get $3 local.get $0
i32.const 4 i32.const 4
i32.and i32.and
i32.add i32.add
local.set $6
local.get $3
local.get $6
i32.add
local.set $3 local.set $3
local.get $5 local.get $0
local.get $6 local.get $3
i32.add
local.set $0
local.get $2
local.get $3
i32.sub i32.sub
local.set $5 local.set $2
local.get $7 local.get $4
i64.extend_i32_u i64.extend_i32_u
local.get $7 local.get $4
i64.extend_i32_u i64.extend_i32_u
i64.const 32 i64.const 32
i64.shl i64.shl
i64.or i64.or
local.set $8 local.set $5
block $break|0 block $break|0
loop $continue|0 loop $continue|0
local.get $5 local.get $2
i32.const 32 i32.const 32
i32.ge_u i32.ge_u
if if
block block
local.get $3 local.get $0
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 8 i32.const 8
i32.add i32.add
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 16 i32.const 16
i32.add i32.add
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 24 i32.const 24
i32.add i32.add
local.get $8
i64.store
local.get $5 local.get $5
i64.store
local.get $2
i32.const 32 i32.const 32
i32.sub i32.sub
local.set $5 local.set $2
local.get $3 local.get $0
i32.const 32 i32.const 32
i32.add i32.add
local.set $3 local.set $0
end end
br $continue|0 br $continue|0
end end

View File

@ -11,12 +11,18 @@
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(import "env" "trace" (func $~lib/env/trace (param i32 i32 f64 f64 f64 f64 f64))) (import "env" "trace" (func $~lib/env/trace (param i32 i32 f64 f64 f64 f64 f64)))
(memory $0 1) (memory $0 1)
(data (i32.const 8) "\01\00\00\00,\00\00\00~\00l\00i\00b\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 8) "\01\00\00\00,")
(data (i32.const 64) "\01\00\00\00\1c\00\00\00s\00t\00d\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s") (data (i32.const 24) "~\00l\00i\00b\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00/\00t\00l\00s\00f\00.\00t\00s")
(data (i32.const 104) "\01\00\00\00\10\00\00\00b\00a\00r\00r\00i\00e\00r\001") (data (i32.const 72) "\01\00\00\00\1c")
(data (i32.const 128) "\01\00\00\00\10\00\00\00b\00a\00r\00r\00i\00e\00r\002") (data (i32.const 88) "s\00t\00d\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s")
(data (i32.const 152) "\01\00\00\00\10\00\00\00b\00a\00r\00r\00i\00e\00r\003") (data (i32.const 120) "\01\00\00\00\10")
(data (i32.const 176) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s") (data (i32.const 136) "b\00a\00r\00r\00i\00e\00r\001")
(data (i32.const 152) "\01\00\00\00\10")
(data (i32.const 168) "b\00a\00r\00r\00i\00e\00r\002")
(data (i32.const 184) "\01\00\00\00\10")
(data (i32.const 200) "b\00a\00r\00r\00i\00e\00r\003")
(data (i32.const 216) "\01\00\00\00\1e")
(data (i32.const 232) "~\00l\00i\00b\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s")
(table $0 1 funcref) (table $0 1 funcref)
(elem (i32.const 0) $null) (elem (i32.const 0) $null)
(global $~lib/allocator/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/allocator/tlsf/ROOT (mut i32) (i32.const 0))
@ -41,7 +47,7 @@
i32.ge_u i32.ge_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 130 i32.const 130
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -61,7 +67,7 @@
i32.ge_u i32.ge_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 153 i32.const 153
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -72,7 +78,7 @@
i32.ge_u i32.ge_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 154 i32.const 154
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -98,7 +104,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 76 i32.const 76
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -116,7 +122,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 77 i32.const 77
i32.const 11 i32.const 11
call $~lib/env/abort call $~lib/env/abort
@ -129,7 +135,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 414 i32.const 414
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
@ -146,7 +152,7 @@
i32.ge_u i32.ge_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 144 i32.const 144
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -157,7 +163,7 @@
i32.ge_u i32.ge_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 145 i32.const 145
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -180,7 +186,7 @@
i32.ge_u i32.ge_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 124 i32.const 124
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -206,7 +212,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 244 i32.const 244
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -229,7 +235,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 246 i32.const 246
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -330,7 +336,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 68 i32.const 68
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -344,7 +350,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 69 i32.const 69
i32.const 11 i32.const 11
call $~lib/env/abort call $~lib/env/abort
@ -360,7 +366,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 320 i32.const 320
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -372,7 +378,7 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 321 i32.const 321
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -385,7 +391,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 322 i32.const 322
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -407,7 +413,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 175 i32.const 175
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -421,7 +427,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 177 i32.const 177
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -445,7 +451,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 179 i32.const 179
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -457,7 +463,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 183 i32.const 183
i32.const 23 i32.const 23
call $~lib/env/abort call $~lib/env/abort
@ -499,7 +505,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 197 i32.const 197
i32.const 24 i32.const 24
call $~lib/env/abort call $~lib/env/abort
@ -513,7 +519,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 199 i32.const 199
i32.const 6 i32.const 6
call $~lib/env/abort call $~lib/env/abort
@ -562,7 +568,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 212 i32.const 212
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -641,7 +647,7 @@
i32.gt_u i32.gt_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 363 i32.const 363
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -652,7 +658,7 @@
i32.and i32.and
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 364 i32.const 364
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -663,7 +669,7 @@
i32.and i32.and
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 365 i32.const 365
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -680,7 +686,7 @@
i32.lt_u i32.lt_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 370 i32.const 370
i32.const 6 i32.const 6
call $~lib/env/abort call $~lib/env/abort
@ -708,7 +714,7 @@
i32.lt_u i32.lt_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 379 i32.const 379
i32.const 6 i32.const 6
call $~lib/env/abort call $~lib/env/abort
@ -761,7 +767,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 408 i32.const 408
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
@ -786,7 +792,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 282 i32.const 282
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -866,7 +872,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 309 i32.const 309
i32.const 16 i32.const 16
call $~lib/env/abort call $~lib/env/abort
@ -894,7 +900,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 334 i32.const 334
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -914,7 +920,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 335 i32.const 335
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -925,7 +931,7 @@
i32.and i32.and
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 336 i32.const 336
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
@ -977,7 +983,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 354 i32.const 354
i32.const 25 i32.const 25
call $~lib/env/abort call $~lib/env/abort
@ -1022,14 +1028,14 @@
if if
unreachable unreachable
end end
i32.const 216 i32.const 264
local.set $3 local.set $3
i32.const 216 i32.const 264
global.set $~lib/allocator/tlsf/ROOT global.set $~lib/allocator/tlsf/ROOT
i32.const 2912 i32.const 2912
i32.const 0 i32.const 0
i32.store i32.store
i32.const 216 i32.const 264
i32.const 0 i32.const 0
i32.store i32.store
i32.const 0 i32.const 0
@ -1039,7 +1045,7 @@
i32.const 22 i32.const 22
i32.lt_u i32.lt_u
if if
i32.const 216 i32.const 264
local.get $0 local.get $0
i32.const 0 i32.const 0
call $~lib/allocator/tlsf/Root#setSLMap call $~lib/allocator/tlsf/Root#setSLMap
@ -1050,7 +1056,7 @@
i32.const 32 i32.const 32
i32.lt_u i32.lt_u
if if
i32.const 216 i32.const 264
local.get $0 local.get $0
local.get $1 local.get $1
i32.const 0 i32.const 0
@ -1069,8 +1075,8 @@
br $repeat|0 br $repeat|0
end end
end end
i32.const 216 i32.const 264
i32.const 3136 i32.const 3184
current_memory current_memory
i32.const 16 i32.const 16
i32.shl i32.shl
@ -1140,7 +1146,7 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 467 i32.const 467
i32.const 12 i32.const 12
call $~lib/env/abort call $~lib/env/abort
@ -1155,7 +1161,7 @@
i32.lt_u i32.lt_u
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 470 i32.const 470
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
@ -1166,7 +1172,7 @@
local.get $2 local.get $2
call $~lib/allocator/tlsf/Root#use call $~lib/allocator/tlsf/Root#use
) )
(func $~lib/runtime/ALLOCATE (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $~lib/runtime/doAllocate (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32) (local $1 i32)
i32.const 1 i32.const 1
i32.const 32 i32.const 32
@ -2094,94 +2100,91 @@
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
block $~lib/util/memory/memmove|inlined.0 block $~lib/util/memory/memmove|inlined.0
local.get $2
local.set $3
local.get $1
local.get $0 local.get $0
local.tee $2 local.get $1
i32.eq i32.eq
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $1 local.get $1
local.get $3
i32.add
local.get $2 local.get $2
i32.add
local.get $0
i32.le_u i32.le_u
local.tee $0 local.tee $3
i32.eqz i32.eqz
if if
local.get $0
local.get $2 local.get $2
local.get $3
i32.add i32.add
local.get $1 local.get $1
i32.le_u i32.le_u
local.set $0 local.set $3
end end
local.get $0 local.get $3
if if
local.get $2 local.get $0
local.get $1 local.get $1
local.get $3 local.get $2
call $~lib/util/memory/memcpy call $~lib/util/memory/memcpy
br $~lib/util/memory/memmove|inlined.0 br $~lib/util/memory/memmove|inlined.0
end end
local.get $2 local.get $0
local.get $1 local.get $1
i32.lt_u i32.lt_u
if if
local.get $1 local.get $1
i32.const 7 i32.const 7
i32.and i32.and
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
i32.eq i32.eq
if if
loop $continue|0 loop $continue|0
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
if if
local.get $3 local.get $2
i32.eqz i32.eqz
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.set $3 local.set $2
local.get $2 local.get $0
local.tee $4 local.tee $4
i32.const 1 i32.const 1
i32.add i32.add
local.set $2 local.set $0
local.get $1 local.get $1
local.tee $0 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $1 local.set $1
local.get $4 local.get $4
local.get $0 local.get $3
i32.load8_u i32.load8_u
i32.store8 i32.store8
br $continue|0 br $continue|0
end end
end end
loop $continue|1 loop $continue|1
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.ge_u i32.ge_u
if if
local.get $2 local.get $0
local.get $1 local.get $1
i64.load i64.load
i64.store i64.store
local.get $3
i32.const 8
i32.sub
local.set $3
local.get $2 local.get $2
i32.const 8 i32.const 8
i32.add i32.sub
local.set $2 local.set $2
local.get $0
i32.const 8
i32.add
local.set $0
local.get $1 local.get $1
i32.const 8 i32.const 8
i32.add i32.add
@ -2191,26 +2194,26 @@
end end
end end
loop $continue|2 loop $continue|2
local.get $3 local.get $2
if if
local.get $2 local.get $0
local.tee $4 local.tee $4
i32.const 1 i32.const 1
i32.add i32.add
local.set $2 local.set $0
local.get $1 local.get $1
local.tee $0 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $1 local.set $1
local.get $4 local.get $4
local.get $0 local.get $3
i32.load8_u i32.load8_u
i32.store8 i32.store8
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.set $3 local.set $2
br $continue|2 br $continue|2
end end
end end
@ -2218,29 +2221,29 @@
local.get $1 local.get $1
i32.const 7 i32.const 7
i32.and i32.and
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
i32.eq i32.eq
if if
loop $continue|3 loop $continue|3
local.get $0
local.get $2 local.get $2
local.get $3
i32.add i32.add
i32.const 7 i32.const 7
i32.and i32.and
if if
local.get $3 local.get $2
i32.eqz i32.eqz
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i32.load8_u i32.load8_u
i32.store8 i32.store8
@ -2248,18 +2251,18 @@
end end
end end
loop $continue|4 loop $continue|4
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.ge_u i32.ge_u
if if
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i64.load i64.load
i64.store i64.store
@ -2268,16 +2271,16 @@
end end
end end
loop $continue|5 loop $continue|5
local.get $3 local.get $2
if if
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i32.load8_u i32.load8_u
i32.store8 i32.store8
@ -2517,7 +2520,7 @@
i32.and i32.and
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 483 i32.const 483
i32.const 6 i32.const 6
call $~lib/env/abort call $~lib/env/abort
@ -2536,7 +2539,7 @@
end end
end end
) )
(func $~lib/runtime/REALLOCATE (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (func $~lib/runtime/doReallocate (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -2560,7 +2563,7 @@
i32.shl i32.shl
i32.const 0 i32.const 0
local.get $0 local.get $0
i32.const 216 i32.const 264
i32.gt_u i32.gt_u
select select
i32.const 1 i32.const 1
@ -2606,12 +2609,12 @@
i32.eq i32.eq
if if
local.get $0 local.get $0
i32.const 216 i32.const 264
i32.le_u i32.le_u
if if
i32.const 0 i32.const 0
i32.const 184 i32.const 232
i32.const 92 i32.const 100
i32.const 8 i32.const 8
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2641,14 +2644,14 @@
i32.store offset=4 i32.store offset=4
local.get $0 local.get $0
) )
(func $~lib/runtime/ASSERT_UNREGISTERED (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) (func $~lib/runtime/assertUnregistered (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
local.get $0 local.get $0
i32.const 216 i32.const 264
i32.le_u i32.le_u
if if
i32.const 0 i32.const 0
i32.const 184 i32.const 232
i32.const 145 i32.const 188
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2661,8 +2664,8 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 184 i32.const 232
i32.const 146 i32.const 189
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2673,41 +2676,41 @@
(local $1 i32) (local $1 i32)
(local $2 i32) (local $2 i32)
loop $repeat|0 loop $repeat|0
local.get $0 local.get $1
i32.const 9000 i32.const 9000
i32.lt_s i32.lt_s
if if
i32.const 1 i32.const 1
i32.const 32 i32.const 32
local.get $0 local.get $1
i32.const 15 i32.const 15
i32.add i32.add
i32.clz i32.clz
i32.sub i32.sub
i32.shl i32.shl
local.tee $1 local.tee $2
i32.const 0 i32.const 0
i32.ne i32.ne
local.tee $2 local.tee $0
if (result i32) if
local.get $1 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.get $1 local.get $2
i32.and i32.and
i32.eqz i32.eqz
else local.set $0
local.get $2
end end
local.get $0
if if
local.get $0 local.get $1
i32.const 1 i32.const 1
i32.add i32.add
local.set $0 local.set $1
br $repeat|0 br $repeat|0
else else
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 31 i32.const 31
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
@ -2726,6 +2729,7 @@
i32.const 1 i32.const 1
i32.const 32 i32.const 32
global.get $std/runtime/barrier2 global.get $std/runtime/barrier2
local.tee $0
i32.const 16 i32.const 16
i32.add i32.add
i32.clz i32.clz
@ -2733,7 +2737,7 @@
i32.shl i32.shl
i32.const 1 i32.const 1
i32.const 32 i32.const 32
global.get $std/runtime/barrier2 local.get $0
i32.const 15 i32.const 15
i32.add i32.add
i32.clz i32.clz
@ -2756,6 +2760,7 @@
i32.const 1 i32.const 1
i32.const 32 i32.const 32
global.get $std/runtime/barrier3 global.get $std/runtime/barrier3
local.tee $0
i32.const 16 i32.const 16
i32.add i32.add
i32.clz i32.clz
@ -2763,7 +2768,7 @@
i32.shl i32.shl
i32.const 1 i32.const 1
i32.const 32 i32.const 32
global.get $std/runtime/barrier3 local.get $0
i32.const 15 i32.const 15
i32.add i32.add
i32.clz i32.clz
@ -2778,7 +2783,7 @@
br $continue|2 br $continue|2
end end
end end
i32.const 112 i32.const 136
i32.const 1 i32.const 1
global.get $std/runtime/barrier1 global.get $std/runtime/barrier1
f64.convert_i32_u f64.convert_i32_u
@ -2787,7 +2792,7 @@
f64.const 0 f64.const 0
f64.const 0 f64.const 0
call $~lib/env/trace call $~lib/env/trace
i32.const 136 i32.const 168
i32.const 1 i32.const 1
global.get $std/runtime/barrier2 global.get $std/runtime/barrier2
f64.convert_i32_u f64.convert_i32_u
@ -2796,7 +2801,7 @@
f64.const 0 f64.const 0
f64.const 0 f64.const 0
call $~lib/env/trace call $~lib/env/trace
i32.const 160 i32.const 200
i32.const 1 i32.const 1
global.get $std/runtime/barrier3 global.get $std/runtime/barrier3
f64.convert_i32_u f64.convert_i32_u
@ -2806,7 +2811,7 @@
f64.const 0 f64.const 0
call $~lib/env/trace call $~lib/env/trace
i32.const 1 i32.const 1
call $~lib/runtime/ALLOCATE call $~lib/runtime/doAllocate
global.set $std/runtime/ref1 global.set $std/runtime/ref1
global.get $std/runtime/ref1 global.get $std/runtime/ref1
i32.const 16 i32.const 16
@ -2818,7 +2823,7 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 46 i32.const 46
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
@ -2830,21 +2835,23 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 47 i32.const 47
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
global.get $std/runtime/ref1 global.get $std/runtime/ref1
local.tee $0 local.tee $1
local.get $0
global.get $std/runtime/barrier1 global.get $std/runtime/barrier1
call $~lib/runtime/REALLOCATE call $~lib/runtime/doReallocate
local.set $2
local.get $1
local.get $2
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 48 i32.const 48
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
@ -2856,7 +2863,7 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 49 i32.const 49
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
@ -2864,14 +2871,14 @@
end end
global.get $std/runtime/ref1 global.get $std/runtime/ref1
global.get $std/runtime/barrier2 global.get $std/runtime/barrier2
call $~lib/runtime/REALLOCATE call $~lib/runtime/doReallocate
global.set $std/runtime/ref2 global.set $std/runtime/ref2
global.get $std/runtime/ref1 global.get $std/runtime/ref1
global.get $std/runtime/ref2 global.get $std/runtime/ref2
i32.eq i32.eq
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 51 i32.const 51
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
@ -2887,39 +2894,39 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 53 i32.const 53
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
global.get $std/runtime/ref2 global.get $std/runtime/ref2
local.tee $0 local.tee $1
call $~lib/runtime/ASSERT_UNREGISTERED call $~lib/runtime/assertUnregistered
local.get $0 local.get $1
i32.const 16 i32.const 16
i32.sub i32.sub
call $~lib/memory/memory.free call $~lib/memory/memory.free
global.get $std/runtime/barrier2 global.get $std/runtime/barrier2
call $~lib/runtime/ALLOCATE call $~lib/runtime/doAllocate
global.set $std/runtime/ref3 global.set $std/runtime/ref3
global.get $std/runtime/ref1 global.get $std/runtime/ref1
global.get $std/runtime/ref3 global.get $std/runtime/ref3
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 56 i32.const 56
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
global.get $std/runtime/barrier1 global.get $std/runtime/barrier1
call $~lib/runtime/ALLOCATE call $~lib/runtime/doAllocate
global.set $std/runtime/ref4 global.set $std/runtime/ref4
global.get $std/runtime/ref4 global.get $std/runtime/ref4
local.tee $0 local.tee $0
call $~lib/runtime/ASSERT_UNREGISTERED call $~lib/runtime/assertUnregistered
local.get $0 local.get $0
i32.const 16 i32.const 16
i32.sub i32.sub
@ -2932,7 +2939,7 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 60 i32.const 60
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
@ -2948,7 +2955,7 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 62 i32.const 62
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
@ -2960,14 +2967,14 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 63 i32.const 63
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
i32.const 10 i32.const 10
call $~lib/runtime/ALLOCATE call $~lib/runtime/doAllocate
global.set $std/runtime/ref5 global.set $std/runtime/ref5
global.get $std/runtime/ref5 global.get $std/runtime/ref5
i32.const 16 i32.const 16
@ -2977,7 +2984,7 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 66 i32.const 66
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
@ -2993,7 +3000,7 @@
i32.ne i32.ne
if if
i32.const 0 i32.const 0
i32.const 72 i32.const 88
i32.const 67 i32.const 67
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort

View File

@ -1,5 +1,5 @@
import "allocator/tlsf"; import "allocator/tlsf";
import { CLASSID, ADJUST, ALLOCATE, REALLOCATE, REGISTER, DISCARD, HEADER, HEADER_SIZE, HEADER_MAGIC } from "runtime"; import { CLASSID, ADJUSTOBLOCK, ALLOCATE, REALLOCATE, REGISTER, DISCARD, HEADER, HEADER_SIZE, HEADER_MAGIC } from "runtime";
var register_ref: usize = 0; var register_ref: usize = 0;
@ -26,16 +26,16 @@ function isPowerOf2(x: i32): bool {
return x != 0 && (x & (x - 1)) == 0; return x != 0 && (x & (x - 1)) == 0;
} }
assert(ADJUST(0) > 0); assert(ADJUSTOBLOCK(0) > 0);
for (let i = 0; i < 9000; ++i) { for (let i = 0; i < 9000; ++i) {
assert(isPowerOf2(ADJUST(i))); assert(isPowerOf2(ADJUSTOBLOCK(i)));
} }
var barrier1 = ADJUST(0); var barrier1 = ADJUSTOBLOCK(0);
var barrier2 = barrier1 + 1; var barrier2 = barrier1 + 1;
while (ADJUST(barrier2 + 1) == ADJUST(barrier2)) ++barrier2; while (ADJUSTOBLOCK(barrier2 + 1) == ADJUSTOBLOCK(barrier2)) ++barrier2;
var barrier3 = barrier2 + 1; var barrier3 = barrier2 + 1;
while (ADJUST(barrier3 + 1) == ADJUST(barrier3)) ++barrier3; while (ADJUSTOBLOCK(barrier3 + 1) == ADJUSTOBLOCK(barrier3)) ++barrier3;
trace("barrier1", 1, barrier1); trace("barrier1", 1, barrier1);
trace("barrier2", 1, barrier2); trace("barrier2", 1, barrier2);

File diff suppressed because it is too large Load Diff

View File

@ -37,7 +37,7 @@
(export "memory" (memory $0)) (export "memory" (memory $0))
(export "table" (table $0)) (export "table" (table $0))
(start $start) (start $start)
(func $~lib/runtime/adjustToBlock (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $~lib/runtime/ADJUSTOBLOCK (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 1 i32.const 1
i32.const 32 i32.const 32
local.get $0 local.get $0
@ -137,7 +137,7 @@
(func $~lib/runtime/doAllocate (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $~lib/runtime/doAllocate (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32) (local $1 i32)
local.get $0 local.get $0
call $~lib/runtime/adjustToBlock call $~lib/runtime/ADJUSTOBLOCK
call $~lib/memory/memory.allocate call $~lib/memory/memory.allocate
local.set $1 local.set $1
local.get $1 local.get $1
@ -196,261 +196,252 @@
(func $~lib/memory/memory.fill (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (func $~lib/memory/memory.fill (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
(local $5 i32) (local $5 i64)
(local $6 i32)
(local $7 i32)
(local $8 i64)
block $~lib/util/memory/memset|inlined.0 block $~lib/util/memory/memset|inlined.0
local.get $0
local.set $3
local.get $1
local.set $4
local.get $2 local.get $2
local.set $5
local.get $5
i32.eqz i32.eqz
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 1 i32.const 1
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 2 i32.const 2
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 1 i32.const 1
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
i32.const 2 i32.const 2
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 2 i32.const 2
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 3 i32.const 3
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 6 i32.const 6
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 3 i32.const 3
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 4 i32.const 4
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
i32.const 0 i32.const 0
local.get $3 local.get $0
i32.sub i32.sub
i32.const 3 i32.const 3
i32.and i32.and
local.set $6
local.get $3
local.get $6
i32.add
local.set $3 local.set $3
local.get $5 local.get $0
local.get $6 local.get $3
i32.add
local.set $0
local.get $2
local.get $3
i32.sub i32.sub
local.set $5 local.set $2
local.get $5 local.get $2
i32.const -4 i32.const -4
i32.and i32.and
local.set $5 local.set $2
i32.const -1 i32.const -1
i32.const 255 i32.const 255
i32.div_u i32.div_u
local.get $4 local.get $1
i32.const 255 i32.const 255
i32.and i32.and
i32.mul i32.mul
local.set $7 local.set $4
local.get $3 local.get $0
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 4 i32.const 4
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 4 i32.const 4
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 8 i32.const 8
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 12 i32.const 12
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 8 i32.const 8
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $5 local.get $2
i32.const 24 i32.const 24
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 12 i32.const 12
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 16 i32.const 16
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 20 i32.const 20
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 24 i32.const 24
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 28 i32.const 28
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 24 i32.const 24
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 20 i32.const 20
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 16 i32.const 16
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
i32.const 24 i32.const 24
local.get $3 local.get $0
i32.const 4 i32.const 4
i32.and i32.and
i32.add i32.add
local.set $6
local.get $3
local.get $6
i32.add
local.set $3 local.set $3
local.get $5 local.get $0
local.get $6 local.get $3
i32.add
local.set $0
local.get $2
local.get $3
i32.sub i32.sub
local.set $5 local.set $2
local.get $7 local.get $4
i64.extend_i32_u i64.extend_i32_u
local.get $7 local.get $4
i64.extend_i32_u i64.extend_i32_u
i64.const 32 i64.const 32
i64.shl i64.shl
i64.or i64.or
local.set $8 local.set $5
block $break|0 block $break|0
loop $continue|0 loop $continue|0
local.get $5 local.get $2
i32.const 32 i32.const 32
i32.ge_u i32.ge_u
if if
block block
local.get $3 local.get $0
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 8 i32.const 8
i32.add i32.add
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 16 i32.const 16
i32.add i32.add
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 24 i32.const 24
i32.add i32.add
local.get $8
i64.store
local.get $5 local.get $5
i64.store
local.get $2
i32.const 32 i32.const 32
i32.sub i32.sub
local.set $5 local.set $2
local.get $3 local.get $0
i32.const 32 i32.const 32
i32.add i32.add
local.set $3 local.set $0
end end
br $continue|0 br $continue|0
end end

View File

@ -1571,94 +1571,91 @@
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
block $~lib/util/memory/memmove|inlined.0 block $~lib/util/memory/memmove|inlined.0
local.get $2
local.set $3
local.get $1
local.get $0 local.get $0
local.tee $2 local.get $1
i32.eq i32.eq
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $1 local.get $1
local.get $3
i32.add
local.get $2 local.get $2
i32.add
local.get $0
i32.le_u i32.le_u
local.tee $0 local.tee $3
i32.eqz i32.eqz
if if
local.get $0
local.get $2 local.get $2
local.get $3
i32.add i32.add
local.get $1 local.get $1
i32.le_u i32.le_u
local.set $0 local.set $3
end end
local.get $0 local.get $3
if if
local.get $2 local.get $0
local.get $1 local.get $1
local.get $3 local.get $2
call $~lib/util/memory/memcpy call $~lib/util/memory/memcpy
br $~lib/util/memory/memmove|inlined.0 br $~lib/util/memory/memmove|inlined.0
end end
local.get $2 local.get $0
local.get $1 local.get $1
i32.lt_u i32.lt_u
if if
local.get $1 local.get $1
i32.const 7 i32.const 7
i32.and i32.and
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
i32.eq i32.eq
if if
loop $continue|0 loop $continue|0
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
if if
local.get $3 local.get $2
i32.eqz i32.eqz
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.set $3 local.set $2
local.get $2 local.get $0
local.tee $4 local.tee $4
i32.const 1 i32.const 1
i32.add i32.add
local.set $2 local.set $0
local.get $1 local.get $1
local.tee $0 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $1 local.set $1
local.get $4 local.get $4
local.get $0 local.get $3
i32.load8_u i32.load8_u
i32.store8 i32.store8
br $continue|0 br $continue|0
end end
end end
loop $continue|1 loop $continue|1
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.ge_u i32.ge_u
if if
local.get $2 local.get $0
local.get $1 local.get $1
i64.load i64.load
i64.store i64.store
local.get $3
i32.const 8
i32.sub
local.set $3
local.get $2 local.get $2
i32.const 8 i32.const 8
i32.add i32.sub
local.set $2 local.set $2
local.get $0
i32.const 8
i32.add
local.set $0
local.get $1 local.get $1
i32.const 8 i32.const 8
i32.add i32.add
@ -1668,26 +1665,26 @@
end end
end end
loop $continue|2 loop $continue|2
local.get $3 local.get $2
if if
local.get $2 local.get $0
local.tee $4 local.tee $4
i32.const 1 i32.const 1
i32.add i32.add
local.set $2 local.set $0
local.get $1 local.get $1
local.tee $0 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $1 local.set $1
local.get $4 local.get $4
local.get $0 local.get $3
i32.load8_u i32.load8_u
i32.store8 i32.store8
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.set $3 local.set $2
br $continue|2 br $continue|2
end end
end end
@ -1695,29 +1692,29 @@
local.get $1 local.get $1
i32.const 7 i32.const 7
i32.and i32.and
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
i32.eq i32.eq
if if
loop $continue|3 loop $continue|3
local.get $0
local.get $2 local.get $2
local.get $3
i32.add i32.add
i32.const 7 i32.const 7
i32.and i32.and
if if
local.get $3 local.get $2
i32.eqz i32.eqz
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i32.load8_u i32.load8_u
i32.store8 i32.store8
@ -1725,18 +1722,18 @@
end end
end end
loop $continue|4 loop $continue|4
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.ge_u i32.ge_u
if if
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i64.load i64.load
i64.store i64.store
@ -1745,16 +1742,16 @@
end end
end end
loop $continue|5 loop $continue|5
local.get $3 local.get $2
if if
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i32.load8_u i32.load8_u
i32.store8 i32.store8

View File

@ -245,7 +245,7 @@
i32.add i32.add
i32.load16_u i32.load16_u
) )
(func $~lib/runtime/adjustToBlock (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $~lib/runtime/ADJUSTOBLOCK (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 1 i32.const 1
i32.const 32 i32.const 32
local.get $0 local.get $0
@ -345,7 +345,7 @@
(func $~lib/runtime/doAllocate (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $~lib/runtime/doAllocate (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32) (local $1 i32)
local.get $0 local.get $0
call $~lib/runtime/adjustToBlock call $~lib/runtime/ADJUSTOBLOCK
call $~lib/memory/memory.allocate call $~lib/memory/memory.allocate
local.set $1 local.set $1
local.get $1 local.get $1
@ -2014,87 +2014,78 @@
) )
(func $~lib/memory/memory.copy (; 16 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (func $~lib/memory/memory.copy (; 16 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32)
(local $5 i32)
(local $6 i32)
block $~lib/util/memory/memmove|inlined.0 block $~lib/util/memory/memmove|inlined.0
local.get $0 local.get $0
local.set $3
local.get $1 local.get $1
local.set $4
local.get $2
local.set $5
local.get $3
local.get $4
i32.eq i32.eq
if if
br $~lib/util/memory/memmove|inlined.0 br $~lib/util/memory/memmove|inlined.0
end end
local.get $4 local.get $1
local.get $5 local.get $2
i32.add i32.add
local.get $3 local.get $0
i32.le_u i32.le_u
local.tee $6 local.tee $3
if (result i32) if (result i32)
local.get $6
else
local.get $3 local.get $3
local.get $5 else
local.get $0
local.get $2
i32.add i32.add
local.get $4 local.get $1
i32.le_u i32.le_u
end end
if if
local.get $3 local.get $0
local.get $4 local.get $1
local.get $5 local.get $2
call $~lib/util/memory/memcpy call $~lib/util/memory/memcpy
br $~lib/util/memory/memmove|inlined.0 br $~lib/util/memory/memmove|inlined.0
end end
local.get $3 local.get $0
local.get $4 local.get $1
i32.lt_u i32.lt_u
if if
local.get $4 local.get $1
i32.const 7 i32.const 7
i32.and i32.and
local.get $3 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
i32.eq i32.eq
if if
block $break|0 block $break|0
loop $continue|0 loop $continue|0
local.get $3 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
if if
block block
local.get $5 local.get $2
i32.eqz i32.eqz
if if
br $~lib/util/memory/memmove|inlined.0 br $~lib/util/memory/memmove|inlined.0
end end
local.get $5 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.set $5 local.set $2
block (result i32) block (result i32)
local.get $3 local.get $0
local.tee $6 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $3 local.set $0
local.get $6 local.get $3
end end
block (result i32) block (result i32)
local.get $4 local.get $1
local.tee $6 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $4 local.set $1
local.get $6 local.get $3
end end
i32.load8_u i32.load8_u
i32.store8 i32.store8
@ -2105,27 +2096,27 @@
end end
block $break|1 block $break|1
loop $continue|1 loop $continue|1
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.ge_u i32.ge_u
if if
block block
local.get $3 local.get $0
local.get $4 local.get $1
i64.load i64.load
i64.store i64.store
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.sub i32.sub
local.set $5 local.set $2
local.get $3 local.get $0
i32.const 8 i32.const 8
i32.add i32.add
local.set $3 local.set $0
local.get $4 local.get $1
i32.const 8 i32.const 8
i32.add i32.add
local.set $4 local.set $1
end end
br $continue|1 br $continue|1
end end
@ -2134,67 +2125,67 @@
end end
block $break|2 block $break|2
loop $continue|2 loop $continue|2
local.get $5 local.get $2
if if
block block
block (result i32) block (result i32)
local.get $3 local.get $0
local.tee $6 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $3 local.set $0
local.get $6 local.get $3
end end
block (result i32) block (result i32)
local.get $4 local.get $1
local.tee $6 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $4 local.set $1
local.get $6 local.get $3
end end
i32.load8_u i32.load8_u
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.set $5 local.set $2
end end
br $continue|2 br $continue|2
end end
end end
end end
else else
local.get $4 local.get $1
i32.const 7 i32.const 7
i32.and i32.and
local.get $3 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
i32.eq i32.eq
if if
block $break|3 block $break|3
loop $continue|3 loop $continue|3
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 7 i32.const 7
i32.and i32.and
if if
block block
local.get $5 local.get $2
i32.eqz i32.eqz
if if
br $~lib/util/memory/memmove|inlined.0 br $~lib/util/memory/memmove|inlined.0
end end
local.get $3 local.get $0
local.get $5 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $5 local.tee $2
i32.add i32.add
local.get $4 local.get $1
local.get $5 local.get $2
i32.add i32.add
i32.load8_u i32.load8_u
i32.store8 i32.store8
@ -2205,20 +2196,20 @@
end end
block $break|4 block $break|4
loop $continue|4 loop $continue|4
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.ge_u i32.ge_u
if if
block block
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.sub i32.sub
local.set $5 local.set $2
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
local.get $4 local.get $1
local.get $5 local.get $2
i32.add i32.add
i64.load i64.load
i64.store i64.store
@ -2230,16 +2221,16 @@
end end
block $break|5 block $break|5
loop $continue|5 loop $continue|5
local.get $5 local.get $2
if if
local.get $3 local.get $0
local.get $5 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $5 local.tee $2
i32.add i32.add
local.get $4 local.get $1
local.get $5 local.get $2
i32.add i32.add
i32.load8_u i32.load8_u
i32.store8 i32.store8
@ -3515,261 +3506,252 @@
(func $~lib/memory/memory.fill (; 33 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (func $~lib/memory/memory.fill (; 33 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
(local $5 i32) (local $5 i64)
(local $6 i32)
(local $7 i32)
(local $8 i64)
block $~lib/util/memory/memset|inlined.0 block $~lib/util/memory/memset|inlined.0
local.get $0
local.set $3
local.get $1
local.set $4
local.get $2 local.get $2
local.set $5
local.get $5
i32.eqz i32.eqz
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 1 i32.const 1
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 2 i32.const 2
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 1 i32.const 1
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
i32.const 2 i32.const 2
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 2 i32.const 2
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 3 i32.const 3
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 6 i32.const 6
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 3 i32.const 3
i32.add i32.add
local.get $4 local.get $1
i32.store8 i32.store8
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 4 i32.const 4
i32.sub i32.sub
local.get $4 local.get $1
i32.store8 i32.store8
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
i32.const 0 i32.const 0
local.get $3 local.get $0
i32.sub i32.sub
i32.const 3 i32.const 3
i32.and i32.and
local.set $6
local.get $3
local.get $6
i32.add
local.set $3 local.set $3
local.get $5 local.get $0
local.get $6 local.get $3
i32.add
local.set $0
local.get $2
local.get $3
i32.sub i32.sub
local.set $5 local.set $2
local.get $5 local.get $2
i32.const -4 i32.const -4
i32.and i32.and
local.set $5 local.set $2
i32.const -1 i32.const -1
i32.const 255 i32.const 255
i32.div_u i32.div_u
local.get $4 local.get $1
i32.const 255 i32.const 255
i32.and i32.and
i32.mul i32.mul
local.set $7 local.set $4
local.get $3 local.get $0
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 4 i32.const 4
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $5 local.get $2
i32.const 8 i32.const 8
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 4 i32.const 4
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 8 i32.const 8
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 12 i32.const 12
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 8 i32.const 8
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $5 local.get $2
i32.const 24 i32.const 24
i32.le_u i32.le_u
if if
br $~lib/util/memory/memset|inlined.0 br $~lib/util/memory/memset|inlined.0
end end
local.get $3 local.get $0
i32.const 12 i32.const 12
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 16 i32.const 16
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 20 i32.const 20
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
i32.const 24 i32.const 24
i32.add i32.add
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 28 i32.const 28
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 24 i32.const 24
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 20 i32.const 20
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
local.get $3 local.get $0
local.get $5 local.get $2
i32.add i32.add
i32.const 16 i32.const 16
i32.sub i32.sub
local.get $7 local.get $4
i32.store i32.store
i32.const 24 i32.const 24
local.get $3 local.get $0
i32.const 4 i32.const 4
i32.and i32.and
i32.add i32.add
local.set $6
local.get $3
local.get $6
i32.add
local.set $3 local.set $3
local.get $5 local.get $0
local.get $6 local.get $3
i32.add
local.set $0
local.get $2
local.get $3
i32.sub i32.sub
local.set $5 local.set $2
local.get $7 local.get $4
i64.extend_i32_u i64.extend_i32_u
local.get $7 local.get $4
i64.extend_i32_u i64.extend_i32_u
i64.const 32 i64.const 32
i64.shl i64.shl
i64.or i64.or
local.set $8 local.set $5
block $break|0 block $break|0
loop $continue|0 loop $continue|0
local.get $5 local.get $2
i32.const 32 i32.const 32
i32.ge_u i32.ge_u
if if
block block
local.get $3 local.get $0
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 8 i32.const 8
i32.add i32.add
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 16 i32.const 16
i32.add i32.add
local.get $8 local.get $5
i64.store i64.store
local.get $3 local.get $0
i32.const 24 i32.const 24
i32.add i32.add
local.get $8
i64.store
local.get $5 local.get $5
i64.store
local.get $2
i32.const 32 i32.const 32
i32.sub i32.sub
local.set $5 local.set $2
local.get $3 local.get $0
i32.const 32 i32.const 32
i32.add i32.add
local.set $3 local.set $0
end end
br $continue|0 br $continue|0
end end
@ -3928,10 +3910,10 @@
i32.lt_u i32.lt_u
if if
local.get $1 local.get $1
call $~lib/runtime/adjustToBlock call $~lib/runtime/ADJUSTOBLOCK
local.set $4 local.set $4
local.get $3 local.get $3
call $~lib/runtime/adjustToBlock call $~lib/runtime/ADJUSTOBLOCK
i32.const 0 i32.const 0
local.get $0 local.get $0
global.get $~lib/memory/HEAP_BASE global.get $~lib/memory/HEAP_BASE

View File

@ -2717,94 +2717,91 @@
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
block $~lib/util/memory/memmove|inlined.0 block $~lib/util/memory/memmove|inlined.0
local.get $2
local.set $3
local.get $1
local.get $0 local.get $0
local.tee $2 local.get $1
i32.eq i32.eq
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $1 local.get $1
local.get $3
i32.add
local.get $2 local.get $2
i32.add
local.get $0
i32.le_u i32.le_u
local.tee $0 local.tee $3
i32.eqz i32.eqz
if if
local.get $0
local.get $2 local.get $2
local.get $3
i32.add i32.add
local.get $1 local.get $1
i32.le_u i32.le_u
local.set $0 local.set $3
end end
local.get $0 local.get $3
if if
local.get $2 local.get $0
local.get $1 local.get $1
local.get $3 local.get $2
call $~lib/util/memory/memcpy call $~lib/util/memory/memcpy
br $~lib/util/memory/memmove|inlined.0 br $~lib/util/memory/memmove|inlined.0
end end
local.get $2 local.get $0
local.get $1 local.get $1
i32.lt_u i32.lt_u
if if
local.get $1 local.get $1
i32.const 7 i32.const 7
i32.and i32.and
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
i32.eq i32.eq
if if
loop $continue|0 loop $continue|0
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
if if
local.get $3 local.get $2
i32.eqz i32.eqz
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.set $3 local.set $2
local.get $2 local.get $0
local.tee $4 local.tee $4
i32.const 1 i32.const 1
i32.add i32.add
local.set $2 local.set $0
local.get $1 local.get $1
local.tee $0 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $1 local.set $1
local.get $4 local.get $4
local.get $0 local.get $3
i32.load8_u i32.load8_u
i32.store8 i32.store8
br $continue|0 br $continue|0
end end
end end
loop $continue|1 loop $continue|1
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.ge_u i32.ge_u
if if
local.get $2 local.get $0
local.get $1 local.get $1
i64.load i64.load
i64.store i64.store
local.get $3
i32.const 8
i32.sub
local.set $3
local.get $2 local.get $2
i32.const 8 i32.const 8
i32.add i32.sub
local.set $2 local.set $2
local.get $0
i32.const 8
i32.add
local.set $0
local.get $1 local.get $1
i32.const 8 i32.const 8
i32.add i32.add
@ -2814,26 +2811,26 @@
end end
end end
loop $continue|2 loop $continue|2
local.get $3 local.get $2
if if
local.get $2 local.get $0
local.tee $4 local.tee $4
i32.const 1 i32.const 1
i32.add i32.add
local.set $2 local.set $0
local.get $1 local.get $1
local.tee $0 local.tee $3
i32.const 1 i32.const 1
i32.add i32.add
local.set $1 local.set $1
local.get $4 local.get $4
local.get $0 local.get $3
i32.load8_u i32.load8_u
i32.store8 i32.store8
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.set $3 local.set $2
br $continue|2 br $continue|2
end end
end end
@ -2841,29 +2838,29 @@
local.get $1 local.get $1
i32.const 7 i32.const 7
i32.and i32.and
local.get $2 local.get $0
i32.const 7 i32.const 7
i32.and i32.and
i32.eq i32.eq
if if
loop $continue|3 loop $continue|3
local.get $0
local.get $2 local.get $2
local.get $3
i32.add i32.add
i32.const 7 i32.const 7
i32.and i32.and
if if
local.get $3 local.get $2
i32.eqz i32.eqz
br_if $~lib/util/memory/memmove|inlined.0 br_if $~lib/util/memory/memmove|inlined.0
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i32.load8_u i32.load8_u
i32.store8 i32.store8
@ -2871,18 +2868,18 @@
end end
end end
loop $continue|4 loop $continue|4
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.ge_u i32.ge_u
if if
local.get $3 local.get $2
i32.const 8 i32.const 8
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i64.load i64.load
i64.store i64.store
@ -2891,16 +2888,16 @@
end end
end end
loop $continue|5 loop $continue|5
local.get $3 local.get $2
if if
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $2 local.get $0
i32.add i32.add
local.get $1 local.get $1
local.get $3 local.get $2
i32.add i32.add
i32.load8_u i32.load8_u
i32.store8 i32.store8

File diff suppressed because it is too large Load Diff