Get rid of log2_table in favor of Math.int_log2

This commit is contained in:
copy 2014-02-10 23:11:55 +01:00
parent 5a392a121a
commit beb39069d2
3 changed files with 12 additions and 66 deletions

View file

@ -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);
}
}

View file

@ -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)

View file

@ -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;