Get rid of log2_table in favor of Math.int_log2
This commit is contained in:
parent
5a392a121a
commit
beb39069d2
|
@ -1521,12 +1521,6 @@ function bts_mem(virt_addr, bit_offset)
|
|||
memory.write8(phys_addr, bit_base | 1 << bit_offset);
|
||||
}
|
||||
|
||||
var mod37_bit_position = new Uint8Array([
|
||||
32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13, 4,
|
||||
7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9, 5,
|
||||
20, 8, 19, 18
|
||||
]);
|
||||
|
||||
function bsf16(old, bit_base)
|
||||
{
|
||||
flags_changed = 0;
|
||||
|
@ -1542,7 +1536,8 @@ function bsf16(old, bit_base)
|
|||
{
|
||||
flags &= ~flag_zero;
|
||||
|
||||
return mod37_bit_position[((-bit_base & bit_base) >>> 0) % 37];
|
||||
// http://jsperf.com/lowest-bit-index
|
||||
return Math.int_log2(-bit_base & bit_base);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1560,7 +1555,7 @@ function bsf32(old, bit_base)
|
|||
{
|
||||
flags &= ~flag_zero;
|
||||
|
||||
return mod37_bit_position[((-bit_base & bit_base) >>> 0) % 37];
|
||||
return Math.int_log2((-bit_base & bit_base) >>> 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1577,16 +1572,7 @@ function bsr16(old, bit_base)
|
|||
{
|
||||
flags &= ~flag_zero;
|
||||
|
||||
var t = bit_base >>> 8;
|
||||
|
||||
if(t)
|
||||
{
|
||||
return 8 + log2_table[t];
|
||||
}
|
||||
else
|
||||
{
|
||||
return log2_table[bit_base];
|
||||
}
|
||||
return Math.int_log2(bit_base);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1603,35 +1589,7 @@ function bsr32(old, bit_base)
|
|||
{
|
||||
flags &= ~flag_zero;
|
||||
|
||||
var tt = bit_base >>> 16,
|
||||
t;
|
||||
|
||||
if(tt)
|
||||
{
|
||||
t = tt >>> 8;
|
||||
|
||||
if(t)
|
||||
{
|
||||
return 24 + log2_table[t];
|
||||
}
|
||||
else
|
||||
{
|
||||
return 16 + log2_table[tt];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
t = bit_base >>> 8;
|
||||
|
||||
if(t)
|
||||
{
|
||||
return 8 + log2_table[t];
|
||||
}
|
||||
else
|
||||
{
|
||||
return log2_table[bit_base];
|
||||
}
|
||||
}
|
||||
return Math.int_log2(bit_base >>> 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
22
src/main.js
22
src/main.js
|
@ -323,25 +323,13 @@ Math.to_be16 = function(word)
|
|||
return word >>> 8 & 0xff | word << 8 & 0xff00;
|
||||
}
|
||||
|
||||
|
||||
// used in several places
|
||||
// the first entry is -1
|
||||
// http://jsperf.com/integer-log2/2
|
||||
var log2_table = (function()
|
||||
Math.int_log2 = function(x)
|
||||
{
|
||||
var t = new Int8Array(256);
|
||||
|
||||
for(var i = 0, b = -2; i < 256; i++)
|
||||
{
|
||||
if(!(i & i - 1))
|
||||
b++;
|
||||
|
||||
t[i] = b;
|
||||
}
|
||||
|
||||
return t;
|
||||
})();
|
||||
dbg_assert(x > 0);
|
||||
|
||||
// well optimized in modern browsers, http://jsperf.com/integer-log2/2
|
||||
return (Math.log(x) / Math.LN2) | 0;
|
||||
}
|
||||
|
||||
// round away from zero, opposite of truncation
|
||||
Math.roundInfinity = function(x)
|
||||
|
|
|
@ -67,7 +67,7 @@ function PIC(dev, call_interrupt_vector, handle_irqs, master)
|
|||
return false;
|
||||
}
|
||||
|
||||
var irq_number = log2_table[irq];
|
||||
var irq_number = Math.int_log2(irq);
|
||||
irq = 1 << irq_number;
|
||||
|
||||
irr &= ~irq;
|
||||
|
@ -110,7 +110,7 @@ function PIC(dev, call_interrupt_vector, handle_irqs, master)
|
|||
return false;
|
||||
}
|
||||
|
||||
var irq_number = log2_table[irq];
|
||||
var irq_number = Math.int_log2(irq);
|
||||
irq = 1 << irq_number;
|
||||
|
||||
irr &= ~irq;
|
||||
|
|
Loading…
Reference in a new issue