Skip to content
Find file
5ee6e11
3247 lines (3207 sloc) 106 KB
'use asm';
var _1 = new std.Uint8Array(heap);
var $1 = new std.Int8Array(heap);
var _2 = new std.Uint16Array(heap);
var $2 = new std.Int16Array(heap);
var _4 = new std.Uint32Array(heap);
var $4 = new std.Int32Array(heap);
var $f = new std.Float32Array(heap);
var $d = new std.Float64Array(heap);
var abs = std.Math.abs;
var atan2 = std.Math.atan2;
var ceil = std.Math.ceil;
var cos = std.Math.cos;
var exp = std.Math.exp;
var floor = std.Math.floor;
var fround = std.Math.fround;
var log = std.Math.log;
var sin = std.Math.sin;
var sqrt = std.Math.sqrt;
var tan = std.Math.tan;
var error = foriegn.error;
var imul = foriegn.imul;
var logs = foriegn.logs;
var logv = foriegn.logv;
var wait = foriegn.wait;
var time = foriegn.time;
const E_NONE = 0;
const E_PERM = 1;
const E_NOMEM = 2;
const E_INVALID = 3;
const E_ACCESS = 4;
const E_ALIGN = 5;
const E_UNKNOWN = 6;
const E_ENV = 7;
const E_HALT = 8;
const E_NOSUPPORT = 9;
var version = 0x00000000;
var spine = 0;
var body = 0;
var ini = 0;
var dead = 1;
var ring = 0;
var lastError = 0;
var lock0 = 0;
var lock1 = 0;
var lock2 = 0;
var lock3 = 0;
var fingerCnt = 0;
var fing0 = 0;
var fing1 = 0;
var fing2 = 0;
var fing3 = 0;
var mark = 0;
var born = 0.0;
var delta = 0.0;
var free = 0;
var seed = 0;
var v0 = 0;
var v1 = 0;
var v2 = 0;
var v3 = 0;
var f0 = 0.0;
var op = 0;
var cute = 0;
var cmp = 0;
var ret = 0;
var rVirt = 0;
var rSig = 0;
var rHeap = 0;
var rParam = 0;
var rText = 0;
var rEntity = 0;
var rCode = 0;
var rCall = 0;
var attr = 0;
function addition() {
var slot = 0;
var base = 0;
var size = 0;
var f = 0.0;
var x0 = 0;
var x1 = 0;
var x2 = 0;
var x3 = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap + v0) | 0;
return;
case 0x02:
rParam = (rParam + v0) | 0;
return;
case 0x03:
rText = (rText + v0) | 0;
return;
case 0x04:
rEntity = (rEntity + v0) | 0;
return;
case 0x05:
rCode = (rCode + v0) | 0;
return;
case 0x06:
rCall = (rCall + v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body + v0) | 0;
return;
case 0x0A:
spine = (spine + v0) | 0;
return;
case 0x0B:
free = (free + v0) | 0;
return;
case 0x0C:
seed = (seed + v0) | 0;
return;
case 0x0D:
rSig = (rSig + v0) | 0;
return;
case 0x0E:
rVirt = (rVirt + v0) | 0;
return;
case 0x0F:
op = (op + v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = (_1[base] >>> 0) + v0;
return;
case 1:
_2[base >> 1] = (_2[base >> 1] >>> 0) + v0;
return;
case 2:
_4[base >> 2] = (_4[base >> 2] >>> 0) + v0;
return;
case 3:
slot = (_4[base >> 2] = (size = _4[base >> 2] | 0) + v0) | 0;
base = (base + 4) | 0;
if ((slot >>> 0) < (size >>> 0)) _4[base >> 2] = (_4[base >> 2] | 0) + v1 + 1;
else _4[base >> 2] = (_4[base >> 2] | 0) + v1;
return;
case 4:
x0 = _4[base >> 2] >>> 0;
x1 = _4[(base + 4) >> 2] >>> 0;
x2 = _4[(base + 8) >> 2] >>> 0;
x3 = _4[(base + 12) >> 2] >>> 0;
_4[base >> 2] = slot = (x0 + v0) | 0;
if ((slot >>> 0) < (x0 >>> 0)) {
x1 = ((slot = x1) + 1) | 0;
if ((x1 >>> 0) < (slot >>> 0)) {
x2 = ((slot = x2) + 1) | 0;
if ((x2 >>> 0) < (slot >>> 0)) x3 = (x3 + 1) | 0;
}
}
_4[(base + 4) >> 2] = slot = (x1 + v1) | 0;
if ((slot >>> 0) < (x1 >>> 0)) {
x2 = ((slot = x2) + 1) | 0;
if ((x2 >>> 0) < (slot >>> 0)) x3 = (x3 + 1) | 0;
}
_4[(base + 8) >> 2] = slot = (x2 + v2) | 0;
if ((slot >>> 0) < (x2 >>> 0)) x3 = (x3 + 1) | 0;
_4[(base + 12) >> 2] = (x3 + v3) | 0;
return;
case 5:
$f[base >> 2] = $f[base >> 2] + fround(f0);
return;
case 6:
$d[base >> 3] = $d[base >> 3] + f0;
return;
case 7:
default:
err(E_NOSUPPORT);
}
}
function attrib(fg, bg, ch) {
fg = fg | 0;
bg = bg | 0;
ch = ch | 0;
if (dead) return;
attr = (((bg << 4) | fg) << 8) | ch;
}
function $_attrib(fg, bg, ch) {
fg = fg | 0;
bg = bg | 0;
ch = ch | 0;
if (notRoot() | 0) return;
attrib(fg, bg, ch);
}
function bitAND() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap & v0) | 0;
return;
case 0x02:
rParam = (rParam & v0) | 0;
return;
case 0x03:
rText = (rText & v0) | 0;
return;
case 0x04:
rEntity = (rEntity & v0) | 0;
return;
case 0x05:
rCode = (rCode & v0) | 0;
return;
case 0x06:
rCall = (rCall & v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body & v0) | 0;
return;
case 0x0A:
spine = (spine & v0) | 0;
return;
case 0x0B:
free = (free & v0) | 0;
return;
case 0x0C:
seed = (seed & v0) | 0;
return;
case 0x0D:
rSig = (rSig & v0) | 0;
return;
case 0x0E:
rVirt = (rVirt & v0) | 0;
return;
case 0x0F:
op = (op & v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = _1[base] & v0;
return;
case 1:
_2[base >> 1] = _2[base >> 1] & v0;
return;
case 4:
_4[(base + 12) >> 2] = _4[(base + 12) >> 2] & v3;
_4[(base + 8) >> 2] = _4[(base + 8) >> 2] & v2;
case 3:
_4[(base + 4) >> 2] = _4[(base + 4) >> 2] & v1;
case 2:
_4[base >> 2] = _4[base >> 2] & v0;
return;
default:
err(E_NOSUPPORT);
}
}
function bitNOT() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = ~v0;
return;
case 0x02:
rParam = ~v0;
return;
case 0x03:
rText = ~v0;
return;
case 0x04:
rEntity = ~v0;
return;
case 0x05:
rCode = ~v0;
return;
case 0x06:
rCall = ~v0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = ~v0;
return;
case 0x0A:
spine = ~v0;
return;
case 0x0B:
free = ~v0;
return;
case 0x0C:
seed = ~v0;
return;
case 0x0D:
rSig = ~v0;
return;
case 0x0E:
rVirt = ~v0;
return;
case 0x0F:
op = ~v0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = ~v0;
return;
case 1:
_2[base >> 1] = ~v0;
return;
case 4:
_4[(base + 12) >> 2] = ~v3;
_4[(base + 8) >> 2] = ~v2;
case 3:
_4[(base + 4) >> 2] = ~v1;
case 2:
_4[base >> 2] = ~v0;
return;
default:
err(E_NOSUPPORT);
}
}
function bitOR() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap | v0) | 0;
return;
case 0x02:
rParam = (rParam | v0) | 0;
return;
case 0x03:
rText = (rText | v0) | 0;
return;
case 0x04:
rEntity = (rEntity | v0) | 0;
return;
case 0x05:
rCode = (rCode | v0) | 0;
return;
case 0x06:
rCall = (rCall | v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body | v0) | 0;
return;
case 0x0A:
spine = (spine | v0) | 0;
return;
case 0x0B:
free = (free | v0) | 0;
return;
case 0x0C:
seed = (seed | v0) | 0;
return;
case 0x0D:
rSig = (rSig | v0) | 0;
return;
case 0x0E:
rVirt = (rVirt | v0) | 0;
return;
case 0x0F:
op = (op | v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = _1[base] | v0;
return;
case 1:
_2[base >> 1] = _2[base >> 1] | v0;
return;
case 4:
_4[(base + 12) >> 2] = _4[(base + 12) >> 2] | v3;
_4[(base + 8) >> 2] = _4[(base + 8) >> 2] | v2;
case 3:
_4[(base + 4) >> 2] = _4[(base + 4) >> 2] | v1;
case 2:
_4[base >> 2] = _4[base >> 2] | v0;
return;
default:
err(E_NOSUPPORT);
}
}
function bitSHL() {
var slot = 0;
var base = 0;
var size = 0;
if (cute & 0x8000) {
if ((cute & 0x700) == 0x500) {
cute = (cute - 0x300) | 0;
getSrc();
} else v0 = cute >>> 24;
} else getSrc();
if ((v0 | 0) == 0) return;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap << v0) | 0;
return;
case 0x02:
rParam = (rParam << v0) | 0;
return;
case 0x03:
rText = (rText << v0) | 0;
return;
case 0x04:
rEntity = (rEntity << v0) | 0;
return;
case 0x05:
rCode = (rCode << v0) | 0;
return;
case 0x06:
rCall = (rCall << v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body << v0) | 0;
return;
case 0x0A:
spine = (spine << v0) | 0;
return;
case 0x0B:
free = (free << v0) | 0;
return;
case 0x0C:
seed = (seed << v0) | 0;
return;
case 0x0D:
rSig = (rSig << v0) | 0;
return;
case 0x0E:
rVirt = (rVirt << v0) | 0;
return;
case 0x0F:
op = (op << v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = _1[base] << v0;
return;
case 1:
_2[base >> 1] = _2[base >> 1] << v0;
return;
case 2:
_4[base >> 2] = _4[base >> 2] << v0;
return;
case 3:
if ((v0 | 0) >= 32) {
_4[(base + 4) >> 2] = _4[base >> 2] << (v0 - 32);
_4[base >> 2] = 0;
} else {
_4[base >> 2] = (slot = _4[base >> 2] | 0) << v0;
_4[(base + 4) >> 2] = (_4[(base + 4) >> 2] << v0) | (slot >>> (32 - v0));
}
return;
case 4:
if ((v0 | 0) >= 96) {
v0 = (v0 - 96) | 0;
_4[(base + 12) >> 2] = _4[base >> 2] << v0;
_4[(base + 8) >> 2] = _4[(base + 4) >> 2] = _4[base >> 2] = 0;
} else if ((v0 | 0) > 64) {
v0 = (v0 - 64) | 0;
_4[(base + 12) >> 2] = (_4[(base + 4) >> 2] << v0) | ((size = _4[base >> 2] | 0) >>> (32 - v0));
_4[(base + 8) >> 2] = size << v0;
_4[(base + 4) >> 2] = _4[base >> 2] = 0;
} else if ((v0 | 0) == 64) {
_4[(base + 12) >> 2] = _4[(base + 4) >> 2] | 0;
_4[(base + 8) >> 2] = _4[base >> 2] | 0;
_4[(base + 4) >> 2] = _4[base >> 2] = 0;
} else if ((v0 | 0) > 32) {
v0 = (v0 - 32) | 0;
_4[(base + 12) >> 2] = (_4[(base + 8) >> 2] << v0) | ((size = _4[(base + 4) >> 2] | 0) >>> (32 - v0));
_4[(base + 8) >> 2] = (size << v0) | ((slot = _4[base >> 2] | 0) >>> (32 - v0));
_4[(base + 4) >> 2] = slot << v0;
_4[base >> 2] = 0;
} else if ((v0 | 0) == 32) {
_4[(base + 12) >> 2] = _4[(base + 8) >> 2] | 0;
_4[(base + 8) >> 2] = _4[(base + 4) >> 2] | 0;
_4[(base + 4) >> 2] = _4[base >> 2] | 0;
_4[base >> 2] = 0;
} else {
_4[base >> 2] = (slot = _4[base >> 2] | 0) << v0;
_4[(base + 4) >> 2] = ((size = _4[(base + 4) >> 2] | 0) << v0) | (slot >>> (32 - v0));
_4[(base + 8) >> 2] = ((slot = _4[(base + 8) >> 2] | 0) << v0) | (size >>> (32 - v0));
_4[(base + 12) >> 2] = (_4[(base + 12) >> 2] << v0) | (slot >>> (32 - v0));
}
return;
default:
err(E_NOSUPPORT);
}
}
function bitSHR() {
var slot = 0;
var base = 0;
var size = 0;
if (cute & 0x8000) {
if ((cute & 0x700) == 0x500) {
cute = (cute - 0x300) | 0;
getSrc();
} else v0 = cute >>> 24;
} else getSrc();
if ((v0 | 0) == 0) return;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap >>> v0) | 0;
return;
case 0x02:
rParam = (rParam >>> v0) | 0;
return;
case 0x03:
rText = (rText >>> v0) | 0;
return;
case 0x04:
rEntity = (rEntity >>> v0) | 0;
return;
case 0x05:
rCode = (rCode >>> v0) | 0;
return;
case 0x06:
rCall = (rCall >>> v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body >>> v0) | 0;
return;
case 0x0A:
spine = (spine >>> v0) | 0;
return;
case 0x0B:
free = (free >>> v0) | 0;
return;
case 0x0C:
seed = (seed >>> v0) | 0;
return;
case 0x0D:
rSig = (rSig >>> v0) | 0;
return;
case 0x0E:
rVirt = (rVirt >>> v0) | 0;
return;
case 0x0F:
op = (op >>> v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = _1[base] >>> v0;
return;
case 1:
_2[base >> 1] = _2[base >> 1] >>> v0;
return;
case 2:
_4[base >> 2] = _4[base >> 2] >>> v0;
return;
case 3:
if ((v0 | 0) >= 32) {
_4[base >> 2] = _4[(base + 4) >> 2] >>> (v0 & 0x1f);
_4[(base + 4) >> 2] = 0;
} else {
_4[(base + 4) >> 2] = (slot = _4[(base + 4) >> 2] | 0) >>> v0;
_4[base >> 2] = (_4[base >> 2] >>> v0) | (slot << (32 - v0));
}
return;
case 4:
if ((v0 | 0) >= 96) {
v0 = v0 & 0x1f;
_4[base >> 2] = _4[(base + 12) >> 2] >>> v0;
_4[(base + 4) >> 2] = _4[(base + 8) >> 2] = _4[(base + 12) >> 2] = 0;
} else if ((v0 | 0) > 64) {
v0 = v0 & 0x1f;
_4[(base + 4) >> 2] = (slot = _4[(base + 12) >> 2] | 0) >>> v0;
_4[base >> 2] = (_4[(base + 8) >> 2] >>> v0) | (slot << (32 - v0));
_4[(base + 8) >> 2] = _4[(base + 12) >> 2] = 0;
} else if ((v0 | 0) == 64) {
_4[base >> 2] = _4[(base + 8) >> 2] | 0;
_4[(base + 4) >> 2] = _4[(base + 12) >> 2] | 0;
_4[(base + 8) >> 2] = _4[(base + 12) >> 2] = 0
} else if ((v0 | 0) > 32) {
v0 = v0 & 0x1f;
_4[base >> 2] = (_4[(base + 4) >> 2] >>> v0) | ((size = _4[(base + 8) >> 2] | 0) << (32 - v0));
_4[(base + 4) >> 2] = (size >>> v0) | ((slot = _4[(base + 12) >> 2] | 0) << (32 - v0));
_4[(base + 8) >> 2] = slot >>> v0;
_4[(base + 12) >> 2] = 0;
} else if ((v0 | 0) == 32) {
_4[base >> 2] = _4[(base + 4) >> 2] | 0;
_4[(base + 4) >> 2] = _4[(base + 8) >> 2] | 0;
_4[(base + 8) >> 2] = _4[(base + 12) >> 2] | 0;
_4[(base + 12) >> 2] = 0
} else {
_4[(base + 12) >> 2] = (slot = _4[(base + 12) >> 2] | 0) >>> v0;
_4[(base + 8) >> 2] = ((size = _4[(base + 8) >> 2] | 0) >>> v0) | (slot << (32 - v0));
_4[(base + 4) >> 2] = ((slot = _4[(base + 4) >> 2] | 0) >>> v0) | (size << (32 - v0));
_4[base >> 2] = (_4[base >> 2] >>> v0) | (slot << (32 - v0));
}
return;
default:
err(E_NOSUPPORT);
}
}
function bitSHRX() {
var slot = 0;
var base = 0;
var size = 0;
if (cute & 0x8000) {
if ((cute & 0x700) == 0x500) {
cute = (cute - 0x300) | 0;
getSrc();
} else v0 = cute >>> 24;
} else getSrc();
if ((v0 | 0) == 0) return;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap >> v0) | 0;
return;
case 0x02:
rParam = (rParam >> v0) | 0;
return;
case 0x03:
rText = (rText >> v0) | 0;
return;
case 0x04:
rEntity = (rEntity >> v0) | 0;
return;
case 0x05:
rCode = (rCode >> v0) | 0;
return;
case 0x06:
rCall = (rCall >> v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body >> v0) | 0;
return;
case 0x0A:
spine = (spine >> v0) | 0;
return;
case 0x0B:
free = (free >> v0) | 0;
return;
case 0x0C:
seed = (seed >> v0) | 0;
return;
case 0x0D:
rSig = (rSig >> v0) | 0;
return;
case 0x0E:
rVirt = (rVirt >> v0) | 0;
return;
case 0x0F:
op = (op >> v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = (_1[base] << 24) >> (24 + v0);
return;
case 1:
_2[base >> 1] = (_2[base >> 1] << 16) >> (16 + v0);
return;
case 2:
_4[base >> 2] = _4[base >> 2] >> v0;
return;
case 3:
if ((v0 | 0) >= 32) {
_4[base >> 2] = (slot = _4[(base + 4) >> 2] | 0) >> (v0 - 32);
_4[(base + 4) >> 2] = slot >> 31;
} else {
_4[(base + 4) >> 2] = (slot = _4[(base + 4) >> 2] | 0) >> v0;
_4[base >> 2] = (_4[base >> 2] >>> v0) | (slot << (32 - v0));
}
return;
case 4:
if ((v0 | 0) >= 96) {
v0 = v0 & 0x1f;
_4[base >> 2] = (slot = _4[(base + 12) >> 2] | 0) >> v0;
_4[(base + 4) >> 2] = _4[(base + 8) >> 2] = _4[(base + 12) >> 2] = slot >> 31;
} else if ((v0 | 0) > 64) {
v0 = v0 & 0x1f;
_4[(base + 4) >> 2] = (slot = _4[(base + 12) >> 2] | 0) >> v0;
_4[base >> 2] = (_4[(base + 8) >> 2] >>> v0) | (slot << (32 - v0));
_4[(base + 8) >> 2] = _4[(base + 12) >> 2] = slot >> 31;
} else if ((v0 | 0) == 64) {
_4[base >> 2] = _4[(base + 8) >> 2] | 0;
_4[(base + 4) >> 2] = slot = _4[(base + 12) >> 2] | 0;
_4[(base + 8) >> 2] = _4[(base + 12) >> 2] = slot >> 31;
} else if ((v0 | 0) > 32) {
v0 = v0 & 0x1f;
_4[base >> 2] = (_4[(base + 4) >> 2] >>> v0) | ((size = _4[(base + 8) >> 2] | 0) << (32 - v0));
_4[(base + 4) >> 2] = (size >>> v0) | ((slot = _4[(base + 12) >> 2] | 0) << (32 - v0));
_4[(base + 8) >> 2] = slot >> v0;
_4[(base + 12) >> 2] = slot >> 31;
} else if ((v0 | 0) == 32) {
_4[base >> 2] = _4[(base + 4) >> 2] | 0;
_4[(base + 4) >> 2] = _4[(base + 8) >> 2] | 0;
_4[(base + 8) >> 2] = slot = _4[(base + 12) >> 2] | 0;
_4[(base + 12) >> 2] = slot >> 31;
} else {
_4[(base + 12) >> 2] = (slot = _4[(base + 12) >> 2] | 0) >> v0;
_4[(base + 8) >> 2] = ((size = _4[(base + 8) >> 2] | 0) >>> v0) | (slot << (32 - v0));
_4[(base + 4) >> 2] = ((slot = _4[(base + 4) >> 2] | 0) >>> v0) | (size << (32 - v0));
_4[base >> 2] = (_4[base >> 2] >>> v0) | (slot << (32 - v0));
}
return;
default:
err(E_NOSUPPORT);
}
}
function bitSpinL() {
var slot = 0;
var base = 0;
var size = 0;
if (cute & 0x8000) {
if ((cute & 0x700) == 0x500) {
cute = (cute - 0x300) | 0;
getSrc();
} else v0 = cute >>> 24;
} else getSrc();
if ((v0 | 0) == 0) return;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap << v0) | (rHeap >>> (v0 - 32));
return;
case 0x02:
rParam = (rParam << v0) | (rParam >>> (v0 - 32));
return;
case 0x03:
rText = (rText << v0) | (rText >>> (v0 - 32));
return;
case 0x04:
rEntity = (rEntity << v0) | (rEntity >>> (v0 - 32));
return;
case 0x05:
rCode = (rCode << v0) | (rCode >>> (v0 - 32));
return;
case 0x06:
rCall = (rCall << v0) | (rCall >>> (v0 - 32));
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body << v0) | (body >>> (v0 - 32));
return;
case 0x0A:
spine = (spine << v0) | (spine >>> (v0 - 32));
return;
case 0x0B:
free = (free << v0) | (free >>> (v0 - 32));
return;
case 0x0C:
seed = (seed << v0) | (seed >>> (v0 - 32));
return;
case 0x0D:
rSig = (rSig << v0) | (rSig >>> (v0 - 32));
return;
case 0x0E:
rVirt = (rVirt << v0) | (rVirt >>> (v0 - 32));
return;
case 0x0F:
op = (op << v0) | (op >>> (v0 - 32));
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = ((slot = _1[base] | 0) << v0) | (slot >>> (8 - v0));
return;
case 1:
_2[base >> 1] = ((slot = _2[base >> 1] | 0) << v0) | (slot >>> (16 - v0));
return;
case 2:
_4[base >> 2] = ((slot = _4[base >> 2] | 0) << v0) | (slot >>> (32 - v0));
return;
case 3:
if ((v0 | 0) > 32) {
v0 = (v0 - 32) | 0;
_4[(base + 4) >> 2] = ((slot = _4[base >> 2] | 0) << v0) | ((size = _4[(base + 4) >> 2] | 0) >>> (32 - v0));
_4[base >> 2] = (size << v0) | (slot >>> (32 - v0));
} else if ((v0 | 0) == 32) {
slot = _4[base >> 2] | 0;
_4[base >> 2] = _4[(base + 4) >> 2];
_4[(base + 4) >> 2] = slot;
} else {
_4[base >> 2] = ((slot = _4[base >> 2] | 0) << v0) | ((size = _4[(base + 4) >> 2] | 0) >>> (32 - v0));
_4[(base + 4) >> 2] = (size << v0) | (slot >>> (32 - v0));
}
return;
case 4:
if ((v0 | 0) > 96) {
v0 = v0 & 0x1f;
_4[base >> 2] = ((size = _4[base >> 2] | 0) >>> (32 - v0)) | ((slot = _4[(base + 4) >> 2] | 0) << v0);
_4[(base + 4) >> 2] = (slot >>> (32 - v0)) | ((slot = _4[(base + 8) >> 2] | 0) << v0);
_4[(base + 8) >> 2] = (slot >>> (32 - v0)) | ((slot = _4[(base + 12) >> 2] | 0) << v0);
_4[(base + 12) >> 2] = (slot >>> (32 - v0)) | (size << v0);
} else if ((v0 | 0) == 96) {
slot = _4[base >> 2] | 0;
_4[base >> 2] = _4[(base + 4) >> 2];
_4[(base + 4) >> 2] = _4[(base + 8) >> 2];
_4[(base + 8) >> 2] = _4[(base + 12) >> 2];
_4[(base + 12) >> 2] = slot;
} else if ((v0 | 0) > 64) {
slot = v0 & 0x1f;
size = (32 - slot) | 0;
v0 = _4[base >> 2] | 0;
v1 = _4[(base + 4) >> 2] | 0;
v2 = _4[(base + 8) >> 2] | 0;
v3 = _4[(base + 12) >> 2] | 0;
_4[base >> 2] = (v2 << slot) | (v1 >>> size);
_4[(base + 4) >> 2] = (v3 << slot) | (v2 >>> size);
_4[(base + 8) >> 2] = (v0 << slot) | (v3 >>> size);
_4[(base + 12) >> 2] = (v1 << slot) | (v0 >>> size);
} else if ((v0 | 0) == 64) {
slot = _4[(base + 12) >> 2] | 0;
size = _4[base >> 2] | 0;
_4[(base + 12) >> 2] = _4[(base + 4) >> 2];
_4[(base + 4) >> 2] = slot;
_4[base >> 2] = _4[(base + 8) >> 2];
_4[(base + 8) >> 2] = size;
} else if ((v0 | 0) > 32) {
slot = v0 & 0x1f;
size = (32 - slot) | 0;
v0 = _4[base >> 2] | 0;
v1 = _4[(base + 4) >> 2] | 0;
v2 = _4[(base + 8) >> 2] | 0;
v3 = _4[(base + 12) >> 2] | 0;
_4[base >> 2] = (v3 << slot) | (v2 >>> size);
_4[(base + 4) >> 2] = (v0 << slot) | (v3 >>> size);
_4[(base + 8) >> 2] = (v1 << slot) | (v0 >>> size);
_4[(base + 12) >> 2] = (v2 << slot) | (v1 >>> size);
} else if ((v0 | 0) == 32) {
slot = _4[base >> 2] | 0;
_4[base >> 2] = _4[(base + 12) >> 2];
_4[(base + 12) >> 2] = _4[(base + 8) >> 2];
_4[(base + 8) >> 2] = _4[(base + 4) >> 2];
_4[(base + 4) >> 2] = slot;
} else {
_4[base >> 2] = ((size = _4[(base + 12) >> 2] | 0) >>> (32 - v0)) | ((slot = _4[base >> 2] | 0) << v0);
_4[(base + 4) >> 2] = (slot >>> (32 - v0)) | ((slot = _4[(base + 4) >> 2] | 0) << v0);
_4[(base + 8) >> 2] = (slot >>> (32 - v0)) | ((slot = _4[(base + 8) >> 2] | 0) << v0);
_4[(base + 12) >> 2] = (slot >>> (32 - v0)) | (size << v0);
}
return;
default:
err(E_NOSUPPORT);
}
}
function bitSpinR() {
var slot = 0;
var base = 0;
var size = 0;
if (cute & 0x8000) {
if ((cute & 0x700) == 0x500) {
cute = (cute - 0x300) | 0;
getSrc();
} else v0 = cute >>> 24;
} else getSrc();
if ((v0 | 0) == 0) return;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap >>> v0) | (rHeap << (v0 - 32));
return;
case 0x02:
rParam = (rParam >>> v0) | (rParam << (v0 - 32));
return;
case 0x03:
rText = (rText >>> v0) | (rText << (v0 - 32));
return;
case 0x04:
rEntity = (rEntity >>> v0) | (rEntity << (v0 - 32));
return;
case 0x05:
rCode = (rCode >>> v0) | (rCode << (v0 - 32));
return;
case 0x06:
rCall = (rCall >>> v0) | (rCall << (v0 - 32));
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body >>> v0) | (body << (v0 - 32));
return;
case 0x0A:
spine = (spine >>> v0) | (spine << (v0 - 32));
return;
case 0x0B:
free = (free >>> v0) | (free << (v0 - 32));
return;
case 0x0C:
seed = (seed >>> v0) | (seed << (v0 - 32));
return;
case 0x0D:
rSig = (rSig >>> v0) | (rSig << (v0 - 32));
return;
case 0x0E:
rVirt = (rVirt >>> v0) | (rVirt << (v0 - 32));
return;
case 0x0F:
op = (op >>> v0) | (op << (v0 - 32));
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = ((slot = _1[base] | 0) >>> v0) | (slot << (8 - v0));
return;
case 1:
_2[base >> 1] = ((slot = _2[base >> 1] | 0) >>> v0) | (slot << (16 - v0));
return;
case 2:
_4[base >> 2] = ((slot = _4[base >> 2] | 0) >>> v0) | (slot << (32 - v0));
return;
case 3:
if ((v0 | 0) > 32) {
v0 = (v0 - 32) | 0;
_4[base >> 2] = ((slot = _4[(v1 = (base + 4) | 0) >> 2] | 0) >>> v0) | ((size = _4[base >> 2] | 0) << (32 - v0));
_4[v1 >> 2] = (size >>> v0) | (slot << (32 - v0));
} else if ((v0 | 0) == 32) {
slot = _4[base >> 2] | 0;
_4[base >> 2] = _4[(base + 4) >> 2];
_4[(base + 4) >> 2] = slot;
} else {
_4[base >> 2] = ((slot = _4[base >> 2] | 0) >>> v0) | ((size = _4[(v1 = (base + 4) | 0) >> 2] | 0) << (32 - v0));
_4[v1 >> 2] = (size >>> v0) | (slot << (32 - v0));
}
return;
case 4:
if ((v0 | 0) > 96) {
v0 = (v0 - 96) | 0;
_4[base >> 2] = ((size = _4[(base + 12) >> 2] | 0) >>> v0) | ((slot = _4[base >> 2] | 0) << (32 - v0));
_4[(base + 4) >> 2] = (slot >>> v0) | ((slot = _4[(base + 4) >> 2] | 0) << (32 - v0));
_4[(base + 8) >> 2] = (slot >>> v0) | ((slot = _4[(base + 8) >> 2] | 0) << (32 - v0));
_4[(base + 12) >> 2] = (slot >>> v0) | (size << (32 - v0));
} else if ((v0 | 0) == 96) {
slot = _4[base >> 2] | 0;
_4[base >> 2] = _4[(base + 12) >> 2];
_4[(base + 12) >> 2] = _4[(base + 8) >> 2];
_4[(base + 8) >> 2] = _4[(base + 4) >> 2];
_4[(base + 4) >> 2] = slot;
} else if ((v0 | 0) > 64) {
slot = (v0 - 64) | 0;
size = (32 - slot) | 0;
v0 = _4[base >> 2] | 0;
v1 = _4[(base + 4) >> 2] | 0;
v2 = _4[(base + 8) >> 2] | 0;
v3 = _4[(base + 12) >> 2] | 0;
_4[base >> 2] = (v2 >>> slot) | (v3 << size);
_4[(base + 4) >> 2] = (v3 >>> slot) | (v0 << size);
_4[(base + 8) >> 2] = (v0 >>> slot) | (v1 << size);
_4[(base + 12) >> 2] = (v1 >>> slot) | (v2 << size);
} else if ((v0 | 0) == 64) {
slot = _4[(base + 12) >> 2] | 0;
size = _4[base >> 2] | 0;
_4[(base + 12) >> 2] = _4[(base + 4) >> 2];
_4[(base + 4) >> 2] = slot;
_4[base >> 2] = _4[(base + 8) >> 2];
_4[(base + 8) >> 2] = size;
} else if ((v0 | 0) > 32) {
slot = v0 & 0x1f;
size = (32 - slot) | 0;
v0 = _4[base >> 2] | 0;
v1 = _4[(base + 4) >> 2] | 0;
v2 = _4[(base + 8) >> 2] | 0;
v3 = _4[(base + 12) >> 2] | 0;
_4[base >> 2] = (v1 >>> slot) | (v2 << size);
_4[(base + 4) >> 2] = (v2 >>> slot) | (v3 << size);
_4[(base + 8) >> 2] = (v3 >>> slot) | (v0 << size);
_4[(base + 12) >> 2] = (v0 >>> slot) | (v1 << size);
} else if ((v0 | 0) == 32) {
slot = _4[base >> 2] | 0;
_4[base >> 2] = _4[(base + 4) >> 2];
_4[(base + 4) >> 2] = _4[(base + 8) >> 2];
_4[(base + 8) >> 2] = _4[(base + 12) >> 2];
_4[(base + 12) >> 2] = slot;
} else {
_4[base >> 2] = ((slot = _4[base >> 2] | 0) >>> v0) | ((size = _4[(base + 4) >> 2] | 0) << (32 - v0));
_4[(base + 4) >> 2] = (size >>> v0) | ((size = _4[(base + 8) >> 2] | 0) << (32 - v0));
_4[(base + 8) >> 2] = (size >>> v0) | ((size = _4[(base + 12) >> 2] | 0) << (32 - v0));
_4[(base + 12) >> 2] = (size >>> v0) | (slot << (32 - v0));
}
return;
default:
err(E_NOSUPPORT);
}
}
function bitXOR() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap ^ v0) | 0;
return;
case 0x02:
rParam = (rParam ^ v0) | 0;
return;
case 0x03:
rText = (rText ^ v0) | 0;
return;
case 0x04:
rEntity = (rEntity ^ v0) | 0;
return;
case 0x05:
rCode = (rCode ^ v0) | 0;
return;
case 0x06:
rCall = (rCall ^ v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body ^ v0) | 0;
return;
case 0x0A:
spine = (spine ^ v0) | 0;
return;
case 0x0B:
free = (free ^ v0) | 0;
return;
case 0x0C:
seed = (seed ^ v0) | 0;
return;
case 0x0D:
rSig = (rSig ^ v0) | 0;
return;
case 0x0E:
rVirt = (rVirt ^ v0) | 0;
return;
case 0x0F:
op = (op ^ v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = _1[base] ^ v0;
return;
case 1:
_2[base >> 1] = _2[base >> 1] ^ v0;
return;
case 4:
_4[(base + 12) >> 2] = _4[(base + 12) >> 2] ^ v3;
_4[(base + 8) >> 2] = _4[(base + 8) >> 2] ^ v2;
case 3:
_4[(base + 4) >> 2] = _4[(base + 4) >> 2] ^ v1;
case 2:
_4[base >> 2] = _4[base >> 2] ^ v0;
return;
default:
err(E_NOSUPPORT);
}
}
function cls() {
var i = 0;
for (;
(i | 0) < 8000; i = (i + 4) | 0) _4[i >> 2] = attr;
_4[8004 >> 2] = _4[8004 >> 2] | 1;
}
function $_cls() {
if (dead) return;
cls();
}
function compare() {
var slot = 0;
var base = 0;
var size = 0;
var x0 = 0;
var x1 = 0;
var x2 = 0;
var x3 = 0;
var f = 0.0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
base = rHeap;
break;
case 0x02:
base = rParam;
break;
case 0x03:
base = rText;
break;
case 0x04:
base = rEntity;
break;
case 0x05:
base = rCode;
break;
case 0x06:
base = rCall;
break;
case 0x07:
base = (ring << 2) | cmp;
break;
case 0x08:
err(E_INVALID);
break;
case 0x09:
base = body;
break;
case 0x0A:
base = spine;
break;
case 0x0B:
base = free;
break;
case 0x0C:
base = seed;
break;
case 0x0D:
base = rSig;
break;
case 0x0E:
base = rVirt;
break;
case 0x0F:
base = (op - rCode) | 0;
break;
default:
err(E_INVALID);
}
if (cmp = (base - v0) | 0) cmp = ((base ^ v0 ^ cmp) >>> 31) | (cmp & 0x80000001);
else cmp = 2;
return;
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
cmp = 0;
switch (size | 0) {
case 0:
base = _1[base] >>> 0;
if (cmp = (base - v0) | 0) cmp = (((base ^ v0 ^ cmp) >>> 7) | (cmp << 24)) & 0x80000001;
else cmp = 2;
return;
case 1:
base = _2[base >> 1] >>> 0;
if (cmp = (base - v0) | 0) cmp = (((base ^ v0 ^ cmp) >>> 15) | (cmp << 16)) & 0x80000001;
else cmp = 2;
return;
case 2:
base = _4[base >> 2] >>> 0;
if (cmp = (base - v0) | 0) cmp = ((base ^ v0 ^ cmp) >>> 31) | (cmp & 0x80000000);
else cmp = 2;
return;
case 3:
slot = ((size = _4[base >> 2] | 0) - v0) | 0;
base = (base + 4) | 0;
if ((slot >>> 0) > (size >>> 0)) cmp = ((_4[base >> 2] | 0) - v1 - 1) | 0;
else cmp = ((base = _4[base >> 2] | 0) - v1) | 0;
if (cmp | slot) cmp = ((base ^ v1 ^ cmp) >>> 31) | (cmp & 0x80000000);
else cmp = 2;
return;
case 4:
x0 = _4[base >> 2] >>> 0;
x1 = _4[(base + 4) >> 2] >>> 0;
x2 = _4[(base + 8) >> 2] >>> 0;
size = x3 = _4[(base + 12) >> 2] >>> 0;
base = slot = (x0 - v0) | 0;
if ((slot >>> 0) > (x0 >>> 0)) {
x1 = ((slot = x1) - 1) | 0;
if ((x1 >>> 0) > (slot >>> 0)) {
x2 = ((slot = x2) - 1) | 0;
if ((x2 >>> 0) > (slot >>> 0)) x3 = (x3 - 1) | 0;
}
}
base = base | (slot = (x1 - v1) | 0);
if ((slot >>> 0) > (x1 >>> 0)) {
x2 = ((slot = x2) - 1) | 0;
if ((x2 >>> 0) > (slot >>> 0)) x3 = (x3 - 1) | 0;
}
base = base | (slot = (x2 - v2) | 0);
if ((slot >>> 0) > (x2 >>> 0)) x3 = (x3 - 1) | 0;
cmp = (x3 - v3) | 0;
if (cmp | base) cmp = ((size ^ v3 ^ cmp) >>> 31) | (cmp & 0x80000000);
else cmp = 2;
return;
case 5:
f = +$f[base >> 2];
if (f == f0) cmp = 2;
else {
if (f < f0) cmp = 0x80000001;
else cmp = 0;
}
return;
case 6:
f = +$d[base >> 3];
if (f == f0) cmp = 2;
else {
if (f < f0) cmp = 0x80000001;
else cmp = 0;
}
return;
case 7:
default:
err(E_NOSUPPORT);
}
}
function convInt32() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF; /*if(cute&0x0800){switch((base=(cute>>12)&7)){case 0:if(ring)err(E_PERM);switch(slot|0){case 0x01:rHeap=(rHeap|v0)|0;return;case 0x02:rParam=(rParam|v0)|0;return;case 0x03:rText=(rText|v0)|0;return;case 0x04:rEntity=(rEntity|v0)|0;return;case 0x05:rCode=(rCode|v0)|0;return;case 0x06:rCall=(rCall|v0)|0;return;case 0x07:err(E_INVALID);case 0x08:err(E_INVALID);case 0x09:body=(body|v0)|0;return;case 0x0A:spine=(spine|v0)|0;return;case 0x0B:free=(free|v0)|0;return;case 0x0C:seed=(seed|v0)|0;return;case 0x0D:rSig=(rSig|v0)|0;return;case 0x0E:rVirt=(rVirt|v0)|0;return;case 0x0F:op=(op|v0)|0;return;default:err(E_INVALID);}case 1:base=rHeap;break;case 2:base=rParam;break;case 3:base=rText;break;case 4:base=rEntity;break;case 5:base=rCode;break;case 6:base=rCall;break;case 7:base=0;}base=(base+(_4[(rParam+slot)>>2]>>>0))>>>0;}else base=(rParam+slot)|0;switch(size|0){case 0:_1[base]=_1[base]|v0;return;case 1:_2[base>>1]=_2[base>>1]|v0;return;case 4:_4[(base+12)>>2]=_4[(base+12)>>2]|v3;_4[(base+8)>>2]=_4[(base+8)>>2]|v2;case 3:_4[(base+4)>>2]=_4[(base+4)>>2]|v1;case 2:_4[base>>2]=_4[base>>2]|v0;return;default:err(E_NOSUPPORT);}*/
}
function $_crash(addr) {
addr = addr | 0;
if (ring) err(E_PERM);
dead = 1;
_4[addr >> 2] = lastError;
_4[(addr + 4) >> 2] = spine;
_4[(addr + 8) >> 2] = body;
}
function $_cycle(tics) {
tics = tics | 0;
var row = 0;
var col = 0;
if (dead) err(E_INVALID);
for (;
(tics | 0) > 0; tics = (tics - 1) | 0) {
cute = _4[op >> 2] >>> 0;
op = (op + 4) >>> 0;
switch (cute & 0xff) {
case 0x00:
if (ring) err(E_PERM);
dead = 1;
err(E_HALT);
break;
case 0x01:
getSrc();
err(v0);
break;
case 0x02:
getSrc();
wait(v0 | 0);
break;
case 0x03:
v0 = v1 = v2 = v3 = 0;
getSrc();
finger();
fingerCnt = (fingerCnt + 1) | 0;
setDst();
break;
case 0x04:
fing0 = fing1 = fing2 = fing3 = fingerCnt = 0;
break;
case 0x05:
enhance();
setDst();
break;
case 0x06:
v0 = 16;
v1 = v2 = v3 = 0;
setDst();
break;
case 0x07:
if (ring) err(E_PERM);
enhance();
lock0 = v0;
lock1 = v1;
lock2 = v2;
lock3 = v3;
break;
case 0x08:
getSrc();
cute = v0;
if ((ring | 0) > (cute & 1)) {
enhance();
if (((lock0 | 0) != (v0 | 0)) | ((lock1 | 0) != (v1 | 0)) | ((lock2 | 0) != (v2 | 0)) | ((lock3 | 0) != (v3 | 0))) err(E_PERM);
}
ring = cute & 1;
break;
case 0x09:
getSrc();
setDst();
break;
case 0x0a:
getSrc();
compare();
break;
case 0x0b:
getSrc();
switch ((cute >> 18) & 0x3f) {
case 0:
op = (rCode + v0) >>> 0;
break;
case 1:
if (cmp & 2) op = (rCode + v0) >>> 0;
break;
case 2:
if (cmp & 0x80000000) op = (rCode + v0) >>> 0;
break;
case 3:
if (cmp & 0x80000002) op = (rCode + v0) >>> 0;
break;
case 4:
if ((cmp & 0x80000002) == 0) op = (rCode + v0) >>> 0;
break;
case 5:
if ((cmp & 0x80000000) == 0) op = (rCode + v0) >>> 0;
break;
case 6:
if ((cmp & 2) == 0) op = (rCode + v0) >>> 0;
break;
case 7:
if (cmp & 1) op = (rCode + v0) >>> 0;
break;
case 8:
if (cmp & 3) op = (rCode + v0) >>> 0;
break;
case 9:
if ((cmp & 3) == 0) op = (rCode + v0) >>> 0;
break;
case 10:
if ((cmp & 1) == 0) op = (rCode + v0) >>> 0;
break;
default:
err(E_INVALID);
}
break;
case 0x0c:
err(E_NOSUPPORT);
case 0x0d:
getSrc();
addition();
break;
case 0x0e:
getSrc();
subtraction();
break;
case 0x0f:
getSrc();
bitNOT();
break;
case 0x10:
getSrc();
bitXOR();
break;
case 0x11:
getSrc();
bitAND();
break;
case 0x12:
getSrc();
bitOR();
break;
case 0x13:
bitSHL();
break;
case 0x14:
bitSHRX();
break;
case 0x15:
bitSHR();
break;
case 0x16:
bitSpinL();
break;
case 0x17:
bitSpinR();
break;
case 0x18:
getSrc();
signExtend();
break;
case 0x19:
getSrc();
negate();
break;
case 0x1a:
getSrc();
multiplication();
break;
case 0x1b:
getSrc();
division();
break;
case 0x1c:
getSrc();
modulous();
break;
case 0x1d:
getSrc();
divisionUnsigned();
break;
case 0x1e:
getSrc();
modulousUnsigned();
break;
case 0x1f:
getSrc();
visit();
break;
case 0x20:
op = _4[(rCall + ret) >> 2] >>> 0;
ret = (ret - 4) >>> 0;
rParam = _4[(rCall + ret) >> 2] >>> 0;
ret = (ret - 4) >>> 0;
break;
case 0x23:
getSrc();
convInt32();
break;
case 0x21:
case 0x22:
case 0x24:
case 0x25:
case 0x26:
case 0x27:
case 0x28:
logv(cute & 0xff);
err(E_NOSUPPORT);
case 0x29:
f0 = +time();
setDst();
break;
case 0x2a:
f0 = +time();
v0 = ~~(f0 - delta);
delta = f0;
v1 = v2 = v3 = 0;
setDst();
break;
default:
err(E_INVALID);
}
}
return 0;
}
function division() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = ((rHeap | 0) / (v0 | 0)) | 0;
return;
case 0x02:
rParam = ((rParam | 0) / (v0 | 0)) | 0;
return;
case 0x03:
rText = ((rText | 0) / (v0 | 0)) | 0;
return;
case 0x04:
rEntity = ((rEntity | 0) / (v0 | 0)) | 0;
return;
case 0x05:
rCode = ((rCode | 0) / (v0 | 0)) | 0;
return;
case 0x06:
rCall = ((rCall | 0) / (v0 | 0)) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = ((body | 0) / (v0 | 0)) | 0;
return;
case 0x0A:
spine = ((spine | 0) / (v0 | 0)) | 0;
return;
case 0x0B:
free = ((free | 0) / (v0 | 0)) | 0;
return;
case 0x0C:
seed = ((seed | 0) / (v0 | 0)) | 0;
return;
case 0x0D:
rSig = ((rSig | 0) / (v0 | 0)) | 0;
return;
case 0x0E:
rVirt = ((rVirt | 0) / (v0 | 0)) | 0;
return;
case 0x0F:
op = ((op | 0) / (v0 | 0)) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = ((_1[base] << 24) >> 24) / ((v0 << 24) >> 24);
return;
case 1:
_2[base >> 1] = ((_2[base >> 1] << 16) >> 16) / ((v0 << 16) >> 16);
return;
case 2:
_4[base >> 2] = ((_4[base >> 2] | 0) / (v0 | 0)) | 0;
return;
case 3:
case 4:
err(E_NOSUPPORT);
case 5:
$f[base >> 2] = $f[base >> 2] / fround(f0);
return;
case 6:
$d[base >> 3] = $d[base >> 3] / f0;
return;
case 7:
default:
err(E_NOSUPPORT);
}
}
function divisionUnsigned() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = ((rHeap >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x02:
rParam = ((rParam >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x03:
rText = ((rText >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x04:
rEntity = ((rEntity >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x05:
rCode = ((rCode >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x06:
rCall = ((rCall >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = ((body >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x0A:
spine = ((spine >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x0B:
free = ((free >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x0C:
seed = ((seed >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x0D:
rSig = ((rSig >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x0E:
rVirt = ((rVirt >>> 0) / (v0 >>> 0)) >>> 0;
return;
case 0x0F:
op = ((op >>> 0) / (v0 >>> 0)) >>> 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = (_1[base] >>> 0) / (v0 >>> 0);
return;
case 1:
_2[base >> 1] = (_2[base >> 1] >>> 0) / (v0 >>> 0);
return;
case 2:
_4[base >> 2] = (_4[base >> 2] >>> 0) / (v0 >>> 0);
return;
case 3:
case 4:
err(E_NOSUPPORT);
case 5:
case 6:
case 7:
err(E_NOSUPPORT);
default:
err(E_NOSUPPORT);
}
}
function enhance() {
var e0 = 0;
var e1 = 0;
var e2 = 0;
var e3 = 0;
var fc = 0;
e0 = fing0;
e1 = fing1;
e2 = fing2;
e3 = fing3;
v1 = v2 = v3 = 0;
v0 = fingerCnt;
for (fc = 64;
(fc | 0) > 0; fc = (fc - 1) | 0) finger();
v0 = fing0;
v1 = fing1;
v2 = fing2;
v3 = fing3;
fing0 = e0;
fing1 = e1;
fing2 = e2;
fing3 = e3;
}
function err(e) {
e = e | 0;
lastError = e;
dead = 1;
error(e | 0);
}
function finger() {
var r = 0;
r = v0;
v0 = (v0 >>> 7) | (v1 << 25);
v1 = (v1 >>> 7) | (v2 << 25);
v2 = (v2 >>> 7) | (v3 << 25);
v3 = (v3 >>> 7) | (r << 25);
fing0 = ((fing0 & 0x6487ED51) + fing2 + (v0 ^ 0x10B4611A)) | 0;
fing1 = ((fing1 ^ 0x62633145) + fing3 + (v1 ^ 0xC06E0E68)) | 0;
fing2 = ((fing2 ^ 0x94812704) + fing0 + (v2 ^ 0x4533E63A)) | 0;
fing3 = ((fing3 & 0x0105DF53) + fing1 + (v3 ^ 0x1D89CD91)) | 0;
v0 = (fing1 + fing3) | 0;
v1 = (fing2 + fing0) | 0;
v2 = (fing3 + fing2) | 0;
v3 = (fing0 + fing1) | 0;
r = v0;
v0 = (v0 >>> 15) | (v1 << 17);
v1 = (v1 >>> 15) | (v2 << 17);
v2 = (v2 >>> 15) | (v3 << 17);
v3 = (v3 >>> 15) | (r << 17);
fing0 = ((fing0 & 0x28A5043C) + fing2 + (v0 ^ 0xC71A026E)) | 0;
fing1 = ((fing1 ^ 0xF7CA8CD9) + fing3 + (v1 ^ 0xE69D218D)) | 0;
fing2 = ((fing2 ^ 0x98158536) + fing0 + (v2 ^ 0xF92F8A1B)) | 0;
fing3 = ((fing3 & 0xA7F09AB6) + fing1 + (v3 ^ 0xB6A8E122)) | 0;
v0 = (fing1 + fing3) | 0;
v1 = (fing2 + fing0) | 0;
v2 = (fing3 + fing2) | 0;
v3 = (fing0 + fing1) | 0;
r = v0;
v0 = (v0 >>> 21) | (v1 << 11);
v1 = (v1 >>> 21) | (v2 << 11);
v2 = (v2 >>> 21) | (v3 << 11);
v3 = (v3 >>> 21) | (r << 11);
fing0 = ((fing0 & 0xF242DABB) + fing2 + (v0 ^ 0x312F3F63)) | 0;
fing1 = ((fing1 ^ 0x7A262174) + fing3 + (v1 ^ 0xD31BF6B5)) | 0;
fing2 = ((fing2 ^ 0x85FFAE5B) + fing0 + (v2 ^ 0x7A035BF6)) | 0;
fing3 = ((fing3 & 0xF71C35FD) + fing1 + (v3 ^ 0xAD44CFD2)) | 0;
v0 = (fing1 + fing3) | 0;
v1 = (fing2 + fing0) | 0;
v2 = (fing3 + fing2) | 0;
v3 = (fing0 + fing1) | 0;
}
function getSrc() {
v0 = (cute >>> 24) | 0;
if (cute & 0x8000) {
switch ((cute >>> 8) & 7) {
case 0:
return;
case 1:
v0 = _2[op >> 1] | 0;
op = (op + 4) | 0;
return;
case 2:
if (v0) {
if (ring) err(E_PERM);
switch (v0 | 0) {
case 0x01:
v0 = rHeap;
return;
case 0x02:
v0 = rParam;
return;
case 0x03:
v0 = rText;
return;
case 0x04:
v0 = rEntity;
return;
case 0x05:
v0 = rCode;
return;
case 0x06:
v0 = rCall;
return;
case 0x07:
v0 = (ring << 2) | cmp;
return;
case 0x08:
err(E_INVALID);
case 0x09:
v0 = body;
return;
case 0x0A:
v0 = spine;
return;
case 0x0B:
v0 = free;
return;
case 0x0C:
v0 = seed;
return;
case 0x0D:
v0 = rSig;
return;
case 0x0E:
v0 = rVirt;
return;
case 0x0F:
v0 = (op - rCode) | 0;
return;
default:
}
err(E_INVALID);
}
v0 = _4[op >> 2] | 0;
op = (op + 4) | 0;
return;
case 7:
case 4:
v0 = _4[op >> 2] | 0;
v1 = _4[(op + 4) >> 2] | 0;
v2 = _4[(op + 8) >> 2] | 0;
v3 = _4[(op + 12) >> 2] | 0;
op = (op + 16) | 0;
return;
case 3:
v0 = _4[op >> 2] | 0;
v1 = _4[(op + 4) >> 2] | 0;
op = (op + 8) | 0;
return;
case 5:
f0 = +$f[op >> 2];
op = (op + 4) | 0;
return;
case 6:
f0 = +$d[(op = (op + 7) | 0) >> 3];
op = ((op & 0xfffffff8) + 8) | 0;
return;
default:
}
}
if ((cute & 0x0800) == 0) {
switch ((cute >> 12) & 7) {
case 0:
v0 = (rParam + v0) >>> 0;
break;
case 1:
v0 = ((_4[(rParam + v0) >> 2] >>> 0) + rHeap) >>> 0;
break;
case 2:
v0 = ((_4[(rParam + v0) >> 2] >>> 0) + rParam) >>> 0;
break;
case 3:
v0 = ((_4[(rParam + v0) >> 2] >>> 0) + rText) >>> 0;
break;
case 4:
v0 = ((_4[(rParam + v0) >> 2] >>> 0) + rEntity) >>> 0;
break;
case 5:
v0 = ((_4[(rParam + v0) >> 2] >>> 0) + rCode) >>> 0;
break;
case 6:
v0 = ((_4[(rParam + v0) >> 2] >>> 0) + rCall) >>> 0;
break;
case 7:
v0 = _4[(rParam + v0) >> 2] >>> 0;
break;
}
} else {
v0 = (rParam + v0) >>> 0;
}
switch ((cute >>> 8) & 7) {
case 4:
case 7:
v3 = _4[(v0 + 12) >> 2] >>> 0;
v2 = _4[(v0 + 8) >> 2] >>> 0;
case 3:
v1 = _4[(v0 + 4) >> 2] >>> 0;
case 2:
v0 = _4[v0 >> 2] >>> 0;
break;
case 1:
v0 = _2[v0 >> 1] >>> 0;
break;
case 0:
v0 = _1[v0] >>> 0;
break;
case 5:
f0 = +$f[v0 >> 2];
break;
case 6:
f0 = +$d[v0 >> 3];
default:
}
}
function $_getRing() {
return ring | 0;
}
function grow(max) {
max = max | 0;
var pos = 0;
var mem = 0;
var next = 0;
if (((spine + 0x1fff) | 0) > (max | 0) | ((spine + (max >>> 10)) | 0) > (max | 0)) {
body = max;
err(E_NOMEM);
}
max = (max & 0xffffe000);
next = free;
for (pos = max;
(pos | 0) > (body | 0); pos = (pos - 0x2000) | 0) {
mem = pos >>> 10;
_4[(spine + mem) >> 2] = 0x0e02;
_4[(spine + mem + 4) >> 2] = 0x0c03;
next = mem;
}
free = mem;
body = max;
}
function halt() {
dead = 1;
err(E_HALT);
}
function $_halt() {
dead = 1;
err(E_HALT);
}
function $_init(max, pos, arg, k0, k1, k2, k3) {
max = max | 0;
pos = pos | 0;
arg = arg | 0;
k0 = k0 | 0;
k1 = k1 | 0;
k2 = k2 | 0;
k3 = k3 | 0;
if (ini) err(E_INVALID);
spine = 0;
body = max;
if ((lock0 = k0) | (lock1 = k1) | (lock2 = k2) | (lock3 = k3)) ring = 1;
else ring = 0;
rParam = arg;
rCode = pos;
op = rCode;
ret = 0;
ini = 1;
dead = 0;
born = +time();
return 0;
}
function modulous() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = ((rHeap | 0) % (v0 | 0)) | 0;
return;
case 0x02:
rParam = ((rParam | 0) % (v0 | 0)) | 0;
return;
case 0x03:
rText = ((rText | 0) % (v0 | 0)) | 0;
return;
case 0x04:
rEntity = ((rEntity | 0) % (v0 | 0)) | 0;
return;
case 0x05:
rCode = ((rCode | 0) % (v0 | 0)) | 0;
return;
case 0x06:
rCall = ((rCall | 0) % (v0 | 0)) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = ((body | 0) % (v0 | 0)) | 0;
return;
case 0x0A:
spine = ((spine | 0) % (v0 | 0)) | 0;
return;
case 0x0B:
free = ((free | 0) % (v0 | 0)) | 0;
return;
case 0x0C:
seed = ((seed | 0) % (v0 | 0)) | 0;
return;
case 0x0D:
rSig = ((rSig | 0) % (v0 | 0)) | 0;
return;
case 0x0E:
rVirt = ((rVirt | 0) % (v0 | 0)) | 0;
return;
case 0x0F:
op = ((op | 0) % (v0 | 0)) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = ((_1[base] << 24) >> 24) % ((v0 << 24) >> 24);
return;
case 1:
_2[base >> 1] = ((_2[base >> 1] << 16) >> 16) % ((v0 << 16) >> 16);
return;
case 2:
_4[base >> 2] = ((_4[base >> 2] | 0) % (v0 | 0)) | 0;
return;
case 3:
case 4:
err(E_NOSUPPORT);
case 5:
$f[base >> 2] = fround((+$f[base >> 2]) % f0);
return;
case 6:
$d[base >> 3] = $d[base >> 3] % f0;
return;
case 7:
default:
err(E_NOSUPPORT);
}
}
function modulousUnsigned() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = ((rHeap >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x02:
rParam = ((rParam >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x03:
rText = ((rText >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x04:
rEntity = ((rEntity >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x05:
rCode = ((rCode >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x06:
rCall = ((rCall >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = ((body >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x0A:
spine = ((spine >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x0B:
free = ((free >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x0C:
seed = ((seed >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x0D:
rSig = ((rSig >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x0E:
rVirt = ((rVirt >>> 0) % (v0 >>> 0)) >>> 0;
return;
case 0x0F:
op = ((op >>> 0) % (v0 >>> 0)) >>> 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = (_1[base] >>> 0) % (v0 >>> 0);
return;
case 1:
_2[base >> 1] = (_2[base >> 1] >>> 0) % (v0 >>> 0);
return;
case 2:
_4[base >> 2] = (_4[base >> 2] >>> 0) % (v0 >>> 0);
return;
case 3:
case 4:
err(E_NOSUPPORT);
case 5:
case 6:
case 7:
err(E_NOSUPPORT);
default:
err(E_NOSUPPORT);
}
}
function multiplication() {
var slot = 0;
var base = 0;
var size = 0;
var f = 0.0;
var v4 = 0;
var v5 = 0;
var v6 = 0;
var v7 = 0;
var x0 = 0;
var x1 = 0;
var x2 = 0;
var x3 = 0;
var x4 = 0;
var x5 = 0;
var x6 = 0;
var x7 = 0;
var r0 = 0;
var r1 = 0;
var r2 = 0;
var r3 = 0;
var r4 = 0;
var r5 = 0;
var r6 = 0;
var r7 = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = imul(rHeap | 0, v0 | 0) | 0;
return;
case 0x02:
rParam = imul(rParam | 0, v0 | 0) | 0;
return;
case 0x03:
rText = imul(rText | 0, v0 | 0) | 0;
return;
case 0x04:
rEntity = imul(rEntity | 0, v0 | 0) | 0;
return;
case 0x05:
rCode = imul(rCode | 0, v0 | 0) | 0;
return;
case 0x06:
rCall = imul(rCall | 0, v0 | 0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = imul(body | 0, v0 | 0) | 0;
return;
case 0x0A:
spine = imul(spine | 0, v0 | 0) | 0;
return;
case 0x0B:
free = imul(free | 0, v0 | 0) | 0;
return;
case 0x0C:
seed = imul(seed | 0, v0 | 0) | 0;
return;
case 0x0D:
rSig = imul(rSig | 0, v0 | 0) | 0;
return;
case 0x0E:
rVirt = imul(rVirt | 0, v0 | 0) | 0;
return;
case 0x0F:
op = imul(op | 0, v0 | 0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = imul(_1[base] | 0, v0 | 0) | 0;
return;
case 1:
_2[base >> 1] = imul(_2[base >> 1] | 0, v0 | 0) | 0;
return;
case 2:
_4[base >> 2] = imul(_4[base >> 2] | 0, v0 | 0) | 0;
return;
case 3:
v3 = (v1 >>> 16);
v2 = (v1 & 0xffff);
v1 = (v0 >>> 16);
v0 = (v0 & 0xffff);
x0 = (x1 = _4[base >> 2] >>> 0) & 0xffff;
x1 = x1 >>> 16;
x2 = (x3 = _4[(base + 4) >> 2] >>> 0) & 0xffff;
x3 = x3 >>> 16;
r0 = imul(v0 | 0, x0 | 0) | 0;
slot = r0 & 0xffff;
size = r0 >>> 16;
r0 = imul(v1 | 0, x0 | 0) | 0;
r1 = imul(v0 | 0, x1 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + size) >>> 0;
_4[base >> 2] = (size << 16) | slot;
size = ((size >>> 16) + (r0 >>> 16) + (r1 >>> 16)) >>> 0;
r0 = imul(v2 | 0, x0 | 0) | 0;
r1 = imul(v1 | 0, x1 | 0) | 0;
r2 = imul(v0 | 0, x2 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + (r2 & 0xffff) + size) >>> 0;
slot = size & 0xffff;
size = ((size >>> 16) + (r0 >>> 16) + (r1 >>> 16) + (r2 >>> 16)) >>> 0;
r0 = imul(v3 | 0, x0 | 0) | 0;
r1 = imul(v2 | 0, x1 | 0) | 0;
r2 = imul(v1 | 0, x2 | 0) | 0;
r3 = imul(v0 | 0, x3 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + (r2 & 0xffff) + (r3 & 0xffff) + size) >>> 0;
_4[(base + 4) >> 2] = (size << 16) | slot;
return;
case 4:
v7 = v3 >>> 16;
v6 = v3 & 0xffff;
v5 = v2 >>> 16;
v4 = v2 & 0xffff;
v3 = v1 >>> 16;
v2 = v1 & 0xffff;
v1 = v0 >>> 16;
v0 = v0 & 0xffff;
x0 = (x1 = _4[base >> 2] | 0) & 0xffff;
x1 = x1 >>> 16;
x2 = (x3 = _4[(base + 4) >> 2] | 0) & 0xffff;
x3 = x3 >>> 16;
x4 = (x5 = _4[(base + 8) >> 2] | 0) & 0xffff;
x5 = x5 >>> 16;
x6 = (x7 = _4[(base + 12) >> 2] | 0) & 0xffff;
x7 = x7 >>> 16;
r0 = imul(v0 | 0, x0 | 0) | 0;
slot = r0 & 0xffff;
size = r0 >>> 16;
r0 = imul(v1 | 0, x0 | 0) | 0;
r1 = imul(v0 | 0, x1 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + size) >>> 0;
_4[base >> 2] = (size << 16) | slot;
size = ((size >>> 16) + (r0 >>> 16) + (r1 >>> 16)) >>> 0;
r0 = imul(v2 | 0, x0 | 0) | 0;
r1 = imul(v1 | 0, x1 | 0) | 0;
r2 = imul(v0 | 0, x2 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + (r2 & 0xffff) + size) >>> 0;
slot = size & 0xffff;
size = ((size >>> 16) + (r0 >>> 16) + (r1 >>> 16) + (r2 >>> 16)) >>> 0;
r0 = imul(v3 | 0, x0 | 0) | 0;
r1 = imul(v2 | 0, x1 | 0) | 0;
r2 = imul(v1 | 0, x2 | 0) | 0;
r3 = imul(v0 | 0, x3 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + (r2 & 0xffff) + (r3 & 0xffff) + size) >>> 0;
_4[(base + 4) >> 2] = (size << 16) | slot;
size = ((size >>> 16) + (r0 >>> 16) + (r1 >>> 16) + (r2 >>> 16) + (r3 >>> 16)) >>> 0;
r0 = imul(v4 | 0, x0 | 0) | 0;
r1 = imul(v3 | 0, x1 | 0) | 0;
r2 = imul(v2 | 0, x2 | 0) | 0;
r3 = imul(v1 | 0, x3 | 0) | 0;
r4 = imul(v0 | 0, x4 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + (r2 & 0xffff) + (r3 & 0xffff) + (r4 & 0xffff) + size) >>> 0;
slot = size & 0xffff;
size = ((size >>> 16) + (r0 >>> 16) + (r1 >>> 16) + (r2 >>> 16) + (r3 >>> 16) + (r4 >>> 16)) >>> 0;
r0 = imul(v5 | 0, x0 | 0) | 0;
r1 = imul(v4 | 0, x1 | 0) | 0;
r2 = imul(v3 | 0, x2 | 0) | 0;
r3 = imul(v2 | 0, x3 | 0) | 0;
r4 = imul(v1 | 0, x4 | 0) | 0;
r5 = imul(v0 | 0, x5 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + (r2 & 0xffff) + (r3 & 0xffff) + (r4 & 0xffff) + (r5 & 0xffff) + size) >>> 0;
_4[(base + 8) >> 2] = (size << 16) | slot;
size = ((size >>> 16) + (r0 >>> 16) + (r1 >>> 16) + (r2 >>> 16) + (r3 >>> 16) + (r4 >>> 16) + (r5 >>> 16)) >>> 0;
r0 = imul(v6 | 0, x0 | 0) | 0;
r1 = imul(v5 | 0, x1 | 0) | 0;
r2 = imul(v4 | 0, x2 | 0) | 0;
r3 = imul(v3 | 0, x3 | 0) | 0;
r4 = imul(v2 | 0, x4 | 0) | 0;
r5 = imul(v1 | 0, x5 | 0) | 0;
r6 = imul(v0 | 0, x6 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + (r2 & 0xffff) + (r3 & 0xffff) + (r4 & 0xffff) + (r5 & 0xffff) + (r6 & 0xffff) + size) >>> 0;
slot = size & 0xffff;
size = ((size >>> 16) + (r0 >>> 16) + (r1 >>> 16) + (r2 >>> 16) + (r3 >>> 16) + (r4 >>> 16) + (r5 >>> 16) + (r6 >>> 16)) >>> 0;
r0 = imul(v7 | 0, x0 | 0) | 0;
r1 = imul(v6 | 0, x1 | 0) | 0;
r2 = imul(v5 | 0, x2 | 0) | 0;
r3 = imul(v4 | 0, x3 | 0) | 0;
r4 = imul(v3 | 0, x4 | 0) | 0;
r5 = imul(v2 | 0, x5 | 0) | 0;
r6 = imul(v1 | 0, x6 | 0) | 0;
r7 = imul(v0 | 0, x7 | 0) | 0;
size = ((r0 & 0xffff) + (r1 & 0xffff) + (r2 & 0xffff) + (r3 & 0xffff) + (r4 & 0xffff) + (r5 & 0xffff) + (r6 & 0xffff) + (r7 & 0xffff) + size) >>> 0;
_4[(base + 12) >> 2] = (size << 16) | slot;
return;
case 5:
$f[base >> 2] = fround(+$f[base >> 2] * f0);
return;
case 6:
$d[base >> 3] = $d[base >> 3] * f0;
return;
case 7:
default:
err(E_NOSUPPORT);
}
}
function negate() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (-v0) | 0;
return;
case 0x02:
rParam = (-v0) | 0;
return;
case 0x03:
rText = (-v0) | 0;
return;
case 0x04:
rEntity = (-v0) | 0;
return;
case 0x05:
rCode = (-v0) | 0;
return;
case 0x06:
rCall = (-v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (-v0) | 0;
return;
case 0x0A:
spine = (-v0) | 0;
return;
case 0x0B:
free = (-v0) | 0;
return;
case 0x0C:
seed = (-v0) | 0;
return;
case 0x0D:
rSig = (-v0) | 0;
return;
case 0x0E:
rVirt = (-v0) | 0;
return;
case 0x0F:
op = (-v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = (-v0) | 0;
return;
case 1:
_2[base >> 1] = (-v0) | 0;
return;
case 2:
_4[base >> 2] = (-v0) | 0;
return;
case 3:
_4[base >> 2] = slot = ((size = (~v0) | 0) + 1) | 0;
base = (base + 4) | 0;
if ((slot >>> 0) < (size >>> 0)) _4[base >> 2] = ((~v1) + 1) | 0;
else _4[base >> 2] = ~v1;
return;
case 4:
_4[base >> 2] = slot = ((size = (~v0) | 0) + 1) | 0;
if ((slot >>> 0) < (size >>> 0)) {
_4[(base + 4) >> 2] = slot = ((size = (~v1) | 0) + 1) | 0;
if ((slot >>> 0) < (size >>> 0)) {
_4[(base + 8) >> 2] = slot = ((size = (~v2) | 0) + 1) | 0;
if ((slot >>> 0) < (size >>> 0)) _4[(base + 12) >> 2] = ((~v3) + 1) | 0;
else _4[(base + 12) >> 2] = ~v3;
} else {
_4[(base + 8) >> 2] = ~v2;
_4[(base + 12) >> 2] = ~v3;
}
} else {
_4[(base + 4) >> 2] = ~v1;
_4[(base + 8) >> 2] = ~v2;
_4[(base + 12) >> 2] = ~v3;
}
return;
case 5:
$f[base >> 2] = fround(-f0);
return;
case 6:
$d[base >> 3] = -f0;
return;
case 7:
default:
err(E_NOSUPPORT);
}
}
function notRoot() {
if (dead) return 1;
if (ring) err(E_PERM);
return 0;
}
function $_reset() {
if (ring) err(E_PERM);
}
function setDst() {
var slot = 0;
var base = 0;
var size = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x00:
return;
case 0x01:
rHeap = v0;
return;
case 0x02:
rParam = v0;
return;
case 0x03:
rText = v0;
return;
case 0x04:
rEntity = v0;
return;
case 0x05:
rCode = v0;
return;
case 0x06:
rCall = v0;
return;
case 0x07:
ring = (v0 >>> 2) & 1;
cmp = 0x80000003 & v0;
return;
case 0x08:
err(E_INVALID);
return;
case 0x09:
body = v0;
return;
case 0x0A:
spine = v0;
return;
case 0x0B:
free = v0;
return;
case 0x0C:
seed = v0;
return;
case 0x0D:
rSig = v0;
return;
case 0x0E:
rVirt = v0;
return;
case 0x0F:
op = (v0 + rCode) | 0;
return;
default:
}
err(E_INVALID);
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else {
base = (rParam + slot) >>> 0;
}
switch (size | 0) {
case 0:
_1[base] = v0 >>> 0;
return;
case 1:
_2[base >> 1] = v0 >>> 0;
return;
case 4:
case 7:
_4[(base + 12) >> 2] = v3 >>> 0;
_4[(base + 8) >> 2] = v2 >>> 0;
case 3:
_4[(base + 4) >> 2] = v1 >>> 0;
case 2:
_4[base >> 2] = v0 >>> 0;
return;
case 5:
$f[base >> 2] = f0;
return;
case 6:
$d[base >> 3] = f0;
return;
default:
}
}
function $_setRing(which) {
which = which | 0;
if (dead) err(E_INVALID);
if ((ring | 0) > (which & 1)) {
enhance();
if (((lock0 | 0) != (v0 | 0)) | ((lock1 | 0) != (v1 | 0)) | ((lock2 | 0) != (v2 | 0)) | ((lock3 | 0) != (v3 | 0))) err(E_PERM);
}
ring = which & 1;
}
function signExtend() {
var slot = 0;
var base = 0;
var size = 0;
var x0 = 0;
var x1 = 0;
var x2 = 0;
var x3 = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (v0 << 16) >> 16;
return;
case 0x02:
rParam = (v0 << 16) >> 16;
return;
case 0x03:
rText = (v0 << 16) >> 16;
return;
case 0x04:
rEntity = (v0 << 16) >> 16;
return;
case 0x05:
rCode = (v0 << 16) >> 16;
return;
case 0x06:
rCall = (v0 << 16) >> 16;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (v0 << 16) >> 16;
return;
case 0x0A:
spine = (v0 << 16) >> 16;
return;
case 0x0B:
free = (v0 << 16) >> 16;
return;
case 0x0C:
seed = (v0 << 16) >> 16;
return;
case 0x0D:
rSig = (v0 << 16) >> 16;
return;
case 0x0E:
rVirt = (v0 << 16) >> 16;
return;
case 0x0F:
op = (v0 << 16) >> 16;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = (v0 << 28) >> 28;
return;
case 1:
_2[base >> 1] = (v0 << 24) >> 24;
return;
case 2:
_4[base >> 2] = (v0 << 16) >> 16;
return;
case 3:
_4[base >> 2] = v0;
_4[(base + 4) >> 2] = v0 >> 31;
return;
case 4:
_4[base >> 2] = v0;
_4[(base + 4) >> 2] = v1;
_4[(base + 8) >> 2] = _4[(base + 12) >> 2] = v1 >> 31;
return;
default:
err(E_NOSUPPORT);
}
}
function subtraction() {
var slot = 0;
var base = 0;
var size = 0;
var f = 0.0;
var x0 = 0;
var x1 = 0;
var x2 = 0;
var x3 = 0;
size = (cute >>> 8) & 7;
slot = (cute >>> 16) & 0xFF;
if (cute & 0x0800) {
switch ((base = (cute >> 12) & 7)) {
case 0:
if (ring) err(E_PERM);
switch (slot | 0) {
case 0x01:
rHeap = (rHeap - v0) | 0;
return;
case 0x02:
rParam = (rParam - v0) | 0;
return;
case 0x03:
rText = (rText - v0) | 0;
return;
case 0x04:
rEntity = (rEntity - v0) | 0;
return;
case 0x05:
rCode = (rCode - v0) | 0;
return;
case 0x06:
rCall = (rCall - v0) | 0;
return;
case 0x07:
err(E_INVALID);
case 0x08:
err(E_INVALID);
case 0x09:
body = (body - v0) | 0;
return;
case 0x0A:
spine = (spine - v0) | 0;
return;
case 0x0B:
free = (free - v0) | 0;
return;
case 0x0C:
seed = (seed - v0) | 0;
return;
case 0x0D:
rSig = (rSig - v0) | 0;
return;
case 0x0E:
rVirt = (rVirt - v0) | 0;
return;
case 0x0F:
op = (op - v0) | 0;
return;
default:
err(E_INVALID);
}
case 1:
base = rHeap;
break;
case 2:
base = rParam;
break;
case 3:
base = rText;
break;
case 4:
base = rEntity;
break;
case 5:
base = rCode;
break;
case 6:
base = rCall;
break;
case 7:
base = 0;
}
base = (base + (_4[(rParam + slot) >> 2] >>> 0)) >>> 0;
} else base = (rParam + slot) | 0;
switch (size | 0) {
case 0:
_1[base] = (_1[base] >>> 0) - v0;
return;
case 1:
_2[base >> 1] = (_2[base >> 1] >>> 0) - v0;
return;
case 2:
_4[base >> 2] = (_4[base >> 2] >>> 0) - v0;
return;
case 3:
slot = (_4[base >> 2] = (size = _4[base >> 2] | 0) - v0) | 0;
base = (base + 4) | 0;
if ((slot >>> 0) > (size >>> 0)) _4[base >> 2] = (_4[base >> 2] | 0) - v1 - 1;
else _4[base >> 2] = (_4[base >> 2] | 0) - v1;
return;
case 4:
x0 = _4[base >> 2] >>> 0;
x1 = _4[(base + 4) >> 2] >>> 0;
x2 = _4[(base + 8) >> 2] >>> 0;
x3 = _4[(base + 12) >> 2] >>> 0;
_4[base >> 2] = slot = (x0 - v0) | 0;
if ((slot >>> 0) > (x0 >>> 0)) {
x1 = ((slot = x1) - 1) | 0;
if ((x1 >>> 0) > (slot >>> 0)) {
x2 = ((slot = x2) - 1) | 0;
if ((x2 >>> 0) > (slot >>> 0)) x3 = (x3 - 1) | 0;
}
}
_4[(base + 4) >> 2] = slot = (x1 - v1) | 0;
if ((slot >>> 0) > (x1 >>> 0)) {
x2 = ((slot = x2) - 1) | 0;
if ((x2 >>> 0) > (slot >>> 0)) x3 = (x3 - 1) | 0;
}
_4[(base + 8) >> 2] = slot = (x2 - v2) | 0;
if ((slot >>> 0) > (x2 >>> 0)) x3 = (x3 - 1) | 0;
_4[(base + 12) >> 2] = (x3 - v3) | 0;
return;
case 5:
$f[base >> 2] = $f[base >> 2] - fround(f0);
return;
case 6:
$d[base >> 3] = $d[base >> 3] - f0;
return;
case 7:
default:
err(E_NOSUPPORT);
}
}
function visit() {
var adj = 0;
adj = (cute >>> 14) & 0x3Fc;
ret = (ret + 4) >>> 0;
_4[(rCall + ret) >> 2] = rParam;
ret = (ret + 4) >>> 0;
_4[(rCall + ret) >> 2] = op;
rParam = (rParam + adj) >>> 0;
op = (rCode + v0) >>> 0;
}
return {
attrib: $_attrib,
cls: $_cls,
crash: $_crash,
cycle: $_cycle,
getRing: $_getRing,
halt: $_halt,
init: $_init,
setRing: $_setRing
};
Jump to Line
Something went wrong with that request. Please try again.