optimize processing of things like false & constant, add getFastValue in makeSignOp, and add fuzz tests that now pass
This commit is contained in:
Родитель
d8621333e6
Коммит
95a202de75
|
@ -1371,6 +1371,8 @@ var TWO_TWENTY = Math.pow(2, 20);
|
|||
function getFastValue(a, op, b, type) {
|
||||
a = a.toString();
|
||||
b = b.toString();
|
||||
a = a == 'true' ? '1' : (a == 'false' ? '0' : a);
|
||||
b = b == 'true' ? '1' : (b == 'false' ? '0' : b);
|
||||
if (isNumber(a) && isNumber(b)) {
|
||||
if (op == 'pow') {
|
||||
return Math.pow(a, b).toString();
|
||||
|
@ -1838,9 +1840,10 @@ function makeSignOp(value, type, op, force, ignore) {
|
|||
if (!CHECK_SIGNS || ignore) {
|
||||
if (bits === 32) {
|
||||
if (op === 're') {
|
||||
return '((' + value + ')|0)';
|
||||
return '(' + getFastValue(value, '|', '0') + ')';
|
||||
} else {
|
||||
return '((' + value + ')>>>0)';
|
||||
|
||||
return '(' + getFastValue(value, '>>>', '0') + ')';
|
||||
// Alternatively, we can consider the lengthier
|
||||
// return makeInlineCalculation('VALUE >= 0 ? VALUE : ' + Math.pow(2, bits) + ' + VALUE', value, 'tempBigInt');
|
||||
// which does not always turn us into a 32-bit *un*signed value
|
||||
|
@ -1849,7 +1852,7 @@ function makeSignOp(value, type, op, force, ignore) {
|
|||
if (op === 're') {
|
||||
return makeInlineCalculation('(VALUE << ' + (32-bits) + ') >> ' + (32-bits), value, 'tempInt');
|
||||
} else {
|
||||
return '((' + value + ')&' + (Math.pow(2, bits)-1) + ')';
|
||||
return '(' + getFastValue(value, '&', Math.pow(2, bits)-1) + ')';
|
||||
}
|
||||
} else { // bits > 32
|
||||
if (op === 're') {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -0,0 +1 @@
|
|||
checksum = E09CCEB0
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1 @@
|
|||
checksum = EE4B2FFC
|
|
@ -7254,10 +7254,18 @@ def process(filename):
|
|||
|
||||
Building.COMPILER_TEST_OPTS += ['-I' + path_from_root('tests', 'fuzz')]
|
||||
|
||||
for name in glob.glob(path_from_root('tests', 'fuzz', '*.c')):
|
||||
print name
|
||||
self.do_run(open(path_from_root('tests', 'fuzz', name)).read(),
|
||||
open(path_from_root('tests', 'fuzz', name + '.txt')).read(), force_c=True)
|
||||
def run_all(x):
|
||||
print x
|
||||
for name in glob.glob(path_from_root('tests', 'fuzz', '*.c')):
|
||||
print name
|
||||
self.do_run(open(path_from_root('tests', 'fuzz', name)).read(),
|
||||
open(path_from_root('tests', 'fuzz', name + '.txt')).read(), force_c=True)
|
||||
|
||||
run_all('normal')
|
||||
|
||||
self.emcc_args += ['--llvm-lto', '1']
|
||||
|
||||
run_all('lto')
|
||||
|
||||
# Autodebug the code
|
||||
def do_autodebug(self, filename):
|
||||
|
|
Загрузка…
Ссылка в новой задаче