Skip to content

Instantly share code, notes, and snippets.

@s-macke
Last active March 7, 2018 20:31
Show Gist options
  • Save s-macke/0d79d2ba78a022269cb7859a44174015 to your computer and use it in GitHub Desktop.
Save s-macke/0d79d2ba78a022269cb7859a44174015 to your computer and use it in GitHub Desktop.
OpenRISC ELF Executable fbdemo recompiled to asm.js
function (global, env, heap) {
"use asm";
var Exception = env.Exception;
var r = new global.Int32Array(heap);
var h = new global.Int32Array(heap);
var b = new global.Uint8Array(heap);
var w = new global.Uint16Array(heap);
/*
var ramp = 0x100000;
var group1p = 0x4000;
var current_pgd = 0x0;
var EXCEPT_DPF = 0x300;
*/
var ramp = env.ramp|0;
var group1p = env.group1p|0;
var current_pgd = env.current_pgd|0;
var EXCEPT_DPF = env.EXCEPT_DPF|0;
function GetPC() {
return r[34]|0;
}
function GetSR_F() {
return r[35]|0;
}
// disassembled dtlb miss exception handler arch/openrisc/kernel/head.S, kernel dependent
function DTLBRefill(addr, nsets, pc, SR_F, delayed_ins) {
addr = addr | 0;
nsets = nsets | 0;
pc = pc | 0;
SR_F = SR_F | 0;
delayed_ins = delayed_ins | 0;
var r2 = 0;
var r3 = 0;
var r4 = 0;
var r5 = 0;
r2 = addr|0;
// get_current_PGD using r3 and r5
r3 = h[ramp+current_pgd >> 2]|0; // current pgd
r4 = (r2 >>> 0x18) << 2;
r5 = r4 + r3|0;
r4 = (0x40000000 + r5) | 0; // r4 = phys(r5)
r3 = h[ramp+r4 >> 2]|0;
if ((r3|0) == 0) {
r[34] = (pc|0) - ((delayed_ins|0)?4:0)|0;
r[35] = SR_F|0;
Exception(EXCEPT_DPF, addr);
return 0|0;
}
//r3 = r3 & ~PAGE_MASK
r3 = 0xffffe000;
// d_pmd_good:
r4 = h[ramp+r4 >> 2]|0; // get pmd value
r4 = r4 & r3; // & PAGE_MASK
r5 = r2 >>> 0xD;
r3 = r5 & 0x7FF;
r3 = r3 << 0x2;
r3 = r3 + r4|0;
r2 = h[ramp+r3 >> 2]|0;
if ((r2 & 1) == 0) {
r[34] = (pc|0) - ((delayed_ins|0)?4:0)|0;
r[35] = SR_F|0;
Exception(EXCEPT_DPF, addr);
return 0|0;
//d_pmd_none:
//page fault
}
//r3 = 0xFFFFe3fa; // PAGE_MASK | DTLB_UP_CONVERT_MASK
// fill dtlb tr register
r4 = r2 & 0xFFFFe3fa;
r5 = r5 & (nsets - 1);
h[group1p+((0x280 | r5)<<2) >> 2] = r4;
// fill DTLBMR register
r2 = addr;
r4 = r2 & 0xFFFFE000;
r4 = r4 | 0x1;
h[group1p+((0x200 | r5)<<2) >> 2] = r4;
return 1|0;
}
/* only for user mode */
function DTLBLookup(addr, write, pc, SR_F, delayed_ins) {
addr = addr | 0;
write = write | 0;
pc = pc | 0;
SR_F = SR_F | 0;
delayed_ins = delayed_ins | 0;
var setindex = 0;
var tlmbr = 0;
var tlbtr = 0;
// pagesize is 8192 bytes
// nways are 1
// nsets are 64
setindex = (addr >> 13) & 63; // check these values
tlmbr = h[group1p + ((0x200 | setindex) << 2) >> 2]|0; // match register
if ((tlmbr & 1) == 0) {
// use tlb refill to fasten up
if (DTLBRefill(addr, 64, pc, SR_F, delayed_ins)|0) {
tlmbr = h[group1p + (0x200 + setindex << 2) >> 2]|0;
} else {
return -1|0;
}
}
if ((tlmbr >> 19) != (addr >> 19)) {
if (DTLBRefill(addr, 64, pc, SR_F, delayed_ins)|0) {
tlmbr = h[group1p + (0x200 + setindex << 2) >> 2]|0;
} else {
return -1|0;
}
}
tlbtr = h[group1p + ((0x280 | setindex)<<2) >> 2]|0; // translate register
if (!write) {
if (!(tlbtr & 0x40)) {
r[34] = (pc|0) - ((delayed_ins|0)?4:0)|0;
r[35] = SR_F|0;
Exception(EXCEPT_DPF, addr);
return -1|0;
}
} else {
if (!(tlbtr & 0x80)) {
r[34] = (pc|0) - ((delayed_ins|0)?4:0)|0;
r[35] = SR_F|0;
Exception(EXCEPT_DPF, addr);
return -1|0;
}
}
return ((tlbtr & 0xFFFFE000) | (addr & 0x1FFF))|0;
}
function Exec(pc, cycles, SR_F) {
pc = pc | 0;
cycles = cycles | 0;
SR_F = SR_F | 0;
var ins = 0;
var jump = 0;
var delayedins = 0;
var ah = 0;
var al = 0;
var bh = 0;
var bl = 0;
var paddr = 0;
var vaddr = 0;
var readtlblookup = -1;
var writetlblookup = -1;
var readtlbcheck = -1;
var writetlbcheck = -1;
// unnecessary but for debugging
r[34] = pc|0;
r[35] = SR_F|0;
while(1) {
if ((cycles|0) <= 0) {
r[34] = pc|0;
r[35] = SR_F|0;
return 0;
}
switch(pc>>2) {
case 0x000008cb: // 0x0000232c
r[1] = (r[1]|0) -4|0;
cycles = cycles - 1|0;
case 0x000008cc: // 0x00002330
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2330, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
jump=0x26e4;
r[9]=0x233c;
delayedins = 1;
// nop
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008cf: // 0x0000233c
jump=0x29ec;
r[9]=0x2344;
delayedins = 1;
// nop
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008d1: // 0x00002344
vaddr = (r[1]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2344, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[9];
delayedins = 1;
r[1] = (r[1]|0) + 4|0;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008d4: // 0x00002350
r[12] = 0x00000000;
r[12] = r[12] | 0x4e30;
cycles = cycles - 2|0;
case 0x000008d6: // 0x00002358
vaddr = (r[12]|0) + 4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2358, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[15] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x000008d7: // 0x0000235c
jump=r[15];
delayedins = 1;
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2360, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008d9: // 0x00002364
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e38;
cycles = cycles - 2|0;
case 0x000008db: // 0x0000236c
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x236c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x0000;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008de: // 0x00002378
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e3c;
cycles = cycles - 2|0;
case 0x000008e0: // 0x00002380
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2380, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x000c;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008e3: // 0x0000238c
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e40;
cycles = cycles - 2|0;
case 0x000008e5: // 0x00002394
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2394, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x0018;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008e8: // 0x000023a0
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e44;
cycles = cycles - 2|0;
case 0x000008ea: // 0x000023a8
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x23a8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x0024;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008ed: // 0x000023b4
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e48;
cycles = cycles - 2|0;
case 0x000008ef: // 0x000023bc
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x23bc, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x0030;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008f2: // 0x000023c8
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e4c;
cycles = cycles - 2|0;
case 0x000008f4: // 0x000023d0
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x23d0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x003c;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008f7: // 0x000023dc
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e50;
cycles = cycles - 2|0;
case 0x000008f9: // 0x000023e4
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x23e4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x0048;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000008fc: // 0x000023f0
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e54;
cycles = cycles - 2|0;
case 0x000008fe: // 0x000023f8
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x23f8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x0054;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000901: // 0x00002404
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e58;
cycles = cycles - 2|0;
case 0x00000903: // 0x0000240c
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x240c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x0060;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000906: // 0x00002418
return cycles|0; // call of shared lib
r[12] = 0x00000000;
r[12] = r[12] | 0x4e5c;
cycles = cycles - 2|0;
case 0x00000908: // 0x00002420
vaddr = (r[12]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2420, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[12] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[12];
delayedins = 1;
r[11] = 0x006c;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000090b: // 0x0000242c
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x242c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
cycles = cycles - 1|0;
case 0x0000090c: // 0x00002430
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2430, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
jump=0x2780;
r[9]=0x243c;
delayedins = 1;
r[1] = (r[1]|0) -8|0;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000090f: // 0x0000243c
r[17] = 0;
r[23] = r[17] | 0x0000;
cycles = cycles - 2|0;
case 0x00000911: // 0x00002444
r[13] = r[23] >>> 2;
r[15] = (r[23]|0) -1|0;
r[25] = (r[23]|0) -401|0;
r[12] = r[23] | 0x0000;
r[21] = r[11] | 0x0000;
r[19] = (r[23]|0) + 640|0;
cycles = cycles - 6|0;
case 0x00000917: // 0x0000245c
r[7] = r[23] | 0x0000;
r[8] = r[21] | 0x0000;
cycles = cycles - 2|0;
case 0x00000919: // 0x00002464
r[4] = (r[17]|0) + (r[7]|0)|0;
r[3] = (r[12]|0) ^ (r[7]|0);
r[6] = (r[12]|0) & (r[4]|0);
r[3] = (r[3]|0) + (r[13]|0)|0;
r[4] = (r[15]|0) ^ (r[4]|0);
r[6] = r[6] << 3;
r[5] = r[3] >>> 3;
r[4] = (r[4]|0) + (r[13]|0)|0;
r[6] = r[6] & 0x07e0;
r[4] = r[4] << 8;
r[3] = r[5] & 0x001f;
r[7] = (r[7]|0) + 2|0;
r[4] = r[4] & 0xf800;
r[3] = (r[6]|0) | (r[3]|0);
r[8] = (r[8]|0) + 4|0;
r[3] = (r[3]|0) | (r[4]|0);
SR_F = (r[7]|0) != (r[19]|0);
r[4] = r[3] << 16;
r[3] = (r[4]|0) | (r[3]|0);
cycles = cycles - 19|0;
case 0x0000092c: // 0x000024b0
if (SR_F) {jump=0x2464; delayedins = 1;}
vaddr = (r[8]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x24b4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[3]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000092e: // 0x000024b8
r[15] = (r[15]|0) -1|0;
r[21] = (r[21]|0) + 1280|0;
SR_F = (r[15]|0) == (r[25]|0);
if (!SR_F) {jump=0x245c; delayedins = 1;}
r[12] = (r[12]|0) + 1|0;
cycles = cycles - 5|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000933: // 0x000024cc
r[23] = (r[23]|0) + 1|0;
jump=0x2444;
delayedins = 1;
r[17] = (r[17]|0) -2|0;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000936: // 0x000024d8
r[3] = r[1] | 0x0000;
r[2] = -8;
r[1] = (r[1]|0) & (r[2]|0);
r[1] = (r[1]|0) -8|0;
jump=0x24f0;
r[9]=0x24f0;
delayedins = 1;
r[2] = 0x0000;
cycles = cycles - 6|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000093c: // 0x000024f0
r[5] = r[3] | 0x0000;
r[6] = 0x00000000;
r[3] = 0x00000000;
r[7] = 0x00000000;
cycles = cycles - 4|0;
case 0x00000940: // 0x00002500
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2500, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
cycles = cycles - 1|0;
case 0x00000941: // 0x00002504
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2504, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
cycles = cycles - 1|0;
case 0x00000942: // 0x00002508
vaddr = (r[5]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2508, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[1] = (r[1]|0) -8|0;
r[3] = r[3] | 0x242c;
r[5] = (r[5]|0) + 4|0;
r[6] = r[6] | 0x232c;
r[7] = r[7] | 0x2a5c;
jump=0x23f0;
r[9]=0x2528;
delayedins = 1;
r[8] = 0;
cycles = cycles - 8|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000094a: // 0x00002528
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2528, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[2]|0;
r[3] = 0x00000000;
r[2] = 0x00000000;
r[3] = r[3] | 0x4e2f;
r[2] = r[2] | 0x4e2c;
cycles = cycles - 5|0;
case 0x0000094f: // 0x0000253c
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x253c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
r[3] = (r[3]|0) - (r[2]|0)|0;
cycles = cycles - 2|0;
case 0x00000951: // 0x00002544
vaddr = (r[1]|0) + -12|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2544, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
SR_F = (r[3]>>>0) <= (6>>>0);
if (SR_F) {jump=0x2570; delayedins = 1;}
r[1] = (r[1]|0) -12|0;
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000955: // 0x00002554
r[4] = 0x00000000;
r[4] = r[4] | 0x0000;
SR_F = (r[4]|0) == 0;
if (SR_F) {jump=0x2570; delayedins = 1;}
// nop
cycles = cycles - 5|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000095a: // 0x00002568
jump=r[4];
r[9]=0x2570;
delayedins = 1;
r[3] = r[2] | 0x0000;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000095c: // 0x00002570
r[1] = (r[1]|0) + 12|0;
cycles = cycles - 1|0;
case 0x0000095d: // 0x00002574
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2574, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x0000095e: // 0x00002578
vaddr = (r[1]|0) + -12|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2578, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x0000095f: // 0x0000257c
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2580, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[2] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000961: // 0x00002584
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2584, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[2]|0;
r[3] = 0x00000000;
r[2] = 0x00000000;
r[3] = r[3] | 0x4e2c;
r[2] = r[2] | 0x4e2c;
cycles = cycles - 5|0;
case 0x00000966: // 0x00002598
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2598, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
r[3] = (r[3]|0) - (r[2]|0)|0;
cycles = cycles - 2|0;
case 0x00000968: // 0x000025a0
vaddr = (r[1]|0) + -12|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x25a0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
r[3] = r[3] >> 2;
r[4] = r[3] >>> 31;
r[4] = (r[4]|0) + (r[3]|0)|0;
r[4] = r[4] >> 1;
SR_F = (r[4]|0) == 0;
if (SR_F) {jump=0x25dc; delayedins = 1;}
r[1] = (r[1]|0) -12|0;
cycles = cycles - 8|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000970: // 0x000025c0
r[5] = 0x00000000;
r[5] = r[5] | 0x0000;
SR_F = (r[5]|0) == 0;
if (SR_F) {jump=0x25dc; delayedins = 1;}
// nop
cycles = cycles - 5|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000975: // 0x000025d4
jump=r[5];
r[9]=0x25dc;
delayedins = 1;
r[3] = r[2] | 0x0000;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000977: // 0x000025dc
r[1] = (r[1]|0) + 12|0;
cycles = cycles - 1|0;
case 0x00000978: // 0x000025e0
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x25e0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x00000979: // 0x000025e4
vaddr = (r[1]|0) + -12|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x25e4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x0000097a: // 0x000025e8
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x25ec, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[2] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000097c: // 0x000025f0
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x25f0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[18]|0;
r[18] = 0x00000000;
cycles = cycles - 2|0;
case 0x0000097e: // 0x000025f8
vaddr = (r[1]|0) + -16|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x25f8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[2]|0;
r[18] = r[18] | 0x4e60;
cycles = cycles - 2|0;
case 0x00000980: // 0x00002600
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2600, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
cycles = cycles - 1|0;
case 0x00000981: // 0x00002604
vaddr = (r[18]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2604, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[2] = b[0x100000 + (readtlblookup ^ vaddr ^ 3)|0]|0;
cycles = cycles - 1|0;
case 0x00000982: // 0x00002608
vaddr = (r[1]|0) + -20|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2608, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
cycles = cycles - 1|0;
case 0x00000983: // 0x0000260c
vaddr = (r[1]|0) + -12|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x260c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[14]|0;
SR_F = (r[2]|0) != 0;
if (SR_F) {jump=0x26ac; delayedins = 1;}
r[1] = (r[1]|0) -20|0;
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000987: // 0x0000261c
r[14] = 0x00000000;
r[4] = 0x00000000;
r[14] = r[14] | 0x4d88;
r[4] = r[4] | 0x4d84;
r[2] = 0x00000000;
r[14] = (r[14]|0) - (r[4]|0)|0;
r[2] = r[2] | 0x4e64;
r[14] = r[14] >> 2;
cycles = cycles - 8|0;
case 0x0000098f: // 0x0000263c
vaddr = (r[2]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x263c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[3] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[14] = (r[14]|0) -1|0;
SR_F = (r[3]>>>0) < (r[14]>>>0);
if (!SR_F) {jump=0x2680; delayedins = 1;}
r[3] = (r[3]|0) + 1|0;
cycles = cycles - 5|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000994: // 0x00002650
r[5] = 0x00000000;
r[4] = r[3] << 2;
r[5] = r[5] | 0x4d84;
cycles = cycles - 3|0;
case 0x00000997: // 0x0000265c
vaddr = (r[2]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x265c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[3]|0;
r[3] = (r[4]|0) + (r[5]|0)|0;
cycles = cycles - 2|0;
case 0x00000999: // 0x00002664
vaddr = (r[3]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2664, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[3] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[3];
r[9]=0x2670;
delayedins = 1;
// nop
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x0000099c: // 0x00002670
vaddr = (r[2]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2670, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[3] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
SR_F = (r[3]>>>0) < (r[14]>>>0);
if (SR_F) {jump=0x2650; delayedins = 1;}
r[3] = (r[3]|0) + 1|0;
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009a0: // 0x00002680
jump=0x2528;
r[9]=0x2688;
delayedins = 1;
r[2] = 0x00000000;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009a2: // 0x00002688
r[2] = r[2] | 0x0000;
SR_F = (r[2]|0) != 0;
if (!SR_F) {jump=0x26a8; delayedins = 1;}
r[2] = 1;
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009a6: // 0x00002698
r[3] = 0x00000000;
jump=0x0;
r[9]=0x26a4;
delayedins = 1;
r[3] = r[3] | 0x2d28;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
r[2] = 1;
cycles = cycles - 1|0;
case 0x000009aa: // 0x000026a8
vaddr = (r[18]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26a8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
b[0x100000 + (writetlblookup ^ vaddr ^ 3)|0] = r[2]|0;
cycles = cycles - 1|0;
case 0x000009ab: // 0x000026ac
r[1] = (r[1]|0) + 20|0;
cycles = cycles - 1|0;
case 0x000009ac: // 0x000026b0
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26b0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x000009ad: // 0x000026b4
vaddr = (r[1]|0) + -20|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26b4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x000009ae: // 0x000026b8
vaddr = (r[1]|0) + -16|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26b8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[2] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x000009af: // 0x000026bc
vaddr = (r[1]|0) + -12|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26bc, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[14] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x000009b0: // 0x000026c0
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26c4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[18] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009b2: // 0x000026c8
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26c8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
cycles = cycles - 1|0;
case 0x000009b3: // 0x000026cc
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26cc, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
r[1] = (r[1]|0) -8|0;
r[1] = (r[1]|0) + 8|0;
cycles = cycles - 3|0;
case 0x000009b6: // 0x000026d8
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26d8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x000009b7: // 0x000026dc
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26e0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009b9: // 0x000026e4
r[3] = 0x00000000;
cycles = cycles - 1|0;
case 0x000009ba: // 0x000026e8
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26e8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
r[3] = r[3] | 0x0000;
cycles = cycles - 2|0;
case 0x000009bc: // 0x000026f0
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x26f0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
SR_F = (r[3]|0) == 0;
if (SR_F) {jump=0x2714; delayedins = 1;}
r[1] = (r[1]|0) -8|0;
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009c0: // 0x00002700
r[3] = 0x00000000;
r[4] = 0x00000000;
r[3] = r[3] | 0x2d28;
jump=0x0;
r[9]=0x2714;
delayedins = 1;
r[4] = r[4] | 0x4e68;
cycles = cycles - 5|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009c5: // 0x00002714
r[3] = 0x00000000;
r[3] = r[3] | 0x4d8c;
cycles = cycles - 2|0;
case 0x000009c7: // 0x0000271c
vaddr = (r[3]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x271c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
SR_F = (r[4]|0) == 0;
if (!SR_F) {jump=0x2744; delayedins = 1;}
r[4] = 0x00000000;
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009cb: // 0x0000272c
jump=0x2584;
r[9]=0x2734;
delayedins = 1;
// nop
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009cd: // 0x00002734
r[1] = (r[1]|0) + 8|0;
cycles = cycles - 1|0;
case 0x000009ce: // 0x00002738
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2738, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x000009cf: // 0x0000273c
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2740, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009d1: // 0x00002744
r[4] = r[4] | 0x0000;
SR_F = (r[4]|0) == 0;
if (SR_F) {jump=0x272c; delayedins = 1;}
// nop
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009d5: // 0x00002754
jump=r[4];
r[9]=0x275c;
delayedins = 1;
// nop
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009d7: // 0x0000275c
jump=0x272c;
delayedins = 1;
// nop
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009d9: // 0x00002764
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2764, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
cycles = cycles - 1|0;
case 0x000009da: // 0x00002768
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2768, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
r[1] = (r[1]|0) -8|0;
r[1] = (r[1]|0) + 8|0;
cycles = cycles - 3|0;
case 0x000009dd: // 0x00002774
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2774, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x000009de: // 0x00002778
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x277c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009e0: // 0x00002780
r[3] = 0x00000000;
cycles = cycles - 1|0;
case 0x000009e1: // 0x00002784
vaddr = (r[1]|0) + -12|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2784, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[2]|0;
cycles = cycles - 1|0;
case 0x000009e2: // 0x00002788
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2788, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
cycles = cycles - 1|0;
case 0x000009e3: // 0x0000278c
vaddr = (r[1]|0) + -16|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x278c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
cycles = cycles - 1|0;
case 0x000009e4: // 0x00002790
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2790, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[14]|0;
r[3] = r[3] | 0x2a78;
r[1] = (r[1]|0) -252|0;
jump=0x2404;
r[9]=0x27a4;
delayedins = 1;
r[4] = 2;
cycles = cycles - 5|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009e9: // 0x000027a4
SR_F = (r[11]|0) != 0;
if (!SR_F) {jump=0x2974; delayedins = 1;}
r[2] = r[11] | 0x0000;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009ec: // 0x000027b0
r[3] = 0x00000000;
r[14] = (r[1]|0) + 8|0;
jump=0x23a0;
r[9]=0x27c0;
delayedins = 1;
r[3] = r[3] | 0x2aa1;
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009f0: // 0x000027c0
r[3] = r[2] | 0x0000;
cycles = cycles - 1|0;
case 0x000009f1: // 0x000027c4
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x27c4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[14]|0;
jump=0x2364;
r[9]=0x27d0;
delayedins = 1;
r[4] = 17922;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009f4: // 0x000027d0
SR_F = (r[11]|0) == 0;
if (!SR_F) {jump=0x29e0; delayedins = 1;}
// nop
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009f7: // 0x000027dc
r[3] = 0x00000000;
cycles = cycles - 1|0;
case 0x000009f8: // 0x000027e0
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x27e0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[14]|0;
jump=0x2378;
r[9]=0x27ec;
delayedins = 1;
r[3] = r[3] | 0x2af2;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x000009fb: // 0x000027ec
vaddr = (r[1]|0) + 24|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x27ec, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x000009fd: // 0x000027f4
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x27f4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x2800;
delayedins = 1;
r[3] = r[3] | 0x2b10;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a00: // 0x00002800
vaddr = (r[1]|0) + 28|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2800, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a02: // 0x00002808
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2808, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x2814;
delayedins = 1;
r[3] = r[3] | 0x2b30;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a05: // 0x00002814
vaddr = (r[1]|0) + 32|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2814, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a07: // 0x0000281c
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x281c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x2828;
delayedins = 1;
r[3] = r[3] | 0x2b50;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a0a: // 0x00002828
vaddr = (r[1]|0) + 40|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2828, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a0c: // 0x00002830
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2830, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x283c;
delayedins = 1;
r[3] = r[3] | 0x2b6e;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a0f: // 0x0000283c
vaddr = (r[1]|0) + 52|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x283c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a11: // 0x00002844
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2844, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x2850;
delayedins = 1;
r[3] = r[3] | 0x2b8c;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a14: // 0x00002850
r[4] = (r[1]|0) + 76|0;
r[3] = r[2] | 0x0000;
cycles = cycles - 2|0;
case 0x00000a16: // 0x00002858
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2858, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2364;
r[9]=0x2864;
delayedins = 1;
r[4] = 17920;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a19: // 0x00002864
SR_F = (r[11]|0) == 0;
if (!SR_F) {jump=0x29d4; delayedins = 1;}
r[14] = r[11] | 0x0000;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a1c: // 0x00002870
vaddr = (r[1]|0) + 76|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2870, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a1e: // 0x00002878
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2878, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x2884;
delayedins = 1;
r[3] = r[3] | 0x2bcf;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a21: // 0x00002884
vaddr = (r[1]|0) + 80|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2884, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a23: // 0x0000288c
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x288c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x2898;
delayedins = 1;
r[3] = r[3] | 0x2bed;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a26: // 0x00002898
vaddr = (r[1]|0) + 84|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2898, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a28: // 0x000028a0
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28a0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x28ac;
delayedins = 1;
r[3] = r[3] | 0x2c0b;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a2b: // 0x000028ac
vaddr = (r[1]|0) + 88|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28ac, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a2d: // 0x000028b4
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28b4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x28c0;
delayedins = 1;
r[3] = r[3] | 0x2c29;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a30: // 0x000028c0
vaddr = (r[1]|0) + 92|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28c0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a32: // 0x000028c8
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28c8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x28d4;
delayedins = 1;
r[3] = r[3] | 0x2c47;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a35: // 0x000028d4
vaddr = (r[1]|0) + 96|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28d4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a37: // 0x000028dc
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28dc, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x28e8;
delayedins = 1;
r[3] = r[3] | 0x2c65;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a3a: // 0x000028e8
vaddr = (r[1]|0) + 100|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28e8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a3c: // 0x000028f0
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28f0, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x28fc;
delayedins = 1;
r[3] = r[3] | 0x2c83;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a3f: // 0x000028fc
vaddr = (r[1]|0) + 168|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x28fc, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a41: // 0x00002904
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2904, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x2910;
delayedins = 1;
r[3] = r[3] | 0x2ca1;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a44: // 0x00002910
vaddr = (r[1]|0) + 164|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2910, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[4] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[3] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a46: // 0x00002918
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2918, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[4]|0;
jump=0x2378;
r[9]=0x2924;
delayedins = 1;
r[3] = r[3] | 0x2cbf;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a49: // 0x00002924
r[4] = 0x00070000;
r[11] = 0;
r[12] = 0;
r[3] = r[14] | 0x0000;
r[4] = r[4] | 0xd000;
r[5] = 3;
r[6] = 1;
cycles = cycles - 7|0;
case 0x00000a50: // 0x00002940
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2940, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[11]|0;
cycles = cycles - 1|0;
case 0x00000a51: // 0x00002944
vaddr = (r[1]|0) + 4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2944, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[12]|0;
jump=0x23b4;
r[9]=0x2950;
delayedins = 1;
r[7] = r[2] | 0x0000;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a54: // 0x00002950
SR_F = (r[11]|0) != 0;
if (!SR_F) {jump=0x29a0; delayedins = 1;}
r[3] = 0x00000000;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a57: // 0x0000295c
r[1] = (r[1]|0) + 252|0;
cycles = cycles - 1|0;
case 0x00000a58: // 0x00002960
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2960, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x00000a59: // 0x00002964
vaddr = (r[1]|0) + -16|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2964, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x00000a5a: // 0x00002968
vaddr = (r[1]|0) + -12|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2968, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[2] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x00000a5b: // 0x0000296c
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2970, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[14] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a5d: // 0x00002974
r[3] = 0x00000000;
jump=0x23a0;
r[9]=0x2980;
delayedins = 1;
r[3] = r[3] | 0x2a81;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a60: // 0x00002980
jump=0x23c8;
r[9]=0x2988;
delayedins = 1;
// nop
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a62: // 0x00002988
jump=0x238c;
r[9]=0x2990;
delayedins = 1;
vaddr = (r[11]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x298c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[3] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a64: // 0x00002990
jump=0x23a0;
r[9]=0x2998;
delayedins = 1;
r[3] = r[11] | 0x0000;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a66: // 0x00002998
jump=0x23dc;
r[9]=0x29a0;
delayedins = 1;
r[3] = 1;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a68: // 0x000029a0
r[3] = r[3] | 0x2cdd;
cycles = cycles - 1|0;
case 0x00000a69: // 0x000029a4
jump=0x23a0;
r[9]=0x29ac;
delayedins = 1;
// nop
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a6b: // 0x000029ac
jump=0x23c8;
r[9]=0x29b4;
delayedins = 1;
// nop
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a6d: // 0x000029b4
jump=0x238c;
r[9]=0x29bc;
delayedins = 1;
vaddr = (r[11]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x29b8, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[3] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a6f: // 0x000029bc
jump=0x23a0;
r[9]=0x29c4;
delayedins = 1;
r[3] = r[11] | 0x0000;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a71: // 0x000029c4
jump=0x2418;
r[9]=0x29cc;
delayedins = 1;
r[3] = r[2] | 0x0000;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a73: // 0x000029cc
jump=0x23dc;
r[9]=0x29d4;
delayedins = 1;
r[3] = 1;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a75: // 0x000029d4
r[3] = 0x00000000;
jump=0x29a4;
delayedins = 1;
r[3] = r[3] | 0x2bab;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a78: // 0x000029e0
r[3] = 0x00000000;
jump=0x29a4;
delayedins = 1;
r[3] = r[3] | 0x2ad1;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a7b: // 0x000029ec
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x29ec, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[2]|0;
r[2] = 0x00000000;
cycles = cycles - 2|0;
case 0x00000a7d: // 0x000029f4
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x29f4, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
r[2] = r[2] | 0x4d80;
cycles = cycles - 2|0;
case 0x00000a7f: // 0x000029fc
vaddr = (r[1]|0) + -12|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x29fc, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
cycles = cycles - 1|0;
case 0x00000a80: // 0x00002a00
vaddr = (r[2]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a00, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[3] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
r[1] = (r[1]|0) -12|0;
SR_F = (r[3]|0) != -1;
if (!SR_F) {jump=0x2a2c; delayedins = 1;}
r[2] = (r[2]|0) -4|0;
cycles = cycles - 5|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a85: // 0x00002a14
jump=r[3];
r[9]=0x2a1c;
delayedins = 1;
r[2] = (r[2]|0) -4|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a87: // 0x00002a1c
vaddr = (r[2]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a1c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[3] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
SR_F = (r[3]|0) != -1;
if (SR_F) {jump=0x2a14; delayedins = 1;}
// nop
cycles = cycles - 4|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a8b: // 0x00002a2c
r[1] = (r[1]|0) + 12|0;
cycles = cycles - 1|0;
case 0x00000a8c: // 0x00002a30
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a30, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x00000a8d: // 0x00002a34
vaddr = (r[1]|0) + -12|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a34, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x00000a8e: // 0x00002a38
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a3c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[2] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a90: // 0x00002a40
vaddr = (r[1]|0) + -4|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a40, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
cycles = cycles - 1|0;
case 0x00000a91: // 0x00002a44
vaddr = (r[1]|0) + -8|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a44, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[1]|0;
r[1] = (r[1]|0) -8|0;
r[1] = (r[1]|0) + 8|0;
cycles = cycles - 3|0;
case 0x00000a94: // 0x00002a50
vaddr = (r[1]|0) + -4|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a50, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 1|0;
case 0x00000a95: // 0x00002a54
jump=r[9];
delayedins = 1;
vaddr = (r[1]|0) + -8|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a58, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[1] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
cycles = cycles - 2|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a97: // 0x00002a5c
r[1] = (r[1]|0) -4|0;
cycles = cycles - 1|0;
case 0x00000a98: // 0x00002a60
vaddr = (r[1]|0) + 0|0;
if ((writetlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a60, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
writetlbcheck = vaddr;
writetlblookup = ((paddr^vaddr) >> 13) << 13;
}
h[0x100000 + (writetlblookup ^ vaddr) >> 2] = r[9]|0;
jump=0x25f0;
r[9]=0x2a6c;
delayedins = 1;
// nop
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a9b: // 0x00002a6c
vaddr = (r[1]|0) + 0|0;
if ((readtlbcheck ^ vaddr) >> 13) {
paddr = DTLBLookup(vaddr|0, 1, 0x2a6c, SR_F|0, delayedins|0)|0;
if ((paddr|0) == -1) {return cycles|0;}
readtlbcheck = vaddr;
readtlblookup = ((paddr^vaddr) >> 13) << 13;
}
r[9] = h[0x100000 + (readtlblookup ^ vaddr) >> 2]|0;
jump=r[9];
delayedins = 1;
r[1] = (r[1]|0) + 4|0;
cycles = cycles - 3|0;
if (delayedins) {
pc = jump;
delayedins = 0;
continue;
}
case 0x00000a9e: // 0x00002a78
default:
r[34] = pc|0;
r[35] = SR_F|0;
return cycles|0;
} // switch
} // loop
} // function Exec
return { Exec: Exec, GetPC: GetPC, GetSR_F: GetSR_F, DTLBLookup: DTLBLookup, DTLBRefill: DTLBRefill };
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment