Last active
December 15, 2015 09:49
-
-
Save charltoons/5240824 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html lang="en-us"> | |
<head> | |
<meta charset="utf-8"> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |
<title>Emscripten-Generated Code</title> | |
<style> | |
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; } | |
textarea.emscripten { font-family: monospace; width: 80%; } | |
div.emscripten { text-align: center; } | |
div.emscripten_border { border: 1px solid black; } | |
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */ | |
canvas.emscripten { border: 0px none; } | |
</style> | |
</head> | |
<body> | |
<hr/> | |
<div class="emscripten" id="status">Downloading...</div> | |
<div class="emscripten"> | |
<progress value="0" max="100" id="progress" hidden=1></progress> | |
</div> | |
<div class="emscripten_border"> | |
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas> | |
</div> | |
<hr/> | |
<div class="emscripten"> | |
<input type="checkbox" id="resize">Resize canvas | |
<input type="checkbox" id="pointerLock" checked>Lock/hide mouse pointer | |
| |
<input type="button" value="Fullscreen" onclick="Module.requestFullScreen(document.getElementById('pointerLock').checked, | |
document.getElementById('resize').checked)"> | |
</div> | |
<hr/> | |
<textarea class="emscripten" id="output" rows="8"></textarea> | |
<hr> | |
<script type='text/javascript'> | |
// connect to canvas | |
var Module = { | |
preRun: [], | |
postRun: [], | |
print: (function() { | |
var element = document.getElementById('output'); | |
element.value = ''; // clear browser cache | |
return function(text) { | |
text = Array.prototype.slice.call(arguments).join(' '); | |
// These replacements are necessary if you render to raw HTML | |
//text = text.replace(/&/g, "&"); | |
//text = text.replace(/</g, "<"); | |
//text = text.replace(/>/g, ">"); | |
//text = text.replace('\n', '<br>', 'g'); | |
element.value += text + "\n"; | |
element.scrollTop = 99999; // focus on bottom | |
}; | |
})(), | |
printErr: function(text) { | |
text = Array.prototype.slice.call(arguments).join(' '); | |
if (0) { // XXX disabled for safety typeof dump == 'function') { | |
dump(text + '\n'); // fast, straight to the real console | |
} else { | |
console.log(text); | |
} | |
}, | |
canvas: document.getElementById('canvas'), | |
setStatus: function(text) { | |
if (Module.setStatus.interval) clearInterval(Module.setStatus.interval); | |
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/); | |
var statusElement = document.getElementById('status'); | |
var progressElement = document.getElementById('progress'); | |
if (m) { | |
text = m[1]; | |
progressElement.value = parseInt(m[2])*100; | |
progressElement.max = parseInt(m[4])*100; | |
progressElement.hidden = false; | |
} else { | |
progressElement.value = null; | |
progressElement.max = null; | |
progressElement.hidden = true; | |
} | |
statusElement.innerHTML = text; | |
}, | |
totalDependencies: 0, | |
monitorRunDependencies: function(left) { | |
this.totalDependencies = Math.max(this.totalDependencies, left); | |
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.'); | |
} | |
}; | |
Module.setStatus('Downloading...'); | |
</script> | |
<script type='text/javascript'> | |
// Note: Some Emscripten settings will significantly limit the speed of the generated code. | |
// Note: Some Emscripten settings may limit the speed of the generated code. | |
try { | |
this['Module'] = Module; | |
} catch(e) { | |
this['Module'] = Module = {}; | |
} | |
// The environment setup code below is customized to use Module. | |
// *** Environment setup code *** | |
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function'; | |
var ENVIRONMENT_IS_WEB = typeof window === 'object'; | |
var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; | |
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; | |
if (ENVIRONMENT_IS_NODE) { | |
// Expose functionality in the same simple way that the shells work | |
// Note that we pollute the global namespace here, otherwise we break in node | |
Module['print'] = function(x) { | |
process['stdout'].write(x + '\n'); | |
}; | |
Module['printErr'] = function(x) { | |
process['stderr'].write(x + '\n'); | |
}; | |
var nodeFS = require('fs'); | |
var nodePath = require('path'); | |
Module['read'] = function(filename) { | |
filename = nodePath['normalize'](filename); | |
var ret = nodeFS['readFileSync'](filename).toString(); | |
// The path is absolute if the normalized version is the same as the resolved. | |
if (!ret && filename != nodePath['resolve'](filename)) { | |
filename = path.join(__dirname, '..', 'src', filename); | |
ret = nodeFS['readFileSync'](filename).toString(); | |
} | |
return ret; | |
}; | |
Module['load'] = function(f) { | |
globalEval(read(f)); | |
}; | |
if (!Module['arguments']) { | |
Module['arguments'] = process['argv'].slice(2); | |
} | |
} | |
if (ENVIRONMENT_IS_SHELL) { | |
Module['print'] = print; | |
if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm | |
// Polyfill over SpiderMonkey/V8 differences | |
if (typeof read != 'undefined') { | |
Module['read'] = read; | |
} else { | |
Module['read'] = function(f) { snarf(f) }; | |
} | |
if (!Module['arguments']) { | |
if (typeof scriptArgs != 'undefined') { | |
Module['arguments'] = scriptArgs; | |
} else if (typeof arguments != 'undefined') { | |
Module['arguments'] = arguments; | |
} | |
} | |
} | |
if (ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER) { | |
if (!Module['print']) { | |
Module['print'] = function(x) { | |
console.log(x); | |
}; | |
} | |
if (!Module['printErr']) { | |
Module['printErr'] = function(x) { | |
console.log(x); | |
}; | |
} | |
} | |
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { | |
Module['read'] = function(url) { | |
var xhr = new XMLHttpRequest(); | |
xhr.open('GET', url, false); | |
xhr.send(null); | |
return xhr.responseText; | |
}; | |
if (!Module['arguments']) { | |
if (typeof arguments != 'undefined') { | |
Module['arguments'] = arguments; | |
} | |
} | |
} | |
if (ENVIRONMENT_IS_WORKER) { | |
// We can do very little here... | |
var TRY_USE_DUMP = false; | |
if (!Module['print']) { | |
Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) { | |
dump(x); | |
}) : (function(x) { | |
// self.postMessage(x); // enable this if you want stdout to be sent as messages | |
})); | |
} | |
Module['load'] = importScripts; | |
} | |
if (!ENVIRONMENT_IS_WORKER && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_SHELL) { | |
// Unreachable because SHELL is dependant on the others | |
throw 'Unknown runtime environment. Where are we?'; | |
} | |
function globalEval(x) { | |
eval.call(null, x); | |
} | |
if (!Module['load'] == 'undefined' && Module['read']) { | |
Module['load'] = function(f) { | |
globalEval(Module['read'](f)); | |
}; | |
} | |
if (!Module['print']) { | |
Module['print'] = function(){}; | |
} | |
if (!Module['printErr']) { | |
Module['printErr'] = Module['print']; | |
} | |
if (!Module['arguments']) { | |
Module['arguments'] = []; | |
} | |
// *** Environment setup code *** | |
// Closure helpers | |
Module.print = Module['print']; | |
Module.printErr = Module['printErr']; | |
// Callbacks | |
if (!Module['preRun']) Module['preRun'] = []; | |
if (!Module['postRun']) Module['postRun'] = []; | |
// === Auto-generated preamble library stuff === | |
//======================================== | |
// Runtime code shared with compiler | |
//======================================== | |
var Runtime = { | |
stackSave: function () { | |
return STACKTOP; | |
}, | |
stackRestore: function (stackTop) { | |
STACKTOP = stackTop; | |
}, | |
forceAlign: function (target, quantum) { | |
quantum = quantum || 4; | |
if (quantum == 1) return target; | |
if (isNumber(target) && isNumber(quantum)) { | |
return Math.ceil(target/quantum)*quantum; | |
} else if (isNumber(quantum) && isPowerOfTwo(quantum)) { | |
var logg = log2(quantum); | |
return '((((' +target + ')+' + (quantum-1) + ')>>' + logg + ')<<' + logg + ')'; | |
} | |
return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum; | |
}, | |
isNumberType: function (type) { | |
return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES; | |
}, | |
isPointerType: function isPointerType(type) { | |
return type[type.length-1] == '*'; | |
}, | |
isStructType: function isStructType(type) { | |
if (isPointerType(type)) return false; | |
if (/^\[\d+\ x\ (.*)\]/.test(type)) return true; // [15 x ?] blocks. Like structs | |
if (/<?{ ?[^}]* ?}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types | |
// See comment in isStructPointerType() | |
return type[0] == '%'; | |
}, | |
INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0}, | |
FLOAT_TYPES: {"float":0,"double":0}, | |
or64: function (x, y) { | |
var l = (x | 0) | (y | 0); | |
var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296; | |
return l + h; | |
}, | |
and64: function (x, y) { | |
var l = (x | 0) & (y | 0); | |
var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296; | |
return l + h; | |
}, | |
xor64: function (x, y) { | |
var l = (x | 0) ^ (y | 0); | |
var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296; | |
return l + h; | |
}, | |
getNativeTypeSize: function (type, quantumSize) { | |
if (Runtime.QUANTUM_SIZE == 1) return 1; | |
var size = { | |
'%i1': 1, | |
'%i8': 1, | |
'%i16': 2, | |
'%i32': 4, | |
'%i64': 8, | |
"%float": 4, | |
"%double": 8 | |
}['%'+type]; // add '%' since float and double confuse Closure compiler as keys, and also spidermonkey as a compiler will remove 's from '_i8' etc | |
if (!size) { | |
if (type.charAt(type.length-1) == '*') { | |
size = Runtime.QUANTUM_SIZE; // A pointer | |
} else if (type[0] == 'i') { | |
var bits = parseInt(type.substr(1)); | |
assert(bits % 8 == 0); | |
size = bits/8; | |
} | |
} | |
return size; | |
}, | |
getNativeFieldSize: function (type) { | |
return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE); | |
}, | |
dedup: function dedup(items, ident) { | |
var seen = {}; | |
if (ident) { | |
return items.filter(function(item) { | |
if (seen[item[ident]]) return false; | |
seen[item[ident]] = true; | |
return true; | |
}); | |
} else { | |
return items.filter(function(item) { | |
if (seen[item]) return false; | |
seen[item] = true; | |
return true; | |
}); | |
} | |
}, | |
set: function set() { | |
var args = typeof arguments[0] === 'object' ? arguments[0] : arguments; | |
var ret = {}; | |
for (var i = 0; i < args.length; i++) { | |
ret[args[i]] = 0; | |
} | |
return ret; | |
}, | |
calculateStructAlignment: function calculateStructAlignment(type) { | |
type.flatSize = 0; | |
type.alignSize = 0; | |
var diffs = []; | |
var prev = -1; | |
type.flatIndexes = type.fields.map(function(field) { | |
var size, alignSize; | |
if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) { | |
size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s. | |
alignSize = size; | |
} else if (Runtime.isStructType(field)) { | |
size = Types.types[field].flatSize; | |
alignSize = Types.types[field].alignSize; | |
} else if (field[0] == 'b') { | |
// bN, large number field, like a [N x i8] | |
size = field.substr(1)|0; | |
alignSize = 1; | |
} else { | |
throw 'Unclear type in struct: ' + field + ', in ' + type.name_ + ' :: ' + dump(Types.types[type.name_]); | |
} | |
alignSize = type.packed ? 1 : Math.min(alignSize, Runtime.QUANTUM_SIZE); | |
type.alignSize = Math.max(type.alignSize, alignSize); | |
var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory | |
type.flatSize = curr + size; | |
if (prev >= 0) { | |
diffs.push(curr-prev); | |
} | |
prev = curr; | |
return curr; | |
}); | |
type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize); | |
if (diffs.length == 0) { | |
type.flatFactor = type.flatSize; | |
} else if (Runtime.dedup(diffs).length == 1) { | |
type.flatFactor = diffs[0]; | |
} | |
type.needsFlattening = (type.flatFactor != 1); | |
return type.flatIndexes; | |
}, | |
generateStructInfo: function (struct, typeName, offset) { | |
var type, alignment; | |
if (typeName) { | |
offset = offset || 0; | |
type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName]; | |
if (!type) return null; | |
if (type.fields.length != struct.length) { | |
printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo'); | |
return null; | |
} | |
alignment = type.flatIndexes; | |
} else { | |
var type = { fields: struct.map(function(item) { return item[0] }) }; | |
alignment = Runtime.calculateStructAlignment(type); | |
} | |
var ret = { | |
__size__: type.flatSize | |
}; | |
if (typeName) { | |
struct.forEach(function(item, i) { | |
if (typeof item === 'string') { | |
ret[item] = alignment[i] + offset; | |
} else { | |
// embedded struct | |
var key; | |
for (var k in item) key = k; | |
ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]); | |
} | |
}); | |
} else { | |
struct.forEach(function(item, i) { | |
ret[item[1]] = alignment[i]; | |
}); | |
} | |
return ret; | |
}, | |
dynCall: function (sig, ptr, args) { | |
if (args && args.length) { | |
assert(args.length == sig.length-1); | |
return FUNCTION_TABLE[ptr].apply(null, args); | |
} else { | |
assert(sig.length == 1); | |
return FUNCTION_TABLE[ptr](); | |
} | |
}, | |
addFunction: function (func, sig) { | |
//assert(sig); // TODO: support asm | |
var table = FUNCTION_TABLE; // TODO: support asm | |
var ret = table.length; | |
table.push(func); | |
table.push(0); | |
return ret; | |
}, | |
removeFunction: function (index) { | |
var table = FUNCTION_TABLE; // TODO: support asm | |
table[index] = null; | |
}, | |
warnOnce: function (text) { | |
if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {}; | |
if (!Runtime.warnOnce.shown[text]) { | |
Runtime.warnOnce.shown[text] = 1; | |
Module.printErr(text); | |
} | |
}, | |
funcWrappers: {}, | |
getFuncWrapper: function (func, sig) { | |
assert(sig); | |
if (!Runtime.funcWrappers[func]) { | |
Runtime.funcWrappers[func] = function() { | |
Runtime.dynCall(sig, func, arguments); | |
}; | |
} | |
return Runtime.funcWrappers[func]; | |
}, | |
UTF8Processor: function () { | |
var buffer = []; | |
var needed = 0; | |
this.processCChar = function (code) { | |
code = code & 0xff; | |
if (needed) { | |
buffer.push(code); | |
needed--; | |
} | |
if (buffer.length == 0) { | |
if (code < 128) return String.fromCharCode(code); | |
buffer.push(code); | |
if (code > 191 && code < 224) { | |
needed = 1; | |
} else { | |
needed = 2; | |
} | |
return ''; | |
} | |
if (needed > 0) return ''; | |
var c1 = buffer[0]; | |
var c2 = buffer[1]; | |
var c3 = buffer[2]; | |
var ret; | |
if (c1 > 191 && c1 < 224) { | |
ret = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); | |
} else { | |
ret = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); | |
} | |
buffer.length = 0; | |
return ret; | |
} | |
this.processJSString = function(string) { | |
string = unescape(encodeURIComponent(string)); | |
var ret = []; | |
for (var i = 0; i < string.length; i++) { | |
ret.push(string.charCodeAt(i)); | |
} | |
return ret; | |
} | |
}, | |
stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = ((((STACKTOP)+3)>>2)<<2);assert((STACKTOP|0) < (STACK_MAX|0)); return ret; }, | |
staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = ((((STATICTOP)+3)>>2)<<2); if (STATICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; }, | |
alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 4))*(quantum ? quantum : 4); return ret; }, | |
makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? (((low)>>>(0))+(((high)>>>(0))*4294967296)) : (((low)>>>(0))+(((high)|(0))*4294967296))); return ret; }, | |
QUANTUM_SIZE: 4, | |
__dummy__: 0 | |
} | |
//======================================== | |
// Runtime essentials | |
//======================================== | |
var __THREW__ = 0; // Used in checking for thrown exceptions. | |
var setjmpId = 1; // Used in setjmp/longjmp | |
var setjmpLabels = {}; | |
var ABORT = false; | |
var undef = 0; | |
// tempInt is used for 32-bit signed values or smaller. tempBigInt is used | |
// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt | |
var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD; | |
var tempI64, tempI64b; | |
var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9; | |
function abort(text) { | |
Module.print(text + ':\n' + (new Error).stack); | |
ABORT = true; | |
throw "Assertion: " + text; | |
} | |
function assert(condition, text) { | |
if (!condition) { | |
abort('Assertion failed: ' + text); | |
} | |
} | |
var globalScope = this; | |
// C calling interface. A convenient way to call C functions (in C files, or | |
// defined with extern "C"). | |
// | |
// Note: LLVM optimizations can inline and remove functions, after which you will not be | |
// able to call them. Closure can also do so. To avoid that, add your function to | |
// the exports using something like | |
// | |
// -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]' | |
// | |
// @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C") | |
// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and | |
// 'array' for JavaScript arrays and typed arrays). | |
// @param argTypes An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType, | |
// except that 'array' is not possible (there is no way for us to know the length of the array) | |
// @param args An array of the arguments to the function, as native JS values (as in returnType) | |
// Note that string arguments will be stored on the stack (the JS string will become a C string on the stack). | |
// @return The return value, as a native JS value (as in returnType) | |
function ccall(ident, returnType, argTypes, args) { | |
return ccallFunc(getCFunc(ident), returnType, argTypes, args); | |
} | |
Module["ccall"] = ccall; | |
// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) | |
function getCFunc(ident) { | |
try { | |
var func = globalScope['Module']['_' + ident]; // closure exported function | |
if (!func) func = eval('_' + ident); // explicit lookup | |
} catch(e) { | |
} | |
assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)'); | |
return func; | |
} | |
// Internal function that does a C call using a function, not an identifier | |
function ccallFunc(func, returnType, argTypes, args) { | |
var stack = 0; | |
function toC(value, type) { | |
if (type == 'string') { | |
if (value === null || value === undefined || value === 0) return 0; // null string | |
if (!stack) stack = Runtime.stackSave(); | |
var ret = Runtime.stackAlloc(value.length+1); | |
writeStringToMemory(value, ret); | |
return ret; | |
} else if (type == 'array') { | |
if (!stack) stack = Runtime.stackSave(); | |
var ret = Runtime.stackAlloc(value.length); | |
writeArrayToMemory(value, ret); | |
return ret; | |
} | |
return value; | |
} | |
function fromC(value, type) { | |
if (type == 'string') { | |
return Pointer_stringify(value); | |
} | |
assert(type != 'array'); | |
return value; | |
} | |
var i = 0; | |
var cArgs = args ? args.map(function(arg) { | |
return toC(arg, argTypes[i++]); | |
}) : []; | |
var ret = fromC(func.apply(null, cArgs), returnType); | |
if (stack) Runtime.stackRestore(stack); | |
return ret; | |
} | |
// Returns a native JS wrapper for a C function. This is similar to ccall, but | |
// returns a function you can call repeatedly in a normal way. For example: | |
// | |
// var my_function = cwrap('my_c_function', 'number', ['number', 'number']); | |
// alert(my_function(5, 22)); | |
// alert(my_function(99, 12)); | |
// | |
function cwrap(ident, returnType, argTypes) { | |
var func = getCFunc(ident); | |
return function() { | |
return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments)); | |
} | |
} | |
Module["cwrap"] = cwrap; | |
// Sets a value in memory in a dynamic way at run-time. Uses the | |
// type data. This is the same as makeSetValue, except that | |
// makeSetValue is done at compile-time and generates the needed | |
// code then, whereas this function picks the right code at | |
// run-time. | |
// Note that setValue and getValue only do *aligned* writes and reads! | |
// Note that ccall uses JS types as for defining types, while setValue and | |
// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation | |
function setValue(ptr, value, type, noSafe) { | |
type = type || 'i8'; | |
if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit | |
switch(type) { | |
case 'i1': HEAP8[(ptr)]=value; break; | |
case 'i8': HEAP8[(ptr)]=value; break; | |
case 'i16': HEAP16[((ptr)>>1)]=value; break; | |
case 'i32': HEAP32[((ptr)>>2)]=value; break; | |
case 'i64': (tempI64 = [value>>>0,Math.min(Math.floor((value)/4294967296), 4294967295)>>>0],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break; | |
case 'float': HEAPF32[((ptr)>>2)]=value; break; | |
case 'double': (HEAPF64[(tempDoublePtr)>>3]=value,HEAP32[((ptr)>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[(((ptr)+(4))>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]); break; | |
default: abort('invalid type for setValue: ' + type); | |
} | |
} | |
Module['setValue'] = setValue; | |
// Parallel to setValue. | |
function getValue(ptr, type, noSafe) { | |
type = type || 'i8'; | |
if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit | |
switch(type) { | |
case 'i1': return HEAP8[(ptr)]; | |
case 'i8': return HEAP8[(ptr)]; | |
case 'i16': return HEAP16[((ptr)>>1)]; | |
case 'i32': return HEAP32[((ptr)>>2)]; | |
case 'i64': return HEAP32[((ptr)>>2)]; | |
case 'float': return HEAPF32[((ptr)>>2)]; | |
case 'double': return (HEAP32[((tempDoublePtr)>>2)]=HEAP32[((ptr)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[(((ptr)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
default: abort('invalid type for setValue: ' + type); | |
} | |
return null; | |
} | |
Module['getValue'] = getValue; | |
var ALLOC_NORMAL = 0; // Tries to use _malloc() | |
var ALLOC_STACK = 1; // Lives for the duration of the current function call | |
var ALLOC_STATIC = 2; // Cannot be freed | |
var ALLOC_NONE = 3; // Do not allocate | |
Module['ALLOC_NORMAL'] = ALLOC_NORMAL; | |
Module['ALLOC_STACK'] = ALLOC_STACK; | |
Module['ALLOC_STATIC'] = ALLOC_STATIC; | |
Module['ALLOC_NONE'] = ALLOC_NONE; | |
// allocate(): This is for internal use. You can use it yourself as well, but the interface | |
// is a little tricky (see docs right below). The reason is that it is optimized | |
// for multiple syntaxes to save space in generated code. So you should | |
// normally not use allocate(), and instead allocate memory using _malloc(), | |
// initialize it with setValue(), and so forth. | |
// @slab: An array of data, or a number. If a number, then the size of the block to allocate, | |
// in *bytes* (note that this is sometimes confusing: the next parameter does not | |
// affect this!) | |
// @types: Either an array of types, one for each byte (or 0 if no type at that position), | |
// or a single type which is used for the entire block. This only matters if there | |
// is initial data - if @slab is a number, then this does not matter at all and is | |
// ignored. | |
// @allocator: How to allocate memory, see ALLOC_* | |
function allocate(slab, types, allocator, ptr) { | |
var zeroinit, size; | |
if (typeof slab === 'number') { | |
zeroinit = true; | |
size = slab; | |
} else { | |
zeroinit = false; | |
size = slab.length; | |
} | |
var singleType = typeof types === 'string' ? types : null; | |
var ret; | |
if (allocator == ALLOC_NONE) { | |
ret = ptr; | |
} else { | |
ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); | |
} | |
if (zeroinit) { | |
var ptr = ret, stop; | |
assert((ret & 3) == 0); | |
stop = ret + (size & ~3); | |
for (; ptr < stop; ptr += 4) { | |
HEAP32[((ptr)>>2)]=0; | |
} | |
stop = ret + size; | |
while (ptr < stop) { | |
HEAP8[((ptr++)|0)]=0; | |
} | |
return ret; | |
} | |
if (singleType === 'i8') { | |
HEAPU8.set(new Uint8Array(slab), ret); | |
return ret; | |
} | |
var i = 0, type, typeSize, previousType; | |
while (i < size) { | |
var curr = slab[i]; | |
if (typeof curr === 'function') { | |
curr = Runtime.getFunctionIndex(curr); | |
} | |
type = singleType || types[i]; | |
if (type === 0) { | |
i++; | |
continue; | |
} | |
assert(type, 'Must know what type to store in allocate!'); | |
if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later | |
setValue(ret+i, curr, type); | |
// no need to look up size unless type changes, so cache it | |
if (previousType !== type) { | |
typeSize = Runtime.getNativeTypeSize(type); | |
previousType = type; | |
} | |
i += typeSize; | |
} | |
return ret; | |
} | |
Module['allocate'] = allocate; | |
function Pointer_stringify(ptr, /* optional */ length) { | |
// Find the length, and check for UTF while doing so | |
var hasUtf = false; | |
var t; | |
var i = 0; | |
while (1) { | |
t = HEAPU8[(((ptr)+(i))|0)]; | |
if (t >= 128) hasUtf = true; | |
else if (t == 0 && !length) break; | |
i++; | |
if (length && i == length) break; | |
} | |
if (!length) length = i; | |
var ret = ''; | |
if (!hasUtf) { | |
var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack | |
var curr; | |
while (length > 0) { | |
curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); | |
ret = ret ? ret + curr : curr; | |
ptr += MAX_CHUNK; | |
length -= MAX_CHUNK; | |
} | |
return ret; | |
} | |
var utf8 = new Runtime.UTF8Processor(); | |
for (i = 0; i < length; i++) { | |
assert(ptr + i < TOTAL_MEMORY); | |
t = HEAPU8[(((ptr)+(i))|0)]; | |
ret += utf8.processCChar(t); | |
} | |
return ret; | |
} | |
Module['Pointer_stringify'] = Pointer_stringify; | |
// Memory management | |
var PAGE_SIZE = 4096; | |
function alignMemoryPage(x) { | |
return ((x+4095)>>12)<<12; | |
} | |
var HEAP; | |
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; | |
var STACK_ROOT, STACKTOP, STACK_MAX; | |
var STATICTOP; | |
function enlargeMemory() { | |
abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value, (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.'); | |
} | |
var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; | |
var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216; | |
var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152; | |
// Initialize the runtime's memory | |
// check for full engine support (use string 'subarray' to avoid closure compiler confusion) | |
assert(!!Int32Array && !!Float64Array && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']), | |
'Cannot fallback to non-typed array case: Code is too specialized'); | |
var buffer = new ArrayBuffer(TOTAL_MEMORY); | |
HEAP8 = new Int8Array(buffer); | |
HEAP16 = new Int16Array(buffer); | |
HEAP32 = new Int32Array(buffer); | |
HEAPU8 = new Uint8Array(buffer); | |
HEAPU16 = new Uint16Array(buffer); | |
HEAPU32 = new Uint32Array(buffer); | |
HEAPF32 = new Float32Array(buffer); | |
HEAPF64 = new Float64Array(buffer); | |
// Endianness check (note: assumes compiler arch was little-endian) | |
HEAP32[0] = 255; | |
assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system'); | |
Module['HEAP'] = HEAP; | |
Module['HEAP8'] = HEAP8; | |
Module['HEAP16'] = HEAP16; | |
Module['HEAP32'] = HEAP32; | |
Module['HEAPU8'] = HEAPU8; | |
Module['HEAPU16'] = HEAPU16; | |
Module['HEAPU32'] = HEAPU32; | |
Module['HEAPF32'] = HEAPF32; | |
Module['HEAPF64'] = HEAPF64; | |
STACK_ROOT = STACKTOP = Runtime.alignMemory(1); | |
STACK_MAX = TOTAL_STACK; // we lose a little stack here, but TOTAL_STACK is nice and round so use that as the max | |
var tempDoublePtr = Runtime.alignMemory(allocate(12, 'i8', ALLOC_STACK), 8); | |
assert(tempDoublePtr % 8 == 0); | |
function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much | |
HEAP8[tempDoublePtr] = HEAP8[ptr]; | |
HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; | |
HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; | |
HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; | |
} | |
function copyTempDouble(ptr) { | |
HEAP8[tempDoublePtr] = HEAP8[ptr]; | |
HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; | |
HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; | |
HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; | |
HEAP8[tempDoublePtr+4] = HEAP8[ptr+4]; | |
HEAP8[tempDoublePtr+5] = HEAP8[ptr+5]; | |
HEAP8[tempDoublePtr+6] = HEAP8[ptr+6]; | |
HEAP8[tempDoublePtr+7] = HEAP8[ptr+7]; | |
} | |
STATICTOP = STACK_MAX; | |
assert(STATICTOP < TOTAL_MEMORY); // Stack must fit in TOTAL_MEMORY; allocations from here on may enlarge TOTAL_MEMORY | |
var nullString = allocate(intArrayFromString('(null)'), 'i8', ALLOC_STACK); | |
function callRuntimeCallbacks(callbacks) { | |
while(callbacks.length > 0) { | |
var callback = callbacks.shift(); | |
var func = callback.func; | |
if (typeof func === 'number') { | |
if (callback.arg === undefined) { | |
Runtime.dynCall('v', func); | |
} else { | |
Runtime.dynCall('vi', func, [callback.arg]); | |
} | |
} else { | |
func(callback.arg === undefined ? null : callback.arg); | |
} | |
} | |
} | |
var __ATINIT__ = []; // functions called during startup | |
var __ATMAIN__ = []; // functions called when main() is to be run | |
var __ATEXIT__ = []; // functions called during shutdown | |
function initRuntime() { | |
callRuntimeCallbacks(__ATINIT__); | |
} | |
function preMain() { | |
callRuntimeCallbacks(__ATMAIN__); | |
} | |
function exitRuntime() { | |
callRuntimeCallbacks(__ATEXIT__); | |
} | |
// Tools | |
// This processes a JS string into a C-line array of numbers, 0-terminated. | |
// For LLVM-originating strings, see parser.js:parseLLVMString function | |
function intArrayFromString(stringy, dontAddNull, length /* optional */) { | |
var ret = (new Runtime.UTF8Processor()).processJSString(stringy); | |
if (length) { | |
ret.length = length; | |
} | |
if (!dontAddNull) { | |
ret.push(0); | |
} | |
return ret; | |
} | |
Module['intArrayFromString'] = intArrayFromString; | |
function intArrayToString(array) { | |
var ret = []; | |
for (var i = 0; i < array.length; i++) { | |
var chr = array[i]; | |
if (chr > 0xFF) { | |
assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); | |
chr &= 0xFF; | |
} | |
ret.push(String.fromCharCode(chr)); | |
} | |
return ret.join(''); | |
} | |
Module['intArrayToString'] = intArrayToString; | |
// Write a Javascript array to somewhere in the heap | |
function writeStringToMemory(string, buffer, dontAddNull) { | |
var array = intArrayFromString(string, dontAddNull); | |
var i = 0; | |
while (i < array.length) { | |
var chr = array[i]; | |
HEAP8[(((buffer)+(i))|0)]=chr | |
i = i + 1; | |
} | |
} | |
Module['writeStringToMemory'] = writeStringToMemory; | |
function writeArrayToMemory(array, buffer) { | |
for (var i = 0; i < array.length; i++) { | |
HEAP8[(((buffer)+(i))|0)]=array[i]; | |
} | |
} | |
Module['writeArrayToMemory'] = writeArrayToMemory; | |
function unSign(value, bits, ignore, sig) { | |
if (value >= 0) { | |
return value; | |
} | |
return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts | |
: Math.pow(2, bits) + value; | |
} | |
function reSign(value, bits, ignore, sig) { | |
if (value <= 0) { | |
return value; | |
} | |
var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 | |
: Math.pow(2, bits-1); | |
if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that | |
// but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors | |
// TODO: In i64 mode 1, resign the two parts separately and safely | |
value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts | |
} | |
return value; | |
} | |
if (!Math.imul) Math.imul = function(a, b) { | |
var ah = a >>> 16; | |
var al = a & 0xffff; | |
var bh = b >>> 16; | |
var bl = b & 0xffff; | |
return (al*bl + ((ah*bl + al*bh) << 16))|0; | |
}; | |
// A counter of dependencies for calling run(). If we need to | |
// do asynchronous work before running, increment this and | |
// decrement it. Incrementing must happen in a place like | |
// PRE_RUN_ADDITIONS (used by emcc to add file preloading). | |
// Note that you can add dependencies in preRun, even though | |
// it happens right before run - run will be postponed until | |
// the dependencies are met. | |
var runDependencies = 0; | |
var runDependencyTracking = {}; | |
var calledRun = false; | |
var runDependencyWatcher = null; | |
function addRunDependency(id) { | |
runDependencies++; | |
if (Module['monitorRunDependencies']) { | |
Module['monitorRunDependencies'](runDependencies); | |
} | |
if (id) { | |
assert(!runDependencyTracking[id]); | |
runDependencyTracking[id] = 1; | |
if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { | |
// Check for missing dependencies every few seconds | |
runDependencyWatcher = setInterval(function() { | |
var shown = false; | |
for (var dep in runDependencyTracking) { | |
if (!shown) { | |
shown = true; | |
Module.printErr('still waiting on run dependencies:'); | |
} | |
Module.printErr('dependency: ' + dep); | |
} | |
if (shown) { | |
Module.printErr('(end of list)'); | |
} | |
}, 6000); | |
} | |
} else { | |
Module.printErr('warning: run dependency added without ID'); | |
} | |
} | |
Module['addRunDependency'] = addRunDependency; | |
function removeRunDependency(id) { | |
runDependencies--; | |
if (Module['monitorRunDependencies']) { | |
Module['monitorRunDependencies'](runDependencies); | |
} | |
if (id) { | |
assert(runDependencyTracking[id]); | |
delete runDependencyTracking[id]; | |
} else { | |
Module.printErr('warning: run dependency removed without ID'); | |
} | |
if (runDependencies == 0) { | |
if (runDependencyWatcher !== null) { | |
clearInterval(runDependencyWatcher); | |
runDependencyWatcher = null; | |
} | |
// If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) | |
if (!calledRun && shouldRunNow) run(); | |
} | |
} | |
Module['removeRunDependency'] = removeRunDependency; | |
Module["preloadedImages"] = {}; // maps url to image data | |
Module["preloadedAudios"] = {}; // maps url to audio data | |
// === Body === | |
assert(STATICTOP == STACK_MAX); assert(STACK_MAX == TOTAL_STACK); | |
STATICTOP += 1832; | |
assert(STATICTOP < TOTAL_MEMORY); | |
allocate([0,0,160,65,0,0,240,65,0,0,0,0], "i8", ALLOC_NONE, 5242880); | |
allocate([97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,112,111,115,105,116,105,111,110,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,110,111,114,109,97,108,59,10,10,117,110,105,102,111,114,109,32,109,97,116,52,32,77,111,100,101,108,86,105,101,119,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,78,111,114,109,97,108,77,97,116,114,105,120,59,10,117,110,105,102,111,114,109,32,118,101,99,52,32,76,105,103,104,116,83,111,117,114,99,101,80,111,115,105,116,105,111,110,59,10,117,110,105,102,111,114,109,32,118,101,99,52,32,77,97,116,101,114,105,97,108,67,111,108,111,114,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,47,47,32,84,114,97,110,115,102,111,114,109,32,116,104,101,32,110,111,114,109,97,108,32,116,111,32,101,121,101,32,99,111,111,114,100,105,110,97,116,101,115,10,32,32,32,32,118,101,99,51,32,78,32,61,32,110,111,114,109,97,108,105,122,101,40,118,101,99,51,40,78,111,114,109,97,108,77,97,116,114,105,120,32,42,32,118,101,99,52,40,110,111,114,109,97,108,44,32,49,46,48,41,41,41,59,10,10,32,32,32,32,47,47,32,84,104,101,32,76,105,103,104,116,83,111,117,114,99,101,80,111,115,105,116,105,111,110,32,105,115,32,97,99,116,117,97,108,108,121,32,105,116,115,32,100,105,114,101,99,116,105,111,110,32,102,111,114,32,100,105,114,101,99,116,105,111,110,97,108,32,108,105,103,104,116,10,32,32,32,32,118,101,99,51,32,76,32,61,32,110,111,114,109,97,108,105,122,101,40,76,105,103,104,116,83,111,117,114,99,101,80,111,115,105,116,105,111,110,46,120,121,122,41,59,10,10,32,32,32,32,47,47,32,77,117,108,116,105,112,108,121,32,116,104,101,32,100,105,102,102,117,115,101,32,118,97,108,117,101,32,98,121,32,116,104,101,32,118,101,114,116,101,120,32,99,111,108,111,114,32,40,119,104,105,99,104,32,105,115,32,102,105,120,101,100,32,105,110,32,116,104,105,115,32,99,97,115,101,41,10,32,32,32,32,47,47,32,116,111,32,103,101,116,32,116,104,101,32,97,99,116,117,97,108,32,99,111,108,111,114,32,116,104,97,116,32,119,101,32,119,105,108,108,32,117,115,101,32,116,111,32,100,114,97,119,32,116,104,105,115,32,118,101,114,116,101,120,32,119,105,116,104,10,32,32,32,32,102,108,111,97,116,32,100,105,102,102,117,115,101,32,61,32,109,97,120,40,100,111,116,40,78,44,32,76,41,44,32,48,46,48,41,59,10,32,32,32,32,67,111,108,111,114,32,61,32,100,105,102,102,117,115,101,32,42,32,77,97,116,101,114,105,97,108,67,111,108,111,114,59,10,10,32,32,32,32,47,47,32,84,114,97,110,115,102,111,114,109,32,116,104,101,32,112,111,115,105,116,105,111,110,32,116,111,32,99,108,105,112,32,99,111,111,114,100,105,110,97,116,101,115,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,77,111,100,101,108,86,105,101,119,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,32,42,32,118,101,99,52,40,112,111,115,105,116,105,111,110,44,32,49,46,48,41,59,10,125,0] /* attribute vec3 posit */, "i8", ALLOC_NONE, 5242892); | |
allocate(24, "i8", ALLOC_NONE, 5243708); | |
allocate([0,0,0,0,0,0,240,191], "i8", ALLOC_NONE, 5243732); | |
allocate([0,0,0,0,0,0,240,191], "i8", ALLOC_NONE, 5243740); | |
allocate(4, "i8", ALLOC_NONE, 5243748); | |
allocate([205,204,76,63,205,204,204,61,0,0,0,0,0,0,128,63], "i8", ALLOC_NONE, 5243752); | |
allocate([0,0,0,0,205,204,76,63,205,204,76,62,0,0,128,63], "i8", ALLOC_NONE, 5243768); | |
allocate([205,204,76,62,205,204,76,62,0,0,128,63,0,0,128,63], "i8", ALLOC_NONE, 5243784); | |
allocate(4, "i8", ALLOC_NONE, 5243800); | |
allocate(4, "i8", ALLOC_NONE, 5243804); | |
allocate(4, "i8", ALLOC_NONE, 5243808); | |
allocate([35,105,102,100,101,102,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,109,101,100,105,117,109,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,118,97,114,121,105,110,103,32,118,101,99,52,32,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,67,111,108,111,114,59,10,125,0] /* #ifdef GL_ES\0Apreci */, "i8", ALLOC_NONE, 5243812); | |
allocate(4, "i8", ALLOC_NONE, 5243924); | |
allocate([77,97,116,101,114,105,97,108,67,111,108,111,114,0] /* MaterialColor\00 */, "i8", ALLOC_NONE, 5243928); | |
allocate([76,105,103,104,116,83,111,117,114,99,101,80,111,115,105,116,105,111,110,0] /* LightSourcePosition\ */, "i8", ALLOC_NONE, 5243944); | |
allocate([78,111,114,109,97,108,77,97,116,114,105,120,0] /* NormalMatrix\00 */, "i8", ALLOC_NONE, 5243964); | |
allocate([77,111,100,101,108,86,105,101,119,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,0] /* ModelViewProjectionM */, "i8", ALLOC_NONE, 5243980); | |
allocate([105,110,102,111,58,32,37,115,10,0] /* info: %s\0A\00 */, "i8", ALLOC_NONE, 5244008); | |
allocate([110,111,114,109,97,108,0] /* normal\00 */, "i8", ALLOC_NONE, 5244020); | |
allocate([112,111,115,105,116,105,111,110,0] /* position\00 */, "i8", ALLOC_NONE, 5244028); | |
allocate([102,114,97,103,109,101,110,116,32,115,104,97,100,101,114,32,105,110,102,111,58,32,37,115,10,0] /* fragment shader info */, "i8", ALLOC_NONE, 5244040); | |
allocate([37,100,32,102,114,97,109,101,115,32,105,110,32,37,51,46,49,102,32,115,101,99,111,110,100,115,32,61,32,37,54,46,51,102,32,70,80,83,10,0] /* %d frames in %3.1f s */, "i8", ALLOC_NONE, 5244068); | |
allocate([118,101,114,116,101,120,32,115,104,97,100,101,114,32,105,110,102,111,58,32,37,115,10,0] /* vertex shader info: */, "i8", ALLOC_NONE, 5244108); | |
allocate([101,115,50,103,101,97,114,115,0] /* es2gears\00 */, "i8", ALLOC_NONE, 5244132); | |
allocate(472, "i8", ALLOC_NONE, 5244144); | |
allocate(64, "i8", ALLOC_NONE, 5244616); | |
allocate(4, "i8", ALLOC_NONE, 5244680); | |
allocate(4, "i8", ALLOC_NONE, 5244684); | |
allocate(4, "i8", ALLOC_NONE, 5244688); | |
allocate(4, "i8", ALLOC_NONE, 5244692); | |
allocate([0,0,160,64,0,0,160,64,0,0,32,65,0,0,128,63], "i8", ALLOC_NONE, 5244696); | |
function _memcpy(dest, src, num) { | |
dest = dest|0; src = src|0; num = num|0; | |
var ret = 0; | |
ret = dest|0; | |
if ((dest&3) == (src&3)) { | |
while (dest & 3) { | |
if ((num|0) == 0) return ret|0; | |
HEAP8[(dest)]=HEAP8[(src)]; | |
dest = (dest+1)|0; | |
src = (src+1)|0; | |
num = (num-1)|0; | |
} | |
while ((num|0) >= 4) { | |
HEAP32[((dest)>>2)]=HEAP32[((src)>>2)]; | |
dest = (dest+4)|0; | |
src = (src+4)|0; | |
num = (num-4)|0; | |
} | |
} | |
while ((num|0) > 0) { | |
HEAP8[(dest)]=HEAP8[(src)]; | |
dest = (dest+1)|0; | |
src = (src+1)|0; | |
num = (num-1)|0; | |
} | |
return ret|0; | |
}var _llvm_memcpy_p0i8_p0i8_i32=_memcpy; | |
var GLUT={initTime:null,idleFunc:null,displayFunc:null,keyboardFunc:null,keyboardUpFunc:null,specialFunc:null,specialUpFunc:null,reshapeFunc:null,motionFunc:null,passiveMotionFunc:null,mouseFunc:null,lastX:0,lastY:0,buttons:0,modifiers:0,initWindowWidth:256,initWindowHeight:256,windowX:0,windowY:0,windowWidth:0,windowHeight:0,savePosition:function (event) { | |
/* TODO maybe loop here ala http://www.quirksmode.org/js/findpos.html */ | |
GLUT.lastX = event['clientX'] - Module['canvas'].offsetLeft; | |
GLUT.lastY = event['clientY'] - Module['canvas'].offsetTop; | |
},saveModifiers:function (event) { | |
GLUT.modifiers = 0; | |
if (event['shiftKey']) | |
GLUT.modifiers += 1; /* GLUT_ACTIVE_SHIFT */ | |
if (event['ctrlKey']) | |
GLUT.modifiers += 2; /* GLUT_ACTIVE_CTRL */ | |
if (event['altKey']) | |
GLUT.modifiers += 4; /* GLUT_ACTIVE_ALT */ | |
},onMousemove:function (event) { | |
/* Send motion event only if the motion changed, prevents | |
* spamming our app with uncessary callback call. It does happen in | |
* Chrome on Windows. | |
*/ | |
var newX = event['clientX'] - Module['canvas'].offsetLeft; | |
var newY = event['clientY'] - Module['canvas'].offsetTop; | |
if (newX == GLUT.lastX && newY == GLUT.lastY) | |
return; | |
GLUT.savePosition(event); | |
if (GLUT.buttons == 0 && event.target == Module["canvas"] && GLUT.passiveMotionFunc) { | |
event.preventDefault(); | |
GLUT.saveModifiers(event); | |
Runtime.dynCall('vii', GLUT.passiveMotionFunc, [GLUT.lastX, GLUT.lastY]); | |
} else if (GLUT.buttons != 0 && GLUT.motionFunc) { | |
event.preventDefault(); | |
GLUT.saveModifiers(event); | |
Runtime.dynCall('vii', GLUT.motionFunc, [GLUT.lastX, GLUT.lastY]); | |
} | |
},getSpecialKey:function (keycode) { | |
var key = null; | |
switch (keycode) { | |
case 0x70 /*DOM_VK_F1*/: key = 1 /* GLUT_KEY_F1 */; break; | |
case 0x71 /*DOM_VK_F2*/: key = 2 /* GLUT_KEY_F2 */; break; | |
case 0x72 /*DOM_VK_F3*/: key = 3 /* GLUT_KEY_F3 */; break; | |
case 0x73 /*DOM_VK_F4*/: key = 4 /* GLUT_KEY_F4 */; break; | |
case 0x74 /*DOM_VK_F5*/: key = 5 /* GLUT_KEY_F5 */; break; | |
case 0x75 /*DOM_VK_F6*/: key = 6 /* GLUT_KEY_F6 */; break; | |
case 0x76 /*DOM_VK_F7*/: key = 7 /* GLUT_KEY_F7 */; break; | |
case 0x77 /*DOM_VK_F8*/: key = 8 /* GLUT_KEY_F8 */; break; | |
case 0x78 /*DOM_VK_F9*/: key = 9 /* GLUT_KEY_F9 */; break; | |
case 0x79 /*DOM_VK_F10*/: key = 10 /* GLUT_KEY_F10 */; break; | |
case 0x7a /*DOM_VK_F11*/: key = 11 /* GLUT_KEY_F11 */; break; | |
case 0x7b /*DOM_VK_F12*/: key = 12 /* GLUT_KEY_F12 */; break; | |
case 0x25 /*DOM_VK_LEFT*/: key = 100 /* GLUT_KEY_LEFT */; break; | |
case 0x26 /*DOM_VK_UP*/: key = 101 /* GLUT_KEY_UP */; break; | |
case 0x27 /*DOM_VK_RIGHT*/: key = 102 /* GLUT_KEY_RIGHT */; break; | |
case 0x28 /*DOM_VK_DOWN*/: key = 103 /* GLUT_KEY_DOWN */; break; | |
case 0x21 /*DOM_VK_PAGE_UP*/: key = 104 /* GLUT_KEY_PAGE_UP */; break; | |
case 0x22 /*DOM_VK_PAGE_DOWN*/: key = 105 /* GLUT_KEY_PAGE_DOWN */; break; | |
case 0x24 /*DOM_VK_HOME*/: key = 106 /* GLUT_KEY_HOME */; break; | |
case 0x23 /*DOM_VK_END*/: key = 107 /* GLUT_KEY_END */; break; | |
case 0x2d /*DOM_VK_INSERT*/: key = 108 /* GLUT_KEY_INSERT */; break; | |
case 16 /*DOM_VK_SHIFT*/: | |
case 0x05 /*DOM_VK_LEFT_SHIFT*/: | |
key = 112 /* GLUT_KEY_SHIFT_L */; | |
break; | |
case 0x06 /*DOM_VK_RIGHT_SHIFT*/: | |
key = 113 /* GLUT_KEY_SHIFT_R */; | |
break; | |
case 17 /*DOM_VK_CONTROL*/: | |
case 0x03 /*DOM_VK_LEFT_CONTROL*/: | |
key = 114 /* GLUT_KEY_CONTROL_L */; | |
break; | |
case 0x04 /*DOM_VK_RIGHT_CONTROL*/: | |
key = 115 /* GLUT_KEY_CONTROL_R */; | |
break; | |
case 18 /*DOM_VK_ALT*/: | |
case 0x02 /*DOM_VK_LEFT_ALT*/: | |
key = 116 /* GLUT_KEY_ALT_L */; | |
break; | |
case 0x01 /*DOM_VK_RIGHT_ALT*/: | |
key = 117 /* GLUT_KEY_ALT_R */; | |
break; | |
}; | |
return key; | |
},getASCIIKey:function (event) { | |
if (event['ctrlKey'] || event['altKey'] || event['metaKey']) return null; | |
var keycode = event['keyCode']; | |
/* The exact list is soooo hard to find in a canonical place! */ | |
if (48 <= keycode && keycode <= 57) | |
return keycode; // numeric TODO handle shift? | |
if (65 <= keycode && keycode <= 90) | |
return event['shiftKey'] ? keycode : keycode + 32; | |
if (106 <= keycode && keycode <= 111) | |
return keycode - 106 + 42; // *,+-./ TODO handle shift? | |
switch (keycode) { | |
case 27: // escape | |
case 32: // space | |
case 61: // equal | |
return keycode; | |
} | |
var s = event['shiftKey']; | |
switch (keycode) { | |
case 186: return s ? 58 : 59; // colon / semi-colon | |
case 187: return s ? 43 : 61; // add / equal (these two may be wrong) | |
case 188: return s ? 60 : 44; // less-than / comma | |
case 189: return s ? 95 : 45; // dash | |
case 190: return s ? 62 : 46; // greater-than / period | |
case 191: return s ? 63 : 47; // forward slash | |
case 219: return s ? 123 : 91; // open bracket | |
case 220: return s ? 124 : 47; // back slash | |
case 221: return s ? 125 : 93; // close braket | |
case 222: return s ? 34 : 39; // single quote | |
} | |
return null; | |
},onKeydown:function (event) { | |
if (GLUT.specialFunc || GLUT.keyboardFunc) { | |
var key = GLUT.getSpecialKey(event['keyCode']); | |
if (key !== null) { | |
if( GLUT.specialFunc ) { | |
event.preventDefault(); | |
GLUT.saveModifiers(event); | |
Runtime.dynCall('viii', GLUT.specialFunc, [key, GLUT.lastX, GLUT.lastY]); | |
} | |
} | |
else | |
{ | |
key = GLUT.getASCIIKey(event); | |
if( key !== null && GLUT.keyboardFunc ) { | |
event.preventDefault(); | |
GLUT.saveModifiers(event); | |
Runtime.dynCall('viii', GLUT.keyboardFunc, [key, GLUT.lastX, GLUT.lastY]); | |
} | |
} | |
} | |
},onKeyup:function (event) { | |
if (GLUT.specialUpFunc || GLUT.keyboardUpFunc) { | |
var key = GLUT.getSpecialKey(event['keyCode']); | |
if (key !== null) { | |
if(GLUT.specialUpFunc) { | |
event.preventDefault (); | |
GLUT.saveModifiers(event); | |
Runtime.dynCall('viii', GLUT.specialUpFunc, [key, GLUT.lastX, GLUT.lastY]); | |
} | |
} | |
else | |
{ | |
key = GLUT.getASCIIKey(event); | |
if( key !== null && GLUT.keyboardUpFunc ) { | |
event.preventDefault (); | |
GLUT.saveModifiers(event); | |
Runtime.dynCall('viii', GLUT.keyboardUpFunc, [key, GLUT.lastX, GLUT.lastY]); | |
} | |
} | |
} | |
},onMouseButtonDown:function (event){ | |
GLUT.savePosition(event); | |
GLUT.buttons |= (1 << event['button']); | |
if(event.target == Module["canvas"] && GLUT.mouseFunc){ | |
try { | |
event.target.setCapture(); | |
} catch (e) {} | |
event.preventDefault(); | |
GLUT.saveModifiers(event); | |
Runtime.dynCall('viiii', GLUT.mouseFunc, [event['button'], 0/*GLUT_DOWN*/, GLUT.lastX, GLUT.lastY]); | |
} | |
},onMouseButtonUp:function (event){ | |
GLUT.savePosition(event); | |
GLUT.buttons &= ~(1 << event['button']); | |
if(GLUT.mouseFunc) { | |
event.preventDefault(); | |
GLUT.saveModifiers(event); | |
Runtime.dynCall('viiii', GLUT.mouseFunc, [event['button'], 1/*GLUT_UP*/, GLUT.lastX, GLUT.lastY]); | |
} | |
},onFullScreenEventChange:function (event){ | |
var width; | |
var height; | |
if (document["fullScreen"] || document["mozFullScreen"] || document["webkitIsFullScreen"]) { | |
width = screen["width"]; | |
height = screen["height"]; | |
} else { | |
width = GLUT.windowWidth; | |
height = GLUT.windowHeight; | |
// TODO set position | |
document.removeEventListener('fullscreenchange', GLUT.onFullScreenEventChange, true); | |
document.removeEventListener('mozfullscreenchange', GLUT.onFullScreenEventChange, true); | |
document.removeEventListener('webkitfullscreenchange', GLUT.onFullScreenEventChange, true); | |
} | |
Browser.setCanvasSize(width, height); | |
/* Can't call _glutReshapeWindow as that requests cancelling fullscreen. */ | |
if (GLUT.reshapeFunc) { | |
// console.log("GLUT.reshapeFunc (from FS): " + width + ", " + height); | |
Runtime.dynCall('vii', GLUT.reshapeFunc, [width, height]); | |
} | |
_glutPostRedisplay(); | |
},requestFullScreen:function () { | |
var RFS = Module["canvas"]['requestFullscreen'] || | |
Module["canvas"]['requestFullScreen'] || | |
Module["canvas"]['mozRequestFullScreen'] || | |
Module["canvas"]['webkitRequestFullScreen'] || | |
(function() {}); | |
RFS.apply(Module["canvas"], []); | |
},cancelFullScreen:function () { | |
var CFS = document['exitFullscreen'] || | |
document['cancelFullScreen'] || | |
document['mozCancelFullScreen'] || | |
document['webkitCancelFullScreen'] || | |
(function() {}); | |
CFS.apply(document, []); | |
}};function _glutInit(argcp, argv) { | |
// Ignore arguments | |
GLUT.initTime = Date.now(); | |
window.addEventListener("keydown", GLUT.onKeydown, true); | |
window.addEventListener("keyup", GLUT.onKeyup, true); | |
window.addEventListener("mousemove", GLUT.onMousemove, true); | |
window.addEventListener("mousedown", GLUT.onMouseButtonDown, true); | |
window.addEventListener("mouseup", GLUT.onMouseButtonUp, true); | |
__ATEXIT__.push({ func: function() { | |
window.removeEventListener("keydown", GLUT.onKeydown, true); | |
window.removeEventListener("keyup", GLUT.onKeyup, true); | |
window.removeEventListener("mousemove", GLUT.onMousemove, true); | |
window.removeEventListener("mousedown", GLUT.onMouseButtonDown, true); | |
window.removeEventListener("mouseup", GLUT.onMouseButtonUp, true); | |
Module["canvas"].width = Module["canvas"].height = 1; | |
} }); | |
} | |
function _glutInitWindowSize(width, height) { | |
Browser.setCanvasSize( GLUT.initWindowWidth = width, | |
GLUT.initWindowHeight = height ); | |
} | |
function _glutInitDisplayMode(mode) {} | |
var Browser={mainLoop:{scheduler:null,shouldPause:false,paused:false,queue:[],pause:function () { | |
Browser.mainLoop.shouldPause = true; | |
},resume:function () { | |
if (Browser.mainLoop.paused) { | |
Browser.mainLoop.paused = false; | |
Browser.mainLoop.scheduler(); | |
} | |
Browser.mainLoop.shouldPause = false; | |
},updateStatus:function () { | |
if (Module['setStatus']) { | |
var message = Module['statusMessage'] || 'Please wait...'; | |
var remaining = Browser.mainLoop.remainingBlockers; | |
var expected = Browser.mainLoop.expectedBlockers; | |
if (remaining) { | |
if (remaining < expected) { | |
Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')'); | |
} else { | |
Module['setStatus'](message); | |
} | |
} else { | |
Module['setStatus'](''); | |
} | |
} | |
}},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () { | |
if (Browser.initted) return; | |
Browser.initted = true; | |
try { | |
new Blob(); | |
Browser.hasBlobConstructor = true; | |
} catch(e) { | |
Browser.hasBlobConstructor = false; | |
console.log("warning: no blob constructor, cannot create blobs with mimetypes"); | |
} | |
Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null)); | |
Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : console.log("warning: cannot create object URLs"); | |
// Support for plugins that can process preloaded files. You can add more of these to | |
// your app by creating and appending to Module.preloadPlugins. | |
// | |
// Each plugin is asked if it can handle a file based on the file's name. If it can, | |
// it is given the file's raw data. When it is done, it calls a callback with the file's | |
// (possibly modified) data. For example, a plugin might decompress a file, or it | |
// might create some side data structure for use later (like an Image element, etc.). | |
function getMimetype(name) { | |
return { | |
'jpg': 'image/jpeg', | |
'jpeg': 'image/jpeg', | |
'png': 'image/png', | |
'bmp': 'image/bmp', | |
'ogg': 'audio/ogg', | |
'wav': 'audio/wav', | |
'mp3': 'audio/mpeg' | |
}[name.substr(-3)]; | |
return ret; | |
} | |
if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; | |
var imagePlugin = {}; | |
imagePlugin['canHandle'] = function(name) { | |
return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/.exec(name); | |
}; | |
imagePlugin['handle'] = function(byteArray, name, onload, onerror) { | |
var b = null; | |
if (Browser.hasBlobConstructor) { | |
try { | |
b = new Blob([byteArray], { type: getMimetype(name) }); | |
} catch(e) { | |
Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder'); | |
} | |
} | |
if (!b) { | |
var bb = new Browser.BlobBuilder(); | |
bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range | |
b = bb.getBlob(); | |
} | |
var url = Browser.URLObject.createObjectURL(b); | |
assert(typeof url == 'string', 'createObjectURL must return a url as a string'); | |
var img = new Image(); | |
img.onload = function() { | |
assert(img.complete, 'Image ' + name + ' could not be decoded'); | |
var canvas = document.createElement('canvas'); | |
canvas.width = img.width; | |
canvas.height = img.height; | |
var ctx = canvas.getContext('2d'); | |
ctx.drawImage(img, 0, 0); | |
Module["preloadedImages"][name] = canvas; | |
Browser.URLObject.revokeObjectURL(url); | |
if (onload) onload(byteArray); | |
}; | |
img.onerror = function(event) { | |
console.log('Image ' + url + ' could not be decoded'); | |
if (onerror) onerror(); | |
}; | |
img.src = url; | |
}; | |
Module['preloadPlugins'].push(imagePlugin); | |
var audioPlugin = {}; | |
audioPlugin['canHandle'] = function(name) { | |
return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 }; | |
}; | |
audioPlugin['handle'] = function(byteArray, name, onload, onerror) { | |
var done = false; | |
function finish(audio) { | |
if (done) return; | |
done = true; | |
Module["preloadedAudios"][name] = audio; | |
if (onload) onload(byteArray); | |
} | |
function fail() { | |
if (done) return; | |
done = true; | |
Module["preloadedAudios"][name] = new Audio(); // empty shim | |
if (onerror) onerror(); | |
} | |
if (Browser.hasBlobConstructor) { | |
try { | |
var b = new Blob([byteArray], { type: getMimetype(name) }); | |
} catch(e) { | |
return fail(); | |
} | |
var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this! | |
assert(typeof url == 'string', 'createObjectURL must return a url as a string'); | |
var audio = new Audio(); | |
audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926 | |
audio.onerror = function(event) { | |
if (done) return; | |
console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach'); | |
function encode64(data) { | |
var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; | |
var PAD = '='; | |
var ret = ''; | |
var leftchar = 0; | |
var leftbits = 0; | |
for (var i = 0; i < data.length; i++) { | |
leftchar = (leftchar << 8) | data[i]; | |
leftbits += 8; | |
while (leftbits >= 6) { | |
var curr = (leftchar >> (leftbits-6)) & 0x3f; | |
leftbits -= 6; | |
ret += BASE[curr]; | |
} | |
} | |
if (leftbits == 2) { | |
ret += BASE[(leftchar&3) << 4]; | |
ret += PAD + PAD; | |
} else if (leftbits == 4) { | |
ret += BASE[(leftchar&0xf) << 2]; | |
ret += PAD; | |
} | |
return ret; | |
} | |
audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray); | |
finish(audio); // we don't wait for confirmation this worked - but it's worth trying | |
}; | |
audio.src = url; | |
// workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror | |
setTimeout(function() { | |
finish(audio); // try to use it even though it is not necessarily ready to play | |
}, 10000); | |
} else { | |
return fail(); | |
} | |
}; | |
Module['preloadPlugins'].push(audioPlugin); | |
// Canvas event setup | |
var canvas = Module['canvas']; | |
canvas.requestPointerLock = canvas['requestPointerLock'] || | |
canvas['mozRequestPointerLock'] || | |
canvas['webkitRequestPointerLock']; | |
canvas.exitPointerLock = document['exitPointerLock'] || | |
document['mozExitPointerLock'] || | |
document['webkitExitPointerLock']; | |
canvas.exitPointerLock = canvas.exitPointerLock.bind(document); | |
function pointerLockChange() { | |
Browser.pointerLock = document['pointerLockElement'] === canvas || | |
document['mozPointerLockElement'] === canvas || | |
document['webkitPointerLockElement'] === canvas; | |
} | |
document.addEventListener('pointerlockchange', pointerLockChange, false); | |
document.addEventListener('mozpointerlockchange', pointerLockChange, false); | |
document.addEventListener('webkitpointerlockchange', pointerLockChange, false); | |
if (Module['elementPointerLock']) { | |
canvas.addEventListener("click", function(ev) { | |
if (!Browser.pointerLock && canvas.requestPointerLock) { | |
canvas.requestPointerLock(); | |
ev.preventDefault(); | |
} | |
}, false); | |
} | |
},createContext:function (canvas, useWebGL, setInModule) { | |
var ctx; | |
try { | |
if (useWebGL) { | |
ctx = canvas.getContext('experimental-webgl', { | |
alpha: false | |
}); | |
} else { | |
ctx = canvas.getContext('2d'); | |
} | |
if (!ctx) throw ':('; | |
} catch (e) { | |
Module.print('Could not create canvas - ' + e); | |
return null; | |
} | |
if (useWebGL) { | |
// Set the background of the WebGL canvas to black | |
canvas.style.backgroundColor = "black"; | |
// Warn on context loss | |
canvas.addEventListener('webglcontextlost', function(event) { | |
alert('WebGL context lost. You will need to reload the page.'); | |
}, false); | |
} | |
if (setInModule) { | |
Module.ctx = ctx; | |
Module.useWebGL = useWebGL; | |
Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() }); | |
Browser.init(); | |
} | |
return ctx; | |
},destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) { | |
this.lockPointer = lockPointer; | |
this.resizeCanvas = resizeCanvas; | |
if (typeof this.lockPointer === 'undefined') this.lockPointer = true; | |
if (typeof this.resizeCanvas === 'undefined') this.resizeCanvas = false; | |
var canvas = Module['canvas']; | |
function fullScreenChange() { | |
Browser.isFullScreen = false; | |
if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || | |
document['mozFullScreenElement'] || document['mozFullscreenElement'] || | |
document['fullScreenElement'] || document['fullscreenElement']) === canvas) { | |
canvas.cancelFullScreen = document['cancelFullScreen'] || | |
document['mozCancelFullScreen'] || | |
document['webkitCancelFullScreen']; | |
canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document); | |
if (Browser.lockPointer) canvas.requestPointerLock(); | |
Browser.isFullScreen = true; | |
if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize(); | |
} else if (Browser.resizeCanvas){ | |
Browser.setWindowedCanvasSize(); | |
} | |
if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen); | |
} | |
if (!this.fullScreenHandlersInstalled) { | |
this.fullScreenHandlersInstalled = true; | |
document.addEventListener('fullscreenchange', fullScreenChange, false); | |
document.addEventListener('mozfullscreenchange', fullScreenChange, false); | |
document.addEventListener('webkitfullscreenchange', fullScreenChange, false); | |
} | |
canvas.requestFullScreen = canvas['requestFullScreen'] || | |
canvas['mozRequestFullScreen'] || | |
(canvas['webkitRequestFullScreen'] ? function() { canvas['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null); | |
canvas.requestFullScreen(); | |
},requestAnimationFrame:function (func) { | |
if (!window.requestAnimationFrame) { | |
window.requestAnimationFrame = window['requestAnimationFrame'] || | |
window['mozRequestAnimationFrame'] || | |
window['webkitRequestAnimationFrame'] || | |
window['msRequestAnimationFrame'] || | |
window['oRequestAnimationFrame'] || | |
window['setTimeout']; | |
} | |
window.requestAnimationFrame(func); | |
},getMovementX:function (event) { | |
return event['movementX'] || | |
event['mozMovementX'] || | |
event['webkitMovementX'] || | |
0; | |
},getMovementY:function (event) { | |
return event['movementY'] || | |
event['mozMovementY'] || | |
event['webkitMovementY'] || | |
0; | |
},xhrLoad:function (url, onload, onerror) { | |
var xhr = new XMLHttpRequest(); | |
xhr.open('GET', url, true); | |
xhr.responseType = 'arraybuffer'; | |
xhr.onload = function() { | |
if (xhr.status == 200) { | |
onload(xhr.response); | |
} else { | |
onerror(); | |
} | |
}; | |
xhr.onerror = onerror; | |
xhr.send(null); | |
},asyncLoad:function (url, onload, onerror, noRunDep) { | |
Browser.xhrLoad(url, function(arrayBuffer) { | |
assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); | |
onload(new Uint8Array(arrayBuffer)); | |
if (!noRunDep) removeRunDependency('al ' + url); | |
}, function(event) { | |
if (onerror) { | |
onerror(); | |
} else { | |
throw 'Loading data file "' + url + '" failed.'; | |
} | |
}); | |
if (!noRunDep) addRunDependency('al ' + url); | |
},resizeListeners:[],updateResizeListeners:function () { | |
var canvas = Module['canvas']; | |
Browser.resizeListeners.forEach(function(listener) { | |
listener(canvas.width, canvas.height); | |
}); | |
},setCanvasSize:function (width, height, noUpdates) { | |
var canvas = Module['canvas']; | |
canvas.width = width; | |
canvas.height = height; | |
if (!noUpdates) Browser.updateResizeListeners(); | |
},windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () { | |
var canvas = Module['canvas']; | |
this.windowedWidth = canvas.width; | |
this.windowedHeight = canvas.height; | |
canvas.width = screen.width; | |
canvas.height = screen.height; | |
var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; | |
flags = flags | 0x00800000; // set SDL_FULLSCREEN flag | |
HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags | |
Browser.updateResizeListeners(); | |
},setWindowedCanvasSize:function () { | |
var canvas = Module['canvas']; | |
canvas.width = this.windowedWidth; | |
canvas.height = this.windowedHeight; | |
var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; | |
flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag | |
HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags | |
Browser.updateResizeListeners(); | |
}};function _glutCreateWindow(name) { | |
Module.ctx = Browser.createContext(Module['canvas'], true, true); | |
return 1; | |
} | |
function _glutIdleFunc(func) { | |
var callback = function() { | |
if (GLUT.idleFunc) { | |
Runtime.dynCall('v', GLUT.idleFunc); | |
window.setTimeout(callback, 0); | |
} | |
} | |
if (!GLUT.idleFunc) | |
window.setTimeout(callback, 0); | |
GLUT.idleFunc = func; | |
} | |
function _glutReshapeFunc(func) { | |
GLUT.reshapeFunc = func; | |
} | |
function _glutDisplayFunc(func) { | |
GLUT.displayFunc = func; | |
} | |
function _glutSpecialFunc(func) { | |
GLUT.specialFunc = func; | |
} | |
function _glutPostRedisplay() { | |
if (GLUT.displayFunc) { | |
Browser.requestAnimationFrame(function() { | |
Runtime.dynCall('v', GLUT.displayFunc); | |
}); | |
} | |
}function _glutReshapeWindow(width, height) { | |
GLUT.cancelFullScreen(); | |
// console.log("glutReshapeWindow: " + width + ", " + height); | |
Browser.setCanvasSize(width, height); | |
if (GLUT.reshapeFunc) { | |
// console.log("GLUT.reshapeFunc: " + width + ", " + height); | |
Runtime.dynCall('vii', GLUT.reshapeFunc, [width, height]); | |
} | |
_glutPostRedisplay(); | |
}function _glutMainLoop() { | |
_glutReshapeWindow(Module['canvas'].width, Module['canvas'].height); | |
_glutPostRedisplay(); | |
throw 'SimulateInfiniteLoop'; | |
} | |
var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],currArrayBuffer:0,currElementArrayBuffer:0,byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],uniformTable:{},packAlignment:4,unpackAlignment:4,init:function () { | |
Browser.moduleContextCreatedCallbacks.push(GL.initExtensions); | |
},getNewId:function (table) { | |
var ret = GL.counter++; | |
for (var i = table.length; i < ret; i++) { | |
table[i] = null; | |
} | |
return ret; | |
},MINI_TEMP_BUFFER_SIZE:16,miniTempBuffer:null,miniTempBufferViews:[0],MAX_TEMP_BUFFER_SIZE:2097152,tempBufferIndexLookup:null,tempVertexBuffers:null,tempIndexBuffers:null,tempQuadIndexBuffer:null,generateTempBuffers:function (quads) { | |
this.tempBufferIndexLookup = new Uint8Array(this.MAX_TEMP_BUFFER_SIZE+1); | |
this.tempVertexBuffers = []; | |
this.tempIndexBuffers = []; | |
var last = -1, curr = -1; | |
var size = 1; | |
for (var i = 0; i <= this.MAX_TEMP_BUFFER_SIZE; i++) { | |
if (i > size) { | |
size <<= 1; | |
} | |
if (size != last) { | |
curr++; | |
this.tempVertexBuffers[curr] = Module.ctx.createBuffer(); | |
Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, this.tempVertexBuffers[curr]); | |
Module.ctx.bufferData(Module.ctx.ARRAY_BUFFER, size, Module.ctx.DYNAMIC_DRAW); | |
Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, null); | |
this.tempIndexBuffers[curr] = Module.ctx.createBuffer(); | |
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, this.tempIndexBuffers[curr]); | |
Module.ctx.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, size, Module.ctx.DYNAMIC_DRAW); | |
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null); | |
last = size; | |
} | |
this.tempBufferIndexLookup[i] = curr; | |
} | |
if (quads) { | |
// GL_QUAD indexes can be precalculated | |
this.tempQuadIndexBuffer = Module.ctx.createBuffer(); | |
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, this.tempQuadIndexBuffer); | |
var numIndexes = this.MAX_TEMP_BUFFER_SIZE >> 1; | |
var quadIndexes = new Uint16Array(numIndexes); | |
var i = 0, v = 0; | |
while (1) { | |
quadIndexes[i++] = v; | |
if (i >= numIndexes) break; | |
quadIndexes[i++] = v+1; | |
if (i >= numIndexes) break; | |
quadIndexes[i++] = v+2; | |
if (i >= numIndexes) break; | |
quadIndexes[i++] = v; | |
if (i >= numIndexes) break; | |
quadIndexes[i++] = v+2; | |
if (i >= numIndexes) break; | |
quadIndexes[i++] = v+3; | |
if (i >= numIndexes) break; | |
v += 4; | |
} | |
Module.ctx.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, quadIndexes, Module.ctx.STATIC_DRAW); | |
Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null); | |
} | |
},scan:function (table, object) { | |
for (var item in table) { | |
if (table[item] == object) return item; | |
} | |
return 0; | |
},findToken:function (source, token) { | |
function isIdentChar(ch) { | |
if (ch >= 48 && ch <= 57) // 0-9 | |
return true; | |
if (ch >= 65 && ch <= 90) // A-Z | |
return true; | |
if (ch >= 97 && ch <= 122) // a-z | |
return true; | |
return false; | |
} | |
var i = -1; | |
do { | |
i = source.indexOf(token, i + 1); | |
if (i < 0) { | |
break; | |
} | |
if (i > 0 && isIdentChar(source[i - 1])) { | |
continue; | |
} | |
i += token.length; | |
if (i < source.length - 1 && isIdentChar(source[i + 1])) { | |
continue; | |
} | |
return true; | |
} while (true); | |
return false; | |
},getSource:function (shader, count, string, length) { | |
var source = ''; | |
for (var i = 0; i < count; ++i) { | |
var frag; | |
if (length) { | |
var len = HEAP32[(((length)+(i*4))>>2)]; | |
if (len < 0) { | |
frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)]); | |
} else { | |
frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)], len); | |
} | |
} else { | |
frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)]); | |
} | |
source += frag; | |
} | |
// Let's see if we need to enable the standard derivatives extension | |
type = Module.ctx.getShaderParameter(GL.shaders[shader], 0x8B4F /* GL_SHADER_TYPE */); | |
if (type == 0x8B30 /* GL_FRAGMENT_SHADER */) { | |
if (GL.findToken(source, "dFdx") || | |
GL.findToken(source, "dFdy") || | |
GL.findToken(source, "fwidth")) { | |
source = "#extension GL_OES_standard_derivatives : enable\n" + source; | |
var extension = Module.ctx.getExtension("OES_standard_derivatives"); | |
} | |
} | |
return source; | |
},computeImageSize:function (width, height, sizePerPixel, alignment) { | |
function roundedToNextMultipleOf(x, y) { | |
return Math.floor((x + y - 1) / y) * y | |
} | |
var plainRowSize = width * sizePerPixel; | |
var alignedRowSize = roundedToNextMultipleOf(plainRowSize, alignment); | |
return (height <= 0) ? 0 : | |
((height - 1) * alignedRowSize + plainRowSize); | |
},getTexPixelData:function (type, format, width, height, pixels, internalFormat) { | |
var sizePerPixel; | |
switch (type) { | |
case 0x1401 /* GL_UNSIGNED_BYTE */: | |
switch (format) { | |
case 0x1906 /* GL_ALPHA */: | |
case 0x1909 /* GL_LUMINANCE */: | |
sizePerPixel = 1; | |
break; | |
case 0x1907 /* GL_RGB */: | |
sizePerPixel = 3; | |
break; | |
case 0x1908 /* GL_RGBA */: | |
sizePerPixel = 4; | |
break; | |
case 0x190A /* GL_LUMINANCE_ALPHA */: | |
sizePerPixel = 2; | |
break; | |
default: | |
throw 'Invalid format (' + format + ')'; | |
} | |
break; | |
case 0x8363 /* GL_UNSIGNED_SHORT_5_6_5 */: | |
case 0x8033 /* GL_UNSIGNED_SHORT_4_4_4_4 */: | |
case 0x8034 /* GL_UNSIGNED_SHORT_5_5_5_1 */: | |
sizePerPixel = 2; | |
break; | |
case 0x1406 /* GL_FLOAT */: | |
assert(GL.floatExt, 'Must have OES_texture_float to use float textures'); | |
switch (format) { | |
case 0x1907 /* GL_RGB */: | |
sizePerPixel = 3*4; | |
break; | |
case 0x1908 /* GL_RGBA */: | |
sizePerPixel = 4*4; | |
break; | |
default: | |
throw 'Invalid format (' + format + ')'; | |
} | |
internalFormat = Module.ctx.RGBA; | |
break; | |
default: | |
throw 'Invalid type (' + type + ')'; | |
} | |
var bytes = GL.computeImageSize(width, height, sizePerPixel, GL.unpackAlignment); | |
if (type == 0x1401 /* GL_UNSIGNED_BYTE */) { | |
pixels = HEAPU8.subarray((pixels),(pixels+bytes)); | |
} else if (type == 0x1406 /* GL_FLOAT */) { | |
pixels = HEAPF32.subarray((pixels)>>2,(pixels+bytes)>>2); | |
} else { | |
pixels = HEAPU16.subarray((pixels)>>1,(pixels+bytes)>>1); | |
} | |
return { | |
pixels: pixels, | |
internalFormat: internalFormat | |
} | |
},initExtensions:function () { | |
if (GL.initExtensions.done) return; | |
GL.initExtensions.done = true; | |
if (!Module.useWebGL) return; // an app might link both gl and 2d backends | |
GL.miniTempBuffer = new Float32Array(GL.MINI_TEMP_BUFFER_SIZE); | |
for (var i = 0; i < GL.MINI_TEMP_BUFFER_SIZE; i++) { | |
GL.miniTempBufferViews[i] = GL.miniTempBuffer.subarray(0, i+1); | |
} | |
GL.maxVertexAttribs = Module.ctx.getParameter(Module.ctx.MAX_VERTEX_ATTRIBS); | |
GL.compressionExt = Module.ctx.getExtension('WEBGL_compressed_texture_s3tc') || | |
Module.ctx.getExtension('MOZ_WEBGL_compressed_texture_s3tc') || | |
Module.ctx.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc'); | |
GL.anisotropicExt = Module.ctx.getExtension('EXT_texture_filter_anisotropic') || | |
Module.ctx.getExtension('MOZ_EXT_texture_filter_anisotropic') || | |
Module.ctx.getExtension('WEBKIT_EXT_texture_filter_anisotropic'); | |
GL.floatExt = Module.ctx.getExtension('OES_texture_float'); | |
}};function _glEnable(x0) { Module.ctx.enable(x0) } | |
function _glCreateShader(shaderType) { | |
var id = GL.getNewId(GL.shaders); | |
GL.shaders[id] = Module.ctx.createShader(shaderType); | |
return id; | |
} | |
function _glShaderSource(shader, count, string, length) { | |
var source = GL.getSource(shader, count, string, length); | |
Module.ctx.shaderSource(GL.shaders[shader], source); | |
} | |
function _glCompileShader(shader) { | |
Module.ctx.compileShader(GL.shaders[shader]); | |
} | |
function _glGetShaderInfoLog(shader, maxLength, length, infoLog) { | |
var log = Module.ctx.getShaderInfoLog(GL.shaders[shader]); | |
// Work around a bug in Chromium which causes getShaderInfoLog to return null | |
if (!log) { | |
log = ""; | |
} | |
log = log.substr(0, maxLength - 1); | |
writeStringToMemory(log, infoLog); | |
if (length) { | |
HEAP32[((length)>>2)]=log.length | |
} | |
} | |
var ERRNO_CODES={E2BIG:7,EACCES:13,EADDRINUSE:98,EADDRNOTAVAIL:99,EAFNOSUPPORT:97,EAGAIN:11,EALREADY:114,EBADF:9,EBADMSG:74,EBUSY:16,ECANCELED:125,ECHILD:10,ECONNABORTED:103,ECONNREFUSED:111,ECONNRESET:104,EDEADLK:35,EDESTADDRREQ:89,EDOM:33,EDQUOT:122,EEXIST:17,EFAULT:14,EFBIG:27,EHOSTUNREACH:113,EIDRM:43,EILSEQ:84,EINPROGRESS:115,EINTR:4,EINVAL:22,EIO:5,EISCONN:106,EISDIR:21,ELOOP:40,EMFILE:24,EMLINK:31,EMSGSIZE:90,EMULTIHOP:72,ENAMETOOLONG:36,ENETDOWN:100,ENETRESET:102,ENETUNREACH:101,ENFILE:23,ENOBUFS:105,ENODATA:61,ENODEV:19,ENOENT:2,ENOEXEC:8,ENOLCK:37,ENOLINK:67,ENOMEM:12,ENOMSG:42,ENOPROTOOPT:92,ENOSPC:28,ENOSR:63,ENOSTR:60,ENOSYS:38,ENOTCONN:107,ENOTDIR:20,ENOTEMPTY:39,ENOTRECOVERABLE:131,ENOTSOCK:88,ENOTSUP:95,ENOTTY:25,ENXIO:6,EOVERFLOW:75,EOWNERDEAD:130,EPERM:1,EPIPE:32,EPROTO:71,EPROTONOSUPPORT:93,EPROTOTYPE:91,ERANGE:34,EROFS:30,ESPIPE:29,ESRCH:3,ESTALE:116,ETIME:62,ETIMEDOUT:110,ETXTBSY:26,EWOULDBLOCK:11,EXDEV:18}; | |
function ___setErrNo(value) { | |
// For convenient setting and returning of errno. | |
if (!___setErrNo.ret) ___setErrNo.ret = allocate([0], 'i32', ALLOC_STATIC); | |
HEAP32[((___setErrNo.ret)>>2)]=value | |
return value; | |
} | |
var _stdin=allocate(1, "i32*", ALLOC_STACK); | |
var _stdout=allocate(1, "i32*", ALLOC_STACK); | |
var _stderr=allocate(1, "i32*", ALLOC_STACK); | |
var __impure_ptr=allocate(1, "i32*", ALLOC_STACK);var FS={currentPath:"/",nextInode:2,streams:[null],checkStreams:function () { | |
for (var i in FS.streams) if (FS.streams.hasOwnProperty(i)) assert(i >= 0 && i < FS.streams.length); // no keys not in dense span | |
for (var i = 0; i < FS.streams.length; i++) assert(typeof FS.streams[i] == 'object'); // no non-null holes in dense span | |
},ignorePermissions:true,joinPath:function (parts, forceRelative) { | |
var ret = parts[0]; | |
for (var i = 1; i < parts.length; i++) { | |
if (ret[ret.length-1] != '/') ret += '/'; | |
ret += parts[i]; | |
} | |
if (forceRelative && ret[0] == '/') ret = ret.substr(1); | |
return ret; | |
},absolutePath:function (relative, base) { | |
if (typeof relative !== 'string') return null; | |
if (base === undefined) base = FS.currentPath; | |
if (relative && relative[0] == '/') base = ''; | |
var full = base + '/' + relative; | |
var parts = full.split('/').reverse(); | |
var absolute = ['']; | |
while (parts.length) { | |
var part = parts.pop(); | |
if (part == '' || part == '.') { | |
// Nothing. | |
} else if (part == '..') { | |
if (absolute.length > 1) absolute.pop(); | |
} else { | |
absolute.push(part); | |
} | |
} | |
return absolute.length == 1 ? '/' : absolute.join('/'); | |
},analyzePath:function (path, dontResolveLastLink, linksVisited) { | |
var ret = { | |
isRoot: false, | |
exists: false, | |
error: 0, | |
name: null, | |
path: null, | |
object: null, | |
parentExists: false, | |
parentPath: null, | |
parentObject: null | |
}; | |
path = FS.absolutePath(path); | |
if (path == '/') { | |
ret.isRoot = true; | |
ret.exists = ret.parentExists = true; | |
ret.name = '/'; | |
ret.path = ret.parentPath = '/'; | |
ret.object = ret.parentObject = FS.root; | |
} else if (path !== null) { | |
linksVisited = linksVisited || 0; | |
path = path.slice(1).split('/'); | |
var current = FS.root; | |
var traversed = ['']; | |
while (path.length) { | |
if (path.length == 1 && current.isFolder) { | |
ret.parentExists = true; | |
ret.parentPath = traversed.length == 1 ? '/' : traversed.join('/'); | |
ret.parentObject = current; | |
ret.name = path[0]; | |
} | |
var target = path.shift(); | |
if (!current.isFolder) { | |
ret.error = ERRNO_CODES.ENOTDIR; | |
break; | |
} else if (!current.read) { | |
ret.error = ERRNO_CODES.EACCES; | |
break; | |
} else if (!current.contents.hasOwnProperty(target)) { | |
ret.error = ERRNO_CODES.ENOENT; | |
break; | |
} | |
current = current.contents[target]; | |
if (current.link && !(dontResolveLastLink && path.length == 0)) { | |
if (linksVisited > 40) { // Usual Linux SYMLOOP_MAX. | |
ret.error = ERRNO_CODES.ELOOP; | |
break; | |
} | |
var link = FS.absolutePath(current.link, traversed.join('/')); | |
ret = FS.analyzePath([link].concat(path).join('/'), | |
dontResolveLastLink, linksVisited + 1); | |
return ret; | |
} | |
traversed.push(target); | |
if (path.length == 0) { | |
ret.exists = true; | |
ret.path = traversed.join('/'); | |
ret.object = current; | |
} | |
} | |
} | |
return ret; | |
},findObject:function (path, dontResolveLastLink) { | |
FS.ensureRoot(); | |
var ret = FS.analyzePath(path, dontResolveLastLink); | |
if (ret.exists) { | |
return ret.object; | |
} else { | |
___setErrNo(ret.error); | |
return null; | |
} | |
},createObject:function (parent, name, properties, canRead, canWrite) { | |
if (!parent) parent = '/'; | |
if (typeof parent === 'string') parent = FS.findObject(parent); | |
if (!parent) { | |
___setErrNo(ERRNO_CODES.EACCES); | |
throw new Error('Parent path must exist.'); | |
} | |
if (!parent.isFolder) { | |
___setErrNo(ERRNO_CODES.ENOTDIR); | |
throw new Error('Parent must be a folder.'); | |
} | |
if (!parent.write && !FS.ignorePermissions) { | |
___setErrNo(ERRNO_CODES.EACCES); | |
throw new Error('Parent folder must be writeable.'); | |
} | |
if (!name || name == '.' || name == '..') { | |
___setErrNo(ERRNO_CODES.ENOENT); | |
throw new Error('Name must not be empty.'); | |
} | |
if (parent.contents.hasOwnProperty(name)) { | |
___setErrNo(ERRNO_CODES.EEXIST); | |
throw new Error("Can't overwrite object."); | |
} | |
parent.contents[name] = { | |
read: canRead === undefined ? true : canRead, | |
write: canWrite === undefined ? false : canWrite, | |
timestamp: Date.now(), | |
inodeNumber: FS.nextInode++ | |
}; | |
for (var key in properties) { | |
if (properties.hasOwnProperty(key)) { | |
parent.contents[name][key] = properties[key]; | |
} | |
} | |
return parent.contents[name]; | |
},createFolder:function (parent, name, canRead, canWrite) { | |
var properties = {isFolder: true, isDevice: false, contents: {}}; | |
return FS.createObject(parent, name, properties, canRead, canWrite); | |
},createPath:function (parent, path, canRead, canWrite) { | |
var current = FS.findObject(parent); | |
if (current === null) throw new Error('Invalid parent.'); | |
path = path.split('/').reverse(); | |
while (path.length) { | |
var part = path.pop(); | |
if (!part) continue; | |
if (!current.contents.hasOwnProperty(part)) { | |
FS.createFolder(current, part, canRead, canWrite); | |
} | |
current = current.contents[part]; | |
} | |
return current; | |
},createFile:function (parent, name, properties, canRead, canWrite) { | |
properties.isFolder = false; | |
return FS.createObject(parent, name, properties, canRead, canWrite); | |
},createDataFile:function (parent, name, data, canRead, canWrite) { | |
if (typeof data === 'string') { | |
var dataArray = new Array(data.length); | |
for (var i = 0, len = data.length; i < len; ++i) dataArray[i] = data.charCodeAt(i); | |
data = dataArray; | |
} | |
var properties = { | |
isDevice: false, | |
contents: data.subarray ? data.subarray(0) : data // as an optimization, create a new array wrapper (not buffer) here, to help JS engines understand this object | |
}; | |
return FS.createFile(parent, name, properties, canRead, canWrite); | |
},createLazyFile:function (parent, name, url, canRead, canWrite) { | |
if (typeof XMLHttpRequest !== 'undefined') { | |
if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; | |
// Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. | |
var LazyUint8Array = function(chunkSize, length) { | |
this.length = length; | |
this.chunkSize = chunkSize; | |
this.chunks = []; // Loaded chunks. Index is the chunk number | |
} | |
LazyUint8Array.prototype.get = function(idx) { | |
if (idx > this.length-1 || idx < 0) { | |
return undefined; | |
} | |
var chunkOffset = idx % chunkSize; | |
var chunkNum = Math.floor(idx / chunkSize); | |
return this.getter(chunkNum)[chunkOffset]; | |
} | |
LazyUint8Array.prototype.setDataGetter = function(getter) { | |
this.getter = getter; | |
} | |
// Find length | |
var xhr = new XMLHttpRequest(); | |
xhr.open('HEAD', url, false); | |
xhr.send(null); | |
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); | |
var datalength = Number(xhr.getResponseHeader("Content-length")); | |
var header; | |
var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; | |
var chunkSize = 1024*1024; // Chunk size in bytes | |
if (!hasByteServing) chunkSize = datalength; | |
// Function to get a range from the remote URL. | |
var doXHR = (function(from, to) { | |
if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); | |
if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); | |
// TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. | |
var xhr = new XMLHttpRequest(); | |
xhr.open('GET', url, false); | |
if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); | |
// Some hints to the browser that we want binary data. | |
if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer'; | |
if (xhr.overrideMimeType) { | |
xhr.overrideMimeType('text/plain; charset=x-user-defined'); | |
} | |
xhr.send(null); | |
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); | |
if (xhr.response !== undefined) { | |
return new Uint8Array(xhr.response || []); | |
} else { | |
return intArrayFromString(xhr.responseText || '', true); | |
} | |
}); | |
var lazyArray = new LazyUint8Array(chunkSize, datalength); | |
lazyArray.setDataGetter(function(chunkNum) { | |
var start = chunkNum * lazyArray.chunkSize; | |
var end = (chunkNum+1) * lazyArray.chunkSize - 1; // including this byte | |
end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block | |
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") { | |
lazyArray.chunks[chunkNum] = doXHR(start, end); | |
} | |
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!"); | |
return lazyArray.chunks[chunkNum]; | |
}); | |
var properties = { isDevice: false, contents: lazyArray }; | |
} else { | |
var properties = { isDevice: false, url: url }; | |
} | |
return FS.createFile(parent, name, properties, canRead, canWrite); | |
},createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile) { | |
Browser.init(); | |
var fullname = FS.joinPath([parent, name], true); | |
function processData(byteArray) { | |
function finish(byteArray) { | |
if (!dontCreateFile) { | |
FS.createDataFile(parent, name, byteArray, canRead, canWrite); | |
} | |
if (onload) onload(); | |
removeRunDependency('cp ' + fullname); | |
} | |
var handled = false; | |
Module['preloadPlugins'].forEach(function(plugin) { | |
if (handled) return; | |
if (plugin['canHandle'](fullname)) { | |
plugin['handle'](byteArray, fullname, finish, function() { | |
if (onerror) onerror(); | |
removeRunDependency('cp ' + fullname); | |
}); | |
handled = true; | |
} | |
}); | |
if (!handled) finish(byteArray); | |
} | |
addRunDependency('cp ' + fullname); | |
if (typeof url == 'string') { | |
Browser.asyncLoad(url, function(byteArray) { | |
processData(byteArray); | |
}, onerror); | |
} else { | |
processData(url); | |
} | |
},createLink:function (parent, name, target, canRead, canWrite) { | |
var properties = {isDevice: false, link: target}; | |
return FS.createFile(parent, name, properties, canRead, canWrite); | |
},createDevice:function (parent, name, input, output) { | |
if (!(input || output)) { | |
throw new Error('A device must have at least one callback defined.'); | |
} | |
var ops = {isDevice: true, input: input, output: output}; | |
return FS.createFile(parent, name, ops, Boolean(input), Boolean(output)); | |
},forceLoadFile:function (obj) { | |
if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; | |
var success = true; | |
if (typeof XMLHttpRequest !== 'undefined') { | |
throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); | |
} else if (Module['read']) { | |
// Command-line. | |
try { | |
// WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as | |
// read() will try to parse UTF8. | |
obj.contents = intArrayFromString(Module['read'](obj.url), true); | |
} catch (e) { | |
success = false; | |
} | |
} else { | |
throw new Error('Cannot load without read() or XMLHttpRequest.'); | |
} | |
if (!success) ___setErrNo(ERRNO_CODES.EIO); | |
return success; | |
},ensureRoot:function () { | |
if (FS.root) return; | |
// The main file system tree. All the contents are inside this. | |
FS.root = { | |
read: true, | |
write: true, | |
isFolder: true, | |
isDevice: false, | |
timestamp: Date.now(), | |
inodeNumber: 1, | |
contents: {} | |
}; | |
},init:function (input, output, error) { | |
// Make sure we initialize only once. | |
assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); | |
FS.init.initialized = true; | |
FS.ensureRoot(); | |
// Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here | |
input = input || Module['stdin']; | |
output = output || Module['stdout']; | |
error = error || Module['stderr']; | |
// Default handlers. | |
var stdinOverridden = true, stdoutOverridden = true, stderrOverridden = true; | |
if (!input) { | |
stdinOverridden = false; | |
input = function() { | |
if (!input.cache || !input.cache.length) { | |
var result; | |
if (typeof window != 'undefined' && | |
typeof window.prompt == 'function') { | |
// Browser. | |
result = window.prompt('Input: '); | |
if (result === null) result = String.fromCharCode(0); // cancel ==> EOF | |
} else if (typeof readline == 'function') { | |
// Command line. | |
result = readline(); | |
} | |
if (!result) result = ''; | |
input.cache = intArrayFromString(result + '\n', true); | |
} | |
return input.cache.shift(); | |
}; | |
} | |
var utf8 = new Runtime.UTF8Processor(); | |
function simpleOutput(val) { | |
if (val === null || val === 10) { | |
output.printer(output.buffer.join('')); | |
output.buffer = []; | |
} else { | |
output.buffer.push(utf8.processCChar(val)); | |
} | |
} | |
if (!output) { | |
stdoutOverridden = false; | |
output = simpleOutput; | |
} | |
if (!output.printer) output.printer = Module['print']; | |
if (!output.buffer) output.buffer = []; | |
if (!error) { | |
stderrOverridden = false; | |
error = simpleOutput; | |
} | |
if (!error.printer) error.printer = Module['print']; | |
if (!error.buffer) error.buffer = []; | |
// Create the temporary folder, if not already created | |
try { | |
FS.createFolder('/', 'tmp', true, true); | |
} catch(e) {} | |
// Create the I/O devices. | |
var devFolder = FS.createFolder('/', 'dev', true, true); | |
var stdin = FS.createDevice(devFolder, 'stdin', input); | |
var stdout = FS.createDevice(devFolder, 'stdout', null, output); | |
var stderr = FS.createDevice(devFolder, 'stderr', null, error); | |
FS.createDevice(devFolder, 'tty', input, output); | |
// Create default streams. | |
FS.streams[1] = { | |
path: '/dev/stdin', | |
object: stdin, | |
position: 0, | |
isRead: true, | |
isWrite: false, | |
isAppend: false, | |
isTerminal: !stdinOverridden, | |
error: false, | |
eof: false, | |
ungotten: [] | |
}; | |
FS.streams[2] = { | |
path: '/dev/stdout', | |
object: stdout, | |
position: 0, | |
isRead: false, | |
isWrite: true, | |
isAppend: false, | |
isTerminal: !stdoutOverridden, | |
error: false, | |
eof: false, | |
ungotten: [] | |
}; | |
FS.streams[3] = { | |
path: '/dev/stderr', | |
object: stderr, | |
position: 0, | |
isRead: false, | |
isWrite: true, | |
isAppend: false, | |
isTerminal: !stderrOverridden, | |
error: false, | |
eof: false, | |
ungotten: [] | |
}; | |
assert(Math.max(_stdin, _stdout, _stderr) < 128); // make sure these are low, we flatten arrays with these | |
HEAP32[((_stdin)>>2)]=1; | |
HEAP32[((_stdout)>>2)]=2; | |
HEAP32[((_stderr)>>2)]=3; | |
// Other system paths | |
FS.createPath('/', 'dev/shm/tmp', true, true); // temp files | |
// Newlib initialization | |
for (var i = FS.streams.length; i < Math.max(_stdin, _stdout, _stderr) + 4; i++) { | |
FS.streams[i] = null; // Make sure to keep FS.streams dense | |
} | |
FS.streams[_stdin] = FS.streams[1]; | |
FS.streams[_stdout] = FS.streams[2]; | |
FS.streams[_stderr] = FS.streams[3]; | |
FS.checkStreams(); | |
assert(FS.streams.length < 1024); // at this early stage, we should not have a large set of file descriptors - just a few | |
allocate([ allocate( | |
[0, 0, 0, 0, _stdin, 0, 0, 0, _stdout, 0, 0, 0, _stderr, 0, 0, 0], | |
'void*', ALLOC_STATIC) ], 'void*', ALLOC_NONE, __impure_ptr); | |
},quit:function () { | |
if (!FS.init.initialized) return; | |
// Flush any partially-printed lines in stdout and stderr. Careful, they may have been closed | |
if (FS.streams[2] && FS.streams[2].object.output.buffer.length > 0) FS.streams[2].object.output(10); | |
if (FS.streams[3] && FS.streams[3].object.output.buffer.length > 0) FS.streams[3].object.output(10); | |
},standardizePath:function (path) { | |
if (path.substr(0, 2) == './') path = path.substr(2); | |
return path; | |
},deleteFile:function (path) { | |
path = FS.analyzePath(path); | |
if (!path.parentExists || !path.exists) { | |
throw 'Invalid path ' + path; | |
} | |
delete path.parentObject.contents[path.name]; | |
}}; | |
function _pwrite(fildes, buf, nbyte, offset) { | |
// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html | |
var stream = FS.streams[fildes]; | |
if (!stream || stream.object.isDevice) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} else if (!stream.isWrite) { | |
___setErrNo(ERRNO_CODES.EACCES); | |
return -1; | |
} else if (stream.object.isFolder) { | |
___setErrNo(ERRNO_CODES.EISDIR); | |
return -1; | |
} else if (nbyte < 0 || offset < 0) { | |
___setErrNo(ERRNO_CODES.EINVAL); | |
return -1; | |
} else { | |
var contents = stream.object.contents; | |
while (contents.length < offset) contents.push(0); | |
for (var i = 0; i < nbyte; i++) { | |
contents[offset + i] = HEAPU8[(((buf)+(i))|0)]; | |
} | |
stream.object.timestamp = Date.now(); | |
return i; | |
} | |
}function _write(fildes, buf, nbyte) { | |
// ssize_t write(int fildes, const void *buf, size_t nbyte); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html | |
var stream = FS.streams[fildes]; | |
if (!stream) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} else if (!stream.isWrite) { | |
___setErrNo(ERRNO_CODES.EACCES); | |
return -1; | |
} else if (nbyte < 0) { | |
___setErrNo(ERRNO_CODES.EINVAL); | |
return -1; | |
} else { | |
if (stream.object.isDevice) { | |
if (stream.object.output) { | |
for (var i = 0; i < nbyte; i++) { | |
try { | |
stream.object.output(HEAP8[(((buf)+(i))|0)]); | |
} catch (e) { | |
___setErrNo(ERRNO_CODES.EIO); | |
return -1; | |
} | |
} | |
stream.object.timestamp = Date.now(); | |
return i; | |
} else { | |
___setErrNo(ERRNO_CODES.ENXIO); | |
return -1; | |
} | |
} else { | |
var bytesWritten = _pwrite(fildes, buf, nbyte, stream.position); | |
if (bytesWritten != -1) stream.position += bytesWritten; | |
return bytesWritten; | |
} | |
} | |
}function _fwrite(ptr, size, nitems, stream) { | |
// size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html | |
var bytesToWrite = nitems * size; | |
if (bytesToWrite == 0) return 0; | |
var bytesWritten = _write(stream, ptr, bytesToWrite); | |
if (bytesWritten == -1) { | |
if (FS.streams[stream]) FS.streams[stream].error = true; | |
return 0; | |
} else { | |
return Math.floor(bytesWritten / size); | |
} | |
} | |
function _strlen(ptr) { | |
ptr = ptr|0; | |
var curr = 0; | |
curr = ptr; | |
while (HEAP8[(curr)]|0 != 0) { | |
curr = (curr + 1)|0; | |
} | |
return (curr - ptr)|0; | |
} | |
function __reallyNegative(x) { | |
return x < 0 || (x === 0 && (1/x) === -Infinity); | |
}function __formatString(format, varargs) { | |
var textIndex = format; | |
var argIndex = 0; | |
function getNextArg(type) { | |
// NOTE: Explicitly ignoring type safety. Otherwise this fails: | |
// int x = 4; printf("%c\n", (char)x); | |
var ret; | |
if (type === 'double') { | |
ret = (HEAP32[((tempDoublePtr)>>2)]=HEAP32[(((varargs)+(argIndex))>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[(((varargs)+((argIndex)+(4)))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
} else if (type == 'i64') { | |
ret = [HEAP32[(((varargs)+(argIndex))>>2)], | |
HEAP32[(((varargs)+(argIndex+4))>>2)]]; | |
} else { | |
type = 'i32'; // varargs are always i32, i64, or double | |
ret = HEAP32[(((varargs)+(argIndex))>>2)]; | |
} | |
argIndex += Runtime.getNativeFieldSize(type); | |
return ret; | |
} | |
var ret = []; | |
var curr, next, currArg; | |
while(1) { | |
var startTextIndex = textIndex; | |
curr = HEAP8[(textIndex)]; | |
if (curr === 0) break; | |
next = HEAP8[((textIndex+1)|0)]; | |
if (curr == 37) { | |
// Handle flags. | |
var flagAlwaysSigned = false; | |
var flagLeftAlign = false; | |
var flagAlternative = false; | |
var flagZeroPad = false; | |
flagsLoop: while (1) { | |
switch (next) { | |
case 43: | |
flagAlwaysSigned = true; | |
break; | |
case 45: | |
flagLeftAlign = true; | |
break; | |
case 35: | |
flagAlternative = true; | |
break; | |
case 48: | |
if (flagZeroPad) { | |
break flagsLoop; | |
} else { | |
flagZeroPad = true; | |
break; | |
} | |
default: | |
break flagsLoop; | |
} | |
textIndex++; | |
next = HEAP8[((textIndex+1)|0)]; | |
} | |
// Handle width. | |
var width = 0; | |
if (next == 42) { | |
width = getNextArg('i32'); | |
textIndex++; | |
next = HEAP8[((textIndex+1)|0)]; | |
} else { | |
while (next >= 48 && next <= 57) { | |
width = width * 10 + (next - 48); | |
textIndex++; | |
next = HEAP8[((textIndex+1)|0)]; | |
} | |
} | |
// Handle precision. | |
var precisionSet = false; | |
if (next == 46) { | |
var precision = 0; | |
precisionSet = true; | |
textIndex++; | |
next = HEAP8[((textIndex+1)|0)]; | |
if (next == 42) { | |
precision = getNextArg('i32'); | |
textIndex++; | |
} else { | |
while(1) { | |
var precisionChr = HEAP8[((textIndex+1)|0)]; | |
if (precisionChr < 48 || | |
precisionChr > 57) break; | |
precision = precision * 10 + (precisionChr - 48); | |
textIndex++; | |
} | |
} | |
next = HEAP8[((textIndex+1)|0)]; | |
} else { | |
var precision = 6; // Standard default. | |
} | |
// Handle integer sizes. WARNING: These assume a 32-bit architecture! | |
var argSize; | |
switch (String.fromCharCode(next)) { | |
case 'h': | |
var nextNext = HEAP8[((textIndex+2)|0)]; | |
if (nextNext == 104) { | |
textIndex++; | |
argSize = 1; // char (actually i32 in varargs) | |
} else { | |
argSize = 2; // short (actually i32 in varargs) | |
} | |
break; | |
case 'l': | |
var nextNext = HEAP8[((textIndex+2)|0)]; | |
if (nextNext == 108) { | |
textIndex++; | |
argSize = 8; // long long | |
} else { | |
argSize = 4; // long | |
} | |
break; | |
case 'L': // long long | |
case 'q': // int64_t | |
case 'j': // intmax_t | |
argSize = 8; | |
break; | |
case 'z': // size_t | |
case 't': // ptrdiff_t | |
case 'I': // signed ptrdiff_t or unsigned size_t | |
argSize = 4; | |
break; | |
default: | |
argSize = null; | |
} | |
if (argSize) textIndex++; | |
next = HEAP8[((textIndex+1)|0)]; | |
// Handle type specifier. | |
switch (String.fromCharCode(next)) { | |
case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': { | |
// Integer. | |
var signed = next == 100 || next == 105; | |
argSize = argSize || 4; | |
var currArg = getNextArg('i' + (argSize * 8)); | |
var origArg = currArg; | |
var argText; | |
// Flatten i64-1 [low, high] into a (slightly rounded) double | |
if (argSize == 8) { | |
currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117); | |
} | |
// Truncate to requested size. | |
if (argSize <= 4) { | |
var limit = Math.pow(256, argSize) - 1; | |
currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8); | |
} | |
// Format the number. | |
var currAbsArg = Math.abs(currArg); | |
var prefix = ''; | |
if (next == 100 || next == 105) { | |
if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else | |
argText = reSign(currArg, 8 * argSize, 1).toString(10); | |
} else if (next == 117) { | |
if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else | |
argText = unSign(currArg, 8 * argSize, 1).toString(10); | |
currArg = Math.abs(currArg); | |
} else if (next == 111) { | |
argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8); | |
} else if (next == 120 || next == 88) { | |
prefix = flagAlternative ? '0x' : ''; | |
if (argSize == 8 && i64Math) { | |
if (origArg[1]) { | |
argText = (origArg[1]>>>0).toString(16); | |
var lower = (origArg[0]>>>0).toString(16); | |
while (lower.length < 8) lower = '0' + lower; | |
argText += lower; | |
} else { | |
argText = (origArg[0]>>>0).toString(16); | |
} | |
} else | |
if (currArg < 0) { | |
// Represent negative numbers in hex as 2's complement. | |
currArg = -currArg; | |
argText = (currAbsArg - 1).toString(16); | |
var buffer = []; | |
for (var i = 0; i < argText.length; i++) { | |
buffer.push((0xF - parseInt(argText[i], 16)).toString(16)); | |
} | |
argText = buffer.join(''); | |
while (argText.length < argSize * 2) argText = 'f' + argText; | |
} else { | |
argText = currAbsArg.toString(16); | |
} | |
if (next == 88) { | |
prefix = prefix.toUpperCase(); | |
argText = argText.toUpperCase(); | |
} | |
} else if (next == 112) { | |
if (currAbsArg === 0) { | |
argText = '(nil)'; | |
} else { | |
prefix = '0x'; | |
argText = currAbsArg.toString(16); | |
} | |
} | |
if (precisionSet) { | |
while (argText.length < precision) { | |
argText = '0' + argText; | |
} | |
} | |
// Add sign if needed | |
if (flagAlwaysSigned) { | |
if (currArg < 0) { | |
prefix = '-' + prefix; | |
} else { | |
prefix = '+' + prefix; | |
} | |
} | |
// Add padding. | |
while (prefix.length + argText.length < width) { | |
if (flagLeftAlign) { | |
argText += ' '; | |
} else { | |
if (flagZeroPad) { | |
argText = '0' + argText; | |
} else { | |
prefix = ' ' + prefix; | |
} | |
} | |
} | |
// Insert the result into the buffer. | |
argText = prefix + argText; | |
argText.split('').forEach(function(chr) { | |
ret.push(chr.charCodeAt(0)); | |
}); | |
break; | |
} | |
case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': { | |
// Float. | |
var currArg = getNextArg('double'); | |
var argText; | |
if (isNaN(currArg)) { | |
argText = 'nan'; | |
flagZeroPad = false; | |
} else if (!isFinite(currArg)) { | |
argText = (currArg < 0 ? '-' : '') + 'inf'; | |
flagZeroPad = false; | |
} else { | |
var isGeneral = false; | |
var effectivePrecision = Math.min(precision, 20); | |
// Convert g/G to f/F or e/E, as per: | |
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html | |
if (next == 103 || next == 71) { | |
isGeneral = true; | |
precision = precision || 1; | |
var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10); | |
if (precision > exponent && exponent >= -4) { | |
next = ((next == 103) ? 'f' : 'F').charCodeAt(0); | |
precision -= exponent + 1; | |
} else { | |
next = ((next == 103) ? 'e' : 'E').charCodeAt(0); | |
precision--; | |
} | |
effectivePrecision = Math.min(precision, 20); | |
} | |
if (next == 101 || next == 69) { | |
argText = currArg.toExponential(effectivePrecision); | |
// Make sure the exponent has at least 2 digits. | |
if (/[eE][-+]\d$/.test(argText)) { | |
argText = argText.slice(0, -1) + '0' + argText.slice(-1); | |
} | |
} else if (next == 102 || next == 70) { | |
argText = currArg.toFixed(effectivePrecision); | |
if (currArg === 0 && __reallyNegative(currArg)) { | |
argText = '-' + argText; | |
} | |
} | |
var parts = argText.split('e'); | |
if (isGeneral && !flagAlternative) { | |
// Discard trailing zeros and periods. | |
while (parts[0].length > 1 && parts[0].indexOf('.') != -1 && | |
(parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) { | |
parts[0] = parts[0].slice(0, -1); | |
} | |
} else { | |
// Make sure we have a period in alternative mode. | |
if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.'; | |
// Zero pad until required precision. | |
while (precision > effectivePrecision++) parts[0] += '0'; | |
} | |
argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : ''); | |
// Capitalize 'E' if needed. | |
if (next == 69) argText = argText.toUpperCase(); | |
// Add sign. | |
if (flagAlwaysSigned && currArg >= 0) { | |
argText = '+' + argText; | |
} | |
} | |
// Add padding. | |
while (argText.length < width) { | |
if (flagLeftAlign) { | |
argText += ' '; | |
} else { | |
if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) { | |
argText = argText[0] + '0' + argText.slice(1); | |
} else { | |
argText = (flagZeroPad ? '0' : ' ') + argText; | |
} | |
} | |
} | |
// Adjust case. | |
if (next < 97) argText = argText.toUpperCase(); | |
// Insert the result into the buffer. | |
argText.split('').forEach(function(chr) { | |
ret.push(chr.charCodeAt(0)); | |
}); | |
break; | |
} | |
case 's': { | |
// String. | |
var arg = getNextArg('i8*') || nullString; | |
var argLength = _strlen(arg); | |
if (precisionSet) argLength = Math.min(argLength, precision); | |
if (!flagLeftAlign) { | |
while (argLength < width--) { | |
ret.push(32); | |
} | |
} | |
for (var i = 0; i < argLength; i++) { | |
ret.push(HEAPU8[((arg++)|0)]); | |
} | |
if (flagLeftAlign) { | |
while (argLength < width--) { | |
ret.push(32); | |
} | |
} | |
break; | |
} | |
case 'c': { | |
// Character. | |
if (flagLeftAlign) ret.push(getNextArg('i8')); | |
while (--width > 0) { | |
ret.push(32); | |
} | |
if (!flagLeftAlign) ret.push(getNextArg('i8')); | |
break; | |
} | |
case 'n': { | |
// Write the length written so far to the next parameter. | |
var ptr = getNextArg('i32*'); | |
HEAP32[((ptr)>>2)]=ret.length | |
break; | |
} | |
case '%': { | |
// Literal percent sign. | |
ret.push(curr); | |
break; | |
} | |
default: { | |
// Unknown specifiers remain untouched. | |
for (var i = startTextIndex; i < textIndex + 2; i++) { | |
ret.push(HEAP8[(i)]); | |
} | |
} | |
} | |
textIndex += 2; | |
// TODO: Support a/A (hex float) and m (last error) specifiers. | |
// TODO: Support %1${specifier} for arg selection. | |
} else { | |
ret.push(curr); | |
textIndex += 1; | |
} | |
} | |
return ret; | |
}function _fprintf(stream, format, varargs) { | |
// int fprintf(FILE *restrict stream, const char *restrict format, ...); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html | |
var result = __formatString(format, varargs); | |
var stack = Runtime.stackSave(); | |
var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream); | |
Runtime.stackRestore(stack); | |
return ret; | |
}function _printf(format, varargs) { | |
// int printf(const char *restrict format, ...); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html | |
var stdout = HEAP32[((_stdout)>>2)]; | |
return _fprintf(stdout, format, varargs); | |
} | |
function _glCreateProgram() { | |
var id = GL.getNewId(GL.programs); | |
GL.programs[id] = Module.ctx.createProgram(); | |
return id; | |
} | |
function _glAttachShader(program, shader) { | |
Module.ctx.attachShader(GL.programs[program], | |
GL.shaders[shader]); | |
} | |
function _glBindAttribLocation(program, index, name) { | |
name = Pointer_stringify(name); | |
Module.ctx.bindAttribLocation(GL.programs[program], index, name); | |
} | |
function _glLinkProgram(program) { | |
Module.ctx.linkProgram(GL.programs[program]); | |
GL.uniformTable[program] = {}; // uniforms no longer keep the same names after linking | |
} | |
function _glGetProgramInfoLog(program, maxLength, length, infoLog) { | |
var log = Module.ctx.getProgramInfoLog(GL.programs[program]); | |
// Work around a bug in Chromium which causes getProgramInfoLog to return null | |
if (!log) { | |
log = ""; | |
} | |
log = log.substr(0, maxLength - 1); | |
writeStringToMemory(log, infoLog); | |
if (length) { | |
HEAP32[((length)>>2)]=log.length | |
} | |
} | |
function _glUseProgram(program) { | |
Module.ctx.useProgram(program ? GL.programs[program] : null); | |
} | |
function _glGetUniformLocation(program, name) { | |
name = Pointer_stringify(name); | |
var ptable = GL.uniformTable[program]; | |
if (!ptable) ptable = GL.uniformTable[program] = {}; | |
var id = ptable[name]; | |
if (id) return id; | |
var loc = Module.ctx.getUniformLocation(GL.programs[program], name); | |
if (!loc) return -1; | |
id = GL.getNewId(GL.uniforms); | |
GL.uniforms[id] = loc; | |
ptable[name] = id; | |
return id; | |
} | |
function _glUniform4fv(location, count, value) { | |
location = GL.uniforms[location]; | |
var view; | |
if (count == 1) { | |
// avoid allocation for the common case of uploading one uniform | |
view = GL.miniTempBufferViews[3]; | |
view[0] = HEAPF32[((value)>>2)]; | |
view[1] = HEAPF32[(((value)+(4))>>2)]; | |
view[2] = HEAPF32[(((value)+(8))>>2)]; | |
view[3] = HEAPF32[(((value)+(12))>>2)]; | |
} else { | |
view = HEAPF32.subarray((value)>>2,(value+count*16)>>2); | |
} | |
Module.ctx.uniform4fv(location, view); | |
} | |
function _glGenBuffers(n, buffers) { | |
for (var i = 0; i < n; i++) { | |
var id = GL.getNewId(GL.buffers); | |
GL.buffers[id] = Module.ctx.createBuffer(); | |
HEAP32[(((buffers)+(i*4))>>2)]=id; | |
} | |
} | |
function _glBindBuffer(target, buffer) { | |
if (target == Module.ctx.ARRAY_BUFFER) { | |
GL.currArrayBuffer = buffer; | |
} else if (target == Module.ctx.ELEMENT_ARRAY_BUFFER) { | |
GL.currElementArrayBuffer = buffer; | |
} | |
Module.ctx.bindBuffer(target, buffer ? GL.buffers[buffer] : null); | |
} | |
function _glBufferData(target, size, data, usage) { | |
Module.ctx.bufferData(target, HEAPU8.subarray(data, data+size), usage); | |
} | |
function _glutFullScreen() { | |
GLUT.windowX = 0; // TODO | |
GLUT.windowY = 0; // TODO | |
GLUT.windowWidth = Module['canvas'].width; | |
GLUT.windowHeight = Module['canvas'].height; | |
document.addEventListener('fullscreenchange', GLUT.onFullScreenEventChange, true); | |
document.addEventListener('mozfullscreenchange', GLUT.onFullScreenEventChange, true); | |
document.addEventListener('webkitfullscreenchange', GLUT.onFullScreenEventChange, true); | |
GLUT.requestFullScreen(); | |
} | |
function _glClearColor(x0, x1, x2, x3) { Module.ctx.clearColor(x0, x1, x2, x3) } | |
function _glClear(x0) { Module.ctx.clear(x0) } | |
function _glutSwapBuffers() {} | |
function _glUniformMatrix4fv(location, count, transpose, value) { | |
location = GL.uniforms[location]; | |
var view; | |
if (count == 1) { | |
// avoid allocation for the common case of uploading one uniform matrix | |
view = GL.miniTempBufferViews[15]; | |
for (var i = 0; i < 16; i++) { | |
view[i] = HEAPF32[(((value)+(i*4))>>2)]; | |
} | |
} else { | |
view = HEAPF32.subarray((value)>>2,(value+count*64)>>2); | |
} | |
Module.ctx.uniformMatrix4fv(location, transpose, view); | |
} | |
function _glVertexAttribPointer(index, size, type, normalized, stride, ptr) { | |
Module.ctx.vertexAttribPointer(index, size, type, normalized, stride, ptr); | |
} | |
function _glEnableVertexAttribArray(index) { | |
Module.ctx.enableVertexAttribArray(index); | |
} | |
function _glDrawArrays(mode, first, count) { | |
Module.ctx.drawArrays(mode, first, count); | |
} | |
function _glDisableVertexAttribArray(index) { | |
Module.ctx.disableVertexAttribArray(index); | |
} | |
var ___div_t_struct_layout={__size__:8,quot:0,rem:4};function _div(divt, numer, denom) { | |
var quot = Math.floor(numer / denom); | |
var rem = numer - quot * denom; | |
var offset = ___div_t_struct_layout.rem; | |
HEAP32[((divt)>>2)]=quot; | |
HEAP32[(((divt)+(offset))>>2)]=rem; | |
return divt; | |
} | |
function _glViewport(x0, x1, x2, x3) { Module.ctx.viewport(x0, x1, x2, x3) } | |
function _glutGet(type) { | |
switch (type) { | |
case 100: /* GLUT_WINDOW_X */ | |
return 0; /* TODO */ | |
case 101: /* GLUT_WINDOW_Y */ | |
return 0; /* TODO */ | |
case 102: /* GLUT_WINDOW_WIDTH */ | |
return Module['canvas'].width; | |
case 103: /* GLUT_WINDOW_HEIGHT */ | |
return Module['canvas'].height; | |
case 500: /* GLUT_INIT_WINDOW_X */ | |
return 0; /* TODO */ | |
case 501: /* GLUT_INIT_WINDOW_Y */ | |
return 0; /* TODO */ | |
case 502: /* GLUT_INIT_WINDOW_WIDTH */ | |
return GLUT.initWindowWidth; | |
case 503: /* GLUT_INIT_WINDOW_HEIGHT */ | |
return GLUT.initWindowHeight; | |
case 700: /* GLUT_ELAPSED_TIME */ | |
var now = Date.now(); | |
return now - GLUT.initTime; | |
default: | |
throw "glutGet(" + type + ") not implemented yet"; | |
} | |
} | |
var _sin=Math.sin; | |
var _cos=Math.cos; | |
function _memset(ptr, value, num) { | |
ptr = ptr|0; value = value|0; num = num|0; | |
var stop = 0, value4 = 0, stop4 = 0, unaligned = 0; | |
stop = (ptr + num)|0; | |
if ((num|0) >= 20) { | |
// This is unaligned, but quite large, so work hard to get to aligned settings | |
value = value & 0xff; | |
unaligned = ptr & 3; | |
value4 = value | (value << 8) | (value << 16) | (value << 24); | |
stop4 = stop & ~3; | |
if (unaligned) { | |
unaligned = (ptr + 4 - unaligned)|0; | |
while ((ptr|0) < (unaligned|0)) { // no need to check for stop, since we have large num | |
HEAP8[(ptr)]=value; | |
ptr = (ptr+1)|0; | |
} | |
} | |
while ((ptr|0) < (stop4|0)) { | |
HEAP32[((ptr)>>2)]=value4; | |
ptr = (ptr+4)|0; | |
} | |
} | |
while ((ptr|0) < (stop|0)) { | |
HEAP8[(ptr)]=value; | |
ptr = (ptr+1)|0; | |
} | |
}var _llvm_memset_p0i8_i32=_memset; | |
function _abort() { | |
ABORT = true; | |
throw 'abort() at ' + (new Error().stack); | |
} | |
function ___errno_location() { | |
return ___setErrNo.ret; | |
}var ___errno=___errno_location; | |
function _sysconf(name) { | |
// long sysconf(int name); | |
// http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html | |
switch(name) { | |
case 8: return PAGE_SIZE; | |
case 54: | |
case 56: | |
case 21: | |
case 61: | |
case 63: | |
case 22: | |
case 67: | |
case 23: | |
case 24: | |
case 25: | |
case 26: | |
case 27: | |
case 69: | |
case 28: | |
case 101: | |
case 70: | |
case 71: | |
case 29: | |
case 30: | |
case 199: | |
case 75: | |
case 76: | |
case 32: | |
case 43: | |
case 44: | |
case 80: | |
case 46: | |
case 47: | |
case 45: | |
case 48: | |
case 49: | |
case 42: | |
case 82: | |
case 33: | |
case 7: | |
case 108: | |
case 109: | |
case 107: | |
case 112: | |
case 119: | |
case 121: | |
return 200809; | |
case 13: | |
case 104: | |
case 94: | |
case 95: | |
case 34: | |
case 35: | |
case 77: | |
case 81: | |
case 83: | |
case 84: | |
case 85: | |
case 86: | |
case 87: | |
case 88: | |
case 89: | |
case 90: | |
case 91: | |
case 94: | |
case 95: | |
case 110: | |
case 111: | |
case 113: | |
case 114: | |
case 115: | |
case 116: | |
case 117: | |
case 118: | |
case 120: | |
case 40: | |
case 16: | |
case 79: | |
case 19: | |
return -1; | |
case 92: | |
case 93: | |
case 5: | |
case 72: | |
case 6: | |
case 74: | |
case 92: | |
case 93: | |
case 96: | |
case 97: | |
case 98: | |
case 99: | |
case 102: | |
case 103: | |
case 105: | |
return 1; | |
case 38: | |
case 66: | |
case 50: | |
case 51: | |
case 4: | |
return 1024; | |
case 15: | |
case 64: | |
case 41: | |
return 32; | |
case 55: | |
case 37: | |
case 17: | |
return 2147483647; | |
case 18: | |
case 1: | |
return 47839; | |
case 59: | |
case 57: | |
return 99; | |
case 68: | |
case 58: | |
return 2048; | |
case 0: return 2097152; | |
case 3: return 65536; | |
case 14: return 32768; | |
case 73: return 32767; | |
case 39: return 16384; | |
case 60: return 1000; | |
case 106: return 700; | |
case 52: return 256; | |
case 62: return 255; | |
case 2: return 100; | |
case 65: return 64; | |
case 36: return 20; | |
case 100: return 16; | |
case 20: return 6; | |
case 53: return 4; | |
case 10: return 1; | |
} | |
___setErrNo(ERRNO_CODES.EINVAL); | |
return -1; | |
} | |
function _time(ptr) { | |
var ret = Math.floor(Date.now()/1000); | |
if (ptr) { | |
HEAP32[((ptr)>>2)]=ret | |
} | |
return ret; | |
} | |
function _sbrk(bytes) { | |
// Implement a Linux-like 'memory area' for our 'process'. | |
// Changes the size of the memory area by |bytes|; returns the | |
// address of the previous top ('break') of the memory area | |
// We need to make sure no one else allocates unfreeable memory! | |
// We must control this entirely. So we don't even need to do | |
// unfreeable allocations - the HEAP is ours, from STATICTOP up. | |
// TODO: We could in theory slice off the top of the HEAP when | |
// sbrk gets a negative increment in |bytes|... | |
var self = _sbrk; | |
if (!self.called) { | |
STATICTOP = alignMemoryPage(STATICTOP); // make sure we start out aligned | |
self.called = true; | |
_sbrk.DYNAMIC_START = STATICTOP; | |
} | |
var ret = STATICTOP; | |
if (bytes != 0) Runtime.staticAlloc(bytes); | |
return ret; // Previous break location. | |
} | |
function _free(){} | |
Module["requestFullScreen"] = function(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) }; | |
Module["requestAnimationFrame"] = function(func) { Browser.requestAnimationFrame(func) }; | |
Module["pauseMainLoop"] = function() { Browser.mainLoop.pause() }; | |
Module["resumeMainLoop"] = function() { Browser.mainLoop.resume() }; | |
GL.init() | |
__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice; | |
___setErrNo(0); | |
var FUNCTION_TABLE = [0,0,_gears_reshape,0,_gears_draw,0,_gears_idle,0,_gears_special,0]; | |
// EMSCRIPTEN_START_FUNCS | |
function _perspective($m, $fovy, $aspect, $zNear, $zFar) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 80)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $4; | |
var $5; | |
var $tmp=__stackBase__; | |
var $sine=(__stackBase__)+(64); | |
var $cosine=(__stackBase__)+(72); | |
var $cotangent; | |
var $deltaZ; | |
var $radians; | |
$1=$m; | |
$2=$fovy; | |
$3=$aspect; | |
$4=$zNear; | |
$5=$zFar; | |
var $6=(($tmp)|0); | |
_identity($6); | |
var $7=$2; | |
var $8=($7)/(2); | |
var $9=$8; | |
var $10=($9)*(3.141592653589793); | |
var $11=($10)/(180); | |
var $12=$11; | |
$radians=$12; | |
var $13=$5; | |
var $14=$4; | |
var $15=($13)-($14); | |
var $16=$15; | |
$deltaZ=$16; | |
var $17=$radians; | |
var $18=$17; | |
__sincos($18, $sine, $cosine); | |
var $19=$deltaZ; | |
var $20=$19 == 0; | |
if ($20) { label = 5; break; } else { label = 3; break; } | |
case 3: | |
var $22=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($sine)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($sine)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $23=$22 == 0; | |
if ($23) { label = 5; break; } else { label = 4; break; } | |
case 4: | |
var $25=$3; | |
var $26=$25 == 0; | |
if ($26) { label = 5; break; } else { label = 6; break; } | |
case 5: | |
label = 7; break; | |
case 6: | |
var $29=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($cosine)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($cosine)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $30=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($sine)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($sine)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $31=($29)/($30); | |
$cotangent=$31; | |
var $32=$cotangent; | |
var $33=$3; | |
var $34=$33; | |
var $35=($32)/($34); | |
var $36=$35; | |
var $37=(($tmp)|0); | |
HEAPF32[(($37)>>2)]=$36; | |
var $38=$cotangent; | |
var $39=$38; | |
var $40=(($tmp+20)|0); | |
HEAPF32[(($40)>>2)]=$39; | |
var $41=$5; | |
var $42=$4; | |
var $43=($41)+($42); | |
var $44=(-$43); | |
var $45=$44; | |
var $46=$deltaZ; | |
var $47=($45)/($46); | |
var $48=$47; | |
var $49=(($tmp+40)|0); | |
HEAPF32[(($49)>>2)]=$48; | |
var $50=(($tmp+44)|0); | |
HEAPF32[(($50)>>2)]=-1; | |
var $51=$4; | |
var $52=($51)*(-2); | |
var $53=$5; | |
var $54=($52)*($53); | |
var $55=$54; | |
var $56=$deltaZ; | |
var $57=($55)/($56); | |
var $58=$57; | |
var $59=(($tmp+56)|0); | |
HEAPF32[(($59)>>2)]=$58; | |
var $60=(($tmp+60)|0); | |
HEAPF32[(($60)>>2)]=0; | |
var $61=$1; | |
var $62=$61; | |
var $63=$tmp; | |
assert(64 % 1 === 0);_memcpy($62, $63, 64); | |
label = 7; break; | |
case 7: | |
STACKTOP = __stackBase__; | |
return; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _identity($m) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 64)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
var $1; | |
var $t=__stackBase__; | |
$1=$m; | |
var $2=$t; | |
_memset($2, 0, 64); | |
var $3=$2; | |
var $4=(($3)|0); | |
HEAPF32[(($4)>>2)]=1; | |
var $5=(($3+20)|0); | |
HEAPF32[(($5)>>2)]=1; | |
var $6=(($3+40)|0); | |
HEAPF32[(($6)>>2)]=1; | |
var $7=(($3+60)|0); | |
HEAPF32[(($7)>>2)]=1; | |
var $8=$1; | |
var $9=$8; | |
var $10=$t; | |
assert(64 % 1 === 0);_memcpy($9, $10, 64); | |
STACKTOP = __stackBase__; | |
return; | |
} | |
function __sincos($a, $s, $c) { | |
var label = 0; | |
var $1; | |
var $2; | |
var $3; | |
$1=$a; | |
$2=$s; | |
$3=$c; | |
var $4=$1; | |
var $5=Math.sin($4); | |
var $6=$2; | |
(HEAPF64[(tempDoublePtr)>>3]=$5,HEAP32[(($6)>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[((($6)+(4))>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]); | |
var $7=$1; | |
var $8=Math.cos($7); | |
var $9=$3; | |
(HEAPF64[(tempDoublePtr)>>3]=$8,HEAP32[(($9)>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[((($9)+(4))>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]); | |
return; | |
} | |
function _main($argc, $argv) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 4)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
var $1; | |
var $2=__stackBase__; | |
var $3; | |
$1=0; | |
HEAP32[(($2)>>2)]=$argc; | |
$3=$argv; | |
var $4=$3; | |
_glutInit($2, $4); | |
_glutInitWindowSize(300, 300); | |
_glutInitDisplayMode(18); | |
var $5=_glutCreateWindow(((5244132)|0)); | |
_glutIdleFunc(6); | |
_glutReshapeFunc(2); | |
_glutDisplayFunc(4); | |
_glutSpecialFunc(8); | |
_gears_init(); | |
_glutMainLoop(); | |
STACKTOP = __stackBase__; | |
return 0; | |
} | |
Module["_main"] = _main; | |
function _gears_idle() { | |
var label = 0; | |
var __stackBase__ = STACKTOP; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $dt; | |
var $t; | |
var $seconds; | |
var $fps; | |
var $1=_glutGet(700); | |
var $2=(($1)|(0)); | |
var $3=($2)/(1000); | |
$t=$3; | |
var $4=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[((5243732)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((5243736)>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $5=$4 < 0; | |
if ($5) { label = 3; break; } else { label = 4; break; } | |
case 3: | |
var $7=$t; | |
(HEAPF64[(tempDoublePtr)>>3]=$7,HEAP32[((5243732)>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[((5243736)>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]); | |
label = 4; break; | |
case 4: | |
var $9=$t; | |
var $10=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[((5243732)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((5243736)>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $11=($9)-($10); | |
$dt=$11; | |
var $12=$t; | |
(HEAPF64[(tempDoublePtr)>>3]=$12,HEAP32[((5243732)>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[((5243736)>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]); | |
var $13=$dt; | |
var $14=($13)*(70); | |
var $15=HEAPF32[((5243924)>>2)]; | |
var $16=$15; | |
var $17=($16)+($14); | |
var $18=$17; | |
HEAPF32[((5243924)>>2)]=$18; | |
var $19=HEAPF32[((5243924)>>2)]; | |
var $20=$19; | |
var $21=$20 > 3600; | |
if ($21) { label = 5; break; } else { label = 6; break; } | |
case 5: | |
var $23=HEAPF32[((5243924)>>2)]; | |
var $24=$23; | |
var $25=($24)-(3600); | |
var $26=$25; | |
HEAPF32[((5243924)>>2)]=$26; | |
label = 6; break; | |
case 6: | |
_glutPostRedisplay(); | |
var $28=HEAP32[((5243748)>>2)]; | |
var $29=((($28)+(1))|0); | |
HEAP32[((5243748)>>2)]=$29; | |
var $30=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[((5243740)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((5243744)>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $31=$30 < 0; | |
if ($31) { label = 7; break; } else { label = 8; break; } | |
case 7: | |
var $33=$t; | |
(HEAPF64[(tempDoublePtr)>>3]=$33,HEAP32[((5243740)>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[((5243744)>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]); | |
label = 8; break; | |
case 8: | |
var $35=$t; | |
var $36=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[((5243740)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((5243744)>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $37=($35)-($36); | |
var $38=$37 >= 5; | |
if ($38) { label = 9; break; } else { label = 10; break; } | |
case 9: | |
var $40=$t; | |
var $41=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[((5243740)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((5243744)>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $42=($40)-($41); | |
var $43=$42; | |
$seconds=$43; | |
var $44=HEAP32[((5243748)>>2)]; | |
var $45=(($44)|(0)); | |
var $46=$seconds; | |
var $47=($45)/($46); | |
$fps=$47; | |
var $48=HEAP32[((5243748)>>2)]; | |
var $49=$seconds; | |
var $50=$49; | |
var $51=$fps; | |
var $52=$51; | |
var $53=_printf(((5244068)|0), (tempInt=STACKTOP,STACKTOP = (STACKTOP + 20)|0,assert((STACKTOP|0) < (STACK_MAX|0)),HEAP32[((tempInt)>>2)]=$48,(HEAPF64[(tempDoublePtr)>>3]=$50,HEAP32[(((tempInt)+(4))>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[((((tempInt)+(4))+(4))>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]),(HEAPF64[(tempDoublePtr)>>3]=$52,HEAP32[(((tempInt)+(12))>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[((((tempInt)+(12))+(4))>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]),tempInt)); | |
var $54=$t; | |
(HEAPF64[(tempDoublePtr)>>3]=$54,HEAP32[((5243740)>>2)]=HEAP32[((tempDoublePtr)>>2)],HEAP32[((5243744)>>2)]=HEAP32[(((tempDoublePtr)+(4))>>2)]); | |
HEAP32[((5243748)>>2)]=0; | |
label = 10; break; | |
case 10: | |
STACKTOP = __stackBase__; | |
return; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _gears_reshape($width, $height) { | |
var label = 0; | |
var $1; | |
var $2; | |
$1=$width; | |
$2=$height; | |
var $3=$1; | |
var $4=(($3)|(0)); | |
var $5=$2; | |
var $6=(($5)|(0)); | |
var $7=($4)/($6); | |
_perspective(((5244616)|0), 60, $7, 1, 1024); | |
var $8=$1; | |
var $9=$2; | |
_glViewport(0, 0, $8, $9); | |
return; | |
} | |
function _gears_draw() { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 64)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
var $transform=__stackBase__; | |
var $1=(($transform)|0); | |
_identity($1); | |
_glClearColor(0, 0, 0, 0); | |
_glClear(16640); | |
var $2=(($transform)|0); | |
_translate($2, 0, 0, -20); | |
var $3=(($transform)|0); | |
var $4=HEAPF32[((((5242880)|0))>>2)]; | |
var $5=$4; | |
var $6=($5)*(6.283185307179586); | |
var $7=($6)/(360); | |
var $8=$7; | |
_rotate($3, $8, 1, 0, 0); | |
var $9=(($transform)|0); | |
var $10=HEAPF32[((((5242884)|0))>>2)]; | |
var $11=$10; | |
var $12=($11)*(6.283185307179586); | |
var $13=($12)/(360); | |
var $14=$13; | |
_rotate($9, $14, 0, 1, 0); | |
var $15=(($transform)|0); | |
var $16=HEAPF32[((((5242888)|0))>>2)]; | |
var $17=$16; | |
var $18=($17)*(6.283185307179586); | |
var $19=($18)/(360); | |
var $20=$19; | |
_rotate($15, $20, 0, 0, 1); | |
var $21=HEAP32[((5243808)>>2)]; | |
var $22=(($transform)|0); | |
var $23=HEAPF32[((5243924)>>2)]; | |
_draw_gear($21, $22, -3, -2, $23, ((5243752)|0)); | |
var $24=HEAP32[((5243804)>>2)]; | |
var $25=(($transform)|0); | |
var $26=HEAPF32[((5243924)>>2)]; | |
var $27=($26)*(-2); | |
var $28=$27; | |
var $29=($28)-(9); | |
var $30=$29; | |
_draw_gear($24, $25, 3.0999999046325684, -2, $30, ((5243768)|0)); | |
var $31=HEAP32[((5243800)>>2)]; | |
var $32=(($transform)|0); | |
var $33=HEAPF32[((5243924)>>2)]; | |
var $34=($33)*(-2); | |
var $35=$34; | |
var $36=($35)-(25); | |
var $37=$36; | |
_draw_gear($31, $32, -3.0999999046325684, 4.199999809265137, $37, ((5243784)|0)); | |
STACKTOP = __stackBase__; | |
return; | |
} | |
function _gears_special($special, $crap, $morecrap) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
$1=$special; | |
$2=$crap; | |
$3=$morecrap; | |
var $4=$1; | |
if ((($4)|(0))==100) { | |
label = 3; break; | |
} | |
else if ((($4)|(0))==102) { | |
label = 4; break; | |
} | |
else if ((($4)|(0))==101) { | |
label = 5; break; | |
} | |
else if ((($4)|(0))==103) { | |
label = 6; break; | |
} | |
else if ((($4)|(0))==11) { | |
label = 7; break; | |
} | |
else { | |
label = 8; break; | |
} | |
case 3: | |
var $6=HEAPF32[((((5242884)|0))>>2)]; | |
var $7=$6; | |
var $8=($7)+(5); | |
var $9=$8; | |
HEAPF32[((((5242884)|0))>>2)]=$9; | |
label = 8; break; | |
case 4: | |
var $11=HEAPF32[((((5242884)|0))>>2)]; | |
var $12=$11; | |
var $13=($12)-(5); | |
var $14=$13; | |
HEAPF32[((((5242884)|0))>>2)]=$14; | |
label = 8; break; | |
case 5: | |
var $16=HEAPF32[((((5242880)|0))>>2)]; | |
var $17=$16; | |
var $18=($17)+(5); | |
var $19=$18; | |
HEAPF32[((((5242880)|0))>>2)]=$19; | |
label = 8; break; | |
case 6: | |
var $21=HEAPF32[((((5242880)|0))>>2)]; | |
var $22=$21; | |
var $23=($22)-(5); | |
var $24=$23; | |
HEAPF32[((((5242880)|0))>>2)]=$24; | |
label = 8; break; | |
case 7: | |
_glutFullScreen(); | |
label = 8; break; | |
case 8: | |
return; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _gears_init() { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 516)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
var $v; | |
var $f; | |
var $program; | |
var $p=__stackBase__; | |
var $msg=(__stackBase__)+(4); | |
_glEnable(2884); | |
_glEnable(2929); | |
HEAP32[(($p)>>2)]=((5242892)|0); | |
var $1=_glCreateShader(35633); | |
$v=$1; | |
var $2=$v; | |
_glShaderSource($2, 1, $p, 0); | |
var $3=$v; | |
_glCompileShader($3); | |
var $4=$v; | |
var $5=(($msg)|0); | |
_glGetShaderInfoLog($4, 512, 0, $5); | |
var $6=(($msg)|0); | |
var $7=_printf(((5244108)|0), (tempInt=STACKTOP,STACKTOP = (STACKTOP + 4)|0,assert((STACKTOP|0) < (STACK_MAX|0)),HEAP32[((tempInt)>>2)]=$6,tempInt)); | |
HEAP32[(($p)>>2)]=((5243812)|0); | |
var $8=_glCreateShader(35632); | |
$f=$8; | |
var $9=$f; | |
_glShaderSource($9, 1, $p, 0); | |
var $10=$f; | |
_glCompileShader($10); | |
var $11=$f; | |
var $12=(($msg)|0); | |
_glGetShaderInfoLog($11, 512, 0, $12); | |
var $13=(($msg)|0); | |
var $14=_printf(((5244040)|0), (tempInt=STACKTOP,STACKTOP = (STACKTOP + 4)|0,assert((STACKTOP|0) < (STACK_MAX|0)),HEAP32[((tempInt)>>2)]=$13,tempInt)); | |
var $15=_glCreateProgram(); | |
$program=$15; | |
var $16=$program; | |
var $17=$v; | |
_glAttachShader($16, $17); | |
var $18=$program; | |
var $19=$f; | |
_glAttachShader($18, $19); | |
var $20=$program; | |
_glBindAttribLocation($20, 0, ((5244028)|0)); | |
var $21=$program; | |
_glBindAttribLocation($21, 1, ((5244020)|0)); | |
var $22=$program; | |
_glLinkProgram($22); | |
var $23=$program; | |
var $24=(($msg)|0); | |
_glGetProgramInfoLog($23, 512, 0, $24); | |
var $25=(($msg)|0); | |
var $26=_printf(((5244008)|0), (tempInt=STACKTOP,STACKTOP = (STACKTOP + 4)|0,assert((STACKTOP|0) < (STACK_MAX|0)),HEAP32[((tempInt)>>2)]=$25,tempInt)); | |
var $27=$program; | |
_glUseProgram($27); | |
var $28=$program; | |
var $29=_glGetUniformLocation($28, ((5243980)|0)); | |
HEAP32[((5244684)>>2)]=$29; | |
var $30=$program; | |
var $31=_glGetUniformLocation($30, ((5243964)|0)); | |
HEAP32[((5244680)>>2)]=$31; | |
var $32=$program; | |
var $33=_glGetUniformLocation($32, ((5243944)|0)); | |
HEAP32[((5244692)>>2)]=$33; | |
var $34=$program; | |
var $35=_glGetUniformLocation($34, ((5243928)|0)); | |
HEAP32[((5244688)>>2)]=$35; | |
var $36=HEAP32[((5244692)>>2)]; | |
_glUniform4fv($36, 1, ((5244696)|0)); | |
var $37=_create_gear(1, 4, 1, 20, 0.699999988079071); | |
HEAP32[((5243808)>>2)]=$37; | |
var $38=_create_gear(0.5, 2, 2, 10, 0.699999988079071); | |
HEAP32[((5243804)>>2)]=$38; | |
var $39=_create_gear(1.2999999523162842, 2, 0.5, 10, 0.699999988079071); | |
HEAP32[((5243800)>>2)]=$39; | |
STACKTOP = __stackBase__; | |
return; | |
} | |
function _create_gear($inner_radius, $outer_radius, $width, $teeth, $tooth_depth) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 148)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $4; | |
var $5; | |
var $6; | |
var $r0; | |
var $r1; | |
var $r2; | |
var $da; | |
var $v; | |
var $gear; | |
var $s=__stackBase__; | |
var $c=(__stackBase__)+(40); | |
var $normal=(__stackBase__)+(80); | |
var $cur_strip; | |
var $i; | |
var $p=(__stackBase__)+(92); | |
var $_tmp; | |
var $_tmp1; | |
var $_tmp2; | |
var $_tmp3; | |
var $_tmp4; | |
var $_tmp5; | |
var $_tmp6; | |
$2=$inner_radius; | |
$3=$outer_radius; | |
$4=$width; | |
$5=$teeth; | |
$6=$tooth_depth; | |
$cur_strip=0; | |
var $7=_malloc(20); | |
var $8=$7; | |
$gear=$8; | |
var $9=$gear; | |
var $10=(($9)|(0))==0; | |
if ($10) { label = 3; break; } else { label = 4; break; } | |
case 3: | |
$1=0; | |
label = 61; break; | |
case 4: | |
var $13=$2; | |
$r0=$13; | |
var $14=$3; | |
var $15=$14; | |
var $16=$6; | |
var $17=$16; | |
var $18=($17)/(2); | |
var $19=($15)-($18); | |
var $20=$19; | |
$r1=$20; | |
var $21=$3; | |
var $22=$21; | |
var $23=$6; | |
var $24=$23; | |
var $25=($24)/(2); | |
var $26=($22)+($25); | |
var $27=$26; | |
$r2=$27; | |
var $28=$5; | |
var $29=(($28)|(0)); | |
var $30=(6.283185307179586)/($29); | |
var $31=($30)/(4); | |
var $32=$31; | |
$da=$32; | |
var $33=$5; | |
var $34=((($33)*(7))&-1); | |
var $35=$gear; | |
var $36=(($35+12)|0); | |
HEAP32[(($36)>>2)]=$34; | |
var $37=$gear; | |
var $38=(($37+12)|0); | |
var $39=HEAP32[(($38)>>2)]; | |
var $40=_calloc($39, 8); | |
var $41=$40; | |
var $42=$gear; | |
var $43=(($42+8)|0); | |
HEAP32[(($43)>>2)]=$41; | |
var $44=$5; | |
var $45=((($44)*(34))&-1); | |
var $46=_calloc($45, 24); | |
var $47=$46; | |
var $48=$gear; | |
var $49=(($48)|0); | |
HEAP32[(($49)>>2)]=$47; | |
var $50=$gear; | |
var $51=(($50)|0); | |
var $52=HEAP32[(($51)>>2)]; | |
$v=$52; | |
$i=0; | |
label = 5; break; | |
case 5: | |
var $54=$i; | |
var $55=$5; | |
var $56=(($54)|(0)) < (($55)|(0)); | |
if ($56) { label = 6; break; } else { label = 60; break; } | |
case 6: | |
var $58=$i; | |
var $59=(($58)|(0)); | |
var $60=($59)*(2); | |
var $61=($60)*(3.141592653589793); | |
var $62=$5; | |
var $63=(($62)|(0)); | |
var $64=($61)/($63); | |
var $65=(($s)|0); | |
var $66=(($c)|0); | |
__sincos($64, $65, $66); | |
var $67=$i; | |
var $68=(($67)|(0)); | |
var $69=($68)*(2); | |
var $70=($69)*(3.141592653589793); | |
var $71=$5; | |
var $72=(($71)|(0)); | |
var $73=($70)/($72); | |
var $74=$da; | |
var $75=$74; | |
var $76=($73)+($75); | |
var $77=(($s+8)|0); | |
var $78=(($c+8)|0); | |
__sincos($76, $77, $78); | |
var $79=$i; | |
var $80=(($79)|(0)); | |
var $81=($80)*(2); | |
var $82=($81)*(3.141592653589793); | |
var $83=$5; | |
var $84=(($83)|(0)); | |
var $85=($82)/($84); | |
var $86=$da; | |
var $87=($86)*(2); | |
var $88=$87; | |
var $89=($85)+($88); | |
var $90=(($s+16)|0); | |
var $91=(($c+16)|0); | |
__sincos($89, $90, $91); | |
var $92=$i; | |
var $93=(($92)|(0)); | |
var $94=($93)*(2); | |
var $95=($94)*(3.141592653589793); | |
var $96=$5; | |
var $97=(($96)|(0)); | |
var $98=($95)/($97); | |
var $99=$da; | |
var $100=($99)*(3); | |
var $101=$100; | |
var $102=($98)+($101); | |
var $103=(($s+24)|0); | |
var $104=(($c+24)|0); | |
__sincos($102, $103, $104); | |
var $105=$i; | |
var $106=(($105)|(0)); | |
var $107=($106)*(2); | |
var $108=($107)*(3.141592653589793); | |
var $109=$5; | |
var $110=(($109)|(0)); | |
var $111=($108)/($110); | |
var $112=$da; | |
var $113=($112)*(4); | |
var $114=$113; | |
var $115=($111)+($114); | |
var $116=(($s+32)|0); | |
var $117=(($c+32)|0); | |
__sincos($115, $116, $117); | |
var $118=(($p)|0); | |
var $119=(($118)|0); | |
var $120=$r2; | |
var $121=$120; | |
var $122=(($c+8)|0); | |
var $123=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($122)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($122)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $124=($121)*($123); | |
var $125=$124; | |
HEAPF32[(($119)>>2)]=$125; | |
var $126=(($118+4)|0); | |
var $127=$r2; | |
var $128=$127; | |
var $129=(($s+8)|0); | |
var $130=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($129)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($129)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $131=($128)*($130); | |
var $132=$131; | |
HEAPF32[(($126)>>2)]=$132; | |
var $133=(($118+8)|0); | |
var $134=(($133)|0); | |
var $135=$r2; | |
var $136=$135; | |
var $137=(($c+16)|0); | |
var $138=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($137)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($137)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $139=($136)*($138); | |
var $140=$139; | |
HEAPF32[(($134)>>2)]=$140; | |
var $141=(($133+4)|0); | |
var $142=$r2; | |
var $143=$142; | |
var $144=(($s+16)|0); | |
var $145=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($144)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($144)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $146=($143)*($145); | |
var $147=$146; | |
HEAPF32[(($141)>>2)]=$147; | |
var $148=(($133+8)|0); | |
var $149=(($148)|0); | |
var $150=$r1; | |
var $151=$150; | |
var $152=(($c)|0); | |
var $153=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($152)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($152)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $154=($151)*($153); | |
var $155=$154; | |
HEAPF32[(($149)>>2)]=$155; | |
var $156=(($148+4)|0); | |
var $157=$r1; | |
var $158=$157; | |
var $159=(($s)|0); | |
var $160=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($159)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($159)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $161=($158)*($160); | |
var $162=$161; | |
HEAPF32[(($156)>>2)]=$162; | |
var $163=(($148+8)|0); | |
var $164=(($163)|0); | |
var $165=$r1; | |
var $166=$165; | |
var $167=(($c+24)|0); | |
var $168=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($167)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($167)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $169=($166)*($168); | |
var $170=$169; | |
HEAPF32[(($164)>>2)]=$170; | |
var $171=(($163+4)|0); | |
var $172=$r1; | |
var $173=$172; | |
var $174=(($s+24)|0); | |
var $175=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($174)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($174)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $176=($173)*($175); | |
var $177=$176; | |
HEAPF32[(($171)>>2)]=$177; | |
var $178=(($163+8)|0); | |
var $179=(($178)|0); | |
var $180=$r0; | |
var $181=$180; | |
var $182=(($c)|0); | |
var $183=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($182)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($182)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $184=($181)*($183); | |
var $185=$184; | |
HEAPF32[(($179)>>2)]=$185; | |
var $186=(($178+4)|0); | |
var $187=$r0; | |
var $188=$187; | |
var $189=(($s)|0); | |
var $190=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($189)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($189)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $191=($188)*($190); | |
var $192=$191; | |
HEAPF32[(($186)>>2)]=$192; | |
var $193=(($178+8)|0); | |
var $194=(($193)|0); | |
var $195=$r1; | |
var $196=$195; | |
var $197=(($c+32)|0); | |
var $198=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($197)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($197)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $199=($196)*($198); | |
var $200=$199; | |
HEAPF32[(($194)>>2)]=$200; | |
var $201=(($193+4)|0); | |
var $202=$r1; | |
var $203=$202; | |
var $204=(($s+32)|0); | |
var $205=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($204)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($204)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $206=($203)*($205); | |
var $207=$206; | |
HEAPF32[(($201)>>2)]=$207; | |
var $208=(($193+8)|0); | |
var $209=(($208)|0); | |
var $210=$r0; | |
var $211=$210; | |
var $212=(($c+32)|0); | |
var $213=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($212)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($212)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $214=($211)*($213); | |
var $215=$214; | |
HEAPF32[(($209)>>2)]=$215; | |
var $216=(($208+4)|0); | |
var $217=$r0; | |
var $218=$217; | |
var $219=(($s+32)|0); | |
var $220=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($219)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($219)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $221=($218)*($220); | |
var $222=$221; | |
HEAPF32[(($216)>>2)]=$222; | |
label = 7; break; | |
case 7: | |
var $224=$v; | |
var $225=$gear; | |
var $226=(($225)|0); | |
var $227=HEAP32[(($226)>>2)]; | |
var $228=$224; | |
var $229=$227; | |
var $230=((($228)-($229))|0); | |
var $231=((((($230)|(0)))/(24))&-1); | |
var $232=$cur_strip; | |
var $233=$gear; | |
var $234=(($233+8)|0); | |
var $235=HEAP32[(($234)>>2)]; | |
var $236=(($235+($232<<3))|0); | |
var $237=(($236)|0); | |
HEAP32[(($237)>>2)]=$231; | |
label = 8; break; | |
case 8: | |
label = 9; break; | |
case 9: | |
var $240=(($normal)|0); | |
HEAPF32[(($240)>>2)]=0; | |
var $241=(($normal+4)|0); | |
HEAPF32[(($241)>>2)]=0; | |
var $242=(($normal+8)|0); | |
HEAPF32[(($242)>>2)]=1; | |
label = 10; break; | |
case 10: | |
var $244=$v; | |
var $245=(($p)|0); | |
var $246=(($245)|0); | |
var $247=HEAPF32[(($246)>>2)]; | |
var $248=(($p)|0); | |
var $249=(($248+4)|0); | |
var $250=HEAPF32[(($249)>>2)]; | |
var $251=$4; | |
var $252=$251; | |
var $253=$252; | |
var $254=($253)*(0.5); | |
var $255=$254; | |
var $256=(($normal)|0); | |
var $257=_vert($244, $247, $250, $255, $256); | |
$v=$257; | |
var $258=$v; | |
var $259=(($p+8)|0); | |
var $260=(($259)|0); | |
var $261=HEAPF32[(($260)>>2)]; | |
var $262=(($p+8)|0); | |
var $263=(($262+4)|0); | |
var $264=HEAPF32[(($263)>>2)]; | |
var $265=$4; | |
var $266=$265; | |
var $267=$266; | |
var $268=($267)*(0.5); | |
var $269=$268; | |
var $270=(($normal)|0); | |
var $271=_vert($258, $261, $264, $269, $270); | |
$v=$271; | |
var $272=$v; | |
var $273=(($p+16)|0); | |
var $274=(($273)|0); | |
var $275=HEAPF32[(($274)>>2)]; | |
var $276=(($p+16)|0); | |
var $277=(($276+4)|0); | |
var $278=HEAPF32[(($277)>>2)]; | |
var $279=$4; | |
var $280=$279; | |
var $281=$280; | |
var $282=($281)*(0.5); | |
var $283=$282; | |
var $284=(($normal)|0); | |
var $285=_vert($272, $275, $278, $283, $284); | |
$v=$285; | |
var $286=$v; | |
var $287=(($p+24)|0); | |
var $288=(($287)|0); | |
var $289=HEAPF32[(($288)>>2)]; | |
var $290=(($p+24)|0); | |
var $291=(($290+4)|0); | |
var $292=HEAPF32[(($291)>>2)]; | |
var $293=$4; | |
var $294=$293; | |
var $295=$294; | |
var $296=($295)*(0.5); | |
var $297=$296; | |
var $298=(($normal)|0); | |
var $299=_vert($286, $289, $292, $297, $298); | |
$v=$299; | |
var $300=$v; | |
var $301=(($p+32)|0); | |
var $302=(($301)|0); | |
var $303=HEAPF32[(($302)>>2)]; | |
var $304=(($p+32)|0); | |
var $305=(($304+4)|0); | |
var $306=HEAPF32[(($305)>>2)]; | |
var $307=$4; | |
var $308=$307; | |
var $309=$308; | |
var $310=($309)*(0.5); | |
var $311=$310; | |
var $312=(($normal)|0); | |
var $313=_vert($300, $303, $306, $311, $312); | |
$v=$313; | |
var $314=$v; | |
var $315=(($p+40)|0); | |
var $316=(($315)|0); | |
var $317=HEAPF32[(($316)>>2)]; | |
var $318=(($p+40)|0); | |
var $319=(($318+4)|0); | |
var $320=HEAPF32[(($319)>>2)]; | |
var $321=$4; | |
var $322=$321; | |
var $323=$322; | |
var $324=($323)*(0.5); | |
var $325=$324; | |
var $326=(($normal)|0); | |
var $327=_vert($314, $317, $320, $325, $326); | |
$v=$327; | |
var $328=$v; | |
var $329=(($p+48)|0); | |
var $330=(($329)|0); | |
var $331=HEAPF32[(($330)>>2)]; | |
var $332=(($p+48)|0); | |
var $333=(($332+4)|0); | |
var $334=HEAPF32[(($333)>>2)]; | |
var $335=$4; | |
var $336=$335; | |
var $337=$336; | |
var $338=($337)*(0.5); | |
var $339=$338; | |
var $340=(($normal)|0); | |
var $341=_vert($328, $331, $334, $339, $340); | |
$v=$341; | |
label = 11; break; | |
case 11: | |
var $343=$v; | |
var $344=$gear; | |
var $345=(($344)|0); | |
var $346=HEAP32[(($345)>>2)]; | |
var $347=$343; | |
var $348=$346; | |
var $349=((($347)-($348))|0); | |
var $350=((((($349)|(0)))/(24))&-1); | |
$_tmp=$350; | |
var $351=$_tmp; | |
var $352=$cur_strip; | |
var $353=$gear; | |
var $354=(($353+8)|0); | |
var $355=HEAP32[(($354)>>2)]; | |
var $356=(($355+($352<<3))|0); | |
var $357=(($356)|0); | |
var $358=HEAP32[(($357)>>2)]; | |
var $359=((($351)-($358))|0); | |
var $360=$cur_strip; | |
var $361=$gear; | |
var $362=(($361+8)|0); | |
var $363=HEAP32[(($362)>>2)]; | |
var $364=(($363+($360<<3))|0); | |
var $365=(($364+4)|0); | |
HEAP32[(($365)>>2)]=$359; | |
var $366=$cur_strip; | |
var $367=((($366)+(1))|0); | |
$cur_strip=$367; | |
label = 12; break; | |
case 12: | |
label = 13; break; | |
case 13: | |
var $370=$v; | |
var $371=$gear; | |
var $372=(($371)|0); | |
var $373=HEAP32[(($372)>>2)]; | |
var $374=$370; | |
var $375=$373; | |
var $376=((($374)-($375))|0); | |
var $377=((((($376)|(0)))/(24))&-1); | |
var $378=$cur_strip; | |
var $379=$gear; | |
var $380=(($379+8)|0); | |
var $381=HEAP32[(($380)>>2)]; | |
var $382=(($381+($378<<3))|0); | |
var $383=(($382)|0); | |
HEAP32[(($383)>>2)]=$377; | |
label = 14; break; | |
case 14: | |
label = 15; break; | |
case 15: | |
label = 16; break; | |
case 16: | |
var $387=(($p+32)|0); | |
var $388=(($387+4)|0); | |
var $389=HEAPF32[(($388)>>2)]; | |
var $390=(($p+48)|0); | |
var $391=(($390+4)|0); | |
var $392=HEAPF32[(($391)>>2)]; | |
var $393=($389)-($392); | |
var $394=(($normal)|0); | |
HEAPF32[(($394)>>2)]=$393; | |
var $395=(($p+32)|0); | |
var $396=(($395)|0); | |
var $397=HEAPF32[(($396)>>2)]; | |
var $398=(($p+48)|0); | |
var $399=(($398)|0); | |
var $400=HEAPF32[(($399)>>2)]; | |
var $401=($397)-($400); | |
var $402=(-$401); | |
var $403=(($normal+4)|0); | |
HEAPF32[(($403)>>2)]=$402; | |
var $404=(($normal+8)|0); | |
HEAPF32[(($404)>>2)]=0; | |
label = 17; break; | |
case 17: | |
var $406=$v; | |
var $407=(($p+32)|0); | |
var $408=(($407)|0); | |
var $409=HEAPF32[(($408)>>2)]; | |
var $410=(($p+32)|0); | |
var $411=(($410+4)|0); | |
var $412=HEAPF32[(($411)>>2)]; | |
var $413=$4; | |
var $414=($413)*(-1); | |
var $415=$414; | |
var $416=($415)*(0.5); | |
var $417=$416; | |
var $418=(($normal)|0); | |
var $419=_vert($406, $409, $412, $417, $418); | |
$v=$419; | |
var $420=$v; | |
var $421=(($p+32)|0); | |
var $422=(($421)|0); | |
var $423=HEAPF32[(($422)>>2)]; | |
var $424=(($p+32)|0); | |
var $425=(($424+4)|0); | |
var $426=HEAPF32[(($425)>>2)]; | |
var $427=$4; | |
var $428=$427; | |
var $429=$428; | |
var $430=($429)*(0.5); | |
var $431=$430; | |
var $432=(($normal)|0); | |
var $433=_vert($420, $423, $426, $431, $432); | |
$v=$433; | |
var $434=$v; | |
var $435=(($p+48)|0); | |
var $436=(($435)|0); | |
var $437=HEAPF32[(($436)>>2)]; | |
var $438=(($p+48)|0); | |
var $439=(($438+4)|0); | |
var $440=HEAPF32[(($439)>>2)]; | |
var $441=$4; | |
var $442=($441)*(-1); | |
var $443=$442; | |
var $444=($443)*(0.5); | |
var $445=$444; | |
var $446=(($normal)|0); | |
var $447=_vert($434, $437, $440, $445, $446); | |
$v=$447; | |
var $448=$v; | |
var $449=(($p+48)|0); | |
var $450=(($449)|0); | |
var $451=HEAPF32[(($450)>>2)]; | |
var $452=(($p+48)|0); | |
var $453=(($452+4)|0); | |
var $454=HEAPF32[(($453)>>2)]; | |
var $455=$4; | |
var $456=$455; | |
var $457=$456; | |
var $458=($457)*(0.5); | |
var $459=$458; | |
var $460=(($normal)|0); | |
var $461=_vert($448, $451, $454, $459, $460); | |
$v=$461; | |
label = 18; break; | |
case 18: | |
label = 19; break; | |
case 19: | |
var $464=$v; | |
var $465=$gear; | |
var $466=(($465)|0); | |
var $467=HEAP32[(($466)>>2)]; | |
var $468=$464; | |
var $469=$467; | |
var $470=((($468)-($469))|0); | |
var $471=((((($470)|(0)))/(24))&-1); | |
$_tmp1=$471; | |
var $472=$_tmp1; | |
var $473=$cur_strip; | |
var $474=$gear; | |
var $475=(($474+8)|0); | |
var $476=HEAP32[(($475)>>2)]; | |
var $477=(($476+($473<<3))|0); | |
var $478=(($477)|0); | |
var $479=HEAP32[(($478)>>2)]; | |
var $480=((($472)-($479))|0); | |
var $481=$cur_strip; | |
var $482=$gear; | |
var $483=(($482+8)|0); | |
var $484=HEAP32[(($483)>>2)]; | |
var $485=(($484+($481<<3))|0); | |
var $486=(($485+4)|0); | |
HEAP32[(($486)>>2)]=$480; | |
var $487=$cur_strip; | |
var $488=((($487)+(1))|0); | |
$cur_strip=$488; | |
label = 20; break; | |
case 20: | |
label = 21; break; | |
case 21: | |
var $491=$v; | |
var $492=$gear; | |
var $493=(($492)|0); | |
var $494=HEAP32[(($493)>>2)]; | |
var $495=$491; | |
var $496=$494; | |
var $497=((($495)-($496))|0); | |
var $498=((((($497)|(0)))/(24))&-1); | |
var $499=$cur_strip; | |
var $500=$gear; | |
var $501=(($500+8)|0); | |
var $502=HEAP32[(($501)>>2)]; | |
var $503=(($502+($499<<3))|0); | |
var $504=(($503)|0); | |
HEAP32[(($504)>>2)]=$498; | |
label = 22; break; | |
case 22: | |
label = 23; break; | |
case 23: | |
var $507=(($normal)|0); | |
HEAPF32[(($507)>>2)]=0; | |
var $508=(($normal+4)|0); | |
HEAPF32[(($508)>>2)]=0; | |
var $509=(($normal+8)|0); | |
HEAPF32[(($509)>>2)]=-1; | |
label = 24; break; | |
case 24: | |
var $511=$v; | |
var $512=(($p+48)|0); | |
var $513=(($512)|0); | |
var $514=HEAPF32[(($513)>>2)]; | |
var $515=(($p+48)|0); | |
var $516=(($515+4)|0); | |
var $517=HEAPF32[(($516)>>2)]; | |
var $518=$4; | |
var $519=($518)*(-1); | |
var $520=$519; | |
var $521=($520)*(0.5); | |
var $522=$521; | |
var $523=(($normal)|0); | |
var $524=_vert($511, $514, $517, $522, $523); | |
$v=$524; | |
var $525=$v; | |
var $526=(($p+40)|0); | |
var $527=(($526)|0); | |
var $528=HEAPF32[(($527)>>2)]; | |
var $529=(($p+40)|0); | |
var $530=(($529+4)|0); | |
var $531=HEAPF32[(($530)>>2)]; | |
var $532=$4; | |
var $533=($532)*(-1); | |
var $534=$533; | |
var $535=($534)*(0.5); | |
var $536=$535; | |
var $537=(($normal)|0); | |
var $538=_vert($525, $528, $531, $536, $537); | |
$v=$538; | |
var $539=$v; | |
var $540=(($p+32)|0); | |
var $541=(($540)|0); | |
var $542=HEAPF32[(($541)>>2)]; | |
var $543=(($p+32)|0); | |
var $544=(($543+4)|0); | |
var $545=HEAPF32[(($544)>>2)]; | |
var $546=$4; | |
var $547=($546)*(-1); | |
var $548=$547; | |
var $549=($548)*(0.5); | |
var $550=$549; | |
var $551=(($normal)|0); | |
var $552=_vert($539, $542, $545, $550, $551); | |
$v=$552; | |
var $553=$v; | |
var $554=(($p+24)|0); | |
var $555=(($554)|0); | |
var $556=HEAPF32[(($555)>>2)]; | |
var $557=(($p+24)|0); | |
var $558=(($557+4)|0); | |
var $559=HEAPF32[(($558)>>2)]; | |
var $560=$4; | |
var $561=($560)*(-1); | |
var $562=$561; | |
var $563=($562)*(0.5); | |
var $564=$563; | |
var $565=(($normal)|0); | |
var $566=_vert($553, $556, $559, $564, $565); | |
$v=$566; | |
var $567=$v; | |
var $568=(($p+16)|0); | |
var $569=(($568)|0); | |
var $570=HEAPF32[(($569)>>2)]; | |
var $571=(($p+16)|0); | |
var $572=(($571+4)|0); | |
var $573=HEAPF32[(($572)>>2)]; | |
var $574=$4; | |
var $575=($574)*(-1); | |
var $576=$575; | |
var $577=($576)*(0.5); | |
var $578=$577; | |
var $579=(($normal)|0); | |
var $580=_vert($567, $570, $573, $578, $579); | |
$v=$580; | |
var $581=$v; | |
var $582=(($p+8)|0); | |
var $583=(($582)|0); | |
var $584=HEAPF32[(($583)>>2)]; | |
var $585=(($p+8)|0); | |
var $586=(($585+4)|0); | |
var $587=HEAPF32[(($586)>>2)]; | |
var $588=$4; | |
var $589=($588)*(-1); | |
var $590=$589; | |
var $591=($590)*(0.5); | |
var $592=$591; | |
var $593=(($normal)|0); | |
var $594=_vert($581, $584, $587, $592, $593); | |
$v=$594; | |
var $595=$v; | |
var $596=(($p)|0); | |
var $597=(($596)|0); | |
var $598=HEAPF32[(($597)>>2)]; | |
var $599=(($p)|0); | |
var $600=(($599+4)|0); | |
var $601=HEAPF32[(($600)>>2)]; | |
var $602=$4; | |
var $603=($602)*(-1); | |
var $604=$603; | |
var $605=($604)*(0.5); | |
var $606=$605; | |
var $607=(($normal)|0); | |
var $608=_vert($595, $598, $601, $606, $607); | |
$v=$608; | |
label = 25; break; | |
case 25: | |
var $610=$v; | |
var $611=$gear; | |
var $612=(($611)|0); | |
var $613=HEAP32[(($612)>>2)]; | |
var $614=$610; | |
var $615=$613; | |
var $616=((($614)-($615))|0); | |
var $617=((((($616)|(0)))/(24))&-1); | |
$_tmp2=$617; | |
var $618=$_tmp2; | |
var $619=$cur_strip; | |
var $620=$gear; | |
var $621=(($620+8)|0); | |
var $622=HEAP32[(($621)>>2)]; | |
var $623=(($622+($619<<3))|0); | |
var $624=(($623)|0); | |
var $625=HEAP32[(($624)>>2)]; | |
var $626=((($618)-($625))|0); | |
var $627=$cur_strip; | |
var $628=$gear; | |
var $629=(($628+8)|0); | |
var $630=HEAP32[(($629)>>2)]; | |
var $631=(($630+($627<<3))|0); | |
var $632=(($631+4)|0); | |
HEAP32[(($632)>>2)]=$626; | |
var $633=$cur_strip; | |
var $634=((($633)+(1))|0); | |
$cur_strip=$634; | |
label = 26; break; | |
case 26: | |
label = 27; break; | |
case 27: | |
var $637=$v; | |
var $638=$gear; | |
var $639=(($638)|0); | |
var $640=HEAP32[(($639)>>2)]; | |
var $641=$637; | |
var $642=$640; | |
var $643=((($641)-($642))|0); | |
var $644=((((($643)|(0)))/(24))&-1); | |
var $645=$cur_strip; | |
var $646=$gear; | |
var $647=(($646+8)|0); | |
var $648=HEAP32[(($647)>>2)]; | |
var $649=(($648+($645<<3))|0); | |
var $650=(($649)|0); | |
HEAP32[(($650)>>2)]=$644; | |
label = 28; break; | |
case 28: | |
label = 29; break; | |
case 29: | |
label = 30; break; | |
case 30: | |
var $654=(($p)|0); | |
var $655=(($654+4)|0); | |
var $656=HEAPF32[(($655)>>2)]; | |
var $657=(($p+16)|0); | |
var $658=(($657+4)|0); | |
var $659=HEAPF32[(($658)>>2)]; | |
var $660=($656)-($659); | |
var $661=(($normal)|0); | |
HEAPF32[(($661)>>2)]=$660; | |
var $662=(($p)|0); | |
var $663=(($662)|0); | |
var $664=HEAPF32[(($663)>>2)]; | |
var $665=(($p+16)|0); | |
var $666=(($665)|0); | |
var $667=HEAPF32[(($666)>>2)]; | |
var $668=($664)-($667); | |
var $669=(-$668); | |
var $670=(($normal+4)|0); | |
HEAPF32[(($670)>>2)]=$669; | |
var $671=(($normal+8)|0); | |
HEAPF32[(($671)>>2)]=0; | |
label = 31; break; | |
case 31: | |
var $673=$v; | |
var $674=(($p)|0); | |
var $675=(($674)|0); | |
var $676=HEAPF32[(($675)>>2)]; | |
var $677=(($p)|0); | |
var $678=(($677+4)|0); | |
var $679=HEAPF32[(($678)>>2)]; | |
var $680=$4; | |
var $681=($680)*(-1); | |
var $682=$681; | |
var $683=($682)*(0.5); | |
var $684=$683; | |
var $685=(($normal)|0); | |
var $686=_vert($673, $676, $679, $684, $685); | |
$v=$686; | |
var $687=$v; | |
var $688=(($p)|0); | |
var $689=(($688)|0); | |
var $690=HEAPF32[(($689)>>2)]; | |
var $691=(($p)|0); | |
var $692=(($691+4)|0); | |
var $693=HEAPF32[(($692)>>2)]; | |
var $694=$4; | |
var $695=$694; | |
var $696=$695; | |
var $697=($696)*(0.5); | |
var $698=$697; | |
var $699=(($normal)|0); | |
var $700=_vert($687, $690, $693, $698, $699); | |
$v=$700; | |
var $701=$v; | |
var $702=(($p+16)|0); | |
var $703=(($702)|0); | |
var $704=HEAPF32[(($703)>>2)]; | |
var $705=(($p+16)|0); | |
var $706=(($705+4)|0); | |
var $707=HEAPF32[(($706)>>2)]; | |
var $708=$4; | |
var $709=($708)*(-1); | |
var $710=$709; | |
var $711=($710)*(0.5); | |
var $712=$711; | |
var $713=(($normal)|0); | |
var $714=_vert($701, $704, $707, $712, $713); | |
$v=$714; | |
var $715=$v; | |
var $716=(($p+16)|0); | |
var $717=(($716)|0); | |
var $718=HEAPF32[(($717)>>2)]; | |
var $719=(($p+16)|0); | |
var $720=(($719+4)|0); | |
var $721=HEAPF32[(($720)>>2)]; | |
var $722=$4; | |
var $723=$722; | |
var $724=$723; | |
var $725=($724)*(0.5); | |
var $726=$725; | |
var $727=(($normal)|0); | |
var $728=_vert($715, $718, $721, $726, $727); | |
$v=$728; | |
label = 32; break; | |
case 32: | |
label = 33; break; | |
case 33: | |
var $731=$v; | |
var $732=$gear; | |
var $733=(($732)|0); | |
var $734=HEAP32[(($733)>>2)]; | |
var $735=$731; | |
var $736=$734; | |
var $737=((($735)-($736))|0); | |
var $738=((((($737)|(0)))/(24))&-1); | |
$_tmp3=$738; | |
var $739=$_tmp3; | |
var $740=$cur_strip; | |
var $741=$gear; | |
var $742=(($741+8)|0); | |
var $743=HEAP32[(($742)>>2)]; | |
var $744=(($743+($740<<3))|0); | |
var $745=(($744)|0); | |
var $746=HEAP32[(($745)>>2)]; | |
var $747=((($739)-($746))|0); | |
var $748=$cur_strip; | |
var $749=$gear; | |
var $750=(($749+8)|0); | |
var $751=HEAP32[(($750)>>2)]; | |
var $752=(($751+($748<<3))|0); | |
var $753=(($752+4)|0); | |
HEAP32[(($753)>>2)]=$747; | |
var $754=$cur_strip; | |
var $755=((($754)+(1))|0); | |
$cur_strip=$755; | |
label = 34; break; | |
case 34: | |
label = 35; break; | |
case 35: | |
var $758=$v; | |
var $759=$gear; | |
var $760=(($759)|0); | |
var $761=HEAP32[(($760)>>2)]; | |
var $762=$758; | |
var $763=$761; | |
var $764=((($762)-($763))|0); | |
var $765=((((($764)|(0)))/(24))&-1); | |
var $766=$cur_strip; | |
var $767=$gear; | |
var $768=(($767+8)|0); | |
var $769=HEAP32[(($768)>>2)]; | |
var $770=(($769+($766<<3))|0); | |
var $771=(($770)|0); | |
HEAP32[(($771)>>2)]=$765; | |
label = 36; break; | |
case 36: | |
label = 37; break; | |
case 37: | |
label = 38; break; | |
case 38: | |
var $775=(($p+8)|0); | |
var $776=(($775+4)|0); | |
var $777=HEAPF32[(($776)>>2)]; | |
var $778=(($p)|0); | |
var $779=(($778+4)|0); | |
var $780=HEAPF32[(($779)>>2)]; | |
var $781=($777)-($780); | |
var $782=(($normal)|0); | |
HEAPF32[(($782)>>2)]=$781; | |
var $783=(($p+8)|0); | |
var $784=(($783)|0); | |
var $785=HEAPF32[(($784)>>2)]; | |
var $786=(($p)|0); | |
var $787=(($786)|0); | |
var $788=HEAPF32[(($787)>>2)]; | |
var $789=($785)-($788); | |
var $790=(-$789); | |
var $791=(($normal+4)|0); | |
HEAPF32[(($791)>>2)]=$790; | |
var $792=(($normal+8)|0); | |
HEAPF32[(($792)>>2)]=0; | |
label = 39; break; | |
case 39: | |
var $794=$v; | |
var $795=(($p+8)|0); | |
var $796=(($795)|0); | |
var $797=HEAPF32[(($796)>>2)]; | |
var $798=(($p+8)|0); | |
var $799=(($798+4)|0); | |
var $800=HEAPF32[(($799)>>2)]; | |
var $801=$4; | |
var $802=($801)*(-1); | |
var $803=$802; | |
var $804=($803)*(0.5); | |
var $805=$804; | |
var $806=(($normal)|0); | |
var $807=_vert($794, $797, $800, $805, $806); | |
$v=$807; | |
var $808=$v; | |
var $809=(($p+8)|0); | |
var $810=(($809)|0); | |
var $811=HEAPF32[(($810)>>2)]; | |
var $812=(($p+8)|0); | |
var $813=(($812+4)|0); | |
var $814=HEAPF32[(($813)>>2)]; | |
var $815=$4; | |
var $816=$815; | |
var $817=$816; | |
var $818=($817)*(0.5); | |
var $819=$818; | |
var $820=(($normal)|0); | |
var $821=_vert($808, $811, $814, $819, $820); | |
$v=$821; | |
var $822=$v; | |
var $823=(($p)|0); | |
var $824=(($823)|0); | |
var $825=HEAPF32[(($824)>>2)]; | |
var $826=(($p)|0); | |
var $827=(($826+4)|0); | |
var $828=HEAPF32[(($827)>>2)]; | |
var $829=$4; | |
var $830=($829)*(-1); | |
var $831=$830; | |
var $832=($831)*(0.5); | |
var $833=$832; | |
var $834=(($normal)|0); | |
var $835=_vert($822, $825, $828, $833, $834); | |
$v=$835; | |
var $836=$v; | |
var $837=(($p)|0); | |
var $838=(($837)|0); | |
var $839=HEAPF32[(($838)>>2)]; | |
var $840=(($p)|0); | |
var $841=(($840+4)|0); | |
var $842=HEAPF32[(($841)>>2)]; | |
var $843=$4; | |
var $844=$843; | |
var $845=$844; | |
var $846=($845)*(0.5); | |
var $847=$846; | |
var $848=(($normal)|0); | |
var $849=_vert($836, $839, $842, $847, $848); | |
$v=$849; | |
label = 40; break; | |
case 40: | |
label = 41; break; | |
case 41: | |
var $852=$v; | |
var $853=$gear; | |
var $854=(($853)|0); | |
var $855=HEAP32[(($854)>>2)]; | |
var $856=$852; | |
var $857=$855; | |
var $858=((($856)-($857))|0); | |
var $859=((((($858)|(0)))/(24))&-1); | |
$_tmp4=$859; | |
var $860=$_tmp4; | |
var $861=$cur_strip; | |
var $862=$gear; | |
var $863=(($862+8)|0); | |
var $864=HEAP32[(($863)>>2)]; | |
var $865=(($864+($861<<3))|0); | |
var $866=(($865)|0); | |
var $867=HEAP32[(($866)>>2)]; | |
var $868=((($860)-($867))|0); | |
var $869=$cur_strip; | |
var $870=$gear; | |
var $871=(($870+8)|0); | |
var $872=HEAP32[(($871)>>2)]; | |
var $873=(($872+($869<<3))|0); | |
var $874=(($873+4)|0); | |
HEAP32[(($874)>>2)]=$868; | |
var $875=$cur_strip; | |
var $876=((($875)+(1))|0); | |
$cur_strip=$876; | |
label = 42; break; | |
case 42: | |
label = 43; break; | |
case 43: | |
var $879=$v; | |
var $880=$gear; | |
var $881=(($880)|0); | |
var $882=HEAP32[(($881)>>2)]; | |
var $883=$879; | |
var $884=$882; | |
var $885=((($883)-($884))|0); | |
var $886=((((($885)|(0)))/(24))&-1); | |
var $887=$cur_strip; | |
var $888=$gear; | |
var $889=(($888+8)|0); | |
var $890=HEAP32[(($889)>>2)]; | |
var $891=(($890+($887<<3))|0); | |
var $892=(($891)|0); | |
HEAP32[(($892)>>2)]=$886; | |
label = 44; break; | |
case 44: | |
label = 45; break; | |
case 45: | |
label = 46; break; | |
case 46: | |
var $896=(($p+24)|0); | |
var $897=(($896+4)|0); | |
var $898=HEAPF32[(($897)>>2)]; | |
var $899=(($p+8)|0); | |
var $900=(($899+4)|0); | |
var $901=HEAPF32[(($900)>>2)]; | |
var $902=($898)-($901); | |
var $903=(($normal)|0); | |
HEAPF32[(($903)>>2)]=$902; | |
var $904=(($p+24)|0); | |
var $905=(($904)|0); | |
var $906=HEAPF32[(($905)>>2)]; | |
var $907=(($p+8)|0); | |
var $908=(($907)|0); | |
var $909=HEAPF32[(($908)>>2)]; | |
var $910=($906)-($909); | |
var $911=(-$910); | |
var $912=(($normal+4)|0); | |
HEAPF32[(($912)>>2)]=$911; | |
var $913=(($normal+8)|0); | |
HEAPF32[(($913)>>2)]=0; | |
label = 47; break; | |
case 47: | |
var $915=$v; | |
var $916=(($p+24)|0); | |
var $917=(($916)|0); | |
var $918=HEAPF32[(($917)>>2)]; | |
var $919=(($p+24)|0); | |
var $920=(($919+4)|0); | |
var $921=HEAPF32[(($920)>>2)]; | |
var $922=$4; | |
var $923=($922)*(-1); | |
var $924=$923; | |
var $925=($924)*(0.5); | |
var $926=$925; | |
var $927=(($normal)|0); | |
var $928=_vert($915, $918, $921, $926, $927); | |
$v=$928; | |
var $929=$v; | |
var $930=(($p+24)|0); | |
var $931=(($930)|0); | |
var $932=HEAPF32[(($931)>>2)]; | |
var $933=(($p+24)|0); | |
var $934=(($933+4)|0); | |
var $935=HEAPF32[(($934)>>2)]; | |
var $936=$4; | |
var $937=$936; | |
var $938=$937; | |
var $939=($938)*(0.5); | |
var $940=$939; | |
var $941=(($normal)|0); | |
var $942=_vert($929, $932, $935, $940, $941); | |
$v=$942; | |
var $943=$v; | |
var $944=(($p+8)|0); | |
var $945=(($944)|0); | |
var $946=HEAPF32[(($945)>>2)]; | |
var $947=(($p+8)|0); | |
var $948=(($947+4)|0); | |
var $949=HEAPF32[(($948)>>2)]; | |
var $950=$4; | |
var $951=($950)*(-1); | |
var $952=$951; | |
var $953=($952)*(0.5); | |
var $954=$953; | |
var $955=(($normal)|0); | |
var $956=_vert($943, $946, $949, $954, $955); | |
$v=$956; | |
var $957=$v; | |
var $958=(($p+8)|0); | |
var $959=(($958)|0); | |
var $960=HEAPF32[(($959)>>2)]; | |
var $961=(($p+8)|0); | |
var $962=(($961+4)|0); | |
var $963=HEAPF32[(($962)>>2)]; | |
var $964=$4; | |
var $965=$964; | |
var $966=$965; | |
var $967=($966)*(0.5); | |
var $968=$967; | |
var $969=(($normal)|0); | |
var $970=_vert($957, $960, $963, $968, $969); | |
$v=$970; | |
label = 48; break; | |
case 48: | |
label = 49; break; | |
case 49: | |
var $973=$v; | |
var $974=$gear; | |
var $975=(($974)|0); | |
var $976=HEAP32[(($975)>>2)]; | |
var $977=$973; | |
var $978=$976; | |
var $979=((($977)-($978))|0); | |
var $980=((((($979)|(0)))/(24))&-1); | |
$_tmp5=$980; | |
var $981=$_tmp5; | |
var $982=$cur_strip; | |
var $983=$gear; | |
var $984=(($983+8)|0); | |
var $985=HEAP32[(($984)>>2)]; | |
var $986=(($985+($982<<3))|0); | |
var $987=(($986)|0); | |
var $988=HEAP32[(($987)>>2)]; | |
var $989=((($981)-($988))|0); | |
var $990=$cur_strip; | |
var $991=$gear; | |
var $992=(($991+8)|0); | |
var $993=HEAP32[(($992)>>2)]; | |
var $994=(($993+($990<<3))|0); | |
var $995=(($994+4)|0); | |
HEAP32[(($995)>>2)]=$989; | |
var $996=$cur_strip; | |
var $997=((($996)+(1))|0); | |
$cur_strip=$997; | |
label = 50; break; | |
case 50: | |
label = 51; break; | |
case 51: | |
var $1000=$v; | |
var $1001=$gear; | |
var $1002=(($1001)|0); | |
var $1003=HEAP32[(($1002)>>2)]; | |
var $1004=$1000; | |
var $1005=$1003; | |
var $1006=((($1004)-($1005))|0); | |
var $1007=((((($1006)|(0)))/(24))&-1); | |
var $1008=$cur_strip; | |
var $1009=$gear; | |
var $1010=(($1009+8)|0); | |
var $1011=HEAP32[(($1010)>>2)]; | |
var $1012=(($1011+($1008<<3))|0); | |
var $1013=(($1012)|0); | |
HEAP32[(($1013)>>2)]=$1007; | |
label = 52; break; | |
case 52: | |
label = 53; break; | |
case 53: | |
label = 54; break; | |
case 54: | |
var $1017=(($p+40)|0); | |
var $1018=(($1017+4)|0); | |
var $1019=HEAPF32[(($1018)>>2)]; | |
var $1020=(($p+24)|0); | |
var $1021=(($1020+4)|0); | |
var $1022=HEAPF32[(($1021)>>2)]; | |
var $1023=($1019)-($1022); | |
var $1024=(($normal)|0); | |
HEAPF32[(($1024)>>2)]=$1023; | |
var $1025=(($p+40)|0); | |
var $1026=(($1025)|0); | |
var $1027=HEAPF32[(($1026)>>2)]; | |
var $1028=(($p+24)|0); | |
var $1029=(($1028)|0); | |
var $1030=HEAPF32[(($1029)>>2)]; | |
var $1031=($1027)-($1030); | |
var $1032=(-$1031); | |
var $1033=(($normal+4)|0); | |
HEAPF32[(($1033)>>2)]=$1032; | |
var $1034=(($normal+8)|0); | |
HEAPF32[(($1034)>>2)]=0; | |
label = 55; break; | |
case 55: | |
var $1036=$v; | |
var $1037=(($p+40)|0); | |
var $1038=(($1037)|0); | |
var $1039=HEAPF32[(($1038)>>2)]; | |
var $1040=(($p+40)|0); | |
var $1041=(($1040+4)|0); | |
var $1042=HEAPF32[(($1041)>>2)]; | |
var $1043=$4; | |
var $1044=($1043)*(-1); | |
var $1045=$1044; | |
var $1046=($1045)*(0.5); | |
var $1047=$1046; | |
var $1048=(($normal)|0); | |
var $1049=_vert($1036, $1039, $1042, $1047, $1048); | |
$v=$1049; | |
var $1050=$v; | |
var $1051=(($p+40)|0); | |
var $1052=(($1051)|0); | |
var $1053=HEAPF32[(($1052)>>2)]; | |
var $1054=(($p+40)|0); | |
var $1055=(($1054+4)|0); | |
var $1056=HEAPF32[(($1055)>>2)]; | |
var $1057=$4; | |
var $1058=$1057; | |
var $1059=$1058; | |
var $1060=($1059)*(0.5); | |
var $1061=$1060; | |
var $1062=(($normal)|0); | |
var $1063=_vert($1050, $1053, $1056, $1061, $1062); | |
$v=$1063; | |
var $1064=$v; | |
var $1065=(($p+24)|0); | |
var $1066=(($1065)|0); | |
var $1067=HEAPF32[(($1066)>>2)]; | |
var $1068=(($p+24)|0); | |
var $1069=(($1068+4)|0); | |
var $1070=HEAPF32[(($1069)>>2)]; | |
var $1071=$4; | |
var $1072=($1071)*(-1); | |
var $1073=$1072; | |
var $1074=($1073)*(0.5); | |
var $1075=$1074; | |
var $1076=(($normal)|0); | |
var $1077=_vert($1064, $1067, $1070, $1075, $1076); | |
$v=$1077; | |
var $1078=$v; | |
var $1079=(($p+24)|0); | |
var $1080=(($1079)|0); | |
var $1081=HEAPF32[(($1080)>>2)]; | |
var $1082=(($p+24)|0); | |
var $1083=(($1082+4)|0); | |
var $1084=HEAPF32[(($1083)>>2)]; | |
var $1085=$4; | |
var $1086=$1085; | |
var $1087=$1086; | |
var $1088=($1087)*(0.5); | |
var $1089=$1088; | |
var $1090=(($normal)|0); | |
var $1091=_vert($1078, $1081, $1084, $1089, $1090); | |
$v=$1091; | |
label = 56; break; | |
case 56: | |
label = 57; break; | |
case 57: | |
var $1094=$v; | |
var $1095=$gear; | |
var $1096=(($1095)|0); | |
var $1097=HEAP32[(($1096)>>2)]; | |
var $1098=$1094; | |
var $1099=$1097; | |
var $1100=((($1098)-($1099))|0); | |
var $1101=((((($1100)|(0)))/(24))&-1); | |
$_tmp6=$1101; | |
var $1102=$_tmp6; | |
var $1103=$cur_strip; | |
var $1104=$gear; | |
var $1105=(($1104+8)|0); | |
var $1106=HEAP32[(($1105)>>2)]; | |
var $1107=(($1106+($1103<<3))|0); | |
var $1108=(($1107)|0); | |
var $1109=HEAP32[(($1108)>>2)]; | |
var $1110=((($1102)-($1109))|0); | |
var $1111=$cur_strip; | |
var $1112=$gear; | |
var $1113=(($1112+8)|0); | |
var $1114=HEAP32[(($1113)>>2)]; | |
var $1115=(($1114+($1111<<3))|0); | |
var $1116=(($1115+4)|0); | |
HEAP32[(($1116)>>2)]=$1110; | |
var $1117=$cur_strip; | |
var $1118=((($1117)+(1))|0); | |
$cur_strip=$1118; | |
label = 58; break; | |
case 58: | |
label = 59; break; | |
case 59: | |
var $1121=$i; | |
var $1122=((($1121)+(1))|0); | |
$i=$1122; | |
label = 5; break; | |
case 60: | |
var $1124=$v; | |
var $1125=$gear; | |
var $1126=(($1125)|0); | |
var $1127=HEAP32[(($1126)>>2)]; | |
var $1128=$1124; | |
var $1129=$1127; | |
var $1130=((($1128)-($1129))|0); | |
var $1131=((((($1130)|(0)))/(24))&-1); | |
var $1132=$gear; | |
var $1133=(($1132+4)|0); | |
HEAP32[(($1133)>>2)]=$1131; | |
var $1134=$gear; | |
var $1135=(($1134+16)|0); | |
_glGenBuffers(1, $1135); | |
var $1136=$gear; | |
var $1137=(($1136+16)|0); | |
var $1138=HEAP32[(($1137)>>2)]; | |
_glBindBuffer(34962, $1138); | |
var $1139=$gear; | |
var $1140=(($1139+4)|0); | |
var $1141=HEAP32[(($1140)>>2)]; | |
var $1142=((($1141)*(24))&-1); | |
var $1143=$gear; | |
var $1144=(($1143)|0); | |
var $1145=HEAP32[(($1144)>>2)]; | |
var $1146=$1145; | |
_glBufferData(34962, $1142, $1146, 35044); | |
var $1147=$gear; | |
$1=$1147; | |
label = 61; break; | |
case 61: | |
var $1149=$1; | |
STACKTOP = __stackBase__; | |
return $1149; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _vert($v, $x, $y, $z, $n) { | |
var label = 0; | |
var $1; | |
var $2; | |
var $3; | |
var $4; | |
var $5; | |
$1=$v; | |
$2=$x; | |
$3=$y; | |
$4=$z; | |
$5=$n; | |
var $6=$2; | |
var $7=$1; | |
var $8=(($7)|0); | |
var $9=(($8)|0); | |
HEAPF32[(($9)>>2)]=$6; | |
var $10=$3; | |
var $11=$1; | |
var $12=(($11)|0); | |
var $13=(($12+4)|0); | |
HEAPF32[(($13)>>2)]=$10; | |
var $14=$4; | |
var $15=$1; | |
var $16=(($15)|0); | |
var $17=(($16+8)|0); | |
HEAPF32[(($17)>>2)]=$14; | |
var $18=$5; | |
var $19=(($18)|0); | |
var $20=HEAPF32[(($19)>>2)]; | |
var $21=$1; | |
var $22=(($21)|0); | |
var $23=(($22+12)|0); | |
HEAPF32[(($23)>>2)]=$20; | |
var $24=$5; | |
var $25=(($24+4)|0); | |
var $26=HEAPF32[(($25)>>2)]; | |
var $27=$1; | |
var $28=(($27)|0); | |
var $29=(($28+16)|0); | |
HEAPF32[(($29)>>2)]=$26; | |
var $30=$5; | |
var $31=(($30+8)|0); | |
var $32=HEAPF32[(($31)>>2)]; | |
var $33=$1; | |
var $34=(($33)|0); | |
var $35=(($34+20)|0); | |
HEAPF32[(($35)>>2)]=$32; | |
var $36=$1; | |
var $37=(($36+24)|0); | |
return $37; | |
} | |
function _translate($m, $x, $y, $z) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 64)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
var $1; | |
var $2; | |
var $3; | |
var $4; | |
var $t=__stackBase__; | |
$1=$m; | |
$2=$x; | |
$3=$y; | |
$4=$z; | |
var $5=(($t)|0); | |
HEAPF32[(($5)>>2)]=1; | |
var $6=(($5+4)|0); | |
HEAPF32[(($6)>>2)]=0; | |
var $7=(($6+4)|0); | |
HEAPF32[(($7)>>2)]=0; | |
var $8=(($7+4)|0); | |
HEAPF32[(($8)>>2)]=0; | |
var $9=(($8+4)|0); | |
HEAPF32[(($9)>>2)]=0; | |
var $10=(($9+4)|0); | |
HEAPF32[(($10)>>2)]=1; | |
var $11=(($10+4)|0); | |
HEAPF32[(($11)>>2)]=0; | |
var $12=(($11+4)|0); | |
HEAPF32[(($12)>>2)]=0; | |
var $13=(($12+4)|0); | |
HEAPF32[(($13)>>2)]=0; | |
var $14=(($13+4)|0); | |
HEAPF32[(($14)>>2)]=0; | |
var $15=(($14+4)|0); | |
HEAPF32[(($15)>>2)]=1; | |
var $16=(($15+4)|0); | |
HEAPF32[(($16)>>2)]=0; | |
var $17=(($16+4)|0); | |
var $18=$2; | |
HEAPF32[(($17)>>2)]=$18; | |
var $19=(($17+4)|0); | |
var $20=$3; | |
HEAPF32[(($19)>>2)]=$20; | |
var $21=(($19+4)|0); | |
var $22=$4; | |
HEAPF32[(($21)>>2)]=$22; | |
var $23=(($21+4)|0); | |
HEAPF32[(($23)>>2)]=1; | |
var $24=$1; | |
var $25=(($t)|0); | |
_multiply($24, $25); | |
STACKTOP = __stackBase__; | |
return; | |
} | |
function _rotate($m, $angle, $x, $y, $z) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 80)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
var $1; | |
var $2; | |
var $3; | |
var $4; | |
var $5; | |
var $s=__stackBase__; | |
var $c=(__stackBase__)+(8); | |
var $r=(__stackBase__)+(16); | |
$1=$m; | |
$2=$angle; | |
$3=$x; | |
$4=$y; | |
$5=$z; | |
var $6=$2; | |
var $7=$6; | |
__sincos($7, $s, $c); | |
var $8=(($r)|0); | |
var $9=$3; | |
var $10=$3; | |
var $11=($9)*($10); | |
var $12=$11; | |
var $13=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $14=(1)-($13); | |
var $15=($12)*($14); | |
var $16=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $17=($15)+($16); | |
var $18=$17; | |
HEAPF32[(($8)>>2)]=$18; | |
var $19=(($8+4)|0); | |
var $20=$4; | |
var $21=$3; | |
var $22=($20)*($21); | |
var $23=$22; | |
var $24=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $25=(1)-($24); | |
var $26=($23)*($25); | |
var $27=$5; | |
var $28=$27; | |
var $29=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($s)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($s)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $30=($28)*($29); | |
var $31=($26)+($30); | |
var $32=$31; | |
HEAPF32[(($19)>>2)]=$32; | |
var $33=(($19+4)|0); | |
var $34=$3; | |
var $35=$5; | |
var $36=($34)*($35); | |
var $37=$36; | |
var $38=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $39=(1)-($38); | |
var $40=($37)*($39); | |
var $41=$4; | |
var $42=$41; | |
var $43=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($s)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($s)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $44=($42)*($43); | |
var $45=($40)-($44); | |
var $46=$45; | |
HEAPF32[(($33)>>2)]=$46; | |
var $47=(($33+4)|0); | |
HEAPF32[(($47)>>2)]=0; | |
var $48=(($47+4)|0); | |
var $49=$3; | |
var $50=$4; | |
var $51=($49)*($50); | |
var $52=$51; | |
var $53=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $54=(1)-($53); | |
var $55=($52)*($54); | |
var $56=$5; | |
var $57=$56; | |
var $58=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($s)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($s)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $59=($57)*($58); | |
var $60=($55)-($59); | |
var $61=$60; | |
HEAPF32[(($48)>>2)]=$61; | |
var $62=(($48+4)|0); | |
var $63=$4; | |
var $64=$4; | |
var $65=($63)*($64); | |
var $66=$65; | |
var $67=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $68=(1)-($67); | |
var $69=($66)*($68); | |
var $70=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $71=($69)+($70); | |
var $72=$71; | |
HEAPF32[(($62)>>2)]=$72; | |
var $73=(($62+4)|0); | |
var $74=$4; | |
var $75=$5; | |
var $76=($74)*($75); | |
var $77=$76; | |
var $78=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $79=(1)-($78); | |
var $80=($77)*($79); | |
var $81=$3; | |
var $82=$81; | |
var $83=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($s)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($s)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $84=($82)*($83); | |
var $85=($80)+($84); | |
var $86=$85; | |
HEAPF32[(($73)>>2)]=$86; | |
var $87=(($73+4)|0); | |
HEAPF32[(($87)>>2)]=0; | |
var $88=(($87+4)|0); | |
var $89=$3; | |
var $90=$5; | |
var $91=($89)*($90); | |
var $92=$91; | |
var $93=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $94=(1)-($93); | |
var $95=($92)*($94); | |
var $96=$4; | |
var $97=$96; | |
var $98=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($s)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($s)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $99=($97)*($98); | |
var $100=($95)+($99); | |
var $101=$100; | |
HEAPF32[(($88)>>2)]=$101; | |
var $102=(($88+4)|0); | |
var $103=$4; | |
var $104=$5; | |
var $105=($103)*($104); | |
var $106=$105; | |
var $107=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $108=(1)-($107); | |
var $109=($106)*($108); | |
var $110=$3; | |
var $111=$110; | |
var $112=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($s)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($s)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $113=($111)*($112); | |
var $114=($109)-($113); | |
var $115=$114; | |
HEAPF32[(($102)>>2)]=$115; | |
var $116=(($102+4)|0); | |
var $117=$5; | |
var $118=$5; | |
var $119=($117)*($118); | |
var $120=$119; | |
var $121=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $122=(1)-($121); | |
var $123=($120)*($122); | |
var $124=(HEAP32[((tempDoublePtr)>>2)]=HEAP32[(($c)>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[((($c)+(4))>>2)],HEAPF64[(tempDoublePtr)>>3]); | |
var $125=($123)+($124); | |
var $126=$125; | |
HEAPF32[(($116)>>2)]=$126; | |
var $127=(($116+4)|0); | |
HEAPF32[(($127)>>2)]=0; | |
var $128=(($127+4)|0); | |
HEAPF32[(($128)>>2)]=0; | |
var $129=(($128+4)|0); | |
HEAPF32[(($129)>>2)]=0; | |
var $130=(($129+4)|0); | |
HEAPF32[(($130)>>2)]=0; | |
var $131=(($130+4)|0); | |
HEAPF32[(($131)>>2)]=1; | |
var $132=$1; | |
var $133=(($r)|0); | |
_multiply($132, $133); | |
STACKTOP = __stackBase__; | |
return; | |
} | |
function _draw_gear($gear, $transform, $x, $y, $angle, $color) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 192)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $4; | |
var $5; | |
var $6; | |
var $model_view=__stackBase__; | |
var $normal_matrix=(__stackBase__)+(64); | |
var $model_view_projection=(__stackBase__)+(128); | |
var $n; | |
$1=$gear; | |
$2=$transform; | |
$3=$x; | |
$4=$y; | |
$5=$angle; | |
$6=$color; | |
var $7=$model_view; | |
var $8=$2; | |
var $9=$8; | |
assert(64 % 1 === 0);_memcpy($7, $9, 64); | |
var $10=(($model_view)|0); | |
var $11=$3; | |
var $12=$4; | |
_translate($10, $11, $12, 0); | |
var $13=(($model_view)|0); | |
var $14=$5; | |
var $15=$14; | |
var $16=($15)*(6.283185307179586); | |
var $17=($16)/(360); | |
var $18=$17; | |
_rotate($13, $18, 0, 0, 1); | |
var $19=$model_view_projection; | |
assert(64 % 1 === 0);_memcpy($19, 5244616, 64); | |
var $20=(($model_view_projection)|0); | |
var $21=(($model_view)|0); | |
_multiply($20, $21); | |
var $22=HEAP32[((5244684)>>2)]; | |
var $23=(($model_view_projection)|0); | |
_glUniformMatrix4fv($22, 1, 0, $23); | |
var $24=$normal_matrix; | |
var $25=$model_view; | |
assert(64 % 1 === 0);_memcpy($24, $25, 64); | |
var $26=(($normal_matrix)|0); | |
_invert($26); | |
var $27=(($normal_matrix)|0); | |
_transpose($27); | |
var $28=HEAP32[((5244680)>>2)]; | |
var $29=(($normal_matrix)|0); | |
_glUniformMatrix4fv($28, 1, 0, $29); | |
var $30=HEAP32[((5244688)>>2)]; | |
var $31=$6; | |
_glUniform4fv($30, 1, $31); | |
var $32=$1; | |
var $33=(($32+16)|0); | |
var $34=HEAP32[(($33)>>2)]; | |
_glBindBuffer(34962, $34); | |
_glVertexAttribPointer(0, 3, 5126, 0, 24, 0); | |
_glVertexAttribPointer(1, 3, 5126, 0, 24, (((12)|0))); | |
_glEnableVertexAttribArray(0); | |
_glEnableVertexAttribArray(1); | |
$n=0; | |
label = 3; break; | |
case 3: | |
var $36=$n; | |
var $37=$1; | |
var $38=(($37+12)|0); | |
var $39=HEAP32[(($38)>>2)]; | |
var $40=(($36)|(0)) < (($39)|(0)); | |
if ($40) { label = 4; break; } else { label = 6; break; } | |
case 4: | |
var $42=$n; | |
var $43=$1; | |
var $44=(($43+8)|0); | |
var $45=HEAP32[(($44)>>2)]; | |
var $46=(($45+($42<<3))|0); | |
var $47=(($46)|0); | |
var $48=HEAP32[(($47)>>2)]; | |
var $49=$n; | |
var $50=$1; | |
var $51=(($50+8)|0); | |
var $52=HEAP32[(($51)>>2)]; | |
var $53=(($52+($49<<3))|0); | |
var $54=(($53+4)|0); | |
var $55=HEAP32[(($54)>>2)]; | |
_glDrawArrays(5, $48, $55); | |
label = 5; break; | |
case 5: | |
var $57=$n; | |
var $58=((($57)+(1))|0); | |
$n=$58; | |
label = 3; break; | |
case 6: | |
_glDisableVertexAttribArray(1); | |
_glDisableVertexAttribArray(0); | |
STACKTOP = __stackBase__; | |
return; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _multiply($m, $n) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 80)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $tmp=__stackBase__; | |
var $row; | |
var $column; | |
var $d=(__stackBase__)+(64); | |
var $i; | |
var $j; | |
var $3=(__stackBase__)+(72); | |
$1=$m; | |
$2=$n; | |
$i=0; | |
label = 3; break; | |
case 3: | |
var $5=$i; | |
var $6=(($5)|(0)) < 16; | |
if ($6) { label = 4; break; } else { label = 10; break; } | |
case 4: | |
var $8=$i; | |
var $9=(($tmp+($8<<2))|0); | |
HEAPF32[(($9)>>2)]=0; | |
var $10=$i; | |
_div($3, $10, 4); | |
var $11=$d; | |
var $12=$3; | |
assert(8 % 1 === 0);HEAP32[(($11)>>2)]=HEAP32[(($12)>>2)];HEAP32[((($11)+(4))>>2)]=HEAP32[((($12)+(4))>>2)]; | |
var $13=$2; | |
var $14=(($d)|0); | |
var $15=HEAP32[(($14)>>2)]; | |
var $16=($15<<2); | |
var $17=(($13+($16<<2))|0); | |
$row=$17; | |
var $18=$1; | |
var $19=(($d+4)|0); | |
var $20=HEAP32[(($19)>>2)]; | |
var $21=(($18+($20<<2))|0); | |
$column=$21; | |
$j=0; | |
label = 5; break; | |
case 5: | |
var $23=$j; | |
var $24=(($23)|(0)) < 4; | |
if ($24) { label = 6; break; } else { label = 8; break; } | |
case 6: | |
var $26=$j; | |
var $27=$row; | |
var $28=(($27+($26<<2))|0); | |
var $29=HEAPF32[(($28)>>2)]; | |
var $30=$j; | |
var $31=($30<<2); | |
var $32=$column; | |
var $33=(($32+($31<<2))|0); | |
var $34=HEAPF32[(($33)>>2)]; | |
var $35=($29)*($34); | |
var $36=$i; | |
var $37=(($tmp+($36<<2))|0); | |
var $38=HEAPF32[(($37)>>2)]; | |
var $39=($38)+($35); | |
HEAPF32[(($37)>>2)]=$39; | |
label = 7; break; | |
case 7: | |
var $41=$j; | |
var $42=((($41)+(1))|0); | |
$j=$42; | |
label = 5; break; | |
case 8: | |
label = 9; break; | |
case 9: | |
var $45=$i; | |
var $46=((($45)+(1))|0); | |
$i=$46; | |
label = 3; break; | |
case 10: | |
var $48=$1; | |
var $49=$48; | |
var $50=$tmp; | |
assert(64 % 1 === 0);_memcpy($49, $50, 64); | |
STACKTOP = __stackBase__; | |
return; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _invert($m) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 64)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
var $1; | |
var $t=__stackBase__; | |
$1=$m; | |
var $2=(($t)|0); | |
_identity($2); | |
var $3=$1; | |
var $4=(($3+48)|0); | |
var $5=HEAPF32[(($4)>>2)]; | |
var $6=(-$5); | |
var $7=(($t+48)|0); | |
HEAPF32[(($7)>>2)]=$6; | |
var $8=$1; | |
var $9=(($8+52)|0); | |
var $10=HEAPF32[(($9)>>2)]; | |
var $11=(-$10); | |
var $12=(($t+52)|0); | |
HEAPF32[(($12)>>2)]=$11; | |
var $13=$1; | |
var $14=(($13+56)|0); | |
var $15=HEAPF32[(($14)>>2)]; | |
var $16=(-$15); | |
var $17=(($t+56)|0); | |
HEAPF32[(($17)>>2)]=$16; | |
var $18=$1; | |
var $19=(($18+56)|0); | |
HEAPF32[(($19)>>2)]=0; | |
var $20=$1; | |
var $21=(($20+52)|0); | |
HEAPF32[(($21)>>2)]=0; | |
var $22=$1; | |
var $23=(($22+48)|0); | |
HEAPF32[(($23)>>2)]=0; | |
var $24=$1; | |
_transpose($24); | |
var $25=$1; | |
var $26=(($t)|0); | |
_multiply($25, $26); | |
STACKTOP = __stackBase__; | |
return; | |
} | |
function _transpose($m) { | |
var label = 0; | |
var __stackBase__ = STACKTOP; STACKTOP = (STACKTOP + 64)|0; assert(!(STACKTOP&3)); assert((STACKTOP|0) < (STACK_MAX|0)); | |
var $1; | |
var $t=__stackBase__; | |
$1=$m; | |
var $2=(($t)|0); | |
var $3=$1; | |
var $4=(($3)|0); | |
var $5=HEAPF32[(($4)>>2)]; | |
HEAPF32[(($2)>>2)]=$5; | |
var $6=(($2+4)|0); | |
var $7=$1; | |
var $8=(($7+16)|0); | |
var $9=HEAPF32[(($8)>>2)]; | |
HEAPF32[(($6)>>2)]=$9; | |
var $10=(($6+4)|0); | |
var $11=$1; | |
var $12=(($11+32)|0); | |
var $13=HEAPF32[(($12)>>2)]; | |
HEAPF32[(($10)>>2)]=$13; | |
var $14=(($10+4)|0); | |
var $15=$1; | |
var $16=(($15+48)|0); | |
var $17=HEAPF32[(($16)>>2)]; | |
HEAPF32[(($14)>>2)]=$17; | |
var $18=(($14+4)|0); | |
var $19=$1; | |
var $20=(($19+4)|0); | |
var $21=HEAPF32[(($20)>>2)]; | |
HEAPF32[(($18)>>2)]=$21; | |
var $22=(($18+4)|0); | |
var $23=$1; | |
var $24=(($23+20)|0); | |
var $25=HEAPF32[(($24)>>2)]; | |
HEAPF32[(($22)>>2)]=$25; | |
var $26=(($22+4)|0); | |
var $27=$1; | |
var $28=(($27+36)|0); | |
var $29=HEAPF32[(($28)>>2)]; | |
HEAPF32[(($26)>>2)]=$29; | |
var $30=(($26+4)|0); | |
var $31=$1; | |
var $32=(($31+52)|0); | |
var $33=HEAPF32[(($32)>>2)]; | |
HEAPF32[(($30)>>2)]=$33; | |
var $34=(($30+4)|0); | |
var $35=$1; | |
var $36=(($35+8)|0); | |
var $37=HEAPF32[(($36)>>2)]; | |
HEAPF32[(($34)>>2)]=$37; | |
var $38=(($34+4)|0); | |
var $39=$1; | |
var $40=(($39+24)|0); | |
var $41=HEAPF32[(($40)>>2)]; | |
HEAPF32[(($38)>>2)]=$41; | |
var $42=(($38+4)|0); | |
var $43=$1; | |
var $44=(($43+40)|0); | |
var $45=HEAPF32[(($44)>>2)]; | |
HEAPF32[(($42)>>2)]=$45; | |
var $46=(($42+4)|0); | |
var $47=$1; | |
var $48=(($47+56)|0); | |
var $49=HEAPF32[(($48)>>2)]; | |
HEAPF32[(($46)>>2)]=$49; | |
var $50=(($46+4)|0); | |
var $51=$1; | |
var $52=(($51+12)|0); | |
var $53=HEAPF32[(($52)>>2)]; | |
HEAPF32[(($50)>>2)]=$53; | |
var $54=(($50+4)|0); | |
var $55=$1; | |
var $56=(($55+28)|0); | |
var $57=HEAPF32[(($56)>>2)]; | |
HEAPF32[(($54)>>2)]=$57; | |
var $58=(($54+4)|0); | |
var $59=$1; | |
var $60=(($59+44)|0); | |
var $61=HEAPF32[(($60)>>2)]; | |
HEAPF32[(($58)>>2)]=$61; | |
var $62=(($58+4)|0); | |
var $63=$1; | |
var $64=(($63+60)|0); | |
var $65=HEAPF32[(($64)>>2)]; | |
HEAPF32[(($62)>>2)]=$65; | |
var $66=$1; | |
var $67=$66; | |
var $68=$t; | |
assert(64 % 1 === 0);_memcpy($67, $68, 64); | |
STACKTOP = __stackBase__; | |
return; | |
} | |
function _malloc($bytes) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $mem; | |
var $nb; | |
var $idx; | |
var $smallbits; | |
var $b; | |
var $p; | |
var $F; | |
var $b1; | |
var $p2; | |
var $r; | |
var $rsize; | |
var $i; | |
var $leftbits; | |
var $leastbit; | |
var $Y; | |
var $K; | |
var $N; | |
var $F3; | |
var $DVS; | |
var $DV; | |
var $I; | |
var $B; | |
var $F4; | |
var $rsize5; | |
var $p6; | |
var $r7; | |
var $dvs; | |
var $rsize8; | |
var $p9; | |
var $r10; | |
$1=$bytes; | |
var $2=$1; | |
var $3=(($2)>>>(0)) <= 244; | |
if ($3) { label = 3; break; } else { label = 42; break; } | |
case 3: | |
var $5=$1; | |
var $6=(($5)>>>(0)) < 11; | |
if ($6) { label = 4; break; } else { label = 5; break; } | |
case 4: | |
var $14 = 16;label = 6; break; | |
case 5: | |
var $9=$1; | |
var $10=((($9)+(4))|0); | |
var $11=((($10)+(7))|0); | |
var $12=$11 & -8; | |
var $14 = $12;label = 6; break; | |
case 6: | |
var $14; | |
$nb=$14; | |
var $15=$nb; | |
var $16=$15 >>> 3; | |
$idx=$16; | |
var $17=HEAP32[((((5244144)|0))>>2)]; | |
var $18=$idx; | |
var $19=$17 >>> (($18)>>>(0)); | |
$smallbits=$19; | |
var $20=$smallbits; | |
var $21=$20 & 3; | |
var $22=(($21)|(0))!=0; | |
if ($22) { label = 7; break; } else { label = 16; break; } | |
case 7: | |
var $24=$smallbits; | |
var $25=$24 ^ -1; | |
var $26=$25 & 1; | |
var $27=$idx; | |
var $28=((($27)+($26))|0); | |
$idx=$28; | |
var $29=$idx; | |
var $30=$29 << 1; | |
var $31=((((5244184)|0)+($30<<2))|0); | |
var $32=$31; | |
var $33=$32; | |
$b=$33; | |
var $34=$b; | |
var $35=(($34+8)|0); | |
var $36=HEAP32[(($35)>>2)]; | |
$p=$36; | |
var $37=$p; | |
var $38=(($37+8)|0); | |
var $39=HEAP32[(($38)>>2)]; | |
$F=$39; | |
var $40=$b; | |
var $41=$F; | |
var $42=(($40)|(0))==(($41)|(0)); | |
if ($42) { label = 8; break; } else { label = 9; break; } | |
case 8: | |
var $44=$idx; | |
var $45=1 << $44; | |
var $46=$45 ^ -1; | |
var $47=HEAP32[((((5244144)|0))>>2)]; | |
var $48=$47 & $46; | |
HEAP32[((((5244144)|0))>>2)]=$48; | |
label = 15; break; | |
case 9: | |
var $50=$F; | |
var $51=$50; | |
var $52=HEAP32[((((5244160)|0))>>2)]; | |
var $53=(($51)>>>(0)) >= (($52)>>>(0)); | |
if ($53) { label = 10; break; } else { var $61 = 0;label = 11; break; } | |
case 10: | |
var $55=$F; | |
var $56=(($55+12)|0); | |
var $57=HEAP32[(($56)>>2)]; | |
var $58=$p; | |
var $59=(($57)|(0))==(($58)|(0)); | |
var $61 = $59;label = 11; break; | |
case 11: | |
var $61; | |
var $62=(($61)&(1)); | |
var $63=($62); | |
var $64=(($63)|(0))!=0; | |
if ($64) { label = 12; break; } else { label = 13; break; } | |
case 12: | |
var $66=$b; | |
var $67=$F; | |
var $68=(($67+12)|0); | |
HEAP32[(($68)>>2)]=$66; | |
var $69=$F; | |
var $70=$b; | |
var $71=(($70+8)|0); | |
HEAP32[(($71)>>2)]=$69; | |
label = 14; break; | |
case 13: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 14: | |
label = 15; break; | |
case 15: | |
var $75=$idx; | |
var $76=$75 << 3; | |
var $77=$76 | 1; | |
var $78=$77 | 2; | |
var $79=$p; | |
var $80=(($79+4)|0); | |
HEAP32[(($80)>>2)]=$78; | |
var $81=$p; | |
var $82=$81; | |
var $83=$idx; | |
var $84=$83 << 3; | |
var $85=(($82+$84)|0); | |
var $86=$85; | |
var $87=(($86+4)|0); | |
var $88=HEAP32[(($87)>>2)]; | |
var $89=$88 | 1; | |
HEAP32[(($87)>>2)]=$89; | |
var $90=$p; | |
var $91=$90; | |
var $92=(($91+8)|0); | |
$mem=$92; | |
label = 58; break; | |
case 16: | |
var $94=$nb; | |
var $95=HEAP32[((((5244152)|0))>>2)]; | |
var $96=(($94)>>>(0)) > (($95)>>>(0)); | |
if ($96) { label = 17; break; } else { label = 40; break; } | |
case 17: | |
var $98=$smallbits; | |
var $99=(($98)|(0))!=0; | |
if ($99) { label = 18; break; } else { label = 35; break; } | |
case 18: | |
var $101=$smallbits; | |
var $102=$idx; | |
var $103=$101 << $102; | |
var $104=$idx; | |
var $105=1 << $104; | |
var $106=$105 << 1; | |
var $107=$idx; | |
var $108=1 << $107; | |
var $109=$108 << 1; | |
var $110=(((-$109))|0); | |
var $111=$106 | $110; | |
var $112=$103 & $111; | |
$leftbits=$112; | |
var $113=$leftbits; | |
var $114=$leftbits; | |
var $115=(((-$114))|0); | |
var $116=$113 & $115; | |
$leastbit=$116; | |
var $117=$leastbit; | |
var $118=((($117)-(1))|0); | |
$Y=$118; | |
var $119=$Y; | |
var $120=$119 >>> 12; | |
var $121=$120 & 16; | |
$K=$121; | |
var $122=$K; | |
$N=$122; | |
var $123=$K; | |
var $124=$Y; | |
var $125=$124 >>> (($123)>>>(0)); | |
$Y=$125; | |
var $126=$Y; | |
var $127=$126 >>> 5; | |
var $128=$127 & 8; | |
$K=$128; | |
var $129=$N; | |
var $130=((($129)+($128))|0); | |
$N=$130; | |
var $131=$K; | |
var $132=$Y; | |
var $133=$132 >>> (($131)>>>(0)); | |
$Y=$133; | |
var $134=$Y; | |
var $135=$134 >>> 2; | |
var $136=$135 & 4; | |
$K=$136; | |
var $137=$N; | |
var $138=((($137)+($136))|0); | |
$N=$138; | |
var $139=$K; | |
var $140=$Y; | |
var $141=$140 >>> (($139)>>>(0)); | |
$Y=$141; | |
var $142=$Y; | |
var $143=$142 >>> 1; | |
var $144=$143 & 2; | |
$K=$144; | |
var $145=$N; | |
var $146=((($145)+($144))|0); | |
$N=$146; | |
var $147=$K; | |
var $148=$Y; | |
var $149=$148 >>> (($147)>>>(0)); | |
$Y=$149; | |
var $150=$Y; | |
var $151=$150 >>> 1; | |
var $152=$151 & 1; | |
$K=$152; | |
var $153=$N; | |
var $154=((($153)+($152))|0); | |
$N=$154; | |
var $155=$K; | |
var $156=$Y; | |
var $157=$156 >>> (($155)>>>(0)); | |
$Y=$157; | |
var $158=$N; | |
var $159=$Y; | |
var $160=((($158)+($159))|0); | |
$i=$160; | |
var $161=$i; | |
var $162=$161 << 1; | |
var $163=((((5244184)|0)+($162<<2))|0); | |
var $164=$163; | |
var $165=$164; | |
$b1=$165; | |
var $166=$b1; | |
var $167=(($166+8)|0); | |
var $168=HEAP32[(($167)>>2)]; | |
$p2=$168; | |
var $169=$p2; | |
var $170=(($169+8)|0); | |
var $171=HEAP32[(($170)>>2)]; | |
$F3=$171; | |
var $172=$b1; | |
var $173=$F3; | |
var $174=(($172)|(0))==(($173)|(0)); | |
if ($174) { label = 19; break; } else { label = 20; break; } | |
case 19: | |
var $176=$i; | |
var $177=1 << $176; | |
var $178=$177 ^ -1; | |
var $179=HEAP32[((((5244144)|0))>>2)]; | |
var $180=$179 & $178; | |
HEAP32[((((5244144)|0))>>2)]=$180; | |
label = 26; break; | |
case 20: | |
var $182=$F3; | |
var $183=$182; | |
var $184=HEAP32[((((5244160)|0))>>2)]; | |
var $185=(($183)>>>(0)) >= (($184)>>>(0)); | |
if ($185) { label = 21; break; } else { var $193 = 0;label = 22; break; } | |
case 21: | |
var $187=$F3; | |
var $188=(($187+12)|0); | |
var $189=HEAP32[(($188)>>2)]; | |
var $190=$p2; | |
var $191=(($189)|(0))==(($190)|(0)); | |
var $193 = $191;label = 22; break; | |
case 22: | |
var $193; | |
var $194=(($193)&(1)); | |
var $195=($194); | |
var $196=(($195)|(0))!=0; | |
if ($196) { label = 23; break; } else { label = 24; break; } | |
case 23: | |
var $198=$b1; | |
var $199=$F3; | |
var $200=(($199+12)|0); | |
HEAP32[(($200)>>2)]=$198; | |
var $201=$F3; | |
var $202=$b1; | |
var $203=(($202+8)|0); | |
HEAP32[(($203)>>2)]=$201; | |
label = 25; break; | |
case 24: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 25: | |
label = 26; break; | |
case 26: | |
var $207=$i; | |
var $208=$207 << 3; | |
var $209=$nb; | |
var $210=((($208)-($209))|0); | |
$rsize=$210; | |
var $211=$nb; | |
var $212=$211 | 1; | |
var $213=$212 | 2; | |
var $214=$p2; | |
var $215=(($214+4)|0); | |
HEAP32[(($215)>>2)]=$213; | |
var $216=$p2; | |
var $217=$216; | |
var $218=$nb; | |
var $219=(($217+$218)|0); | |
var $220=$219; | |
$r=$220; | |
var $221=$rsize; | |
var $222=$221 | 1; | |
var $223=$r; | |
var $224=(($223+4)|0); | |
HEAP32[(($224)>>2)]=$222; | |
var $225=$rsize; | |
var $226=$r; | |
var $227=$226; | |
var $228=$rsize; | |
var $229=(($227+$228)|0); | |
var $230=$229; | |
var $231=(($230)|0); | |
HEAP32[(($231)>>2)]=$225; | |
var $232=HEAP32[((((5244152)|0))>>2)]; | |
$DVS=$232; | |
var $233=$DVS; | |
var $234=(($233)|(0))!=0; | |
if ($234) { label = 27; break; } else { label = 34; break; } | |
case 27: | |
var $236=HEAP32[((((5244164)|0))>>2)]; | |
$DV=$236; | |
var $237=$DVS; | |
var $238=$237 >>> 3; | |
$I=$238; | |
var $239=$I; | |
var $240=$239 << 1; | |
var $241=((((5244184)|0)+($240<<2))|0); | |
var $242=$241; | |
var $243=$242; | |
$B=$243; | |
var $244=$B; | |
$F4=$244; | |
var $245=HEAP32[((((5244144)|0))>>2)]; | |
var $246=$I; | |
var $247=1 << $246; | |
var $248=$245 & $247; | |
var $249=(($248)|(0))!=0; | |
if ($249) { label = 29; break; } else { label = 28; break; } | |
case 28: | |
var $251=$I; | |
var $252=1 << $251; | |
var $253=HEAP32[((((5244144)|0))>>2)]; | |
var $254=$253 | $252; | |
HEAP32[((((5244144)|0))>>2)]=$254; | |
label = 33; break; | |
case 29: | |
var $256=$B; | |
var $257=(($256+8)|0); | |
var $258=HEAP32[(($257)>>2)]; | |
var $259=$258; | |
var $260=HEAP32[((((5244160)|0))>>2)]; | |
var $261=(($259)>>>(0)) >= (($260)>>>(0)); | |
var $262=(($261)&(1)); | |
var $263=($262); | |
var $264=(($263)|(0))!=0; | |
if ($264) { label = 30; break; } else { label = 31; break; } | |
case 30: | |
var $266=$B; | |
var $267=(($266+8)|0); | |
var $268=HEAP32[(($267)>>2)]; | |
$F4=$268; | |
label = 32; break; | |
case 31: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 32: | |
label = 33; break; | |
case 33: | |
var $272=$DV; | |
var $273=$B; | |
var $274=(($273+8)|0); | |
HEAP32[(($274)>>2)]=$272; | |
var $275=$DV; | |
var $276=$F4; | |
var $277=(($276+12)|0); | |
HEAP32[(($277)>>2)]=$275; | |
var $278=$F4; | |
var $279=$DV; | |
var $280=(($279+8)|0); | |
HEAP32[(($280)>>2)]=$278; | |
var $281=$B; | |
var $282=$DV; | |
var $283=(($282+12)|0); | |
HEAP32[(($283)>>2)]=$281; | |
label = 34; break; | |
case 34: | |
var $285=$rsize; | |
HEAP32[((((5244152)|0))>>2)]=$285; | |
var $286=$r; | |
HEAP32[((((5244164)|0))>>2)]=$286; | |
var $287=$p2; | |
var $288=$287; | |
var $289=(($288+8)|0); | |
$mem=$289; | |
label = 58; break; | |
case 35: | |
var $291=HEAP32[((((5244148)|0))>>2)]; | |
var $292=(($291)|(0))!=0; | |
if ($292) { label = 36; break; } else { label = 38; break; } | |
case 36: | |
var $294=$nb; | |
var $295=_tmalloc_small(5244144, $294); | |
$mem=$295; | |
var $296=(($295)|(0))!=0; | |
if ($296) { label = 37; break; } else { label = 38; break; } | |
case 37: | |
label = 58; break; | |
case 38: | |
label = 39; break; | |
case 39: | |
label = 40; break; | |
case 40: | |
label = 41; break; | |
case 41: | |
label = 49; break; | |
case 42: | |
var $303=$1; | |
var $304=(($303)>>>(0)) >= 4294967232; | |
if ($304) { label = 43; break; } else { label = 44; break; } | |
case 43: | |
$nb=-1; | |
label = 48; break; | |
case 44: | |
var $307=$1; | |
var $308=((($307)+(4))|0); | |
var $309=((($308)+(7))|0); | |
var $310=$309 & -8; | |
$nb=$310; | |
var $311=HEAP32[((((5244148)|0))>>2)]; | |
var $312=(($311)|(0))!=0; | |
if ($312) { label = 45; break; } else { label = 47; break; } | |
case 45: | |
var $314=$nb; | |
var $315=_tmalloc_large(5244144, $314); | |
$mem=$315; | |
var $316=(($315)|(0))!=0; | |
if ($316) { label = 46; break; } else { label = 47; break; } | |
case 46: | |
label = 58; break; | |
case 47: | |
label = 48; break; | |
case 48: | |
label = 49; break; | |
case 49: | |
var $321=$nb; | |
var $322=HEAP32[((((5244152)|0))>>2)]; | |
var $323=(($321)>>>(0)) <= (($322)>>>(0)); | |
if ($323) { label = 50; break; } else { label = 54; break; } | |
case 50: | |
var $325=HEAP32[((((5244152)|0))>>2)]; | |
var $326=$nb; | |
var $327=((($325)-($326))|0); | |
$rsize5=$327; | |
var $328=HEAP32[((((5244164)|0))>>2)]; | |
$p6=$328; | |
var $329=$rsize5; | |
var $330=(($329)>>>(0)) >= 16; | |
if ($330) { label = 51; break; } else { label = 52; break; } | |
case 51: | |
var $332=$p6; | |
var $333=$332; | |
var $334=$nb; | |
var $335=(($333+$334)|0); | |
var $336=$335; | |
HEAP32[((((5244164)|0))>>2)]=$336; | |
$r7=$336; | |
var $337=$rsize5; | |
HEAP32[((((5244152)|0))>>2)]=$337; | |
var $338=$rsize5; | |
var $339=$338 | 1; | |
var $340=$r7; | |
var $341=(($340+4)|0); | |
HEAP32[(($341)>>2)]=$339; | |
var $342=$rsize5; | |
var $343=$r7; | |
var $344=$343; | |
var $345=$rsize5; | |
var $346=(($344+$345)|0); | |
var $347=$346; | |
var $348=(($347)|0); | |
HEAP32[(($348)>>2)]=$342; | |
var $349=$nb; | |
var $350=$349 | 1; | |
var $351=$350 | 2; | |
var $352=$p6; | |
var $353=(($352+4)|0); | |
HEAP32[(($353)>>2)]=$351; | |
label = 53; break; | |
case 52: | |
var $355=HEAP32[((((5244152)|0))>>2)]; | |
$dvs=$355; | |
HEAP32[((((5244152)|0))>>2)]=0; | |
HEAP32[((((5244164)|0))>>2)]=0; | |
var $356=$dvs; | |
var $357=$356 | 1; | |
var $358=$357 | 2; | |
var $359=$p6; | |
var $360=(($359+4)|0); | |
HEAP32[(($360)>>2)]=$358; | |
var $361=$p6; | |
var $362=$361; | |
var $363=$dvs; | |
var $364=(($362+$363)|0); | |
var $365=$364; | |
var $366=(($365+4)|0); | |
var $367=HEAP32[(($366)>>2)]; | |
var $368=$367 | 1; | |
HEAP32[(($366)>>2)]=$368; | |
label = 53; break; | |
case 53: | |
var $370=$p6; | |
var $371=$370; | |
var $372=(($371+8)|0); | |
$mem=$372; | |
label = 58; break; | |
case 54: | |
var $374=$nb; | |
var $375=HEAP32[((((5244156)|0))>>2)]; | |
var $376=(($374)>>>(0)) < (($375)>>>(0)); | |
if ($376) { label = 55; break; } else { label = 56; break; } | |
case 55: | |
var $378=$nb; | |
var $379=HEAP32[((((5244156)|0))>>2)]; | |
var $380=((($379)-($378))|0); | |
HEAP32[((((5244156)|0))>>2)]=$380; | |
$rsize8=$380; | |
var $381=HEAP32[((((5244168)|0))>>2)]; | |
$p9=$381; | |
var $382=$p9; | |
var $383=$382; | |
var $384=$nb; | |
var $385=(($383+$384)|0); | |
var $386=$385; | |
HEAP32[((((5244168)|0))>>2)]=$386; | |
$r10=$386; | |
var $387=$rsize8; | |
var $388=$387 | 1; | |
var $389=$r10; | |
var $390=(($389+4)|0); | |
HEAP32[(($390)>>2)]=$388; | |
var $391=$nb; | |
var $392=$391 | 1; | |
var $393=$392 | 2; | |
var $394=$p9; | |
var $395=(($394+4)|0); | |
HEAP32[(($395)>>2)]=$393; | |
var $396=$p9; | |
var $397=$396; | |
var $398=(($397+8)|0); | |
$mem=$398; | |
label = 58; break; | |
case 56: | |
label = 57; break; | |
case 57: | |
var $401=$nb; | |
var $402=_sys_alloc(5244144, $401); | |
$mem=$402; | |
label = 58; break; | |
case 58: | |
var $404=$mem; | |
return $404; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _tmalloc_small($m, $nb) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $t; | |
var $v; | |
var $rsize; | |
var $i; | |
var $leastbit; | |
var $Y; | |
var $K; | |
var $N; | |
var $trem; | |
var $r; | |
var $XP; | |
var $R; | |
var $F; | |
var $RP; | |
var $CP; | |
var $H; | |
var $C0; | |
var $C1; | |
var $DVS; | |
var $DV; | |
var $I; | |
var $B; | |
var $F1; | |
$1=$m; | |
$2=$nb; | |
var $3=$1; | |
var $4=(($3+4)|0); | |
var $5=HEAP32[(($4)>>2)]; | |
var $6=$1; | |
var $7=(($6+4)|0); | |
var $8=HEAP32[(($7)>>2)]; | |
var $9=(((-$8))|0); | |
var $10=$5 & $9; | |
$leastbit=$10; | |
var $11=$leastbit; | |
var $12=((($11)-(1))|0); | |
$Y=$12; | |
var $13=$Y; | |
var $14=$13 >>> 12; | |
var $15=$14 & 16; | |
$K=$15; | |
var $16=$K; | |
$N=$16; | |
var $17=$K; | |
var $18=$Y; | |
var $19=$18 >>> (($17)>>>(0)); | |
$Y=$19; | |
var $20=$Y; | |
var $21=$20 >>> 5; | |
var $22=$21 & 8; | |
$K=$22; | |
var $23=$N; | |
var $24=((($23)+($22))|0); | |
$N=$24; | |
var $25=$K; | |
var $26=$Y; | |
var $27=$26 >>> (($25)>>>(0)); | |
$Y=$27; | |
var $28=$Y; | |
var $29=$28 >>> 2; | |
var $30=$29 & 4; | |
$K=$30; | |
var $31=$N; | |
var $32=((($31)+($30))|0); | |
$N=$32; | |
var $33=$K; | |
var $34=$Y; | |
var $35=$34 >>> (($33)>>>(0)); | |
$Y=$35; | |
var $36=$Y; | |
var $37=$36 >>> 1; | |
var $38=$37 & 2; | |
$K=$38; | |
var $39=$N; | |
var $40=((($39)+($38))|0); | |
$N=$40; | |
var $41=$K; | |
var $42=$Y; | |
var $43=$42 >>> (($41)>>>(0)); | |
$Y=$43; | |
var $44=$Y; | |
var $45=$44 >>> 1; | |
var $46=$45 & 1; | |
$K=$46; | |
var $47=$N; | |
var $48=((($47)+($46))|0); | |
$N=$48; | |
var $49=$K; | |
var $50=$Y; | |
var $51=$50 >>> (($49)>>>(0)); | |
$Y=$51; | |
var $52=$N; | |
var $53=$Y; | |
var $54=((($52)+($53))|0); | |
$i=$54; | |
var $55=$i; | |
var $56=$1; | |
var $57=(($56+304)|0); | |
var $58=(($57+($55<<2))|0); | |
var $59=HEAP32[(($58)>>2)]; | |
$t=$59; | |
$v=$59; | |
var $60=$t; | |
var $61=(($60+4)|0); | |
var $62=HEAP32[(($61)>>2)]; | |
var $63=$62 & -8; | |
var $64=$2; | |
var $65=((($63)-($64))|0); | |
$rsize=$65; | |
label = 3; break; | |
case 3: | |
var $67=$t; | |
var $68=(($67+16)|0); | |
var $69=(($68)|0); | |
var $70=HEAP32[(($69)>>2)]; | |
var $71=(($70)|(0))!=0; | |
if ($71) { label = 4; break; } else { label = 5; break; } | |
case 4: | |
var $73=$t; | |
var $74=(($73+16)|0); | |
var $75=(($74)|0); | |
var $76=HEAP32[(($75)>>2)]; | |
var $83 = $76;label = 6; break; | |
case 5: | |
var $78=$t; | |
var $79=(($78+16)|0); | |
var $80=(($79+4)|0); | |
var $81=HEAP32[(($80)>>2)]; | |
var $83 = $81;label = 6; break; | |
case 6: | |
var $83; | |
$t=$83; | |
var $84=(($83)|(0))!=0; | |
if ($84) { label = 7; break; } else { label = 10; break; } | |
case 7: | |
var $86=$t; | |
var $87=(($86+4)|0); | |
var $88=HEAP32[(($87)>>2)]; | |
var $89=$88 & -8; | |
var $90=$2; | |
var $91=((($89)-($90))|0); | |
$trem=$91; | |
var $92=$trem; | |
var $93=$rsize; | |
var $94=(($92)>>>(0)) < (($93)>>>(0)); | |
if ($94) { label = 8; break; } else { label = 9; break; } | |
case 8: | |
var $96=$trem; | |
$rsize=$96; | |
var $97=$t; | |
$v=$97; | |
label = 9; break; | |
case 9: | |
label = 3; break; | |
case 10: | |
var $100=$v; | |
var $101=$100; | |
var $102=$1; | |
var $103=(($102+16)|0); | |
var $104=HEAP32[(($103)>>2)]; | |
var $105=(($101)>>>(0)) >= (($104)>>>(0)); | |
var $106=(($105)&(1)); | |
var $107=($106); | |
var $108=(($107)|(0))!=0; | |
if ($108) { label = 11; break; } else { label = 73; break; } | |
case 11: | |
var $110=$v; | |
var $111=$110; | |
var $112=$2; | |
var $113=(($111+$112)|0); | |
var $114=$113; | |
$r=$114; | |
var $115=$v; | |
var $116=$115; | |
var $117=$r; | |
var $118=$117; | |
var $119=(($116)>>>(0)) < (($118)>>>(0)); | |
var $120=(($119)&(1)); | |
var $121=($120); | |
var $122=(($121)|(0))!=0; | |
if ($122) { label = 12; break; } else { label = 72; break; } | |
case 12: | |
var $124=$v; | |
var $125=(($124+24)|0); | |
var $126=HEAP32[(($125)>>2)]; | |
$XP=$126; | |
var $127=$v; | |
var $128=(($127+12)|0); | |
var $129=HEAP32[(($128)>>2)]; | |
var $130=$v; | |
var $131=(($129)|(0))!=(($130)|(0)); | |
if ($131) { label = 13; break; } else { label = 20; break; } | |
case 13: | |
var $133=$v; | |
var $134=(($133+8)|0); | |
var $135=HEAP32[(($134)>>2)]; | |
$F=$135; | |
var $136=$v; | |
var $137=(($136+12)|0); | |
var $138=HEAP32[(($137)>>2)]; | |
$R=$138; | |
var $139=$F; | |
var $140=$139; | |
var $141=$1; | |
var $142=(($141+16)|0); | |
var $143=HEAP32[(($142)>>2)]; | |
var $144=(($140)>>>(0)) >= (($143)>>>(0)); | |
if ($144) { label = 14; break; } else { var $158 = 0;label = 16; break; } | |
case 14: | |
var $146=$F; | |
var $147=(($146+12)|0); | |
var $148=HEAP32[(($147)>>2)]; | |
var $149=$v; | |
var $150=(($148)|(0))==(($149)|(0)); | |
if ($150) { label = 15; break; } else { var $158 = 0;label = 16; break; } | |
case 15: | |
var $152=$R; | |
var $153=(($152+8)|0); | |
var $154=HEAP32[(($153)>>2)]; | |
var $155=$v; | |
var $156=(($154)|(0))==(($155)|(0)); | |
var $158 = $156;label = 16; break; | |
case 16: | |
var $158; | |
var $159=(($158)&(1)); | |
var $160=($159); | |
var $161=(($160)|(0))!=0; | |
if ($161) { label = 17; break; } else { label = 18; break; } | |
case 17: | |
var $163=$R; | |
var $164=$F; | |
var $165=(($164+12)|0); | |
HEAP32[(($165)>>2)]=$163; | |
var $166=$F; | |
var $167=$R; | |
var $168=(($167+8)|0); | |
HEAP32[(($168)>>2)]=$166; | |
label = 19; break; | |
case 18: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 19: | |
label = 32; break; | |
case 20: | |
var $172=$v; | |
var $173=(($172+16)|0); | |
var $174=(($173+4)|0); | |
$RP=$174; | |
var $175=HEAP32[(($174)>>2)]; | |
$R=$175; | |
var $176=(($175)|(0))!=0; | |
if ($176) { label = 22; break; } else { label = 21; break; } | |
case 21: | |
var $178=$v; | |
var $179=(($178+16)|0); | |
var $180=(($179)|0); | |
$RP=$180; | |
var $181=HEAP32[(($180)>>2)]; | |
$R=$181; | |
var $182=(($181)|(0))!=0; | |
if ($182) { label = 22; break; } else { label = 31; break; } | |
case 22: | |
label = 23; break; | |
case 23: | |
var $185=$R; | |
var $186=(($185+16)|0); | |
var $187=(($186+4)|0); | |
$CP=$187; | |
var $188=HEAP32[(($187)>>2)]; | |
var $189=(($188)|(0))!=0; | |
if ($189) { var $197 = 1;label = 25; break; } else { label = 24; break; } | |
case 24: | |
var $191=$R; | |
var $192=(($191+16)|0); | |
var $193=(($192)|0); | |
$CP=$193; | |
var $194=HEAP32[(($193)>>2)]; | |
var $195=(($194)|(0))!=0; | |
var $197 = $195;label = 25; break; | |
case 25: | |
var $197; | |
if ($197) { label = 26; break; } else { label = 27; break; } | |
case 26: | |
var $199=$CP; | |
$RP=$199; | |
var $200=HEAP32[(($199)>>2)]; | |
$R=$200; | |
label = 23; break; | |
case 27: | |
var $202=$RP; | |
var $203=$202; | |
var $204=$1; | |
var $205=(($204+16)|0); | |
var $206=HEAP32[(($205)>>2)]; | |
var $207=(($203)>>>(0)) >= (($206)>>>(0)); | |
var $208=(($207)&(1)); | |
var $209=($208); | |
var $210=(($209)|(0))!=0; | |
if ($210) { label = 28; break; } else { label = 29; break; } | |
case 28: | |
var $212=$RP; | |
HEAP32[(($212)>>2)]=0; | |
label = 30; break; | |
case 29: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 30: | |
label = 31; break; | |
case 31: | |
label = 32; break; | |
case 32: | |
var $217=$XP; | |
var $218=(($217)|(0))!=0; | |
if ($218) { label = 33; break; } else { label = 60; break; } | |
case 33: | |
var $220=$v; | |
var $221=(($220+28)|0); | |
var $222=HEAP32[(($221)>>2)]; | |
var $223=$1; | |
var $224=(($223+304)|0); | |
var $225=(($224+($222<<2))|0); | |
$H=$225; | |
var $226=$v; | |
var $227=$H; | |
var $228=HEAP32[(($227)>>2)]; | |
var $229=(($226)|(0))==(($228)|(0)); | |
if ($229) { label = 34; break; } else { label = 37; break; } | |
case 34: | |
var $231=$R; | |
var $232=$H; | |
HEAP32[(($232)>>2)]=$231; | |
var $233=(($231)|(0))==0; | |
if ($233) { label = 35; break; } else { label = 36; break; } | |
case 35: | |
var $235=$v; | |
var $236=(($235+28)|0); | |
var $237=HEAP32[(($236)>>2)]; | |
var $238=1 << $237; | |
var $239=$238 ^ -1; | |
var $240=$1; | |
var $241=(($240+4)|0); | |
var $242=HEAP32[(($241)>>2)]; | |
var $243=$242 & $239; | |
HEAP32[(($241)>>2)]=$243; | |
label = 36; break; | |
case 36: | |
label = 44; break; | |
case 37: | |
var $246=$XP; | |
var $247=$246; | |
var $248=$1; | |
var $249=(($248+16)|0); | |
var $250=HEAP32[(($249)>>2)]; | |
var $251=(($247)>>>(0)) >= (($250)>>>(0)); | |
var $252=(($251)&(1)); | |
var $253=($252); | |
var $254=(($253)|(0))!=0; | |
if ($254) { label = 38; break; } else { label = 42; break; } | |
case 38: | |
var $256=$XP; | |
var $257=(($256+16)|0); | |
var $258=(($257)|0); | |
var $259=HEAP32[(($258)>>2)]; | |
var $260=$v; | |
var $261=(($259)|(0))==(($260)|(0)); | |
if ($261) { label = 39; break; } else { label = 40; break; } | |
case 39: | |
var $263=$R; | |
var $264=$XP; | |
var $265=(($264+16)|0); | |
var $266=(($265)|0); | |
HEAP32[(($266)>>2)]=$263; | |
label = 41; break; | |
case 40: | |
var $268=$R; | |
var $269=$XP; | |
var $270=(($269+16)|0); | |
var $271=(($270+4)|0); | |
HEAP32[(($271)>>2)]=$268; | |
label = 41; break; | |
case 41: | |
label = 43; break; | |
case 42: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 43: | |
label = 44; break; | |
case 44: | |
var $276=$R; | |
var $277=(($276)|(0))!=0; | |
if ($277) { label = 45; break; } else { label = 59; break; } | |
case 45: | |
var $279=$R; | |
var $280=$279; | |
var $281=$1; | |
var $282=(($281+16)|0); | |
var $283=HEAP32[(($282)>>2)]; | |
var $284=(($280)>>>(0)) >= (($283)>>>(0)); | |
var $285=(($284)&(1)); | |
var $286=($285); | |
var $287=(($286)|(0))!=0; | |
if ($287) { label = 46; break; } else { label = 57; break; } | |
case 46: | |
var $289=$XP; | |
var $290=$R; | |
var $291=(($290+24)|0); | |
HEAP32[(($291)>>2)]=$289; | |
var $292=$v; | |
var $293=(($292+16)|0); | |
var $294=(($293)|0); | |
var $295=HEAP32[(($294)>>2)]; | |
$C0=$295; | |
var $296=(($295)|(0))!=0; | |
if ($296) { label = 47; break; } else { label = 51; break; } | |
case 47: | |
var $298=$C0; | |
var $299=$298; | |
var $300=$1; | |
var $301=(($300+16)|0); | |
var $302=HEAP32[(($301)>>2)]; | |
var $303=(($299)>>>(0)) >= (($302)>>>(0)); | |
var $304=(($303)&(1)); | |
var $305=($304); | |
var $306=(($305)|(0))!=0; | |
if ($306) { label = 48; break; } else { label = 49; break; } | |
case 48: | |
var $308=$C0; | |
var $309=$R; | |
var $310=(($309+16)|0); | |
var $311=(($310)|0); | |
HEAP32[(($311)>>2)]=$308; | |
var $312=$R; | |
var $313=$C0; | |
var $314=(($313+24)|0); | |
HEAP32[(($314)>>2)]=$312; | |
label = 50; break; | |
case 49: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 50: | |
label = 51; break; | |
case 51: | |
var $318=$v; | |
var $319=(($318+16)|0); | |
var $320=(($319+4)|0); | |
var $321=HEAP32[(($320)>>2)]; | |
$C1=$321; | |
var $322=(($321)|(0))!=0; | |
if ($322) { label = 52; break; } else { label = 56; break; } | |
case 52: | |
var $324=$C1; | |
var $325=$324; | |
var $326=$1; | |
var $327=(($326+16)|0); | |
var $328=HEAP32[(($327)>>2)]; | |
var $329=(($325)>>>(0)) >= (($328)>>>(0)); | |
var $330=(($329)&(1)); | |
var $331=($330); | |
var $332=(($331)|(0))!=0; | |
if ($332) { label = 53; break; } else { label = 54; break; } | |
case 53: | |
var $334=$C1; | |
var $335=$R; | |
var $336=(($335+16)|0); | |
var $337=(($336+4)|0); | |
HEAP32[(($337)>>2)]=$334; | |
var $338=$R; | |
var $339=$C1; | |
var $340=(($339+24)|0); | |
HEAP32[(($340)>>2)]=$338; | |
label = 55; break; | |
case 54: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 55: | |
label = 56; break; | |
case 56: | |
label = 58; break; | |
case 57: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 58: | |
label = 59; break; | |
case 59: | |
label = 60; break; | |
case 60: | |
var $348=$rsize; | |
var $349=(($348)>>>(0)) < 16; | |
if ($349) { label = 61; break; } else { label = 62; break; } | |
case 61: | |
var $351=$rsize; | |
var $352=$2; | |
var $353=((($351)+($352))|0); | |
var $354=$353 | 1; | |
var $355=$354 | 2; | |
var $356=$v; | |
var $357=(($356+4)|0); | |
HEAP32[(($357)>>2)]=$355; | |
var $358=$v; | |
var $359=$358; | |
var $360=$rsize; | |
var $361=$2; | |
var $362=((($360)+($361))|0); | |
var $363=(($359+$362)|0); | |
var $364=$363; | |
var $365=(($364+4)|0); | |
var $366=HEAP32[(($365)>>2)]; | |
var $367=$366 | 1; | |
HEAP32[(($365)>>2)]=$367; | |
label = 71; break; | |
case 62: | |
var $369=$2; | |
var $370=$369 | 1; | |
var $371=$370 | 2; | |
var $372=$v; | |
var $373=(($372+4)|0); | |
HEAP32[(($373)>>2)]=$371; | |
var $374=$rsize; | |
var $375=$374 | 1; | |
var $376=$r; | |
var $377=(($376+4)|0); | |
HEAP32[(($377)>>2)]=$375; | |
var $378=$rsize; | |
var $379=$r; | |
var $380=$379; | |
var $381=$rsize; | |
var $382=(($380+$381)|0); | |
var $383=$382; | |
var $384=(($383)|0); | |
HEAP32[(($384)>>2)]=$378; | |
var $385=$1; | |
var $386=(($385+8)|0); | |
var $387=HEAP32[(($386)>>2)]; | |
$DVS=$387; | |
var $388=$DVS; | |
var $389=(($388)|(0))!=0; | |
if ($389) { label = 63; break; } else { label = 70; break; } | |
case 63: | |
var $391=$1; | |
var $392=(($391+20)|0); | |
var $393=HEAP32[(($392)>>2)]; | |
$DV=$393; | |
var $394=$DVS; | |
var $395=$394 >>> 3; | |
$I=$395; | |
var $396=$I; | |
var $397=$396 << 1; | |
var $398=$1; | |
var $399=(($398+40)|0); | |
var $400=(($399+($397<<2))|0); | |
var $401=$400; | |
var $402=$401; | |
$B=$402; | |
var $403=$B; | |
$F1=$403; | |
var $404=$1; | |
var $405=(($404)|0); | |
var $406=HEAP32[(($405)>>2)]; | |
var $407=$I; | |
var $408=1 << $407; | |
var $409=$406 & $408; | |
var $410=(($409)|(0))!=0; | |
if ($410) { label = 65; break; } else { label = 64; break; } | |
case 64: | |
var $412=$I; | |
var $413=1 << $412; | |
var $414=$1; | |
var $415=(($414)|0); | |
var $416=HEAP32[(($415)>>2)]; | |
var $417=$416 | $413; | |
HEAP32[(($415)>>2)]=$417; | |
label = 69; break; | |
case 65: | |
var $419=$B; | |
var $420=(($419+8)|0); | |
var $421=HEAP32[(($420)>>2)]; | |
var $422=$421; | |
var $423=$1; | |
var $424=(($423+16)|0); | |
var $425=HEAP32[(($424)>>2)]; | |
var $426=(($422)>>>(0)) >= (($425)>>>(0)); | |
var $427=(($426)&(1)); | |
var $428=($427); | |
var $429=(($428)|(0))!=0; | |
if ($429) { label = 66; break; } else { label = 67; break; } | |
case 66: | |
var $431=$B; | |
var $432=(($431+8)|0); | |
var $433=HEAP32[(($432)>>2)]; | |
$F1=$433; | |
label = 68; break; | |
case 67: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 68: | |
label = 69; break; | |
case 69: | |
var $437=$DV; | |
var $438=$B; | |
var $439=(($438+8)|0); | |
HEAP32[(($439)>>2)]=$437; | |
var $440=$DV; | |
var $441=$F1; | |
var $442=(($441+12)|0); | |
HEAP32[(($442)>>2)]=$440; | |
var $443=$F1; | |
var $444=$DV; | |
var $445=(($444+8)|0); | |
HEAP32[(($445)>>2)]=$443; | |
var $446=$B; | |
var $447=$DV; | |
var $448=(($447+12)|0); | |
HEAP32[(($448)>>2)]=$446; | |
label = 70; break; | |
case 70: | |
var $450=$rsize; | |
var $451=$1; | |
var $452=(($451+8)|0); | |
HEAP32[(($452)>>2)]=$450; | |
var $453=$r; | |
var $454=$1; | |
var $455=(($454+20)|0); | |
HEAP32[(($455)>>2)]=$453; | |
label = 71; break; | |
case 71: | |
var $457=$v; | |
var $458=$457; | |
var $459=(($458+8)|0); | |
return $459; | |
case 72: | |
label = 73; break; | |
case 73: | |
_abort(); | |
throw "Reached an unreachable!" | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _tmalloc_large($m, $nb) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $v; | |
var $rsize; | |
var $t; | |
var $idx; | |
var $X; | |
var $Y; | |
var $N; | |
var $K; | |
var $sizebits; | |
var $rst; | |
var $rt; | |
var $trem; | |
var $leftbits; | |
var $i; | |
var $leastbit; | |
var $Y1; | |
var $K2; | |
var $N3; | |
var $trem4; | |
var $r; | |
var $XP; | |
var $R; | |
var $F; | |
var $RP; | |
var $CP; | |
var $H; | |
var $C0; | |
var $C1; | |
var $I; | |
var $B; | |
var $F5; | |
var $TP; | |
var $H6; | |
var $I7; | |
var $X8; | |
var $Y9; | |
var $N10; | |
var $K11; | |
var $T; | |
var $K12; | |
var $C; | |
var $F13; | |
$2=$m; | |
$3=$nb; | |
$v=0; | |
var $4=$3; | |
var $5=(((-$4))|0); | |
$rsize=$5; | |
var $6=$3; | |
var $7=$6 >>> 8; | |
$X=$7; | |
var $8=$X; | |
var $9=(($8)|(0))==0; | |
if ($9) { label = 3; break; } else { label = 4; break; } | |
case 3: | |
$idx=0; | |
label = 8; break; | |
case 4: | |
var $12=$X; | |
var $13=(($12)>>>(0)) > 65535; | |
if ($13) { label = 5; break; } else { label = 6; break; } | |
case 5: | |
$idx=31; | |
label = 7; break; | |
case 6: | |
var $16=$X; | |
$Y=$16; | |
var $17=$Y; | |
var $18=((($17)-(256))|0); | |
var $19=$18 >>> 16; | |
var $20=$19 & 8; | |
$N=$20; | |
var $21=$N; | |
var $22=$Y; | |
var $23=$22 << $21; | |
$Y=$23; | |
var $24=((($23)-(4096))|0); | |
var $25=$24 >>> 16; | |
var $26=$25 & 4; | |
$K=$26; | |
var $27=$K; | |
var $28=$N; | |
var $29=((($28)+($27))|0); | |
$N=$29; | |
var $30=$K; | |
var $31=$Y; | |
var $32=$31 << $30; | |
$Y=$32; | |
var $33=((($32)-(16384))|0); | |
var $34=$33 >>> 16; | |
var $35=$34 & 2; | |
$K=$35; | |
var $36=$N; | |
var $37=((($36)+($35))|0); | |
$N=$37; | |
var $38=$N; | |
var $39=(((14)-($38))|0); | |
var $40=$K; | |
var $41=$Y; | |
var $42=$41 << $40; | |
$Y=$42; | |
var $43=$42 >>> 15; | |
var $44=((($39)+($43))|0); | |
$K=$44; | |
var $45=$K; | |
var $46=$45 << 1; | |
var $47=$3; | |
var $48=$K; | |
var $49=((($48)+(7))|0); | |
var $50=$47 >>> (($49)>>>(0)); | |
var $51=$50 & 1; | |
var $52=((($46)+($51))|0); | |
$idx=$52; | |
label = 7; break; | |
case 7: | |
label = 8; break; | |
case 8: | |
var $55=$idx; | |
var $56=$2; | |
var $57=(($56+304)|0); | |
var $58=(($57+($55<<2))|0); | |
var $59=HEAP32[(($58)>>2)]; | |
$t=$59; | |
var $60=(($59)|(0))!=0; | |
if ($60) { label = 9; break; } else { label = 24; break; } | |
case 9: | |
var $62=$3; | |
var $63=$idx; | |
var $64=(($63)|(0))==31; | |
if ($64) { label = 10; break; } else { label = 11; break; } | |
case 10: | |
var $73 = 0;label = 12; break; | |
case 11: | |
var $67=$idx; | |
var $68=$67 >>> 1; | |
var $69=((($68)+(8))|0); | |
var $70=((($69)-(2))|0); | |
var $71=(((31)-($70))|0); | |
var $73 = $71;label = 12; break; | |
case 12: | |
var $73; | |
var $74=$62 << $73; | |
$sizebits=$74; | |
$rst=0; | |
label = 13; break; | |
case 13: | |
var $76=$t; | |
var $77=(($76+4)|0); | |
var $78=HEAP32[(($77)>>2)]; | |
var $79=$78 & -8; | |
var $80=$3; | |
var $81=((($79)-($80))|0); | |
$trem=$81; | |
var $82=$trem; | |
var $83=$rsize; | |
var $84=(($82)>>>(0)) < (($83)>>>(0)); | |
if ($84) { label = 14; break; } else { label = 17; break; } | |
case 14: | |
var $86=$t; | |
$v=$86; | |
var $87=$trem; | |
$rsize=$87; | |
var $88=(($87)|(0))==0; | |
if ($88) { label = 15; break; } else { label = 16; break; } | |
case 15: | |
label = 23; break; | |
case 16: | |
label = 17; break; | |
case 17: | |
var $92=$t; | |
var $93=(($92+16)|0); | |
var $94=(($93+4)|0); | |
var $95=HEAP32[(($94)>>2)]; | |
$rt=$95; | |
var $96=$sizebits; | |
var $97=$96 >>> 31; | |
var $98=$97 & 1; | |
var $99=$t; | |
var $100=(($99+16)|0); | |
var $101=(($100+($98<<2))|0); | |
var $102=HEAP32[(($101)>>2)]; | |
$t=$102; | |
var $103=$rt; | |
var $104=(($103)|(0))!=0; | |
if ($104) { label = 18; break; } else { label = 20; break; } | |
case 18: | |
var $106=$rt; | |
var $107=$t; | |
var $108=(($106)|(0))!=(($107)|(0)); | |
if ($108) { label = 19; break; } else { label = 20; break; } | |
case 19: | |
var $110=$rt; | |
$rst=$110; | |
label = 20; break; | |
case 20: | |
var $112=$t; | |
var $113=(($112)|(0))==0; | |
if ($113) { label = 21; break; } else { label = 22; break; } | |
case 21: | |
var $115=$rst; | |
$t=$115; | |
label = 23; break; | |
case 22: | |
var $117=$sizebits; | |
var $118=$117 << 1; | |
$sizebits=$118; | |
label = 13; break; | |
case 23: | |
label = 24; break; | |
case 24: | |
var $121=$t; | |
var $122=(($121)|(0))==0; | |
if ($122) { label = 25; break; } else { label = 29; break; } | |
case 25: | |
var $124=$v; | |
var $125=(($124)|(0))==0; | |
if ($125) { label = 26; break; } else { label = 29; break; } | |
case 26: | |
var $127=$idx; | |
var $128=1 << $127; | |
var $129=$128 << 1; | |
var $130=$idx; | |
var $131=1 << $130; | |
var $132=$131 << 1; | |
var $133=(((-$132))|0); | |
var $134=$129 | $133; | |
var $135=$2; | |
var $136=(($135+4)|0); | |
var $137=HEAP32[(($136)>>2)]; | |
var $138=$134 & $137; | |
$leftbits=$138; | |
var $139=$leftbits; | |
var $140=(($139)|(0))!=0; | |
if ($140) { label = 27; break; } else { label = 28; break; } | |
case 27: | |
var $142=$leftbits; | |
var $143=$leftbits; | |
var $144=(((-$143))|0); | |
var $145=$142 & $144; | |
$leastbit=$145; | |
var $146=$leastbit; | |
var $147=((($146)-(1))|0); | |
$Y1=$147; | |
var $148=$Y1; | |
var $149=$148 >>> 12; | |
var $150=$149 & 16; | |
$K2=$150; | |
var $151=$K2; | |
$N3=$151; | |
var $152=$K2; | |
var $153=$Y1; | |
var $154=$153 >>> (($152)>>>(0)); | |
$Y1=$154; | |
var $155=$Y1; | |
var $156=$155 >>> 5; | |
var $157=$156 & 8; | |
$K2=$157; | |
var $158=$N3; | |
var $159=((($158)+($157))|0); | |
$N3=$159; | |
var $160=$K2; | |
var $161=$Y1; | |
var $162=$161 >>> (($160)>>>(0)); | |
$Y1=$162; | |
var $163=$Y1; | |
var $164=$163 >>> 2; | |
var $165=$164 & 4; | |
$K2=$165; | |
var $166=$N3; | |
var $167=((($166)+($165))|0); | |
$N3=$167; | |
var $168=$K2; | |
var $169=$Y1; | |
var $170=$169 >>> (($168)>>>(0)); | |
$Y1=$170; | |
var $171=$Y1; | |
var $172=$171 >>> 1; | |
var $173=$172 & 2; | |
$K2=$173; | |
var $174=$N3; | |
var $175=((($174)+($173))|0); | |
$N3=$175; | |
var $176=$K2; | |
var $177=$Y1; | |
var $178=$177 >>> (($176)>>>(0)); | |
$Y1=$178; | |
var $179=$Y1; | |
var $180=$179 >>> 1; | |
var $181=$180 & 1; | |
$K2=$181; | |
var $182=$N3; | |
var $183=((($182)+($181))|0); | |
$N3=$183; | |
var $184=$K2; | |
var $185=$Y1; | |
var $186=$185 >>> (($184)>>>(0)); | |
$Y1=$186; | |
var $187=$N3; | |
var $188=$Y1; | |
var $189=((($187)+($188))|0); | |
$i=$189; | |
var $190=$i; | |
var $191=$2; | |
var $192=(($191+304)|0); | |
var $193=(($192+($190<<2))|0); | |
var $194=HEAP32[(($193)>>2)]; | |
$t=$194; | |
label = 28; break; | |
case 28: | |
label = 29; break; | |
case 29: | |
label = 30; break; | |
case 30: | |
var $198=$t; | |
var $199=(($198)|(0))!=0; | |
if ($199) { label = 31; break; } else { label = 37; break; } | |
case 31: | |
var $201=$t; | |
var $202=(($201+4)|0); | |
var $203=HEAP32[(($202)>>2)]; | |
var $204=$203 & -8; | |
var $205=$3; | |
var $206=((($204)-($205))|0); | |
$trem4=$206; | |
var $207=$trem4; | |
var $208=$rsize; | |
var $209=(($207)>>>(0)) < (($208)>>>(0)); | |
if ($209) { label = 32; break; } else { label = 33; break; } | |
case 32: | |
var $211=$trem4; | |
$rsize=$211; | |
var $212=$t; | |
$v=$212; | |
label = 33; break; | |
case 33: | |
var $214=$t; | |
var $215=(($214+16)|0); | |
var $216=(($215)|0); | |
var $217=HEAP32[(($216)>>2)]; | |
var $218=(($217)|(0))!=0; | |
if ($218) { label = 34; break; } else { label = 35; break; } | |
case 34: | |
var $220=$t; | |
var $221=(($220+16)|0); | |
var $222=(($221)|0); | |
var $223=HEAP32[(($222)>>2)]; | |
var $230 = $223;label = 36; break; | |
case 35: | |
var $225=$t; | |
var $226=(($225+16)|0); | |
var $227=(($226+4)|0); | |
var $228=HEAP32[(($227)>>2)]; | |
var $230 = $228;label = 36; break; | |
case 36: | |
var $230; | |
$t=$230; | |
label = 30; break; | |
case 37: | |
var $232=$v; | |
var $233=(($232)|(0))!=0; | |
if ($233) { label = 38; break; } else { label = 130; break; } | |
case 38: | |
var $235=$rsize; | |
var $236=$2; | |
var $237=(($236+8)|0); | |
var $238=HEAP32[(($237)>>2)]; | |
var $239=$3; | |
var $240=((($238)-($239))|0); | |
var $241=(($235)>>>(0)) < (($240)>>>(0)); | |
if ($241) { label = 39; break; } else { label = 130; break; } | |
case 39: | |
var $243=$v; | |
var $244=$243; | |
var $245=$2; | |
var $246=(($245+16)|0); | |
var $247=HEAP32[(($246)>>2)]; | |
var $248=(($244)>>>(0)) >= (($247)>>>(0)); | |
var $249=(($248)&(1)); | |
var $250=($249); | |
var $251=(($250)|(0))!=0; | |
if ($251) { label = 40; break; } else { label = 129; break; } | |
case 40: | |
var $253=$v; | |
var $254=$253; | |
var $255=$3; | |
var $256=(($254+$255)|0); | |
var $257=$256; | |
$r=$257; | |
var $258=$v; | |
var $259=$258; | |
var $260=$r; | |
var $261=$260; | |
var $262=(($259)>>>(0)) < (($261)>>>(0)); | |
var $263=(($262)&(1)); | |
var $264=($263); | |
var $265=(($264)|(0))!=0; | |
if ($265) { label = 41; break; } else { label = 128; break; } | |
case 41: | |
var $267=$v; | |
var $268=(($267+24)|0); | |
var $269=HEAP32[(($268)>>2)]; | |
$XP=$269; | |
var $270=$v; | |
var $271=(($270+12)|0); | |
var $272=HEAP32[(($271)>>2)]; | |
var $273=$v; | |
var $274=(($272)|(0))!=(($273)|(0)); | |
if ($274) { label = 42; break; } else { label = 49; break; } | |
case 42: | |
var $276=$v; | |
var $277=(($276+8)|0); | |
var $278=HEAP32[(($277)>>2)]; | |
$F=$278; | |
var $279=$v; | |
var $280=(($279+12)|0); | |
var $281=HEAP32[(($280)>>2)]; | |
$R=$281; | |
var $282=$F; | |
var $283=$282; | |
var $284=$2; | |
var $285=(($284+16)|0); | |
var $286=HEAP32[(($285)>>2)]; | |
var $287=(($283)>>>(0)) >= (($286)>>>(0)); | |
if ($287) { label = 43; break; } else { var $301 = 0;label = 45; break; } | |
case 43: | |
var $289=$F; | |
var $290=(($289+12)|0); | |
var $291=HEAP32[(($290)>>2)]; | |
var $292=$v; | |
var $293=(($291)|(0))==(($292)|(0)); | |
if ($293) { label = 44; break; } else { var $301 = 0;label = 45; break; } | |
case 44: | |
var $295=$R; | |
var $296=(($295+8)|0); | |
var $297=HEAP32[(($296)>>2)]; | |
var $298=$v; | |
var $299=(($297)|(0))==(($298)|(0)); | |
var $301 = $299;label = 45; break; | |
case 45: | |
var $301; | |
var $302=(($301)&(1)); | |
var $303=($302); | |
var $304=(($303)|(0))!=0; | |
if ($304) { label = 46; break; } else { label = 47; break; } | |
case 46: | |
var $306=$R; | |
var $307=$F; | |
var $308=(($307+12)|0); | |
HEAP32[(($308)>>2)]=$306; | |
var $309=$F; | |
var $310=$R; | |
var $311=(($310+8)|0); | |
HEAP32[(($311)>>2)]=$309; | |
label = 48; break; | |
case 47: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 48: | |
label = 61; break; | |
case 49: | |
var $315=$v; | |
var $316=(($315+16)|0); | |
var $317=(($316+4)|0); | |
$RP=$317; | |
var $318=HEAP32[(($317)>>2)]; | |
$R=$318; | |
var $319=(($318)|(0))!=0; | |
if ($319) { label = 51; break; } else { label = 50; break; } | |
case 50: | |
var $321=$v; | |
var $322=(($321+16)|0); | |
var $323=(($322)|0); | |
$RP=$323; | |
var $324=HEAP32[(($323)>>2)]; | |
$R=$324; | |
var $325=(($324)|(0))!=0; | |
if ($325) { label = 51; break; } else { label = 60; break; } | |
case 51: | |
label = 52; break; | |
case 52: | |
var $328=$R; | |
var $329=(($328+16)|0); | |
var $330=(($329+4)|0); | |
$CP=$330; | |
var $331=HEAP32[(($330)>>2)]; | |
var $332=(($331)|(0))!=0; | |
if ($332) { var $340 = 1;label = 54; break; } else { label = 53; break; } | |
case 53: | |
var $334=$R; | |
var $335=(($334+16)|0); | |
var $336=(($335)|0); | |
$CP=$336; | |
var $337=HEAP32[(($336)>>2)]; | |
var $338=(($337)|(0))!=0; | |
var $340 = $338;label = 54; break; | |
case 54: | |
var $340; | |
if ($340) { label = 55; break; } else { label = 56; break; } | |
case 55: | |
var $342=$CP; | |
$RP=$342; | |
var $343=HEAP32[(($342)>>2)]; | |
$R=$343; | |
label = 52; break; | |
case 56: | |
var $345=$RP; | |
var $346=$345; | |
var $347=$2; | |
var $348=(($347+16)|0); | |
var $349=HEAP32[(($348)>>2)]; | |
var $350=(($346)>>>(0)) >= (($349)>>>(0)); | |
var $351=(($350)&(1)); | |
var $352=($351); | |
var $353=(($352)|(0))!=0; | |
if ($353) { label = 57; break; } else { label = 58; break; } | |
case 57: | |
var $355=$RP; | |
HEAP32[(($355)>>2)]=0; | |
label = 59; break; | |
case 58: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 59: | |
label = 60; break; | |
case 60: | |
label = 61; break; | |
case 61: | |
var $360=$XP; | |
var $361=(($360)|(0))!=0; | |
if ($361) { label = 62; break; } else { label = 89; break; } | |
case 62: | |
var $363=$v; | |
var $364=(($363+28)|0); | |
var $365=HEAP32[(($364)>>2)]; | |
var $366=$2; | |
var $367=(($366+304)|0); | |
var $368=(($367+($365<<2))|0); | |
$H=$368; | |
var $369=$v; | |
var $370=$H; | |
var $371=HEAP32[(($370)>>2)]; | |
var $372=(($369)|(0))==(($371)|(0)); | |
if ($372) { label = 63; break; } else { label = 66; break; } | |
case 63: | |
var $374=$R; | |
var $375=$H; | |
HEAP32[(($375)>>2)]=$374; | |
var $376=(($374)|(0))==0; | |
if ($376) { label = 64; break; } else { label = 65; break; } | |
case 64: | |
var $378=$v; | |
var $379=(($378+28)|0); | |
var $380=HEAP32[(($379)>>2)]; | |
var $381=1 << $380; | |
var $382=$381 ^ -1; | |
var $383=$2; | |
var $384=(($383+4)|0); | |
var $385=HEAP32[(($384)>>2)]; | |
var $386=$385 & $382; | |
HEAP32[(($384)>>2)]=$386; | |
label = 65; break; | |
case 65: | |
label = 73; break; | |
case 66: | |
var $389=$XP; | |
var $390=$389; | |
var $391=$2; | |
var $392=(($391+16)|0); | |
var $393=HEAP32[(($392)>>2)]; | |
var $394=(($390)>>>(0)) >= (($393)>>>(0)); | |
var $395=(($394)&(1)); | |
var $396=($395); | |
var $397=(($396)|(0))!=0; | |
if ($397) { label = 67; break; } else { label = 71; break; } | |
case 67: | |
var $399=$XP; | |
var $400=(($399+16)|0); | |
var $401=(($400)|0); | |
var $402=HEAP32[(($401)>>2)]; | |
var $403=$v; | |
var $404=(($402)|(0))==(($403)|(0)); | |
if ($404) { label = 68; break; } else { label = 69; break; } | |
case 68: | |
var $406=$R; | |
var $407=$XP; | |
var $408=(($407+16)|0); | |
var $409=(($408)|0); | |
HEAP32[(($409)>>2)]=$406; | |
label = 70; break; | |
case 69: | |
var $411=$R; | |
var $412=$XP; | |
var $413=(($412+16)|0); | |
var $414=(($413+4)|0); | |
HEAP32[(($414)>>2)]=$411; | |
label = 70; break; | |
case 70: | |
label = 72; break; | |
case 71: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 72: | |
label = 73; break; | |
case 73: | |
var $419=$R; | |
var $420=(($419)|(0))!=0; | |
if ($420) { label = 74; break; } else { label = 88; break; } | |
case 74: | |
var $422=$R; | |
var $423=$422; | |
var $424=$2; | |
var $425=(($424+16)|0); | |
var $426=HEAP32[(($425)>>2)]; | |
var $427=(($423)>>>(0)) >= (($426)>>>(0)); | |
var $428=(($427)&(1)); | |
var $429=($428); | |
var $430=(($429)|(0))!=0; | |
if ($430) { label = 75; break; } else { label = 86; break; } | |
case 75: | |
var $432=$XP; | |
var $433=$R; | |
var $434=(($433+24)|0); | |
HEAP32[(($434)>>2)]=$432; | |
var $435=$v; | |
var $436=(($435+16)|0); | |
var $437=(($436)|0); | |
var $438=HEAP32[(($437)>>2)]; | |
$C0=$438; | |
var $439=(($438)|(0))!=0; | |
if ($439) { label = 76; break; } else { label = 80; break; } | |
case 76: | |
var $441=$C0; | |
var $442=$441; | |
var $443=$2; | |
var $444=(($443+16)|0); | |
var $445=HEAP32[(($444)>>2)]; | |
var $446=(($442)>>>(0)) >= (($445)>>>(0)); | |
var $447=(($446)&(1)); | |
var $448=($447); | |
var $449=(($448)|(0))!=0; | |
if ($449) { label = 77; break; } else { label = 78; break; } | |
case 77: | |
var $451=$C0; | |
var $452=$R; | |
var $453=(($452+16)|0); | |
var $454=(($453)|0); | |
HEAP32[(($454)>>2)]=$451; | |
var $455=$R; | |
var $456=$C0; | |
var $457=(($456+24)|0); | |
HEAP32[(($457)>>2)]=$455; | |
label = 79; break; | |
case 78: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 79: | |
label = 80; break; | |
case 80: | |
var $461=$v; | |
var $462=(($461+16)|0); | |
var $463=(($462+4)|0); | |
var $464=HEAP32[(($463)>>2)]; | |
$C1=$464; | |
var $465=(($464)|(0))!=0; | |
if ($465) { label = 81; break; } else { label = 85; break; } | |
case 81: | |
var $467=$C1; | |
var $468=$467; | |
var $469=$2; | |
var $470=(($469+16)|0); | |
var $471=HEAP32[(($470)>>2)]; | |
var $472=(($468)>>>(0)) >= (($471)>>>(0)); | |
var $473=(($472)&(1)); | |
var $474=($473); | |
var $475=(($474)|(0))!=0; | |
if ($475) { label = 82; break; } else { label = 83; break; } | |
case 82: | |
var $477=$C1; | |
var $478=$R; | |
var $479=(($478+16)|0); | |
var $480=(($479+4)|0); | |
HEAP32[(($480)>>2)]=$477; | |
var $481=$R; | |
var $482=$C1; | |
var $483=(($482+24)|0); | |
HEAP32[(($483)>>2)]=$481; | |
label = 84; break; | |
case 83: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 84: | |
label = 85; break; | |
case 85: | |
label = 87; break; | |
case 86: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 87: | |
label = 88; break; | |
case 88: | |
label = 89; break; | |
case 89: | |
var $491=$rsize; | |
var $492=(($491)>>>(0)) < 16; | |
if ($492) { label = 90; break; } else { label = 91; break; } | |
case 90: | |
var $494=$rsize; | |
var $495=$3; | |
var $496=((($494)+($495))|0); | |
var $497=$496 | 1; | |
var $498=$497 | 2; | |
var $499=$v; | |
var $500=(($499+4)|0); | |
HEAP32[(($500)>>2)]=$498; | |
var $501=$v; | |
var $502=$501; | |
var $503=$rsize; | |
var $504=$3; | |
var $505=((($503)+($504))|0); | |
var $506=(($502+$505)|0); | |
var $507=$506; | |
var $508=(($507+4)|0); | |
var $509=HEAP32[(($508)>>2)]; | |
var $510=$509 | 1; | |
HEAP32[(($508)>>2)]=$510; | |
label = 127; break; | |
case 91: | |
var $512=$3; | |
var $513=$512 | 1; | |
var $514=$513 | 2; | |
var $515=$v; | |
var $516=(($515+4)|0); | |
HEAP32[(($516)>>2)]=$514; | |
var $517=$rsize; | |
var $518=$517 | 1; | |
var $519=$r; | |
var $520=(($519+4)|0); | |
HEAP32[(($520)>>2)]=$518; | |
var $521=$rsize; | |
var $522=$r; | |
var $523=$522; | |
var $524=$rsize; | |
var $525=(($523+$524)|0); | |
var $526=$525; | |
var $527=(($526)|0); | |
HEAP32[(($527)>>2)]=$521; | |
var $528=$rsize; | |
var $529=$528 >>> 3; | |
var $530=(($529)>>>(0)) < 32; | |
if ($530) { label = 92; break; } else { label = 99; break; } | |
case 92: | |
var $532=$rsize; | |
var $533=$532 >>> 3; | |
$I=$533; | |
var $534=$I; | |
var $535=$534 << 1; | |
var $536=$2; | |
var $537=(($536+40)|0); | |
var $538=(($537+($535<<2))|0); | |
var $539=$538; | |
var $540=$539; | |
$B=$540; | |
var $541=$B; | |
$F5=$541; | |
var $542=$2; | |
var $543=(($542)|0); | |
var $544=HEAP32[(($543)>>2)]; | |
var $545=$I; | |
var $546=1 << $545; | |
var $547=$544 & $546; | |
var $548=(($547)|(0))!=0; | |
if ($548) { label = 94; break; } else { label = 93; break; } | |
case 93: | |
var $550=$I; | |
var $551=1 << $550; | |
var $552=$2; | |
var $553=(($552)|0); | |
var $554=HEAP32[(($553)>>2)]; | |
var $555=$554 | $551; | |
HEAP32[(($553)>>2)]=$555; | |
label = 98; break; | |
case 94: | |
var $557=$B; | |
var $558=(($557+8)|0); | |
var $559=HEAP32[(($558)>>2)]; | |
var $560=$559; | |
var $561=$2; | |
var $562=(($561+16)|0); | |
var $563=HEAP32[(($562)>>2)]; | |
var $564=(($560)>>>(0)) >= (($563)>>>(0)); | |
var $565=(($564)&(1)); | |
var $566=($565); | |
var $567=(($566)|(0))!=0; | |
if ($567) { label = 95; break; } else { label = 96; break; } | |
case 95: | |
var $569=$B; | |
var $570=(($569+8)|0); | |
var $571=HEAP32[(($570)>>2)]; | |
$F5=$571; | |
label = 97; break; | |
case 96: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 97: | |
label = 98; break; | |
case 98: | |
var $575=$r; | |
var $576=$B; | |
var $577=(($576+8)|0); | |
HEAP32[(($577)>>2)]=$575; | |
var $578=$r; | |
var $579=$F5; | |
var $580=(($579+12)|0); | |
HEAP32[(($580)>>2)]=$578; | |
var $581=$F5; | |
var $582=$r; | |
var $583=(($582+8)|0); | |
HEAP32[(($583)>>2)]=$581; | |
var $584=$B; | |
var $585=$r; | |
var $586=(($585+12)|0); | |
HEAP32[(($586)>>2)]=$584; | |
label = 126; break; | |
case 99: | |
var $588=$r; | |
var $589=$588; | |
$TP=$589; | |
var $590=$rsize; | |
var $591=$590 >>> 8; | |
$X8=$591; | |
var $592=$X8; | |
var $593=(($592)|(0))==0; | |
if ($593) { label = 100; break; } else { label = 101; break; } | |
case 100: | |
$I7=0; | |
label = 105; break; | |
case 101: | |
var $596=$X8; | |
var $597=(($596)>>>(0)) > 65535; | |
if ($597) { label = 102; break; } else { label = 103; break; } | |
case 102: | |
$I7=31; | |
label = 104; break; | |
case 103: | |
var $600=$X8; | |
$Y9=$600; | |
var $601=$Y9; | |
var $602=((($601)-(256))|0); | |
var $603=$602 >>> 16; | |
var $604=$603 & 8; | |
$N10=$604; | |
var $605=$N10; | |
var $606=$Y9; | |
var $607=$606 << $605; | |
$Y9=$607; | |
var $608=((($607)-(4096))|0); | |
var $609=$608 >>> 16; | |
var $610=$609 & 4; | |
$K11=$610; | |
var $611=$K11; | |
var $612=$N10; | |
var $613=((($612)+($611))|0); | |
$N10=$613; | |
var $614=$K11; | |
var $615=$Y9; | |
var $616=$615 << $614; | |
$Y9=$616; | |
var $617=((($616)-(16384))|0); | |
var $618=$617 >>> 16; | |
var $619=$618 & 2; | |
$K11=$619; | |
var $620=$N10; | |
var $621=((($620)+($619))|0); | |
$N10=$621; | |
var $622=$N10; | |
var $623=(((14)-($622))|0); | |
var $624=$K11; | |
var $625=$Y9; | |
var $626=$625 << $624; | |
$Y9=$626; | |
var $627=$626 >>> 15; | |
var $628=((($623)+($627))|0); | |
$K11=$628; | |
var $629=$K11; | |
var $630=$629 << 1; | |
var $631=$rsize; | |
var $632=$K11; | |
var $633=((($632)+(7))|0); | |
var $634=$631 >>> (($633)>>>(0)); | |
var $635=$634 & 1; | |
var $636=((($630)+($635))|0); | |
$I7=$636; | |
label = 104; break; | |
case 104: | |
label = 105; break; | |
case 105: | |
var $639=$I7; | |
var $640=$2; | |
var $641=(($640+304)|0); | |
var $642=(($641+($639<<2))|0); | |
$H6=$642; | |
var $643=$I7; | |
var $644=$TP; | |
var $645=(($644+28)|0); | |
HEAP32[(($645)>>2)]=$643; | |
var $646=$TP; | |
var $647=(($646+16)|0); | |
var $648=(($647+4)|0); | |
HEAP32[(($648)>>2)]=0; | |
var $649=$TP; | |
var $650=(($649+16)|0); | |
var $651=(($650)|0); | |
HEAP32[(($651)>>2)]=0; | |
var $652=$2; | |
var $653=(($652+4)|0); | |
var $654=HEAP32[(($653)>>2)]; | |
var $655=$I7; | |
var $656=1 << $655; | |
var $657=$654 & $656; | |
var $658=(($657)|(0))!=0; | |
if ($658) { label = 107; break; } else { label = 106; break; } | |
case 106: | |
var $660=$I7; | |
var $661=1 << $660; | |
var $662=$2; | |
var $663=(($662+4)|0); | |
var $664=HEAP32[(($663)>>2)]; | |
var $665=$664 | $661; | |
HEAP32[(($663)>>2)]=$665; | |
var $666=$TP; | |
var $667=$H6; | |
HEAP32[(($667)>>2)]=$666; | |
var $668=$H6; | |
var $669=$668; | |
var $670=$TP; | |
var $671=(($670+24)|0); | |
HEAP32[(($671)>>2)]=$669; | |
var $672=$TP; | |
var $673=$TP; | |
var $674=(($673+12)|0); | |
HEAP32[(($674)>>2)]=$672; | |
var $675=$TP; | |
var $676=(($675+8)|0); | |
HEAP32[(($676)>>2)]=$672; | |
label = 125; break; | |
case 107: | |
var $678=$H6; | |
var $679=HEAP32[(($678)>>2)]; | |
$T=$679; | |
var $680=$rsize; | |
var $681=$I7; | |
var $682=(($681)|(0))==31; | |
if ($682) { label = 108; break; } else { label = 109; break; } | |
case 108: | |
var $691 = 0;label = 110; break; | |
case 109: | |
var $685=$I7; | |
var $686=$685 >>> 1; | |
var $687=((($686)+(8))|0); | |
var $688=((($687)-(2))|0); | |
var $689=(((31)-($688))|0); | |
var $691 = $689;label = 110; break; | |
case 110: | |
var $691; | |
var $692=$680 << $691; | |
$K12=$692; | |
label = 111; break; | |
case 111: | |
var $694=$T; | |
var $695=(($694+4)|0); | |
var $696=HEAP32[(($695)>>2)]; | |
var $697=$696 & -8; | |
var $698=$rsize; | |
var $699=(($697)|(0))!=(($698)|(0)); | |
if ($699) { label = 112; break; } else { label = 118; break; } | |
case 112: | |
var $701=$K12; | |
var $702=$701 >>> 31; | |
var $703=$702 & 1; | |
var $704=$T; | |
var $705=(($704+16)|0); | |
var $706=(($705+($703<<2))|0); | |
$C=$706; | |
var $707=$K12; | |
var $708=$707 << 1; | |
$K12=$708; | |
var $709=$C; | |
var $710=HEAP32[(($709)>>2)]; | |
var $711=(($710)|(0))!=0; | |
if ($711) { label = 113; break; } else { label = 114; break; } | |
case 113: | |
var $713=$C; | |
var $714=HEAP32[(($713)>>2)]; | |
$T=$714; | |
label = 117; break; | |
case 114: | |
var $716=$C; | |
var $717=$716; | |
var $718=$2; | |
var $719=(($718+16)|0); | |
var $720=HEAP32[(($719)>>2)]; | |
var $721=(($717)>>>(0)) >= (($720)>>>(0)); | |
var $722=(($721)&(1)); | |
var $723=($722); | |
var $724=(($723)|(0))!=0; | |
if ($724) { label = 115; break; } else { label = 116; break; } | |
case 115: | |
var $726=$TP; | |
var $727=$C; | |
HEAP32[(($727)>>2)]=$726; | |
var $728=$T; | |
var $729=$TP; | |
var $730=(($729+24)|0); | |
HEAP32[(($730)>>2)]=$728; | |
var $731=$TP; | |
var $732=$TP; | |
var $733=(($732+12)|0); | |
HEAP32[(($733)>>2)]=$731; | |
var $734=$TP; | |
var $735=(($734+8)|0); | |
HEAP32[(($735)>>2)]=$731; | |
label = 124; break; | |
case 116: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 117: | |
label = 123; break; | |
case 118: | |
var $739=$T; | |
var $740=(($739+8)|0); | |
var $741=HEAP32[(($740)>>2)]; | |
$F13=$741; | |
var $742=$T; | |
var $743=$742; | |
var $744=$2; | |
var $745=(($744+16)|0); | |
var $746=HEAP32[(($745)>>2)]; | |
var $747=(($743)>>>(0)) >= (($746)>>>(0)); | |
if ($747) { label = 119; break; } else { var $756 = 0;label = 120; break; } | |
case 119: | |
var $749=$F13; | |
var $750=$749; | |
var $751=$2; | |
var $752=(($751+16)|0); | |
var $753=HEAP32[(($752)>>2)]; | |
var $754=(($750)>>>(0)) >= (($753)>>>(0)); | |
var $756 = $754;label = 120; break; | |
case 120: | |
var $756; | |
var $757=(($756)&(1)); | |
var $758=($757); | |
var $759=(($758)|(0))!=0; | |
if ($759) { label = 121; break; } else { label = 122; break; } | |
case 121: | |
var $761=$TP; | |
var $762=$F13; | |
var $763=(($762+12)|0); | |
HEAP32[(($763)>>2)]=$761; | |
var $764=$T; | |
var $765=(($764+8)|0); | |
HEAP32[(($765)>>2)]=$761; | |
var $766=$F13; | |
var $767=$TP; | |
var $768=(($767+8)|0); | |
HEAP32[(($768)>>2)]=$766; | |
var $769=$T; | |
var $770=$TP; | |
var $771=(($770+12)|0); | |
HEAP32[(($771)>>2)]=$769; | |
var $772=$TP; | |
var $773=(($772+24)|0); | |
HEAP32[(($773)>>2)]=0; | |
label = 124; break; | |
case 122: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 123: | |
label = 111; break; | |
case 124: | |
label = 125; break; | |
case 125: | |
label = 126; break; | |
case 126: | |
label = 127; break; | |
case 127: | |
var $780=$v; | |
var $781=$780; | |
var $782=(($781+8)|0); | |
$1=$782; | |
label = 131; break; | |
case 128: | |
label = 129; break; | |
case 129: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 130: | |
$1=0; | |
label = 131; break; | |
case 131: | |
var $787=$1; | |
return $787; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _sys_alloc($m, $nb) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $tbase; | |
var $tsize; | |
var $mmap_flag; | |
var $asize; | |
var $mem; | |
var $fp; | |
var $br; | |
var $ssize; | |
var $ss; | |
var $base; | |
var $fp1; | |
var $esize; | |
var $end; | |
var $br2; | |
var $end3; | |
var $ssize4; | |
var $mn; | |
var $sp; | |
var $oldbase; | |
var $rsize; | |
var $p; | |
var $r; | |
$2=$m; | |
$3=$nb; | |
$tbase=-1; | |
$tsize=0; | |
$mmap_flag=0; | |
var $4=HEAP32[((((5243708)|0))>>2)]; | |
var $5=(($4)|(0))!=0; | |
if ($5) { var $10 = 1;label = 4; break; } else { label = 3; break; } | |
case 3: | |
var $7=_init_mparams(); | |
var $8=(($7)|(0))!=0; | |
var $10 = $8;label = 4; break; | |
case 4: | |
var $10; | |
var $11=(($10)&(1)); | |
var $12=$2; | |
var $13=(($12+444)|0); | |
var $14=HEAP32[(($13)>>2)]; | |
var $15=$14 & 0; | |
var $16=(($15)|(0))!=0; | |
if ($16) { label = 5; break; } else { label = 10; break; } | |
case 5: | |
var $18=$3; | |
var $19=HEAP32[((((5243720)|0))>>2)]; | |
var $20=(($18)>>>(0)) >= (($19)>>>(0)); | |
if ($20) { label = 6; break; } else { label = 10; break; } | |
case 6: | |
var $22=$2; | |
var $23=(($22+12)|0); | |
var $24=HEAP32[(($23)>>2)]; | |
var $25=(($24)|(0))!=0; | |
if ($25) { label = 7; break; } else { label = 10; break; } | |
case 7: | |
var $27=$2; | |
var $28=$3; | |
var $29=_mmap_alloc($27, $28); | |
$mem=$29; | |
var $30=$mem; | |
var $31=(($30)|(0))!=0; | |
if ($31) { label = 8; break; } else { label = 9; break; } | |
case 8: | |
var $33=$mem; | |
$1=$33; | |
label = 104; break; | |
case 9: | |
label = 10; break; | |
case 10: | |
var $36=$3; | |
var $37=((($36)+(48))|0); | |
var $38=HEAP32[((((5243716)|0))>>2)]; | |
var $39=((($38)-(1))|0); | |
var $40=((($37)+($39))|0); | |
var $41=HEAP32[((((5243716)|0))>>2)]; | |
var $42=((($41)-(1))|0); | |
var $43=$42 ^ -1; | |
var $44=$40 & $43; | |
$asize=$44; | |
var $45=$asize; | |
var $46=$3; | |
var $47=(($45)>>>(0)) <= (($46)>>>(0)); | |
if ($47) { label = 11; break; } else { label = 12; break; } | |
case 11: | |
$1=0; | |
label = 104; break; | |
case 12: | |
var $50=$2; | |
var $51=(($50+440)|0); | |
var $52=HEAP32[(($51)>>2)]; | |
var $53=(($52)|(0))!=0; | |
if ($53) { label = 13; break; } else { label = 17; break; } | |
case 13: | |
var $55=$2; | |
var $56=(($55+432)|0); | |
var $57=HEAP32[(($56)>>2)]; | |
var $58=$asize; | |
var $59=((($57)+($58))|0); | |
$fp=$59; | |
var $60=$fp; | |
var $61=$2; | |
var $62=(($61+432)|0); | |
var $63=HEAP32[(($62)>>2)]; | |
var $64=(($60)>>>(0)) <= (($63)>>>(0)); | |
if ($64) { label = 15; break; } else { label = 14; break; } | |
case 14: | |
var $66=$fp; | |
var $67=$2; | |
var $68=(($67+440)|0); | |
var $69=HEAP32[(($68)>>2)]; | |
var $70=(($66)>>>(0)) > (($69)>>>(0)); | |
if ($70) { label = 15; break; } else { label = 16; break; } | |
case 15: | |
$1=0; | |
label = 104; break; | |
case 16: | |
label = 17; break; | |
case 17: | |
var $74=$2; | |
var $75=(($74+444)|0); | |
var $76=HEAP32[(($75)>>2)]; | |
var $77=$76 & 4; | |
var $78=(($77)|(0))!=0; | |
if ($78) { label = 54; break; } else { label = 18; break; } | |
case 18: | |
$br=-1; | |
var $80=$asize; | |
$ssize=$80; | |
var $81=$2; | |
var $82=(($81+24)|0); | |
var $83=HEAP32[(($82)>>2)]; | |
var $84=(($83)|(0))==0; | |
if ($84) { label = 19; break; } else { label = 20; break; } | |
case 19: | |
var $94 = 0;label = 21; break; | |
case 20: | |
var $87=$2; | |
var $88=$2; | |
var $89=(($88+24)|0); | |
var $90=HEAP32[(($89)>>2)]; | |
var $91=$90; | |
var $92=_segment_holding($87, $91); | |
var $94 = $92;label = 21; break; | |
case 21: | |
var $94; | |
$ss=$94; | |
var $95=$ss; | |
var $96=(($95)|(0))==0; | |
if ($96) { label = 22; break; } else { label = 34; break; } | |
case 22: | |
var $98=_sbrk(0); | |
$base=$98; | |
var $99=$base; | |
var $100=(($99)|(0))!=-1; | |
if ($100) { label = 23; break; } else { label = 33; break; } | |
case 23: | |
var $102=$base; | |
var $103=$102; | |
var $104=HEAP32[((((5243712)|0))>>2)]; | |
var $105=((($104)-(1))|0); | |
var $106=$103 & $105; | |
var $107=(($106)|(0))==0; | |
if ($107) { label = 25; break; } else { label = 24; break; } | |
case 24: | |
var $109=$base; | |
var $110=$109; | |
var $111=HEAP32[((((5243712)|0))>>2)]; | |
var $112=((($111)-(1))|0); | |
var $113=((($110)+($112))|0); | |
var $114=HEAP32[((((5243712)|0))>>2)]; | |
var $115=((($114)-(1))|0); | |
var $116=$115 ^ -1; | |
var $117=$113 & $116; | |
var $118=$base; | |
var $119=$118; | |
var $120=((($117)-($119))|0); | |
var $121=$ssize; | |
var $122=((($121)+($120))|0); | |
$ssize=$122; | |
label = 25; break; | |
case 25: | |
var $124=$2; | |
var $125=(($124+432)|0); | |
var $126=HEAP32[(($125)>>2)]; | |
var $127=$ssize; | |
var $128=((($126)+($127))|0); | |
$fp1=$128; | |
var $129=$ssize; | |
var $130=$3; | |
var $131=(($129)>>>(0)) > (($130)>>>(0)); | |
if ($131) { label = 26; break; } else { label = 32; break; } | |
case 26: | |
var $133=$ssize; | |
var $134=(($133)>>>(0)) < 2147483647; | |
if ($134) { label = 27; break; } else { label = 32; break; } | |
case 27: | |
var $136=$2; | |
var $137=(($136+440)|0); | |
var $138=HEAP32[(($137)>>2)]; | |
var $139=(($138)|(0))==0; | |
if ($139) { label = 30; break; } else { label = 28; break; } | |
case 28: | |
var $141=$fp1; | |
var $142=$2; | |
var $143=(($142+432)|0); | |
var $144=HEAP32[(($143)>>2)]; | |
var $145=(($141)>>>(0)) > (($144)>>>(0)); | |
if ($145) { label = 29; break; } else { label = 32; break; } | |
case 29: | |
var $147=$fp1; | |
var $148=$2; | |
var $149=(($148+440)|0); | |
var $150=HEAP32[(($149)>>2)]; | |
var $151=(($147)>>>(0)) <= (($150)>>>(0)); | |
if ($151) { label = 30; break; } else { label = 32; break; } | |
case 30: | |
var $153=$ssize; | |
var $154=_sbrk($153); | |
$br=$154; | |
var $155=$base; | |
var $156=(($154)|(0))==(($155)|(0)); | |
if ($156) { label = 31; break; } else { label = 32; break; } | |
case 31: | |
var $158=$base; | |
$tbase=$158; | |
var $159=$ssize; | |
$tsize=$159; | |
label = 32; break; | |
case 32: | |
label = 33; break; | |
case 33: | |
label = 38; break; | |
case 34: | |
var $163=$3; | |
var $164=$2; | |
var $165=(($164+12)|0); | |
var $166=HEAP32[(($165)>>2)]; | |
var $167=((($163)-($166))|0); | |
var $168=((($167)+(48))|0); | |
var $169=HEAP32[((((5243716)|0))>>2)]; | |
var $170=((($169)-(1))|0); | |
var $171=((($168)+($170))|0); | |
var $172=HEAP32[((((5243716)|0))>>2)]; | |
var $173=((($172)-(1))|0); | |
var $174=$173 ^ -1; | |
var $175=$171 & $174; | |
$ssize=$175; | |
var $176=$ssize; | |
var $177=(($176)>>>(0)) < 2147483647; | |
if ($177) { label = 35; break; } else { label = 37; break; } | |
case 35: | |
var $179=$ssize; | |
var $180=_sbrk($179); | |
$br=$180; | |
var $181=$ss; | |
var $182=(($181)|0); | |
var $183=HEAP32[(($182)>>2)]; | |
var $184=$ss; | |
var $185=(($184+4)|0); | |
var $186=HEAP32[(($185)>>2)]; | |
var $187=(($183+$186)|0); | |
var $188=(($180)|(0))==(($187)|(0)); | |
if ($188) { label = 36; break; } else { label = 37; break; } | |
case 36: | |
var $190=$br; | |
$tbase=$190; | |
var $191=$ssize; | |
$tsize=$191; | |
label = 37; break; | |
case 37: | |
label = 38; break; | |
case 38: | |
var $194=$tbase; | |
var $195=(($194)|(0))==-1; | |
if ($195) { label = 39; break; } else { label = 53; break; } | |
case 39: | |
var $197=$br; | |
var $198=(($197)|(0))!=-1; | |
if ($198) { label = 40; break; } else { label = 49; break; } | |
case 40: | |
var $200=$ssize; | |
var $201=(($200)>>>(0)) < 2147483647; | |
if ($201) { label = 41; break; } else { label = 48; break; } | |
case 41: | |
var $203=$ssize; | |
var $204=$3; | |
var $205=((($204)+(48))|0); | |
var $206=(($203)>>>(0)) < (($205)>>>(0)); | |
if ($206) { label = 42; break; } else { label = 48; break; } | |
case 42: | |
var $208=$3; | |
var $209=((($208)+(48))|0); | |
var $210=$ssize; | |
var $211=((($209)-($210))|0); | |
var $212=HEAP32[((((5243716)|0))>>2)]; | |
var $213=((($212)-(1))|0); | |
var $214=((($211)+($213))|0); | |
var $215=HEAP32[((((5243716)|0))>>2)]; | |
var $216=((($215)-(1))|0); | |
var $217=$216 ^ -1; | |
var $218=$214 & $217; | |
$esize=$218; | |
var $219=$esize; | |
var $220=(($219)>>>(0)) < 2147483647; | |
if ($220) { label = 43; break; } else { label = 47; break; } | |
case 43: | |
var $222=$esize; | |
var $223=_sbrk($222); | |
$end=$223; | |
var $224=$end; | |
var $225=(($224)|(0))!=-1; | |
if ($225) { label = 44; break; } else { label = 45; break; } | |
case 44: | |
var $227=$esize; | |
var $228=$ssize; | |
var $229=((($228)+($227))|0); | |
$ssize=$229; | |
label = 46; break; | |
case 45: | |
var $231=$ssize; | |
var $232=(((-$231))|0); | |
var $233=_sbrk($232); | |
$br=-1; | |
label = 46; break; | |
case 46: | |
label = 47; break; | |
case 47: | |
label = 48; break; | |
case 48: | |
label = 49; break; | |
case 49: | |
var $238=$br; | |
var $239=(($238)|(0))!=-1; | |
if ($239) { label = 50; break; } else { label = 51; break; } | |
case 50: | |
var $241=$br; | |
$tbase=$241; | |
var $242=$ssize; | |
$tsize=$242; | |
label = 52; break; | |
case 51: | |
var $244=$2; | |
var $245=(($244+444)|0); | |
var $246=HEAP32[(($245)>>2)]; | |
var $247=$246 | 4; | |
HEAP32[(($245)>>2)]=$247; | |
label = 52; break; | |
case 52: | |
label = 53; break; | |
case 53: | |
label = 54; break; | |
case 54: | |
var $251=$tbase; | |
var $252=(($251)|(0))==-1; | |
if ($252) { label = 55; break; } else { label = 64; break; } | |
case 55: | |
var $254=$asize; | |
var $255=(($254)>>>(0)) < 2147483647; | |
if ($255) { label = 56; break; } else { label = 63; break; } | |
case 56: | |
$br2=-1; | |
$end3=-1; | |
var $257=$asize; | |
var $258=_sbrk($257); | |
$br2=$258; | |
var $259=_sbrk(0); | |
$end3=$259; | |
var $260=$br2; | |
var $261=(($260)|(0))!=-1; | |
if ($261) { label = 57; break; } else { label = 62; break; } | |
case 57: | |
var $263=$end3; | |
var $264=(($263)|(0))!=-1; | |
if ($264) { label = 58; break; } else { label = 62; break; } | |
case 58: | |
var $266=$br2; | |
var $267=$end3; | |
var $268=(($266)>>>(0)) < (($267)>>>(0)); | |
if ($268) { label = 59; break; } else { label = 62; break; } | |
case 59: | |
var $270=$end3; | |
var $271=$br2; | |
var $272=$270; | |
var $273=$271; | |
var $274=((($272)-($273))|0); | |
$ssize4=$274; | |
var $275=$ssize4; | |
var $276=$3; | |
var $277=((($276)+(40))|0); | |
var $278=(($275)>>>(0)) > (($277)>>>(0)); | |
if ($278) { label = 60; break; } else { label = 61; break; } | |
case 60: | |
var $280=$br2; | |
$tbase=$280; | |
var $281=$ssize4; | |
$tsize=$281; | |
label = 61; break; | |
case 61: | |
label = 62; break; | |
case 62: | |
label = 63; break; | |
case 63: | |
label = 64; break; | |
case 64: | |
var $286=$tbase; | |
var $287=(($286)|(0))!=-1; | |
if ($287) { label = 65; break; } else { label = 103; break; } | |
case 65: | |
var $289=$tsize; | |
var $290=$2; | |
var $291=(($290+432)|0); | |
var $292=HEAP32[(($291)>>2)]; | |
var $293=((($292)+($289))|0); | |
HEAP32[(($291)>>2)]=$293; | |
var $294=$2; | |
var $295=(($294+436)|0); | |
var $296=HEAP32[(($295)>>2)]; | |
var $297=(($293)>>>(0)) > (($296)>>>(0)); | |
if ($297) { label = 66; break; } else { label = 67; break; } | |
case 66: | |
var $299=$2; | |
var $300=(($299+432)|0); | |
var $301=HEAP32[(($300)>>2)]; | |
var $302=$2; | |
var $303=(($302+436)|0); | |
HEAP32[(($303)>>2)]=$301; | |
label = 67; break; | |
case 67: | |
var $305=$2; | |
var $306=(($305+24)|0); | |
var $307=HEAP32[(($306)>>2)]; | |
var $308=(($307)|(0))!=0; | |
if ($308) { label = 75; break; } else { label = 68; break; } | |
case 68: | |
var $310=$2; | |
var $311=(($310+16)|0); | |
var $312=HEAP32[(($311)>>2)]; | |
var $313=(($312)|(0))==0; | |
if ($313) { label = 70; break; } else { label = 69; break; } | |
case 69: | |
var $315=$tbase; | |
var $316=$2; | |
var $317=(($316+16)|0); | |
var $318=HEAP32[(($317)>>2)]; | |
var $319=(($315)>>>(0)) < (($318)>>>(0)); | |
if ($319) { label = 70; break; } else { label = 71; break; } | |
case 70: | |
var $321=$tbase; | |
var $322=$2; | |
var $323=(($322+16)|0); | |
HEAP32[(($323)>>2)]=$321; | |
label = 71; break; | |
case 71: | |
var $325=$tbase; | |
var $326=$2; | |
var $327=(($326+448)|0); | |
var $328=(($327)|0); | |
HEAP32[(($328)>>2)]=$325; | |
var $329=$tsize; | |
var $330=$2; | |
var $331=(($330+448)|0); | |
var $332=(($331+4)|0); | |
HEAP32[(($332)>>2)]=$329; | |
var $333=$mmap_flag; | |
var $334=$2; | |
var $335=(($334+448)|0); | |
var $336=(($335+12)|0); | |
HEAP32[(($336)>>2)]=$333; | |
var $337=HEAP32[((((5243708)|0))>>2)]; | |
var $338=$2; | |
var $339=(($338+36)|0); | |
HEAP32[(($339)>>2)]=$337; | |
var $340=$2; | |
var $341=(($340+32)|0); | |
HEAP32[(($341)>>2)]=-1; | |
var $342=$2; | |
_init_bins($342); | |
var $343=$2; | |
var $344=(($343)|(0))==5244144; | |
if ($344) { label = 72; break; } else { label = 73; break; } | |
case 72: | |
var $346=$2; | |
var $347=$tbase; | |
var $348=$347; | |
var $349=$tsize; | |
var $350=((($349)-(40))|0); | |
_init_top($346, $348, $350); | |
label = 74; break; | |
case 73: | |
var $352=$2; | |
var $353=$352; | |
var $354=((($353)-(8))|0); | |
var $355=$354; | |
var $356=$355; | |
var $357=$2; | |
var $358=$357; | |
var $359=((($358)-(8))|0); | |
var $360=$359; | |
var $361=(($360+4)|0); | |
var $362=HEAP32[(($361)>>2)]; | |
var $363=$362 & -8; | |
var $364=(($356+$363)|0); | |
var $365=$364; | |
$mn=$365; | |
var $366=$2; | |
var $367=$mn; | |
var $368=$tbase; | |
var $369=$tsize; | |
var $370=(($368+$369)|0); | |
var $371=$mn; | |
var $372=$371; | |
var $373=$370; | |
var $374=$372; | |
var $375=((($373)-($374))|0); | |
var $376=((($375)-(40))|0); | |
_init_top($366, $367, $376); | |
label = 74; break; | |
case 74: | |
label = 100; break; | |
case 75: | |
var $379=$2; | |
var $380=(($379+448)|0); | |
$sp=$380; | |
label = 76; break; | |
case 76: | |
var $382=$sp; | |
var $383=(($382)|(0))!=0; | |
if ($383) { label = 77; break; } else { var $395 = 0;label = 78; break; } | |
case 77: | |
var $385=$tbase; | |
var $386=$sp; | |
var $387=(($386)|0); | |
var $388=HEAP32[(($387)>>2)]; | |
var $389=$sp; | |
var $390=(($389+4)|0); | |
var $391=HEAP32[(($390)>>2)]; | |
var $392=(($388+$391)|0); | |
var $393=(($385)|(0))!=(($392)|(0)); | |
var $395 = $393;label = 78; break; | |
case 78: | |
var $395; | |
if ($395) { label = 79; break; } else { label = 80; break; } | |
case 79: | |
var $397=$sp; | |
var $398=(($397+8)|0); | |
var $399=HEAP32[(($398)>>2)]; | |
$sp=$399; | |
label = 76; break; | |
case 80: | |
var $401=$sp; | |
var $402=(($401)|(0))!=0; | |
if ($402) { label = 81; break; } else { label = 86; break; } | |
case 81: | |
var $404=$sp; | |
var $405=(($404+12)|0); | |
var $406=HEAP32[(($405)>>2)]; | |
var $407=$406 & 8; | |
var $408=(($407)|(0))!=0; | |
if ($408) { label = 86; break; } else { label = 82; break; } | |
case 82: | |
var $410=$sp; | |
var $411=(($410+12)|0); | |
var $412=HEAP32[(($411)>>2)]; | |
var $413=$412 & 0; | |
var $414=$mmap_flag; | |
var $415=(($413)|(0))==(($414)|(0)); | |
if ($415) { label = 83; break; } else { label = 86; break; } | |
case 83: | |
var $417=$2; | |
var $418=(($417+24)|0); | |
var $419=HEAP32[(($418)>>2)]; | |
var $420=$419; | |
var $421=$sp; | |
var $422=(($421)|0); | |
var $423=HEAP32[(($422)>>2)]; | |
var $424=(($420)>>>(0)) >= (($423)>>>(0)); | |
if ($424) { label = 84; break; } else { label = 86; break; } | |
case 84: | |
var $426=$2; | |
var $427=(($426+24)|0); | |
var $428=HEAP32[(($427)>>2)]; | |
var $429=$428; | |
var $430=$sp; | |
var $431=(($430)|0); | |
var $432=HEAP32[(($431)>>2)]; | |
var $433=$sp; | |
var $434=(($433+4)|0); | |
var $435=HEAP32[(($434)>>2)]; | |
var $436=(($432+$435)|0); | |
var $437=(($429)>>>(0)) < (($436)>>>(0)); | |
if ($437) { label = 85; break; } else { label = 86; break; } | |
case 85: | |
var $439=$tsize; | |
var $440=$sp; | |
var $441=(($440+4)|0); | |
var $442=HEAP32[(($441)>>2)]; | |
var $443=((($442)+($439))|0); | |
HEAP32[(($441)>>2)]=$443; | |
var $444=$2; | |
var $445=$2; | |
var $446=(($445+24)|0); | |
var $447=HEAP32[(($446)>>2)]; | |
var $448=$2; | |
var $449=(($448+12)|0); | |
var $450=HEAP32[(($449)>>2)]; | |
var $451=$tsize; | |
var $452=((($450)+($451))|0); | |
_init_top($444, $447, $452); | |
label = 99; break; | |
case 86: | |
var $454=$tbase; | |
var $455=$2; | |
var $456=(($455+16)|0); | |
var $457=HEAP32[(($456)>>2)]; | |
var $458=(($454)>>>(0)) < (($457)>>>(0)); | |
if ($458) { label = 87; break; } else { label = 88; break; } | |
case 87: | |
var $460=$tbase; | |
var $461=$2; | |
var $462=(($461+16)|0); | |
HEAP32[(($462)>>2)]=$460; | |
label = 88; break; | |
case 88: | |
var $464=$2; | |
var $465=(($464+448)|0); | |
$sp=$465; | |
label = 89; break; | |
case 89: | |
var $467=$sp; | |
var $468=(($467)|(0))!=0; | |
if ($468) { label = 90; break; } else { var $478 = 0;label = 91; break; } | |
case 90: | |
var $470=$sp; | |
var $471=(($470)|0); | |
var $472=HEAP32[(($471)>>2)]; | |
var $473=$tbase; | |
var $474=$tsize; | |
var $475=(($473+$474)|0); | |
var $476=(($472)|(0))!=(($475)|(0)); | |
var $478 = $476;label = 91; break; | |
case 91: | |
var $478; | |
if ($478) { label = 92; break; } else { label = 93; break; } | |
case 92: | |
var $480=$sp; | |
var $481=(($480+8)|0); | |
var $482=HEAP32[(($481)>>2)]; | |
$sp=$482; | |
label = 89; break; | |
case 93: | |
var $484=$sp; | |
var $485=(($484)|(0))!=0; | |
if ($485) { label = 94; break; } else { label = 97; break; } | |
case 94: | |
var $487=$sp; | |
var $488=(($487+12)|0); | |
var $489=HEAP32[(($488)>>2)]; | |
var $490=$489 & 8; | |
var $491=(($490)|(0))!=0; | |
if ($491) { label = 97; break; } else { label = 95; break; } | |
case 95: | |
var $493=$sp; | |
var $494=(($493+12)|0); | |
var $495=HEAP32[(($494)>>2)]; | |
var $496=$495 & 0; | |
var $497=$mmap_flag; | |
var $498=(($496)|(0))==(($497)|(0)); | |
if ($498) { label = 96; break; } else { label = 97; break; } | |
case 96: | |
var $500=$sp; | |
var $501=(($500)|0); | |
var $502=HEAP32[(($501)>>2)]; | |
$oldbase=$502; | |
var $503=$tbase; | |
var $504=$sp; | |
var $505=(($504)|0); | |
HEAP32[(($505)>>2)]=$503; | |
var $506=$tsize; | |
var $507=$sp; | |
var $508=(($507+4)|0); | |
var $509=HEAP32[(($508)>>2)]; | |
var $510=((($509)+($506))|0); | |
HEAP32[(($508)>>2)]=$510; | |
var $511=$2; | |
var $512=$tbase; | |
var $513=$oldbase; | |
var $514=$3; | |
var $515=_prepend_alloc($511, $512, $513, $514); | |
$1=$515; | |
label = 104; break; | |
case 97: | |
var $517=$2; | |
var $518=$tbase; | |
var $519=$tsize; | |
var $520=$mmap_flag; | |
_add_segment($517, $518, $519, $520); | |
label = 98; break; | |
case 98: | |
label = 99; break; | |
case 99: | |
label = 100; break; | |
case 100: | |
var $524=$3; | |
var $525=$2; | |
var $526=(($525+12)|0); | |
var $527=HEAP32[(($526)>>2)]; | |
var $528=(($524)>>>(0)) < (($527)>>>(0)); | |
if ($528) { label = 101; break; } else { label = 102; break; } | |
case 101: | |
var $530=$3; | |
var $531=$2; | |
var $532=(($531+12)|0); | |
var $533=HEAP32[(($532)>>2)]; | |
var $534=((($533)-($530))|0); | |
HEAP32[(($532)>>2)]=$534; | |
$rsize=$534; | |
var $535=$2; | |
var $536=(($535+24)|0); | |
var $537=HEAP32[(($536)>>2)]; | |
$p=$537; | |
var $538=$p; | |
var $539=$538; | |
var $540=$3; | |
var $541=(($539+$540)|0); | |
var $542=$541; | |
var $543=$2; | |
var $544=(($543+24)|0); | |
HEAP32[(($544)>>2)]=$542; | |
$r=$542; | |
var $545=$rsize; | |
var $546=$545 | 1; | |
var $547=$r; | |
var $548=(($547+4)|0); | |
HEAP32[(($548)>>2)]=$546; | |
var $549=$3; | |
var $550=$549 | 1; | |
var $551=$550 | 2; | |
var $552=$p; | |
var $553=(($552+4)|0); | |
HEAP32[(($553)>>2)]=$551; | |
var $554=$p; | |
var $555=$554; | |
var $556=(($555+8)|0); | |
$1=$556; | |
label = 104; break; | |
case 102: | |
label = 103; break; | |
case 103: | |
var $559=___errno_location(); | |
HEAP32[(($559)>>2)]=12; | |
$1=0; | |
label = 104; break; | |
case 104: | |
var $561=$1; | |
return $561; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _calloc($n_elements, $elem_size) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $mem; | |
var $req; | |
$1=$n_elements; | |
$2=$elem_size; | |
$req=0; | |
var $3=$1; | |
var $4=(($3)|(0))!=0; | |
if ($4) { label = 3; break; } else { label = 7; break; } | |
case 3: | |
var $6=$1; | |
var $7=$2; | |
var $8=Math.imul($6,$7); | |
$req=$8; | |
var $9=$1; | |
var $10=$2; | |
var $11=$9 | $10; | |
var $12=$11 & -65536; | |
var $13=(($12)|(0))!=0; | |
if ($13) { label = 4; break; } else { label = 6; break; } | |
case 4: | |
var $15=$req; | |
var $16=$1; | |
var $17=Math.floor(((($15)>>>(0)))/((($16)>>>(0)))); | |
var $18=$2; | |
var $19=(($17)|(0))!=(($18)|(0)); | |
if ($19) { label = 5; break; } else { label = 6; break; } | |
case 5: | |
$req=-1; | |
label = 6; break; | |
case 6: | |
label = 7; break; | |
case 7: | |
var $23=$req; | |
var $24=_malloc($23); | |
$mem=$24; | |
var $25=$mem; | |
var $26=(($25)|(0))!=0; | |
if ($26) { label = 8; break; } else { label = 10; break; } | |
case 8: | |
var $28=$mem; | |
var $29=((($28)-(8))|0); | |
var $30=$29; | |
var $31=(($30+4)|0); | |
var $32=HEAP32[(($31)>>2)]; | |
var $33=$32 & 3; | |
var $34=(($33)|(0))==0; | |
if ($34) { label = 10; break; } else { label = 9; break; } | |
case 9: | |
var $36=$mem; | |
var $37=$req; | |
_memset($36, 0, $37); | |
label = 10; break; | |
case 10: | |
var $39=$mem; | |
return $39; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
Module["_calloc"] = _calloc; | |
function _init_mparams() { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $magic; | |
var $psize; | |
var $gsize; | |
var $1=HEAP32[((((5243708)|0))>>2)]; | |
var $2=(($1)|(0))==0; | |
if ($2) { label = 3; break; } else { label = 7; break; } | |
case 3: | |
var $4=_sysconf(8); | |
$psize=$4; | |
var $5=$psize; | |
$gsize=$5; | |
var $6=$gsize; | |
var $7=$gsize; | |
var $8=((($7)-(1))|0); | |
var $9=$6 & $8; | |
var $10=(($9)|(0))!=0; | |
if ($10) { label = 5; break; } else { label = 4; break; } | |
case 4: | |
var $12=$psize; | |
var $13=$psize; | |
var $14=((($13)-(1))|0); | |
var $15=$12 & $14; | |
var $16=(($15)|(0))!=0; | |
if ($16) { label = 5; break; } else { label = 6; break; } | |
case 5: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 6: | |
var $19=$gsize; | |
HEAP32[((((5243716)|0))>>2)]=$19; | |
var $20=$psize; | |
HEAP32[((((5243712)|0))>>2)]=$20; | |
HEAP32[((((5243720)|0))>>2)]=-1; | |
HEAP32[((((5243724)|0))>>2)]=2097152; | |
HEAP32[((((5243728)|0))>>2)]=0; | |
var $21=HEAP32[((((5243728)|0))>>2)]; | |
HEAP32[((((5244588)|0))>>2)]=$21; | |
var $22=_time(0); | |
var $23=$22 ^ 1431655765; | |
$magic=$23; | |
var $24=$magic; | |
var $25=$24 | 8; | |
$magic=$25; | |
var $26=$magic; | |
var $27=$26 & -8; | |
$magic=$27; | |
var $28=$magic; | |
HEAP32[((((5243708)|0))>>2)]=$28; | |
label = 7; break; | |
case 7: | |
return 1; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _segment_holding($m, $addr) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $sp; | |
$2=$m; | |
$3=$addr; | |
var $4=$2; | |
var $5=(($4+448)|0); | |
$sp=$5; | |
label = 3; break; | |
case 3: | |
var $7=$3; | |
var $8=$sp; | |
var $9=(($8)|0); | |
var $10=HEAP32[(($9)>>2)]; | |
var $11=(($7)>>>(0)) >= (($10)>>>(0)); | |
if ($11) { label = 4; break; } else { label = 6; break; } | |
case 4: | |
var $13=$3; | |
var $14=$sp; | |
var $15=(($14)|0); | |
var $16=HEAP32[(($15)>>2)]; | |
var $17=$sp; | |
var $18=(($17+4)|0); | |
var $19=HEAP32[(($18)>>2)]; | |
var $20=(($16+$19)|0); | |
var $21=(($13)>>>(0)) < (($20)>>>(0)); | |
if ($21) { label = 5; break; } else { label = 6; break; } | |
case 5: | |
var $23=$sp; | |
$1=$23; | |
label = 9; break; | |
case 6: | |
var $25=$sp; | |
var $26=(($25+8)|0); | |
var $27=HEAP32[(($26)>>2)]; | |
$sp=$27; | |
var $28=(($27)|(0))==0; | |
if ($28) { label = 7; break; } else { label = 8; break; } | |
case 7: | |
$1=0; | |
label = 9; break; | |
case 8: | |
label = 3; break; | |
case 9: | |
var $32=$1; | |
return $32; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _init_top($m, $p, $psize) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $offset; | |
$1=$m; | |
$2=$p; | |
$3=$psize; | |
var $4=$2; | |
var $5=$4; | |
var $6=(($5+8)|0); | |
var $7=$6; | |
var $8=$7 & 7; | |
var $9=(($8)|(0))==0; | |
if ($9) { label = 3; break; } else { label = 4; break; } | |
case 3: | |
var $20 = 0;label = 5; break; | |
case 4: | |
var $12=$2; | |
var $13=$12; | |
var $14=(($13+8)|0); | |
var $15=$14; | |
var $16=$15 & 7; | |
var $17=(((8)-($16))|0); | |
var $18=$17 & 7; | |
var $20 = $18;label = 5; break; | |
case 5: | |
var $20; | |
$offset=$20; | |
var $21=$2; | |
var $22=$21; | |
var $23=$offset; | |
var $24=(($22+$23)|0); | |
var $25=$24; | |
$2=$25; | |
var $26=$offset; | |
var $27=$3; | |
var $28=((($27)-($26))|0); | |
$3=$28; | |
var $29=$2; | |
var $30=$1; | |
var $31=(($30+24)|0); | |
HEAP32[(($31)>>2)]=$29; | |
var $32=$3; | |
var $33=$1; | |
var $34=(($33+12)|0); | |
HEAP32[(($34)>>2)]=$32; | |
var $35=$3; | |
var $36=$35 | 1; | |
var $37=$2; | |
var $38=(($37+4)|0); | |
HEAP32[(($38)>>2)]=$36; | |
var $39=$2; | |
var $40=$39; | |
var $41=$3; | |
var $42=(($40+$41)|0); | |
var $43=$42; | |
var $44=(($43+4)|0); | |
HEAP32[(($44)>>2)]=40; | |
var $45=HEAP32[((((5243724)|0))>>2)]; | |
var $46=$1; | |
var $47=(($46+28)|0); | |
HEAP32[(($47)>>2)]=$45; | |
return; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _mmap_alloc($m, $nb) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $mmsize; | |
var $fp; | |
var $mm; | |
var $offset; | |
var $psize; | |
var $p; | |
$2=$m; | |
$3=$nb; | |
var $4=$3; | |
var $5=((($4)+(24))|0); | |
var $6=((($5)+(7))|0); | |
var $7=HEAP32[((((5243712)|0))>>2)]; | |
var $8=((($7)-(1))|0); | |
var $9=((($6)+($8))|0); | |
var $10=HEAP32[((((5243712)|0))>>2)]; | |
var $11=((($10)-(1))|0); | |
var $12=$11 ^ -1; | |
var $13=$9 & $12; | |
$mmsize=$13; | |
var $14=$2; | |
var $15=(($14+440)|0); | |
var $16=HEAP32[(($15)>>2)]; | |
var $17=(($16)|(0))!=0; | |
if ($17) { label = 3; break; } else { label = 7; break; } | |
case 3: | |
var $19=$2; | |
var $20=(($19+432)|0); | |
var $21=HEAP32[(($20)>>2)]; | |
var $22=$mmsize; | |
var $23=((($21)+($22))|0); | |
$fp=$23; | |
var $24=$fp; | |
var $25=$2; | |
var $26=(($25+432)|0); | |
var $27=HEAP32[(($26)>>2)]; | |
var $28=(($24)>>>(0)) <= (($27)>>>(0)); | |
if ($28) { label = 5; break; } else { label = 4; break; } | |
case 4: | |
var $30=$fp; | |
var $31=$2; | |
var $32=(($31+440)|0); | |
var $33=HEAP32[(($32)>>2)]; | |
var $34=(($30)>>>(0)) > (($33)>>>(0)); | |
if ($34) { label = 5; break; } else { label = 6; break; } | |
case 5: | |
$1=0; | |
label = 20; break; | |
case 6: | |
label = 7; break; | |
case 7: | |
var $38=$mmsize; | |
var $39=$3; | |
var $40=(($38)>>>(0)) > (($39)>>>(0)); | |
if ($40) { label = 8; break; } else { label = 19; break; } | |
case 8: | |
$mm=-1; | |
var $42=$mm; | |
var $43=(($42)|(0))!=-1; | |
if ($43) { label = 9; break; } else { label = 18; break; } | |
case 9: | |
var $45=$mm; | |
var $46=(($45+8)|0); | |
var $47=$46; | |
var $48=$47 & 7; | |
var $49=(($48)|(0))==0; | |
if ($49) { label = 10; break; } else { label = 11; break; } | |
case 10: | |
var $59 = 0;label = 12; break; | |
case 11: | |
var $52=$mm; | |
var $53=(($52+8)|0); | |
var $54=$53; | |
var $55=$54 & 7; | |
var $56=(((8)-($55))|0); | |
var $57=$56 & 7; | |
var $59 = $57;label = 12; break; | |
case 12: | |
var $59; | |
$offset=$59; | |
var $60=$mmsize; | |
var $61=$offset; | |
var $62=((($60)-($61))|0); | |
var $63=((($62)-(16))|0); | |
$psize=$63; | |
var $64=$mm; | |
var $65=$offset; | |
var $66=(($64+$65)|0); | |
var $67=$66; | |
$p=$67; | |
var $68=$offset; | |
var $69=$p; | |
var $70=(($69)|0); | |
HEAP32[(($70)>>2)]=$68; | |
var $71=$psize; | |
var $72=$p; | |
var $73=(($72+4)|0); | |
HEAP32[(($73)>>2)]=$71; | |
var $74=$p; | |
var $75=$74; | |
var $76=$psize; | |
var $77=(($75+$76)|0); | |
var $78=$77; | |
var $79=(($78+4)|0); | |
HEAP32[(($79)>>2)]=7; | |
var $80=$p; | |
var $81=$80; | |
var $82=$psize; | |
var $83=((($82)+(4))|0); | |
var $84=(($81+$83)|0); | |
var $85=$84; | |
var $86=(($85+4)|0); | |
HEAP32[(($86)>>2)]=0; | |
var $87=$2; | |
var $88=(($87+16)|0); | |
var $89=HEAP32[(($88)>>2)]; | |
var $90=(($89)|(0))==0; | |
if ($90) { label = 14; break; } else { label = 13; break; } | |
case 13: | |
var $92=$mm; | |
var $93=$2; | |
var $94=(($93+16)|0); | |
var $95=HEAP32[(($94)>>2)]; | |
var $96=(($92)>>>(0)) < (($95)>>>(0)); | |
if ($96) { label = 14; break; } else { label = 15; break; } | |
case 14: | |
var $98=$mm; | |
var $99=$2; | |
var $100=(($99+16)|0); | |
HEAP32[(($100)>>2)]=$98; | |
label = 15; break; | |
case 15: | |
var $102=$mmsize; | |
var $103=$2; | |
var $104=(($103+432)|0); | |
var $105=HEAP32[(($104)>>2)]; | |
var $106=((($105)+($102))|0); | |
HEAP32[(($104)>>2)]=$106; | |
var $107=$2; | |
var $108=(($107+436)|0); | |
var $109=HEAP32[(($108)>>2)]; | |
var $110=(($106)>>>(0)) > (($109)>>>(0)); | |
if ($110) { label = 16; break; } else { label = 17; break; } | |
case 16: | |
var $112=$2; | |
var $113=(($112+432)|0); | |
var $114=HEAP32[(($113)>>2)]; | |
var $115=$2; | |
var $116=(($115+436)|0); | |
HEAP32[(($116)>>2)]=$114; | |
label = 17; break; | |
case 17: | |
var $118=$p; | |
var $119=$118; | |
var $120=(($119+8)|0); | |
$1=$120; | |
label = 20; break; | |
case 18: | |
label = 19; break; | |
case 19: | |
$1=0; | |
label = 20; break; | |
case 20: | |
var $124=$1; | |
return $124; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _init_bins($m) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $i; | |
var $bin; | |
$1=$m; | |
$i=0; | |
label = 3; break; | |
case 3: | |
var $3=$i; | |
var $4=(($3)>>>(0)) < 32; | |
if ($4) { label = 4; break; } else { label = 6; break; } | |
case 4: | |
var $6=$i; | |
var $7=$6 << 1; | |
var $8=$1; | |
var $9=(($8+40)|0); | |
var $10=(($9+($7<<2))|0); | |
var $11=$10; | |
var $12=$11; | |
$bin=$12; | |
var $13=$bin; | |
var $14=$bin; | |
var $15=(($14+12)|0); | |
HEAP32[(($15)>>2)]=$13; | |
var $16=$bin; | |
var $17=(($16+8)|0); | |
HEAP32[(($17)>>2)]=$13; | |
label = 5; break; | |
case 5: | |
var $19=$i; | |
var $20=((($19)+(1))|0); | |
$i=$20; | |
label = 3; break; | |
case 6: | |
return; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _prepend_alloc($m, $newbase, $oldbase, $nb) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $4; | |
var $p; | |
var $oldfirst; | |
var $psize; | |
var $q; | |
var $qsize; | |
var $tsize; | |
var $dsize; | |
var $nsize; | |
var $F; | |
var $B; | |
var $I; | |
var $TP; | |
var $XP; | |
var $R; | |
var $F1; | |
var $RP; | |
var $CP; | |
var $H; | |
var $C0; | |
var $C1; | |
var $I2; | |
var $B3; | |
var $F4; | |
var $TP5; | |
var $H6; | |
var $I7; | |
var $X; | |
var $Y; | |
var $N; | |
var $K; | |
var $T; | |
var $K8; | |
var $C; | |
var $F9; | |
$1=$m; | |
$2=$newbase; | |
$3=$oldbase; | |
$4=$nb; | |
var $5=$2; | |
var $6=$2; | |
var $7=(($6+8)|0); | |
var $8=$7; | |
var $9=$8 & 7; | |
var $10=(($9)|(0))==0; | |
if ($10) { label = 3; break; } else { label = 4; break; } | |
case 3: | |
var $20 = 0;label = 5; break; | |
case 4: | |
var $13=$2; | |
var $14=(($13+8)|0); | |
var $15=$14; | |
var $16=$15 & 7; | |
var $17=(((8)-($16))|0); | |
var $18=$17 & 7; | |
var $20 = $18;label = 5; break; | |
case 5: | |
var $20; | |
var $21=(($5+$20)|0); | |
var $22=$21; | |
$p=$22; | |
var $23=$3; | |
var $24=$3; | |
var $25=(($24+8)|0); | |
var $26=$25; | |
var $27=$26 & 7; | |
var $28=(($27)|(0))==0; | |
if ($28) { label = 6; break; } else { label = 7; break; } | |
case 6: | |
var $38 = 0;label = 8; break; | |
case 7: | |
var $31=$3; | |
var $32=(($31+8)|0); | |
var $33=$32; | |
var $34=$33 & 7; | |
var $35=(((8)-($34))|0); | |
var $36=$35 & 7; | |
var $38 = $36;label = 8; break; | |
case 8: | |
var $38; | |
var $39=(($23+$38)|0); | |
var $40=$39; | |
$oldfirst=$40; | |
var $41=$oldfirst; | |
var $42=$41; | |
var $43=$p; | |
var $44=$43; | |
var $45=$42; | |
var $46=$44; | |
var $47=((($45)-($46))|0); | |
$psize=$47; | |
var $48=$p; | |
var $49=$48; | |
var $50=$4; | |
var $51=(($49+$50)|0); | |
var $52=$51; | |
$q=$52; | |
var $53=$psize; | |
var $54=$4; | |
var $55=((($53)-($54))|0); | |
$qsize=$55; | |
var $56=$4; | |
var $57=$56 | 1; | |
var $58=$57 | 2; | |
var $59=$p; | |
var $60=(($59+4)|0); | |
HEAP32[(($60)>>2)]=$58; | |
var $61=$oldfirst; | |
var $62=$1; | |
var $63=(($62+24)|0); | |
var $64=HEAP32[(($63)>>2)]; | |
var $65=(($61)|(0))==(($64)|(0)); | |
if ($65) { label = 9; break; } else { label = 10; break; } | |
case 9: | |
var $67=$qsize; | |
var $68=$1; | |
var $69=(($68+12)|0); | |
var $70=HEAP32[(($69)>>2)]; | |
var $71=((($70)+($67))|0); | |
HEAP32[(($69)>>2)]=$71; | |
$tsize=$71; | |
var $72=$q; | |
var $73=$1; | |
var $74=(($73+24)|0); | |
HEAP32[(($74)>>2)]=$72; | |
var $75=$tsize; | |
var $76=$75 | 1; | |
var $77=$q; | |
var $78=(($77+4)|0); | |
HEAP32[(($78)>>2)]=$76; | |
label = 119; break; | |
case 10: | |
var $80=$oldfirst; | |
var $81=$1; | |
var $82=(($81+20)|0); | |
var $83=HEAP32[(($82)>>2)]; | |
var $84=(($80)|(0))==(($83)|(0)); | |
if ($84) { label = 11; break; } else { label = 12; break; } | |
case 11: | |
var $86=$qsize; | |
var $87=$1; | |
var $88=(($87+8)|0); | |
var $89=HEAP32[(($88)>>2)]; | |
var $90=((($89)+($86))|0); | |
HEAP32[(($88)>>2)]=$90; | |
$dsize=$90; | |
var $91=$q; | |
var $92=$1; | |
var $93=(($92+20)|0); | |
HEAP32[(($93)>>2)]=$91; | |
var $94=$dsize; | |
var $95=$94 | 1; | |
var $96=$q; | |
var $97=(($96+4)|0); | |
HEAP32[(($97)>>2)]=$95; | |
var $98=$dsize; | |
var $99=$q; | |
var $100=$99; | |
var $101=$dsize; | |
var $102=(($100+$101)|0); | |
var $103=$102; | |
var $104=(($103)|0); | |
HEAP32[(($104)>>2)]=$98; | |
label = 118; break; | |
case 12: | |
var $106=$oldfirst; | |
var $107=(($106+4)|0); | |
var $108=HEAP32[(($107)>>2)]; | |
var $109=$108 & 3; | |
var $110=(($109)|(0))!=1; | |
if ($110) { label = 82; break; } else { label = 13; break; } | |
case 13: | |
var $112=$oldfirst; | |
var $113=(($112+4)|0); | |
var $114=HEAP32[(($113)>>2)]; | |
var $115=$114 & -8; | |
$nsize=$115; | |
var $116=$nsize; | |
var $117=$116 >>> 3; | |
var $118=(($117)>>>(0)) < 32; | |
if ($118) { label = 14; break; } else { label = 32; break; } | |
case 14: | |
var $120=$oldfirst; | |
var $121=(($120+8)|0); | |
var $122=HEAP32[(($121)>>2)]; | |
$F=$122; | |
var $123=$oldfirst; | |
var $124=(($123+12)|0); | |
var $125=HEAP32[(($124)>>2)]; | |
$B=$125; | |
var $126=$nsize; | |
var $127=$126 >>> 3; | |
$I=$127; | |
var $128=$F; | |
var $129=$I; | |
var $130=$129 << 1; | |
var $131=$1; | |
var $132=(($131+40)|0); | |
var $133=(($132+($130<<2))|0); | |
var $134=$133; | |
var $135=$134; | |
var $136=(($128)|(0))==(($135)|(0)); | |
if ($136) { var $153 = 1;label = 18; break; } else { label = 15; break; } | |
case 15: | |
var $138=$F; | |
var $139=$138; | |
var $140=$1; | |
var $141=(($140+16)|0); | |
var $142=HEAP32[(($141)>>2)]; | |
var $143=(($139)>>>(0)) >= (($142)>>>(0)); | |
if ($143) { label = 16; break; } else { var $151 = 0;label = 17; break; } | |
case 16: | |
var $145=$F; | |
var $146=(($145+12)|0); | |
var $147=HEAP32[(($146)>>2)]; | |
var $148=$oldfirst; | |
var $149=(($147)|(0))==(($148)|(0)); | |
var $151 = $149;label = 17; break; | |
case 17: | |
var $151; | |
var $153 = $151;label = 18; break; | |
case 18: | |
var $153; | |
var $154=(($153)&(1)); | |
var $155=($154); | |
var $156=(($155)|(0))!=0; | |
if ($156) { label = 19; break; } else { label = 30; break; } | |
case 19: | |
var $158=$B; | |
var $159=$F; | |
var $160=(($158)|(0))==(($159)|(0)); | |
if ($160) { label = 20; break; } else { label = 21; break; } | |
case 20: | |
var $162=$I; | |
var $163=1 << $162; | |
var $164=$163 ^ -1; | |
var $165=$1; | |
var $166=(($165)|0); | |
var $167=HEAP32[(($166)>>2)]; | |
var $168=$167 & $164; | |
HEAP32[(($166)>>2)]=$168; | |
label = 29; break; | |
case 21: | |
var $170=$B; | |
var $171=$I; | |
var $172=$171 << 1; | |
var $173=$1; | |
var $174=(($173+40)|0); | |
var $175=(($174+($172<<2))|0); | |
var $176=$175; | |
var $177=$176; | |
var $178=(($170)|(0))==(($177)|(0)); | |
if ($178) { var $195 = 1;label = 25; break; } else { label = 22; break; } | |
case 22: | |
var $180=$B; | |
var $181=$180; | |
var $182=$1; | |
var $183=(($182+16)|0); | |
var $184=HEAP32[(($183)>>2)]; | |
var $185=(($181)>>>(0)) >= (($184)>>>(0)); | |
if ($185) { label = 23; break; } else { var $193 = 0;label = 24; break; } | |
case 23: | |
var $187=$B; | |
var $188=(($187+8)|0); | |
var $189=HEAP32[(($188)>>2)]; | |
var $190=$oldfirst; | |
var $191=(($189)|(0))==(($190)|(0)); | |
var $193 = $191;label = 24; break; | |
case 24: | |
var $193; | |
var $195 = $193;label = 25; break; | |
case 25: | |
var $195; | |
var $196=(($195)&(1)); | |
var $197=($196); | |
var $198=(($197)|(0))!=0; | |
if ($198) { label = 26; break; } else { label = 27; break; } | |
case 26: | |
var $200=$B; | |
var $201=$F; | |
var $202=(($201+12)|0); | |
HEAP32[(($202)>>2)]=$200; | |
var $203=$F; | |
var $204=$B; | |
var $205=(($204+8)|0); | |
HEAP32[(($205)>>2)]=$203; | |
label = 28; break; | |
case 27: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 28: | |
label = 29; break; | |
case 29: | |
label = 31; break; | |
case 30: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 31: | |
label = 81; break; | |
case 32: | |
var $212=$oldfirst; | |
var $213=$212; | |
$TP=$213; | |
var $214=$TP; | |
var $215=(($214+24)|0); | |
var $216=HEAP32[(($215)>>2)]; | |
$XP=$216; | |
var $217=$TP; | |
var $218=(($217+12)|0); | |
var $219=HEAP32[(($218)>>2)]; | |
var $220=$TP; | |
var $221=(($219)|(0))!=(($220)|(0)); | |
if ($221) { label = 33; break; } else { label = 40; break; } | |
case 33: | |
var $223=$TP; | |
var $224=(($223+8)|0); | |
var $225=HEAP32[(($224)>>2)]; | |
$F1=$225; | |
var $226=$TP; | |
var $227=(($226+12)|0); | |
var $228=HEAP32[(($227)>>2)]; | |
$R=$228; | |
var $229=$F1; | |
var $230=$229; | |
var $231=$1; | |
var $232=(($231+16)|0); | |
var $233=HEAP32[(($232)>>2)]; | |
var $234=(($230)>>>(0)) >= (($233)>>>(0)); | |
if ($234) { label = 34; break; } else { var $248 = 0;label = 36; break; } | |
case 34: | |
var $236=$F1; | |
var $237=(($236+12)|0); | |
var $238=HEAP32[(($237)>>2)]; | |
var $239=$TP; | |
var $240=(($238)|(0))==(($239)|(0)); | |
if ($240) { label = 35; break; } else { var $248 = 0;label = 36; break; } | |
case 35: | |
var $242=$R; | |
var $243=(($242+8)|0); | |
var $244=HEAP32[(($243)>>2)]; | |
var $245=$TP; | |
var $246=(($244)|(0))==(($245)|(0)); | |
var $248 = $246;label = 36; break; | |
case 36: | |
var $248; | |
var $249=(($248)&(1)); | |
var $250=($249); | |
var $251=(($250)|(0))!=0; | |
if ($251) { label = 37; break; } else { label = 38; break; } | |
case 37: | |
var $253=$R; | |
var $254=$F1; | |
var $255=(($254+12)|0); | |
HEAP32[(($255)>>2)]=$253; | |
var $256=$F1; | |
var $257=$R; | |
var $258=(($257+8)|0); | |
HEAP32[(($258)>>2)]=$256; | |
label = 39; break; | |
case 38: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 39: | |
label = 52; break; | |
case 40: | |
var $262=$TP; | |
var $263=(($262+16)|0); | |
var $264=(($263+4)|0); | |
$RP=$264; | |
var $265=HEAP32[(($264)>>2)]; | |
$R=$265; | |
var $266=(($265)|(0))!=0; | |
if ($266) { label = 42; break; } else { label = 41; break; } | |
case 41: | |
var $268=$TP; | |
var $269=(($268+16)|0); | |
var $270=(($269)|0); | |
$RP=$270; | |
var $271=HEAP32[(($270)>>2)]; | |
$R=$271; | |
var $272=(($271)|(0))!=0; | |
if ($272) { label = 42; break; } else { label = 51; break; } | |
case 42: | |
label = 43; break; | |
case 43: | |
var $275=$R; | |
var $276=(($275+16)|0); | |
var $277=(($276+4)|0); | |
$CP=$277; | |
var $278=HEAP32[(($277)>>2)]; | |
var $279=(($278)|(0))!=0; | |
if ($279) { var $287 = 1;label = 45; break; } else { label = 44; break; } | |
case 44: | |
var $281=$R; | |
var $282=(($281+16)|0); | |
var $283=(($282)|0); | |
$CP=$283; | |
var $284=HEAP32[(($283)>>2)]; | |
var $285=(($284)|(0))!=0; | |
var $287 = $285;label = 45; break; | |
case 45: | |
var $287; | |
if ($287) { label = 46; break; } else { label = 47; break; } | |
case 46: | |
var $289=$CP; | |
$RP=$289; | |
var $290=HEAP32[(($289)>>2)]; | |
$R=$290; | |
label = 43; break; | |
case 47: | |
var $292=$RP; | |
var $293=$292; | |
var $294=$1; | |
var $295=(($294+16)|0); | |
var $296=HEAP32[(($295)>>2)]; | |
var $297=(($293)>>>(0)) >= (($296)>>>(0)); | |
var $298=(($297)&(1)); | |
var $299=($298); | |
var $300=(($299)|(0))!=0; | |
if ($300) { label = 48; break; } else { label = 49; break; } | |
case 48: | |
var $302=$RP; | |
HEAP32[(($302)>>2)]=0; | |
label = 50; break; | |
case 49: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 50: | |
label = 51; break; | |
case 51: | |
label = 52; break; | |
case 52: | |
var $307=$XP; | |
var $308=(($307)|(0))!=0; | |
if ($308) { label = 53; break; } else { label = 80; break; } | |
case 53: | |
var $310=$TP; | |
var $311=(($310+28)|0); | |
var $312=HEAP32[(($311)>>2)]; | |
var $313=$1; | |
var $314=(($313+304)|0); | |
var $315=(($314+($312<<2))|0); | |
$H=$315; | |
var $316=$TP; | |
var $317=$H; | |
var $318=HEAP32[(($317)>>2)]; | |
var $319=(($316)|(0))==(($318)|(0)); | |
if ($319) { label = 54; break; } else { label = 57; break; } | |
case 54: | |
var $321=$R; | |
var $322=$H; | |
HEAP32[(($322)>>2)]=$321; | |
var $323=(($321)|(0))==0; | |
if ($323) { label = 55; break; } else { label = 56; break; } | |
case 55: | |
var $325=$TP; | |
var $326=(($325+28)|0); | |
var $327=HEAP32[(($326)>>2)]; | |
var $328=1 << $327; | |
var $329=$328 ^ -1; | |
var $330=$1; | |
var $331=(($330+4)|0); | |
var $332=HEAP32[(($331)>>2)]; | |
var $333=$332 & $329; | |
HEAP32[(($331)>>2)]=$333; | |
label = 56; break; | |
case 56: | |
label = 64; break; | |
case 57: | |
var $336=$XP; | |
var $337=$336; | |
var $338=$1; | |
var $339=(($338+16)|0); | |
var $340=HEAP32[(($339)>>2)]; | |
var $341=(($337)>>>(0)) >= (($340)>>>(0)); | |
var $342=(($341)&(1)); | |
var $343=($342); | |
var $344=(($343)|(0))!=0; | |
if ($344) { label = 58; break; } else { label = 62; break; } | |
case 58: | |
var $346=$XP; | |
var $347=(($346+16)|0); | |
var $348=(($347)|0); | |
var $349=HEAP32[(($348)>>2)]; | |
var $350=$TP; | |
var $351=(($349)|(0))==(($350)|(0)); | |
if ($351) { label = 59; break; } else { label = 60; break; } | |
case 59: | |
var $353=$R; | |
var $354=$XP; | |
var $355=(($354+16)|0); | |
var $356=(($355)|0); | |
HEAP32[(($356)>>2)]=$353; | |
label = 61; break; | |
case 60: | |
var $358=$R; | |
var $359=$XP; | |
var $360=(($359+16)|0); | |
var $361=(($360+4)|0); | |
HEAP32[(($361)>>2)]=$358; | |
label = 61; break; | |
case 61: | |
label = 63; break; | |
case 62: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 63: | |
label = 64; break; | |
case 64: | |
var $366=$R; | |
var $367=(($366)|(0))!=0; | |
if ($367) { label = 65; break; } else { label = 79; break; } | |
case 65: | |
var $369=$R; | |
var $370=$369; | |
var $371=$1; | |
var $372=(($371+16)|0); | |
var $373=HEAP32[(($372)>>2)]; | |
var $374=(($370)>>>(0)) >= (($373)>>>(0)); | |
var $375=(($374)&(1)); | |
var $376=($375); | |
var $377=(($376)|(0))!=0; | |
if ($377) { label = 66; break; } else { label = 77; break; } | |
case 66: | |
var $379=$XP; | |
var $380=$R; | |
var $381=(($380+24)|0); | |
HEAP32[(($381)>>2)]=$379; | |
var $382=$TP; | |
var $383=(($382+16)|0); | |
var $384=(($383)|0); | |
var $385=HEAP32[(($384)>>2)]; | |
$C0=$385; | |
var $386=(($385)|(0))!=0; | |
if ($386) { label = 67; break; } else { label = 71; break; } | |
case 67: | |
var $388=$C0; | |
var $389=$388; | |
var $390=$1; | |
var $391=(($390+16)|0); | |
var $392=HEAP32[(($391)>>2)]; | |
var $393=(($389)>>>(0)) >= (($392)>>>(0)); | |
var $394=(($393)&(1)); | |
var $395=($394); | |
var $396=(($395)|(0))!=0; | |
if ($396) { label = 68; break; } else { label = 69; break; } | |
case 68: | |
var $398=$C0; | |
var $399=$R; | |
var $400=(($399+16)|0); | |
var $401=(($400)|0); | |
HEAP32[(($401)>>2)]=$398; | |
var $402=$R; | |
var $403=$C0; | |
var $404=(($403+24)|0); | |
HEAP32[(($404)>>2)]=$402; | |
label = 70; break; | |
case 69: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 70: | |
label = 71; break; | |
case 71: | |
var $408=$TP; | |
var $409=(($408+16)|0); | |
var $410=(($409+4)|0); | |
var $411=HEAP32[(($410)>>2)]; | |
$C1=$411; | |
var $412=(($411)|(0))!=0; | |
if ($412) { label = 72; break; } else { label = 76; break; } | |
case 72: | |
var $414=$C1; | |
var $415=$414; | |
var $416=$1; | |
var $417=(($416+16)|0); | |
var $418=HEAP32[(($417)>>2)]; | |
var $419=(($415)>>>(0)) >= (($418)>>>(0)); | |
var $420=(($419)&(1)); | |
var $421=($420); | |
var $422=(($421)|(0))!=0; | |
if ($422) { label = 73; break; } else { label = 74; break; } | |
case 73: | |
var $424=$C1; | |
var $425=$R; | |
var $426=(($425+16)|0); | |
var $427=(($426+4)|0); | |
HEAP32[(($427)>>2)]=$424; | |
var $428=$R; | |
var $429=$C1; | |
var $430=(($429+24)|0); | |
HEAP32[(($430)>>2)]=$428; | |
label = 75; break; | |
case 74: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 75: | |
label = 76; break; | |
case 76: | |
label = 78; break; | |
case 77: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 78: | |
label = 79; break; | |
case 79: | |
label = 80; break; | |
case 80: | |
label = 81; break; | |
case 81: | |
var $439=$oldfirst; | |
var $440=$439; | |
var $441=$nsize; | |
var $442=(($440+$441)|0); | |
var $443=$442; | |
$oldfirst=$443; | |
var $444=$nsize; | |
var $445=$qsize; | |
var $446=((($445)+($444))|0); | |
$qsize=$446; | |
label = 82; break; | |
case 82: | |
var $448=$oldfirst; | |
var $449=(($448+4)|0); | |
var $450=HEAP32[(($449)>>2)]; | |
var $451=$450 & -2; | |
HEAP32[(($449)>>2)]=$451; | |
var $452=$qsize; | |
var $453=$452 | 1; | |
var $454=$q; | |
var $455=(($454+4)|0); | |
HEAP32[(($455)>>2)]=$453; | |
var $456=$qsize; | |
var $457=$q; | |
var $458=$457; | |
var $459=$qsize; | |
var $460=(($458+$459)|0); | |
var $461=$460; | |
var $462=(($461)|0); | |
HEAP32[(($462)>>2)]=$456; | |
var $463=$qsize; | |
var $464=$463 >>> 3; | |
var $465=(($464)>>>(0)) < 32; | |
if ($465) { label = 83; break; } else { label = 90; break; } | |
case 83: | |
var $467=$qsize; | |
var $468=$467 >>> 3; | |
$I2=$468; | |
var $469=$I2; | |
var $470=$469 << 1; | |
var $471=$1; | |
var $472=(($471+40)|0); | |
var $473=(($472+($470<<2))|0); | |
var $474=$473; | |
var $475=$474; | |
$B3=$475; | |
var $476=$B3; | |
$F4=$476; | |
var $477=$1; | |
var $478=(($477)|0); | |
var $479=HEAP32[(($478)>>2)]; | |
var $480=$I2; | |
var $481=1 << $480; | |
var $482=$479 & $481; | |
var $483=(($482)|(0))!=0; | |
if ($483) { label = 85; break; } else { label = 84; break; } | |
case 84: | |
var $485=$I2; | |
var $486=1 << $485; | |
var $487=$1; | |
var $488=(($487)|0); | |
var $489=HEAP32[(($488)>>2)]; | |
var $490=$489 | $486; | |
HEAP32[(($488)>>2)]=$490; | |
label = 89; break; | |
case 85: | |
var $492=$B3; | |
var $493=(($492+8)|0); | |
var $494=HEAP32[(($493)>>2)]; | |
var $495=$494; | |
var $496=$1; | |
var $497=(($496+16)|0); | |
var $498=HEAP32[(($497)>>2)]; | |
var $499=(($495)>>>(0)) >= (($498)>>>(0)); | |
var $500=(($499)&(1)); | |
var $501=($500); | |
var $502=(($501)|(0))!=0; | |
if ($502) { label = 86; break; } else { label = 87; break; } | |
case 86: | |
var $504=$B3; | |
var $505=(($504+8)|0); | |
var $506=HEAP32[(($505)>>2)]; | |
$F4=$506; | |
label = 88; break; | |
case 87: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 88: | |
label = 89; break; | |
case 89: | |
var $510=$q; | |
var $511=$B3; | |
var $512=(($511+8)|0); | |
HEAP32[(($512)>>2)]=$510; | |
var $513=$q; | |
var $514=$F4; | |
var $515=(($514+12)|0); | |
HEAP32[(($515)>>2)]=$513; | |
var $516=$F4; | |
var $517=$q; | |
var $518=(($517+8)|0); | |
HEAP32[(($518)>>2)]=$516; | |
var $519=$B3; | |
var $520=$q; | |
var $521=(($520+12)|0); | |
HEAP32[(($521)>>2)]=$519; | |
label = 117; break; | |
case 90: | |
var $523=$q; | |
var $524=$523; | |
$TP5=$524; | |
var $525=$qsize; | |
var $526=$525 >>> 8; | |
$X=$526; | |
var $527=$X; | |
var $528=(($527)|(0))==0; | |
if ($528) { label = 91; break; } else { label = 92; break; } | |
case 91: | |
$I7=0; | |
label = 96; break; | |
case 92: | |
var $531=$X; | |
var $532=(($531)>>>(0)) > 65535; | |
if ($532) { label = 93; break; } else { label = 94; break; } | |
case 93: | |
$I7=31; | |
label = 95; break; | |
case 94: | |
var $535=$X; | |
$Y=$535; | |
var $536=$Y; | |
var $537=((($536)-(256))|0); | |
var $538=$537 >>> 16; | |
var $539=$538 & 8; | |
$N=$539; | |
var $540=$N; | |
var $541=$Y; | |
var $542=$541 << $540; | |
$Y=$542; | |
var $543=((($542)-(4096))|0); | |
var $544=$543 >>> 16; | |
var $545=$544 & 4; | |
$K=$545; | |
var $546=$K; | |
var $547=$N; | |
var $548=((($547)+($546))|0); | |
$N=$548; | |
var $549=$K; | |
var $550=$Y; | |
var $551=$550 << $549; | |
$Y=$551; | |
var $552=((($551)-(16384))|0); | |
var $553=$552 >>> 16; | |
var $554=$553 & 2; | |
$K=$554; | |
var $555=$N; | |
var $556=((($555)+($554))|0); | |
$N=$556; | |
var $557=$N; | |
var $558=(((14)-($557))|0); | |
var $559=$K; | |
var $560=$Y; | |
var $561=$560 << $559; | |
$Y=$561; | |
var $562=$561 >>> 15; | |
var $563=((($558)+($562))|0); | |
$K=$563; | |
var $564=$K; | |
var $565=$564 << 1; | |
var $566=$qsize; | |
var $567=$K; | |
var $568=((($567)+(7))|0); | |
var $569=$566 >>> (($568)>>>(0)); | |
var $570=$569 & 1; | |
var $571=((($565)+($570))|0); | |
$I7=$571; | |
label = 95; break; | |
case 95: | |
label = 96; break; | |
case 96: | |
var $574=$I7; | |
var $575=$1; | |
var $576=(($575+304)|0); | |
var $577=(($576+($574<<2))|0); | |
$H6=$577; | |
var $578=$I7; | |
var $579=$TP5; | |
var $580=(($579+28)|0); | |
HEAP32[(($580)>>2)]=$578; | |
var $581=$TP5; | |
var $582=(($581+16)|0); | |
var $583=(($582+4)|0); | |
HEAP32[(($583)>>2)]=0; | |
var $584=$TP5; | |
var $585=(($584+16)|0); | |
var $586=(($585)|0); | |
HEAP32[(($586)>>2)]=0; | |
var $587=$1; | |
var $588=(($587+4)|0); | |
var $589=HEAP32[(($588)>>2)]; | |
var $590=$I7; | |
var $591=1 << $590; | |
var $592=$589 & $591; | |
var $593=(($592)|(0))!=0; | |
if ($593) { label = 98; break; } else { label = 97; break; } | |
case 97: | |
var $595=$I7; | |
var $596=1 << $595; | |
var $597=$1; | |
var $598=(($597+4)|0); | |
var $599=HEAP32[(($598)>>2)]; | |
var $600=$599 | $596; | |
HEAP32[(($598)>>2)]=$600; | |
var $601=$TP5; | |
var $602=$H6; | |
HEAP32[(($602)>>2)]=$601; | |
var $603=$H6; | |
var $604=$603; | |
var $605=$TP5; | |
var $606=(($605+24)|0); | |
HEAP32[(($606)>>2)]=$604; | |
var $607=$TP5; | |
var $608=$TP5; | |
var $609=(($608+12)|0); | |
HEAP32[(($609)>>2)]=$607; | |
var $610=$TP5; | |
var $611=(($610+8)|0); | |
HEAP32[(($611)>>2)]=$607; | |
label = 116; break; | |
case 98: | |
var $613=$H6; | |
var $614=HEAP32[(($613)>>2)]; | |
$T=$614; | |
var $615=$qsize; | |
var $616=$I7; | |
var $617=(($616)|(0))==31; | |
if ($617) { label = 99; break; } else { label = 100; break; } | |
case 99: | |
var $626 = 0;label = 101; break; | |
case 100: | |
var $620=$I7; | |
var $621=$620 >>> 1; | |
var $622=((($621)+(8))|0); | |
var $623=((($622)-(2))|0); | |
var $624=(((31)-($623))|0); | |
var $626 = $624;label = 101; break; | |
case 101: | |
var $626; | |
var $627=$615 << $626; | |
$K8=$627; | |
label = 102; break; | |
case 102: | |
var $629=$T; | |
var $630=(($629+4)|0); | |
var $631=HEAP32[(($630)>>2)]; | |
var $632=$631 & -8; | |
var $633=$qsize; | |
var $634=(($632)|(0))!=(($633)|(0)); | |
if ($634) { label = 103; break; } else { label = 109; break; } | |
case 103: | |
var $636=$K8; | |
var $637=$636 >>> 31; | |
var $638=$637 & 1; | |
var $639=$T; | |
var $640=(($639+16)|0); | |
var $641=(($640+($638<<2))|0); | |
$C=$641; | |
var $642=$K8; | |
var $643=$642 << 1; | |
$K8=$643; | |
var $644=$C; | |
var $645=HEAP32[(($644)>>2)]; | |
var $646=(($645)|(0))!=0; | |
if ($646) { label = 104; break; } else { label = 105; break; } | |
case 104: | |
var $648=$C; | |
var $649=HEAP32[(($648)>>2)]; | |
$T=$649; | |
label = 108; break; | |
case 105: | |
var $651=$C; | |
var $652=$651; | |
var $653=$1; | |
var $654=(($653+16)|0); | |
var $655=HEAP32[(($654)>>2)]; | |
var $656=(($652)>>>(0)) >= (($655)>>>(0)); | |
var $657=(($656)&(1)); | |
var $658=($657); | |
var $659=(($658)|(0))!=0; | |
if ($659) { label = 106; break; } else { label = 107; break; } | |
case 106: | |
var $661=$TP5; | |
var $662=$C; | |
HEAP32[(($662)>>2)]=$661; | |
var $663=$T; | |
var $664=$TP5; | |
var $665=(($664+24)|0); | |
HEAP32[(($665)>>2)]=$663; | |
var $666=$TP5; | |
var $667=$TP5; | |
var $668=(($667+12)|0); | |
HEAP32[(($668)>>2)]=$666; | |
var $669=$TP5; | |
var $670=(($669+8)|0); | |
HEAP32[(($670)>>2)]=$666; | |
label = 115; break; | |
case 107: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 108: | |
label = 114; break; | |
case 109: | |
var $674=$T; | |
var $675=(($674+8)|0); | |
var $676=HEAP32[(($675)>>2)]; | |
$F9=$676; | |
var $677=$T; | |
var $678=$677; | |
var $679=$1; | |
var $680=(($679+16)|0); | |
var $681=HEAP32[(($680)>>2)]; | |
var $682=(($678)>>>(0)) >= (($681)>>>(0)); | |
if ($682) { label = 110; break; } else { var $691 = 0;label = 111; break; } | |
case 110: | |
var $684=$F9; | |
var $685=$684; | |
var $686=$1; | |
var $687=(($686+16)|0); | |
var $688=HEAP32[(($687)>>2)]; | |
var $689=(($685)>>>(0)) >= (($688)>>>(0)); | |
var $691 = $689;label = 111; break; | |
case 111: | |
var $691; | |
var $692=(($691)&(1)); | |
var $693=($692); | |
var $694=(($693)|(0))!=0; | |
if ($694) { label = 112; break; } else { label = 113; break; } | |
case 112: | |
var $696=$TP5; | |
var $697=$F9; | |
var $698=(($697+12)|0); | |
HEAP32[(($698)>>2)]=$696; | |
var $699=$T; | |
var $700=(($699+8)|0); | |
HEAP32[(($700)>>2)]=$696; | |
var $701=$F9; | |
var $702=$TP5; | |
var $703=(($702+8)|0); | |
HEAP32[(($703)>>2)]=$701; | |
var $704=$T; | |
var $705=$TP5; | |
var $706=(($705+12)|0); | |
HEAP32[(($706)>>2)]=$704; | |
var $707=$TP5; | |
var $708=(($707+24)|0); | |
HEAP32[(($708)>>2)]=0; | |
label = 115; break; | |
case 113: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 114: | |
label = 102; break; | |
case 115: | |
label = 116; break; | |
case 116: | |
label = 117; break; | |
case 117: | |
label = 118; break; | |
case 118: | |
label = 119; break; | |
case 119: | |
var $716=$p; | |
var $717=$716; | |
var $718=(($717+8)|0); | |
return $718; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
function _add_segment($m, $tbase, $tsize, $mmapped) { | |
var label = 0; | |
label = 2; | |
while(1) switch(label) { | |
case 2: | |
var $1; | |
var $2; | |
var $3; | |
var $4; | |
var $old_top; | |
var $oldsp; | |
var $old_end; | |
var $ssize; | |
var $rawsp; | |
var $offset; | |
var $asp; | |
var $csp; | |
var $sp; | |
var $ss; | |
var $tnext; | |
var $p; | |
var $nfences; | |
var $nextp; | |
var $q; | |
var $psize; | |
var $tn; | |
var $I; | |
var $B; | |
var $F; | |
var $TP; | |
var $H; | |
var $I1; | |
var $X; | |
var $Y; | |
var $N; | |
var $K; | |
var $T; | |
var $K2; | |
var $C; | |
var $F3; | |
$1=$m; | |
$2=$tbase; | |
$3=$tsize; | |
$4=$mmapped; | |
var $5=$1; | |
var $6=(($5+24)|0); | |
var $7=HEAP32[(($6)>>2)]; | |
var $8=$7; | |
$old_top=$8; | |
var $9=$1; | |
var $10=$old_top; | |
var $11=_segment_holding($9, $10); | |
$oldsp=$11; | |
var $12=$oldsp; | |
var $13=(($12)|0); | |
var $14=HEAP32[(($13)>>2)]; | |
var $15=$oldsp; | |
var $16=(($15+4)|0); | |
var $17=HEAP32[(($16)>>2)]; | |
var $18=(($14+$17)|0); | |
$old_end=$18; | |
$ssize=24; | |
var $19=$old_end; | |
var $20=$ssize; | |
var $21=((($20)+(16))|0); | |
var $22=((($21)+(7))|0); | |
var $23=(((-$22))|0); | |
var $24=(($19+$23)|0); | |
$rawsp=$24; | |
var $25=$rawsp; | |
var $26=(($25+8)|0); | |
var $27=$26; | |
var $28=$27 & 7; | |
var $29=(($28)|(0))==0; | |
if ($29) { label = 3; break; } else { label = 4; break; } | |
case 3: | |
var $39 = 0;label = 5; break; | |
case 4: | |
var $32=$rawsp; | |
var $33=(($32+8)|0); | |
var $34=$33; | |
var $35=$34 & 7; | |
var $36=(((8)-($35))|0); | |
var $37=$36 & 7; | |
var $39 = $37;label = 5; break; | |
case 5: | |
var $39; | |
$offset=$39; | |
var $40=$rawsp; | |
var $41=$offset; | |
var $42=(($40+$41)|0); | |
$asp=$42; | |
var $43=$asp; | |
var $44=$old_top; | |
var $45=(($44+16)|0); | |
var $46=(($43)>>>(0)) < (($45)>>>(0)); | |
if ($46) { label = 6; break; } else { label = 7; break; } | |
case 6: | |
var $48=$old_top; | |
var $52 = $48;label = 8; break; | |
case 7: | |
var $50=$asp; | |
var $52 = $50;label = 8; break; | |
case 8: | |
var $52; | |
$csp=$52; | |
var $53=$csp; | |
var $54=$53; | |
$sp=$54; | |
var $55=$sp; | |
var $56=$55; | |
var $57=(($56+8)|0); | |
var $58=$57; | |
$ss=$58; | |
var $59=$sp; | |
var $60=$59; | |
var $61=$ssize; | |
var $62=(($60+$61)|0); | |
var $63=$62; | |
$tnext=$63; | |
var $64=$tnext; | |
$p=$64; | |
$nfences=0; | |
var $65=$1; | |
var $66=$2; | |
var $67=$66; | |
var $68=$3; | |
var $69=((($68)-(40))|0); | |
_init_top($65, $67, $69); | |
var $70=$ssize; | |
var $71=$70 | 1; | |
var $72=$71 | 2; | |
var $73=$sp; | |
var $74=(($73+4)|0); | |
HEAP32[(($74)>>2)]=$72; | |
var $75=$ss; | |
var $76=$1; | |
var $77=(($76+448)|0); | |
var $78=$75; | |
var $79=$77; | |
assert(16 % 1 === 0);HEAP32[(($78)>>2)]=HEAP32[(($79)>>2)];HEAP32[((($78)+(4))>>2)]=HEAP32[((($79)+(4))>>2)];HEAP32[((($78)+(8))>>2)]=HEAP32[((($79)+(8))>>2)];HEAP32[((($78)+(12))>>2)]=HEAP32[((($79)+(12))>>2)]; | |
var $80=$2; | |
var $81=$1; | |
var $82=(($81+448)|0); | |
var $83=(($82)|0); | |
HEAP32[(($83)>>2)]=$80; | |
var $84=$3; | |
var $85=$1; | |
var $86=(($85+448)|0); | |
var $87=(($86+4)|0); | |
HEAP32[(($87)>>2)]=$84; | |
var $88=$4; | |
var $89=$1; | |
var $90=(($89+448)|0); | |
var $91=(($90+12)|0); | |
HEAP32[(($91)>>2)]=$88; | |
var $92=$ss; | |
var $93=$1; | |
var $94=(($93+448)|0); | |
var $95=(($94+8)|0); | |
HEAP32[(($95)>>2)]=$92; | |
label = 9; break; | |
case 9: | |
var $97=$p; | |
var $98=$97; | |
var $99=(($98+4)|0); | |
var $100=$99; | |
$nextp=$100; | |
var $101=$p; | |
var $102=(($101+4)|0); | |
HEAP32[(($102)>>2)]=7; | |
var $103=$nfences; | |
var $104=((($103)+(1))|0); | |
$nfences=$104; | |
var $105=$nextp; | |
var $106=(($105+4)|0); | |
var $107=$106; | |
var $108=$old_end; | |
var $109=(($107)>>>(0)) < (($108)>>>(0)); | |
if ($109) { label = 10; break; } else { label = 11; break; } | |
case 10: | |
var $111=$nextp; | |
$p=$111; | |
label = 12; break; | |
case 11: | |
label = 13; break; | |
case 12: | |
label = 9; break; | |
case 13: | |
var $115=$csp; | |
var $116=$old_top; | |
var $117=(($115)|(0))!=(($116)|(0)); | |
if ($117) { label = 14; break; } else { label = 50; break; } | |
case 14: | |
var $119=$old_top; | |
var $120=$119; | |
$q=$120; | |
var $121=$csp; | |
var $122=$old_top; | |
var $123=$121; | |
var $124=$122; | |
var $125=((($123)-($124))|0); | |
$psize=$125; | |
var $126=$q; | |
var $127=$126; | |
var $128=$psize; | |
var $129=(($127+$128)|0); | |
var $130=$129; | |
$tn=$130; | |
var $131=$tn; | |
var $132=(($131+4)|0); | |
var $133=HEAP32[(($132)>>2)]; | |
var $134=$133 & -2; | |
HEAP32[(($132)>>2)]=$134; | |
var $135=$psize; | |
var $136=$135 | 1; | |
var $137=$q; | |
var $138=(($137+4)|0); | |
HEAP32[(($138)>>2)]=$136; | |
var $139=$psize; | |
var $140=$q; | |
var $141=$140; | |
var $142=$psize; | |
var $143=(($141+$142)|0); | |
var $144=$143; | |
var $145=(($144)|0); | |
HEAP32[(($145)>>2)]=$139; | |
var $146=$psize; | |
var $147=$146 >>> 3; | |
var $148=(($147)>>>(0)) < 32; | |
if ($148) { label = 15; break; } else { label = 22; break; } | |
case 15: | |
var $150=$psize; | |
var $151=$150 >>> 3; | |
$I=$151; | |
var $152=$I; | |
var $153=$152 << 1; | |
var $154=$1; | |
var $155=(($154+40)|0); | |
var $156=(($155+($153<<2))|0); | |
var $157=$156; | |
var $158=$157; | |
$B=$158; | |
var $159=$B; | |
$F=$159; | |
var $160=$1; | |
var $161=(($160)|0); | |
var $162=HEAP32[(($161)>>2)]; | |
var $163=$I; | |
var $164=1 << $163; | |
var $165=$162 & $164; | |
var $166=(($165)|(0))!=0; | |
if ($166) { label = 17; break; } else { label = 16; break; } | |
case 16: | |
var $168=$I; | |
var $169=1 << $168; | |
var $170=$1; | |
var $171=(($170)|0); | |
var $172=HEAP32[(($171)>>2)]; | |
var $173=$172 | $169; | |
HEAP32[(($171)>>2)]=$173; | |
label = 21; break; | |
case 17: | |
var $175=$B; | |
var $176=(($175+8)|0); | |
var $177=HEAP32[(($176)>>2)]; | |
var $178=$177; | |
var $179=$1; | |
var $180=(($179+16)|0); | |
var $181=HEAP32[(($180)>>2)]; | |
var $182=(($178)>>>(0)) >= (($181)>>>(0)); | |
var $183=(($182)&(1)); | |
var $184=($183); | |
var $185=(($184)|(0))!=0; | |
if ($185) { label = 18; break; } else { label = 19; break; } | |
case 18: | |
var $187=$B; | |
var $188=(($187+8)|0); | |
var $189=HEAP32[(($188)>>2)]; | |
$F=$189; | |
label = 20; break; | |
case 19: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 20: | |
label = 21; break; | |
case 21: | |
var $193=$q; | |
var $194=$B; | |
var $195=(($194+8)|0); | |
HEAP32[(($195)>>2)]=$193; | |
var $196=$q; | |
var $197=$F; | |
var $198=(($197+12)|0); | |
HEAP32[(($198)>>2)]=$196; | |
var $199=$F; | |
var $200=$q; | |
var $201=(($200+8)|0); | |
HEAP32[(($201)>>2)]=$199; | |
var $202=$B; | |
var $203=$q; | |
var $204=(($203+12)|0); | |
HEAP32[(($204)>>2)]=$202; | |
label = 49; break; | |
case 22: | |
var $206=$q; | |
var $207=$206; | |
$TP=$207; | |
var $208=$psize; | |
var $209=$208 >>> 8; | |
$X=$209; | |
var $210=$X; | |
var $211=(($210)|(0))==0; | |
if ($211) { label = 23; break; } else { label = 24; break; } | |
case 23: | |
$I1=0; | |
label = 28; break; | |
case 24: | |
var $214=$X; | |
var $215=(($214)>>>(0)) > 65535; | |
if ($215) { label = 25; break; } else { label = 26; break; } | |
case 25: | |
$I1=31; | |
label = 27; break; | |
case 26: | |
var $218=$X; | |
$Y=$218; | |
var $219=$Y; | |
var $220=((($219)-(256))|0); | |
var $221=$220 >>> 16; | |
var $222=$221 & 8; | |
$N=$222; | |
var $223=$N; | |
var $224=$Y; | |
var $225=$224 << $223; | |
$Y=$225; | |
var $226=((($225)-(4096))|0); | |
var $227=$226 >>> 16; | |
var $228=$227 & 4; | |
$K=$228; | |
var $229=$K; | |
var $230=$N; | |
var $231=((($230)+($229))|0); | |
$N=$231; | |
var $232=$K; | |
var $233=$Y; | |
var $234=$233 << $232; | |
$Y=$234; | |
var $235=((($234)-(16384))|0); | |
var $236=$235 >>> 16; | |
var $237=$236 & 2; | |
$K=$237; | |
var $238=$N; | |
var $239=((($238)+($237))|0); | |
$N=$239; | |
var $240=$N; | |
var $241=(((14)-($240))|0); | |
var $242=$K; | |
var $243=$Y; | |
var $244=$243 << $242; | |
$Y=$244; | |
var $245=$244 >>> 15; | |
var $246=((($241)+($245))|0); | |
$K=$246; | |
var $247=$K; | |
var $248=$247 << 1; | |
var $249=$psize; | |
var $250=$K; | |
var $251=((($250)+(7))|0); | |
var $252=$249 >>> (($251)>>>(0)); | |
var $253=$252 & 1; | |
var $254=((($248)+($253))|0); | |
$I1=$254; | |
label = 27; break; | |
case 27: | |
label = 28; break; | |
case 28: | |
var $257=$I1; | |
var $258=$1; | |
var $259=(($258+304)|0); | |
var $260=(($259+($257<<2))|0); | |
$H=$260; | |
var $261=$I1; | |
var $262=$TP; | |
var $263=(($262+28)|0); | |
HEAP32[(($263)>>2)]=$261; | |
var $264=$TP; | |
var $265=(($264+16)|0); | |
var $266=(($265+4)|0); | |
HEAP32[(($266)>>2)]=0; | |
var $267=$TP; | |
var $268=(($267+16)|0); | |
var $269=(($268)|0); | |
HEAP32[(($269)>>2)]=0; | |
var $270=$1; | |
var $271=(($270+4)|0); | |
var $272=HEAP32[(($271)>>2)]; | |
var $273=$I1; | |
var $274=1 << $273; | |
var $275=$272 & $274; | |
var $276=(($275)|(0))!=0; | |
if ($276) { label = 30; break; } else { label = 29; break; } | |
case 29: | |
var $278=$I1; | |
var $279=1 << $278; | |
var $280=$1; | |
var $281=(($280+4)|0); | |
var $282=HEAP32[(($281)>>2)]; | |
var $283=$282 | $279; | |
HEAP32[(($281)>>2)]=$283; | |
var $284=$TP; | |
var $285=$H; | |
HEAP32[(($285)>>2)]=$284; | |
var $286=$H; | |
var $287=$286; | |
var $288=$TP; | |
var $289=(($288+24)|0); | |
HEAP32[(($289)>>2)]=$287; | |
var $290=$TP; | |
var $291=$TP; | |
var $292=(($291+12)|0); | |
HEAP32[(($292)>>2)]=$290; | |
var $293=$TP; | |
var $294=(($293+8)|0); | |
HEAP32[(($294)>>2)]=$290; | |
label = 48; break; | |
case 30: | |
var $296=$H; | |
var $297=HEAP32[(($296)>>2)]; | |
$T=$297; | |
var $298=$psize; | |
var $299=$I1; | |
var $300=(($299)|(0))==31; | |
if ($300) { label = 31; break; } else { label = 32; break; } | |
case 31: | |
var $309 = 0;label = 33; break; | |
case 32: | |
var $303=$I1; | |
var $304=$303 >>> 1; | |
var $305=((($304)+(8))|0); | |
var $306=((($305)-(2))|0); | |
var $307=(((31)-($306))|0); | |
var $309 = $307;label = 33; break; | |
case 33: | |
var $309; | |
var $310=$298 << $309; | |
$K2=$310; | |
label = 34; break; | |
case 34: | |
var $312=$T; | |
var $313=(($312+4)|0); | |
var $314=HEAP32[(($313)>>2)]; | |
var $315=$314 & -8; | |
var $316=$psize; | |
var $317=(($315)|(0))!=(($316)|(0)); | |
if ($317) { label = 35; break; } else { label = 41; break; } | |
case 35: | |
var $319=$K2; | |
var $320=$319 >>> 31; | |
var $321=$320 & 1; | |
var $322=$T; | |
var $323=(($322+16)|0); | |
var $324=(($323+($321<<2))|0); | |
$C=$324; | |
var $325=$K2; | |
var $326=$325 << 1; | |
$K2=$326; | |
var $327=$C; | |
var $328=HEAP32[(($327)>>2)]; | |
var $329=(($328)|(0))!=0; | |
if ($329) { label = 36; break; } else { label = 37; break; } | |
case 36: | |
var $331=$C; | |
var $332=HEAP32[(($331)>>2)]; | |
$T=$332; | |
label = 40; break; | |
case 37: | |
var $334=$C; | |
var $335=$334; | |
var $336=$1; | |
var $337=(($336+16)|0); | |
var $338=HEAP32[(($337)>>2)]; | |
var $339=(($335)>>>(0)) >= (($338)>>>(0)); | |
var $340=(($339)&(1)); | |
var $341=($340); | |
var $342=(($341)|(0))!=0; | |
if ($342) { label = 38; break; } else { label = 39; break; } | |
case 38: | |
var $344=$TP; | |
var $345=$C; | |
HEAP32[(($345)>>2)]=$344; | |
var $346=$T; | |
var $347=$TP; | |
var $348=(($347+24)|0); | |
HEAP32[(($348)>>2)]=$346; | |
var $349=$TP; | |
var $350=$TP; | |
var $351=(($350+12)|0); | |
HEAP32[(($351)>>2)]=$349; | |
var $352=$TP; | |
var $353=(($352+8)|0); | |
HEAP32[(($353)>>2)]=$349; | |
label = 47; break; | |
case 39: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 40: | |
label = 46; break; | |
case 41: | |
var $357=$T; | |
var $358=(($357+8)|0); | |
var $359=HEAP32[(($358)>>2)]; | |
$F3=$359; | |
var $360=$T; | |
var $361=$360; | |
var $362=$1; | |
var $363=(($362+16)|0); | |
var $364=HEAP32[(($363)>>2)]; | |
var $365=(($361)>>>(0)) >= (($364)>>>(0)); | |
if ($365) { label = 42; break; } else { var $374 = 0;label = 43; break; } | |
case 42: | |
var $367=$F3; | |
var $368=$367; | |
var $369=$1; | |
var $370=(($369+16)|0); | |
var $371=HEAP32[(($370)>>2)]; | |
var $372=(($368)>>>(0)) >= (($371)>>>(0)); | |
var $374 = $372;label = 43; break; | |
case 43: | |
var $374; | |
var $375=(($374)&(1)); | |
var $376=($375); | |
var $377=(($376)|(0))!=0; | |
if ($377) { label = 44; break; } else { label = 45; break; } | |
case 44: | |
var $379=$TP; | |
var $380=$F3; | |
var $381=(($380+12)|0); | |
HEAP32[(($381)>>2)]=$379; | |
var $382=$T; | |
var $383=(($382+8)|0); | |
HEAP32[(($383)>>2)]=$379; | |
var $384=$F3; | |
var $385=$TP; | |
var $386=(($385+8)|0); | |
HEAP32[(($386)>>2)]=$384; | |
var $387=$T; | |
var $388=$TP; | |
var $389=(($388+12)|0); | |
HEAP32[(($389)>>2)]=$387; | |
var $390=$TP; | |
var $391=(($390+24)|0); | |
HEAP32[(($391)>>2)]=0; | |
label = 47; break; | |
case 45: | |
_abort(); | |
throw "Reached an unreachable!" | |
case 46: | |
label = 34; break; | |
case 47: | |
label = 48; break; | |
case 48: | |
label = 49; break; | |
case 49: | |
label = 50; break; | |
case 50: | |
return; | |
default: assert(0, "bad label: " + label); | |
} | |
} | |
// EMSCRIPTEN_END_FUNCS | |
// EMSCRIPTEN_END_FUNCS | |
// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included | |
var i64Math = null; | |
// === Auto-generated postamble setup entry stuff === | |
Module.callMain = function callMain(args) { | |
var argc = args.length+1; | |
function pad() { | |
for (var i = 0; i < 4-1; i++) { | |
argv.push(0); | |
} | |
} | |
var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_STATIC) ]; | |
pad(); | |
for (var i = 0; i < argc-1; i = i + 1) { | |
argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_STATIC)); | |
pad(); | |
} | |
argv.push(0); | |
argv = allocate(argv, 'i32', ALLOC_STATIC); | |
var ret; | |
var initialStackTop = STACKTOP; | |
try { | |
ret = Module['_main'](argc, argv, 0); | |
} | |
catch(e) { | |
if (e.name == 'ExitStatus') { | |
return e.status; | |
} else if (e == 'SimulateInfiniteLoop') { | |
Module['noExitRuntime'] = true; | |
} else { | |
throw e; | |
} | |
} finally { | |
STACKTOP = initialStackTop; | |
} | |
return ret; | |
} | |
function run(args) { | |
args = args || Module['arguments']; | |
if (runDependencies > 0) { | |
Module.printErr('run() called, but dependencies remain, so not running'); | |
return 0; | |
} | |
if (Module['preRun']) { | |
if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; | |
var toRun = Module['preRun']; | |
Module['preRun'] = []; | |
for (var i = toRun.length-1; i >= 0; i--) { | |
toRun[i](); | |
} | |
if (runDependencies > 0) { | |
// a preRun added a dependency, run will be called later | |
return 0; | |
} | |
} | |
function doRun() { | |
var ret = 0; | |
calledRun = true; | |
if (Module['_main']) { | |
preMain(); | |
ret = Module.callMain(args); | |
if (!Module['noExitRuntime']) { | |
exitRuntime(); | |
} | |
} | |
if (Module['postRun']) { | |
if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; | |
while (Module['postRun'].length > 0) { | |
Module['postRun'].pop()(); | |
} | |
} | |
return ret; | |
} | |
if (Module['setStatus']) { | |
Module['setStatus']('Running...'); | |
setTimeout(function() { | |
setTimeout(function() { | |
Module['setStatus'](''); | |
}, 1); | |
doRun(); | |
}, 1); | |
return 0; | |
} else { | |
return doRun(); | |
} | |
} | |
Module['run'] = Module.run = run; | |
// {{PRE_RUN_ADDITIONS}} | |
if (Module['preInit']) { | |
if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; | |
while (Module['preInit'].length > 0) { | |
Module['preInit'].pop()(); | |
} | |
} | |
initRuntime(); | |
var shouldRunNow = true; | |
if (Module['noInitialRun']) { | |
shouldRunNow = false; | |
} | |
if (shouldRunNow) { | |
run(); | |
} | |
// {{POST_RUN_ADDITIONS}} | |
// {{MODULE_ADDITIONS}} | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment