Last active
March 7, 2018 20:31
-
-
Save s-macke/0d79d2ba78a022269cb7859a44174015 to your computer and use it in GitHub Desktop.
OpenRISC ELF Executable fbdemo recompiled to asm.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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