summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rwxr-xr-xemcc35
-rwxr-xr-xemscripten.py173
-rw-r--r--src/analyzer.js167
-rw-r--r--src/compiler.js22
-rw-r--r--src/intertyper.js9
-rw-r--r--src/jsifier.js145
-rw-r--r--src/library.js147
-rw-r--r--src/library_browser.js23
-rw-r--r--src/library_gc.js4
-rw-r--r--src/library_gl.js115
-rw-r--r--src/library_glut.js28
-rw-r--r--src/library_sdl.js10
-rw-r--r--src/long.js29
-rw-r--r--src/modules.js77
-rw-r--r--src/parseTools.js185
-rw-r--r--src/postamble.js4
-rw-r--r--src/preamble.js43
-rw-r--r--src/runtime.js86
-rw-r--r--src/settings.js4
-rw-r--r--src/utility.js6
-rw-r--r--tests/cases/aliasbitcast2_noasm.ll (renamed from tests/cases/aliasbitcast2.ll)0
-rw-r--r--tests/cases/aliasbitcast3_noasm.ll (renamed from tests/cases/aliasbitcast3.ll)0
-rw-r--r--tests/cases/aliasbitcastdollar_noasm.ll (renamed from tests/cases/aliasbitcastdollar.ll)0
-rw-r--r--tests/cases/longjmp_tiny_noasm.ll (renamed from tests/cases/longjmp_tiny.ll)0
-rw-r--r--tests/cases/longjmp_tiny_noasm.txt (renamed from tests/cases/longjmp_tiny.txt)0
-rw-r--r--tests/cases/selectstruct.ll3
-rw-r--r--tests/cases/structparam.ll36
-rw-r--r--tests/cases/structparam.txt1
-rw-r--r--tests/cases/uadd_overflow.ll25
-rw-r--r--tests/cases/uadd_overflow.txt1
-rw-r--r--tests/cases/uadd_overflow_ta2.ll44
-rw-r--r--tests/cases/uadd_overflow_ta2.txt3
-rwxr-xr-xtests/runner.py78
-rw-r--r--tests/sqlite/sqlite-autooptimize.fails.txt3436
-rw-r--r--tools/bisect_pair.py40
-rw-r--r--tools/eliminator/asm-eliminator-test-output.js103
-rw-r--r--tools/eliminator/asm-eliminator-test.js134
-rw-r--r--tools/eliminator/eliminator-test-output.js8
-rw-r--r--tools/eliminator/eliminator-test.js11
-rw-r--r--tools/js-optimizer.js314
-rw-r--r--tools/js_optimizer.py10
-rw-r--r--tools/shared.py9
-rw-r--r--tools/test-js-optimizer-asm-regs-output.js21
-rw-r--r--tools/test-js-optimizer-asm-regs.js24
-rw-r--r--tools/test-js-optimizer-regs-output.js36
46 files changed, 1706 insertions, 3944 deletions
diff --git a/.gitignore b/.gitignore
index eaaa4ed5..63f71195 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
*.pyc
*~
*.bc
+src/relooper*.js
# Ignore generated files
src/relooper.js
diff --git a/emcc b/emcc
index 2190ff1c..d98eb709 100755
--- a/emcc
+++ b/emcc
@@ -724,8 +724,6 @@ try:
if llvm_opts is None: llvm_opts = LLVM_OPT_LEVEL[opt_level]
if llvm_lto is None: llvm_lto = llvm_opts > 0
if closure is None: closure = 1 if opt_level >= 2 else 0
- if minify_whitespace is None:
- minify_whitespace = closure # if closure is run, minify whitespace
if opt_level <= 0: keep_debug = True # always keep debug in -O0
if DEBUG: start_time = time.time() # done after parsing arguments, which might affect debug state
@@ -854,9 +852,23 @@ try:
exec('shared.Settings.' + key + ' = ' + value)
# Apply effects from settings
+ if shared.Settings.ASM_JS:
+ if closure:
+ print >> sys.stderr, 'emcc: warning: disabling closure because it is not compatible with asm.js code generation'
+ closure = False
+ if shared.Settings.CORRECT_SIGNS != 1:
+ print >> sys.stderr, 'emcc: warning: setting CORRECT_SIGNS to 1 for asm.js code generation'
+ shared.Settings.CORRECT_SIGNS = 1
+ if shared.Settings.CORRECT_OVERFLOWS != 1:
+ print >> sys.stderr, 'emcc: warning: setting CORRECT_OVERFLOWS to 1 for asm.js code generation'
+ shared.Settings.CORRECT_OVERFLOWS = 1
+
if shared.Settings.CORRECT_SIGNS >= 2 or shared.Settings.CORRECT_OVERFLOWS >= 2 or shared.Settings.CORRECT_ROUNDINGS >= 2:
keep_debug = True # must keep debug info to do line-by-line operations
+ if minify_whitespace is None:
+ minify_whitespace = closure # if closure is run, minify whitespace
+
## Compile source code to bitcode
if DEBUG: print >> sys.stderr, 'emcc: compiling to bitcode'
@@ -1138,6 +1150,16 @@ try:
execute(shlex.split(js_transform, posix=posix) + [os.path.abspath(final)])
if DEBUG: save_intermediate('transformed')
+ if shared.Settings.ASM_JS: # XXX temporary wrapping for testing purposes
+ unwrapped = open(final).read()
+ final += '.asmwrap.js'
+ open(final, 'w').write('''
+(function() { // prevent new Function from seeing the global scope
+%s
+}).apply(null, arguments);
+''' % unwrapped)
+ if DEBUG: save_intermediate('asmwrap')
+
# It is useful to run several js optimizer passes together, to save on unneeded unparsing/reparsing
js_optimizer_queue = []
def flush_js_optimizer_queue():
@@ -1163,7 +1185,12 @@ try:
if DEBUG: save_intermediate('pretty')
def get_eliminate():
- return 'eliminate' if not shared.Settings.ALLOW_MEMORY_GROWTH else 'eliminateMemSafe'
+ if shared.Settings.ASM_JS:
+ return 'eliminateAsm'
+ elif shared.Settings.ALLOW_MEMORY_GROWTH:
+ return 'eliminateMemSafe'
+ else:
+ return 'eliminate'
js_optimizer_queue += [get_eliminate()]
@@ -1177,6 +1204,8 @@ try:
if DEBUG: print >> sys.stderr, 'emcc: running closure'
final = shared.Building.closure_compiler(final)
if DEBUG: save_intermediate('closure')
+ elif shared.Settings.ASM_JS and shared.Settings.RELOOP:
+ js_optimizer_queue += ['registerizeAsm'] # we can't use closure in asm, but this does much of the same
if opt_level >= 1:
if DEBUG: print >> sys.stderr, 'emcc: running post-closure post-opts'
diff --git a/emscripten.py b/emscripten.py
index 98dcb6bb..e200ddd9 100755
--- a/emscripten.py
+++ b/emscripten.py
@@ -129,10 +129,12 @@ def emscript(infile, settings, outfile, libraries=[]):
# Save settings to a file to work around v8 issue 1579
settings_file = temp_files.get('.txt').name
- settings_text = json.dumps(settings)
- s = open(settings_file, 'w')
- s.write(settings_text)
- s.close()
+ def save_settings():
+ settings_text = json.dumps(settings)
+ s = open(settings_file, 'w')
+ s.write(settings_text)
+ s.close()
+ save_settings()
# Phase 1 - pre
if DEBUG: t = time.time()
@@ -170,6 +172,9 @@ def emscript(infile, settings, outfile, libraries=[]):
if DEBUG: t = time.time()
forwarded_json = json.loads(forwarded_data)
indexed_functions = set()
+ if settings.get('ASM_JS'):
+ settings['EXPORTED_FUNCTIONS'] = forwarded_json['EXPORTED_FUNCTIONS']
+ save_settings()
chunks = shared.JCache.chunkify(funcs, chunk_size, 'emscript_files' if jcache else None)
@@ -223,16 +228,25 @@ def emscript(infile, settings, outfile, libraries=[]):
if DEBUG: print >> sys.stderr, ' emscript: phase 2 took %s seconds' % (time.time() - t)
if DEBUG: t = time.time()
- funcs_js = ''.join([output[0] for output in outputs])
-
+ # merge forwarded data
+ if settings.get('ASM_JS'):
+ all_exported_functions = set(settings['EXPORTED_FUNCTIONS']) # both asm.js and otherwise
+ exported_implemented_functions = set()
for func_js, curr_forwarded_data in outputs:
- # merge forwarded data
curr_forwarded_json = json.loads(curr_forwarded_data)
forwarded_json['Types']['preciseI64MathUsed'] = forwarded_json['Types']['preciseI64MathUsed'] or curr_forwarded_json['Types']['preciseI64MathUsed']
for key, value in curr_forwarded_json['Functions']['blockAddresses'].iteritems():
forwarded_json['Functions']['blockAddresses'][key] = value
for key in curr_forwarded_json['Functions']['indexedFunctions'].iterkeys():
indexed_functions.add(key)
+ if settings.get('ASM_JS'):
+ for key in curr_forwarded_json['Functions']['implementedFunctions'].iterkeys():
+ if key in all_exported_functions: exported_implemented_functions.add(key)
+ for key, value in curr_forwarded_json['Functions']['unimplementedFunctions'].iteritems():
+ forwarded_json['Functions']['unimplementedFunctions'][key] = value
+
+ funcs_js = ''.join([output[0] for output in outputs])
+
outputs = None
if DEBUG: print >> sys.stderr, ' emscript: phase 2b took %s seconds' % (time.time() - t)
if DEBUG: t = time.time()
@@ -241,6 +255,7 @@ def emscript(infile, settings, outfile, libraries=[]):
forwarded_json['Functions']['indexedFunctions'] = {}
i = 2
for indexed in indexed_functions:
+ #print >> sys.stderr, 'indaxx', indexed, i
forwarded_json['Functions']['indexedFunctions'][indexed] = i # make sure not to modify this python object later - we use it in indexize
i += 2
forwarded_json['Functions']['nextIndex'] = i
@@ -258,8 +273,6 @@ def emscript(infile, settings, outfile, libraries=[]):
pre = None
#if DEBUG: outfile.write('// funcs\n')
- outfile.write(blockaddrsize(indexize(funcs_js)))
- funcs_js = None
# forward
forwarded_data = json.dumps(forwarded_json)
@@ -272,8 +285,146 @@ def emscript(infile, settings, outfile, libraries=[]):
post_file = temp_files.get('.post.ll').name
open(post_file, 'w').write('\n') # no input, just processing of forwarded data
out = shared.run_js(compiler, shared.COMPILER_ENGINE, [settings_file, post_file, 'post', forwarded_file] + libraries, stdout=subprocess.PIPE, cwd=path_from_root('src'))
- #if DEBUG: outfile.write('// post\n')
- outfile.write(indexize(out))
+ post, last_forwarded_data = out.split('//FORWARDED_DATA:')
+ last_forwarded_json = json.loads(last_forwarded_data)
+
+ if settings.get('ASM_JS'):
+ class Counter:
+ i = 0
+ def make_table(sig, raw):
+ i = Counter.i
+ Counter.i += 1
+ bad = 'b' + str(i)
+ params = ','.join(['p%d' % p for p in range(len(sig)-1)])
+ coercions = ';'.join(['p%d = %sp%d%s' % (p, '+' if sig[p+1] == 'd' else '', p, '' if sig[p+1] == 'd' else '|0') for p in range(len(sig)-1)]) + ';'
+ ret = '' if sig[0] == 'v' else ('return %s0' % ('+' if sig[0] == 'd' else ''))
+ return 'function %s(%s) { %s abort(%d); %s };\n' % (bad, params, coercions, i, ret) + raw.replace('[0,', '[' + bad + ',').replace(',0,', ',' + bad + ',').replace(',0,', ',' + bad + ',').replace(',0]', ',' + bad + ']').replace(',0]', ',' + bad + ']')
+ function_tables_defs = '\n'.join([make_table(sig, raw) for sig, raw in last_forwarded_json['Functions']['tables'].iteritems()])
+
+ asm_setup = '\n'.join(['var %s = %s;' % (f.replace('.', '_'), f) for f in ['Runtime.bitshift64', 'Math.floor', 'Math.min']])
+ fundamentals = ['buffer', 'Int8Array', 'Int16Array', 'Int32Array', 'Uint8Array', 'Uint16Array', 'Uint32Array', 'Float32Array', 'Float64Array']
+ basics = ['abort', 'assert', 'STACKTOP', 'STACK_MAX', 'tempDoublePtr', 'ABORT', 'Runtime_bitshift64', 'Math_floor', 'Math_min']
+ if not settings['NAMED_GLOBALS']: basics += ['GLOBAL_BASE']
+ if forwarded_json['Types']['preciseI64MathUsed']:
+ basics += ['i64Math_' + op for op in ['add', 'subtract', 'multiply', 'divide', 'modulo']]
+ asm_setup += '''
+var i64Math_add = function(a, b, c, d) { i64Math.add(a, b, c, d) };
+var i64Math_subtract = function(a, b, c, d) { i64Math.subtract(a, b, c, d) };
+var i64Math_multiply = function(a, b, c, d) { i64Math.multiply(a, b, c, d) };
+var i64Math_divide = function(a, b, c, d, e) { i64Math.divide(a, b, c, d, e) };
+var i64Math_modulo = function(a, b, c, d, e) { i64Math.modulo(a, b, c, d, e) };
+'''
+ asm_runtime_funcs = ['stackAlloc', 'stackSave', 'stackRestore', 'setThrew'] + ['setTempRet%d' % i for i in range(10)]
+ # function tables
+ function_tables = ['dynCall_' + table for table in last_forwarded_json['Functions']['tables']]
+ function_tables_impls = []
+ for sig in last_forwarded_json['Functions']['tables'].iterkeys():
+ args = ','.join(['a' + str(i) for i in range(1, len(sig))])
+ arg_coercions = ' '.join(['a' + str(i) + '=' + ('+' if sig[i] == 'd' else '') + 'a' + str(i) + ('|0' if sig[i] == 'i' else '') + ';' for i in range(1, len(sig))])
+ function_tables_impls.append('''
+ function dynCall_%s(index%s%s) {
+ %s
+ %sFUNCTION_TABLE_%s[index&{{{ FTM_%s }}}](%s);
+ }
+''' % (sig, ',' if len(sig) > 1 else '', args, arg_coercions, 'return ' if sig[0] != 'v' else '', sig, sig, args))
+ # calculate exports
+ exported_implemented_functions = list(exported_implemented_functions)
+ exports = []
+ for export in exported_implemented_functions + asm_runtime_funcs + function_tables:
+ exports.append("'%s': %s" % (export, export))
+ exports = '{ ' + ', '.join(exports) + ' }'
+ # calculate globals
+ try:
+ del forwarded_json['Variables']['globals']['_llvm_global_ctors'] # not a true variable
+ except:
+ pass
+ global_vars = forwarded_json['Variables']['globals'].keys() if settings['NAMED_GLOBALS'] else []
+ global_funcs = ['_' + x for x in forwarded_json['Functions']['libraryFunctions'].keys()]
+ asm_globals = ''.join([' var ' + g + '=env.' + g + ';\n' for g in basics + global_funcs + global_vars])
+ # sent data
+ sending = '{ ' + ', '.join([s + ': ' + s for s in fundamentals + basics + global_funcs + global_vars]) + ' }'
+ # received
+ receiving = ';\n'.join(['var ' + s + ' = Module["' + s + '"] = asm.' + s for s in exported_implemented_functions + function_tables])
+ # finalize
+ funcs_js = '''
+%s
+var asmPre = (function(env, buffer) {
+ 'use asm';
+ var HEAP8 = new env.Int8Array(buffer);
+ var HEAP16 = new env.Int16Array(buffer);
+ var HEAP32 = new env.Int32Array(buffer);
+ var HEAPU8 = new env.Uint8Array(buffer);
+ var HEAPU16 = new env.Uint16Array(buffer);
+ var HEAPU32 = new env.Uint32Array(buffer);
+ var HEAPF32 = new env.Float32Array(buffer);
+ var HEAPF64 = new env.Float64Array(buffer);
+''' % (asm_setup,) + asm_globals + '''
+ var __THREW__ = 0;
+ var undef = 0;
+
+ function stackAlloc(size) {
+ var ret = STACKTOP;
+ STACKTOP = (STACKTOP + size)|0;
+ STACKTOP = ((STACKTOP + 3)>>2)<<2;
+ return ret|0;
+ }
+ function stackSave() {
+ return STACKTOP|0;
+ }
+ function stackRestore(top) {
+ top = top|0;
+ STACKTOP = top;
+ }
+ function setThrew(threw) {
+ threw = threw|0;
+ __THREW__ = threw;
+ }
+''' + ''.join(['''
+ var tempRet%d = 0;
+ function setTempRet%d(value) {
+ value = value|0;
+ tempRet%d = value;
+ }
+''' % (i, i, i) for i in range(10)]) + funcs_js.replace('\n', '\n ') + '''
+
+ %s
+
+ return %s;
+});
+if (asmPre.toSource) { // works in sm but not v8, so we get full coverage between those two
+ asmPre = asmPre.toSource();
+ asmPre = asmPre.substr(25, asmPre.length-28);
+ asmPre = new Function('env', 'buffer', asmPre);
+}
+var asm = asmPre(%s, buffer); // pass through Function to prevent seeing outside scope
+%s;
+Runtime.stackAlloc = function(size) { return asm.stackAlloc(size) };
+Runtime.stackSave = function() { return asm.stackSave() };
+Runtime.stackRestore = function(top) { asm.stackRestore(top) };
+''' % (function_tables_defs.replace('\n', '\n ') + '\n' + '\n'.join(function_tables_impls), exports, sending, receiving)
+
+ # Set function table masks
+ def function_table_maskize(js):
+ masks = {}
+ default = None
+ for sig, table in last_forwarded_json['Functions']['tables'].iteritems():
+ masks[sig] = str(table.count(','))
+ default = sig
+ def fix(m):
+ sig = m.groups(0)[0]
+ if not sig in masks:
+ print >> sys.stderr, 'warning: function table use without functions for it!', sig
+ return masks[default] # TODO: generate empty function tables for this case, even though it would fail at runtime if used
+ return masks[sig]
+ return re.sub(r'{{{ FTM_([\w\d_$]+) }}}', lambda m: fix(m), js) # masks[m.groups(0)[0]]
+ funcs_js = function_table_maskize(funcs_js)
+ else:
+ function_tables_defs = '\n'.join([table for table in last_forwarded_json['Functions']['tables'].itervalues()])
+ outfile.write(function_tables_defs)
+ outfile.write(blockaddrsize(indexize(funcs_js)))
+ funcs_js = None
+
+ outfile.write(indexize(post))
if DEBUG: print >> sys.stderr, ' emscript: phase 3 took %s seconds' % (time.time() - t)
outfile.close()
diff --git a/src/analyzer.js b/src/analyzer.js
index 014579f4..0ad3e017 100644
--- a/src/analyzer.js
+++ b/src/analyzer.js
@@ -19,7 +19,7 @@ function recomputeLines(func) {
var BRANCH_INVOKE = set('branch', 'invoke');
var SIDE_EFFECT_CAUSERS = set('call', 'invoke', 'atomic');
-var UNUNFOLDABLE = set('value', 'type', 'phiparam');
+var UNUNFOLDABLE = set('value', 'structvalue', 'type', 'phiparam');
// Analyzer
@@ -120,12 +120,14 @@ function analyzer(data, sidePass) {
processItem: function(data) {
// Legalization
if (USE_TYPED_ARRAYS == 2) {
- function getLegalVars(base, bits) {
- assert(!isNumber(base));
+ function getLegalVars(base, bits, allowLegal) {
+ if (allowLegal && bits <= 32) return [{ ident: base, bits: bits }];
+ if (isNumber(base)) return getLegalLiterals(base, bits);
var ret = new Array(Math.ceil(bits/32));
var i = 0;
+ if (base == 'zeroinitializer' || base == 'undef') base = 0;
while (bits > 0) {
- ret[i] = { ident: base + '$' + i, bits: Math.min(32, bits) };
+ ret[i] = { ident: base ? base + '$' + i : '0', bits: Math.min(32, bits) };
bits -= 32;
i++;
}
@@ -142,6 +144,23 @@ function analyzer(data, sidePass) {
}
return ret;
}
+ function getLegalStructuralParts(value) {
+ return value.params.slice(0);
+ }
+ function getLegalParams(params, bits) {
+ return params.map(function(param) {
+ var value = param.value || param;
+ if (isNumber(value.ident)) {
+ return getLegalLiterals(value.ident, bits);
+ } else if (value.intertype == 'structvalue') {
+ return getLegalStructuralParts(value).map(function(part) {
+ return { ident: part.ident, bits: part.type.substr(1) };
+ });
+ } else {
+ return getLegalVars(value.ident, bits);
+ }
+ });
+ }
// Uses the right factor to multiply line numbers by so that they fit in between
// the line[i] and the line after it
function interpLines(lines, i, toAdd) {
@@ -191,6 +210,7 @@ function analyzer(data, sidePass) {
// Legalize lines in labels
var tempId = 0;
func.labels.forEach(function(label) {
+ if (dcheck('legalizer')) dprint('zz legalizing: \n' + dump(label.lines));
var i = 0, bits;
while (i < label.lines.length) {
var item = label.lines[i];
@@ -207,8 +227,12 @@ function analyzer(data, sidePass) {
if (isIllegalType(item.valueType) || isIllegalType(item.type)) {
isIllegal = true;
}
+ if ((item.intertype == 'load' || item.intertype == 'store') && isStructType(item.valueType)) {
+ isIllegal = true; // storing an entire structure is illegal
+ }
});
if (!isIllegal) {
+ //if (dcheck('legalizer')) dprint('no need to legalize \n' + dump(item));
i++;
continue;
}
@@ -222,10 +246,10 @@ function analyzer(data, sidePass) {
if (subItem != item && (!(subItem.intertype in UNUNFOLDABLE) ||
(subItem.intertype == 'value' && isNumber(subItem.ident) && isIllegalType(subItem.type)))) {
if (item.intertype == 'phi') {
- assert(subItem.intertype == 'value', 'We can only unfold illegal constants in phis');
+ assert(subItem.intertype == 'value' || subItem.intertype == 'structvalue', 'We can only unfold illegal constants in phis');
// we must handle this in the phi itself, if we unfold normally it will not be pushed back with the phi
} else {
- var tempIdent = '$$emscripten$temp$' + (tempId++);
+ var tempIdent = '$$etemp$' + (tempId++);
subItem.assignTo = tempIdent;
unfolded.unshift(subItem);
fixUnfolded(subItem);
@@ -234,7 +258,7 @@ function analyzer(data, sidePass) {
} else if (subItem.intertype == 'switch' && isIllegalType(subItem.type)) {
subItem.switchLabels.forEach(function(switchLabel) {
if (switchLabel.value[0] != '$') {
- var tempIdent = '$$emscripten$temp$' + (tempId++);
+ var tempIdent = '$$etemp$' + (tempId++);
unfolded.unshift({
assignTo: tempIdent,
intertype: 'value',
@@ -258,8 +282,7 @@ function analyzer(data, sidePass) {
case 'store': {
var toAdd = [];
bits = getBits(item.valueType);
- var elements;
- elements = getLegalVars(item.value.ident, bits);
+ var elements = getLegalParams([item.value], bits)[0];
var j = 0;
elements.forEach(function(element) {
var tempVar = '$st$' + i + '$' + j;
@@ -290,32 +313,43 @@ function analyzer(data, sidePass) {
i += removeAndAdd(label.lines, i, toAdd);
continue;
}
- // call, return: Return value is in an unlegalized array literal. Not fully optimal.
+ // call, return: Return the first 32 bits, the rest are in temp
case 'call': {
bits = getBits(value.type);
var elements = getLegalVars(item.assignTo, bits);
var toAdd = [value];
// legalize parameters
legalizeFunctionParameters(value.params);
- if (value.assignTo) {
+ if (value.assignTo && isIllegalType(item.type)) {
// legalize return value
- var j = 0;
- toAdd = toAdd.concat(elements.map(function(element) {
- return {
+ value.assignTo = elements[0].ident;
+ for (var j = 1; j < elements.length; j++) {
+ var element = elements[j];
+ toAdd.push({
intertype: 'value',
assignTo: element.ident,
- type: 'i' + bits,
- ident: value.assignTo + '[' + (j++) + ']'
- };
- }));
+ type: element.bits,
+ ident: 'tempRet' + (j - 1)
+ });
+ assert(j<10); // TODO: dynamically create more than 10 tempRet-s
+ }
}
i += removeAndAdd(label.lines, i, toAdd);
continue;
}
+ case 'landingpad': {
+ // not much to legalize
+ i++;
+ continue;
+ }
case 'return': {
bits = getBits(item.type);
var elements = getLegalVars(item.value.ident, bits);
- item.value.ident = '[' + elements.map(function(element) { return element.ident }).join(',') + ']';
+ item.value.ident = '(';
+ for (var j = 1; j < elements.length; j++) {
+ item.value.ident += 'tempRet' + (j-1) + '=' + elements[j].ident + ',';
+ }
+ item.value.ident += elements[0].ident + ')';
i++;
continue;
}
@@ -341,6 +375,21 @@ function analyzer(data, sidePass) {
i += removeAndAdd(label.lines, i, toAdd);
continue;
}
+ case 'structvalue': {
+ bits = getBits(value.type);
+ var elements = getLegalVars(item.assignTo, bits);
+ var toAdd = [];
+ for (var j = 0; j < item.params.length; j++) {
+ toAdd[j] = {
+ intertype: 'value',
+ assignTo: elements[j].ident,
+ type: 'i32',
+ ident: item.params[j].ident
+ };
+ }
+ i += removeAndAdd(label.lines, i, toAdd);
+ continue;
+ }
case 'load': {
bits = getBits(value.valueType);
var elements = getLegalVars(item.assignTo, bits);
@@ -382,13 +431,9 @@ function analyzer(data, sidePass) {
var toAdd = [];
var elements = getLegalVars(item.assignTo, bits);
var j = 0;
- var literalValues = {}; // special handling of literals - we cannot unfold them normally
- value.params.map(function(param) {
- if (isNumber(param.value.ident)) {
- literalValues[param.value.ident] = getLegalLiterals(param.value.ident, bits);
- }
- });
+ var values = getLegalParams(value.params, bits);
elements.forEach(function(element) {
+ var k = 0;
toAdd.push({
intertype: 'phi',
assignTo: element.ident,
@@ -399,7 +444,7 @@ function analyzer(data, sidePass) {
label: param.label,
value: {
intertype: 'value',
- ident: (param.value.ident in literalValues) ? literalValues[param.value.ident][j].ident : (param.value.ident + '$' + j),
+ ident: values[k++][j].ident,
type: 'i' + element.bits,
}
};
@@ -414,6 +459,62 @@ function analyzer(data, sidePass) {
i++;
continue; // special case, handled in makeComparison
}
+ case 'extractvalue': { // XXX we assume 32-bit alignment in extractvalue/insertvalue,
+ // but in theory they can run on packed structs too (see use getStructuralTypePartBits)
+ // potentially legalize the actual extracted value too if it is >32 bits, not just the extraction in general
+ var index = item.indexes[0][0].text;
+ var parts = getStructureTypeParts(item.type);
+ var indexedType = parts[index];
+ var targetBits = getBits(indexedType);
+ var sourceBits = getBits(item.type);
+ var elements = getLegalVars(item.assignTo, targetBits, true); // possibly illegal
+ var sourceElements = getLegalVars(item.ident, sourceBits); // definitely illegal
+ var toAdd = [];
+ var sourceIndex = 0;
+ for (var partIndex = 0; partIndex < parts.length; partIndex++) {
+ if (partIndex == index) {
+ for (var j = 0; j < elements.length; j++) {
+ toAdd.push({
+ intertype: 'value',
+ assignTo: elements[j].ident,
+ type: 'i' + elements[j].bits,
+ ident: sourceElements[sourceIndex+j].ident
+ });
+ }
+ break;
+ }
+ sourceIndex += getStructuralTypePartBits(parts[partIndex])/32;
+ }
+ i += removeAndAdd(label.lines, i, toAdd);
+ continue;
+ }
+ case 'insertvalue': {
+ var index = item.indexes[0][0].text; // the modified index
+ var parts = getStructureTypeParts(item.type);
+ var indexedType = parts[index];
+ var indexBits = getBits(indexedType);
+ var bits = getBits(item.type); // source and target
+ bits = getBits(value.type);
+ var toAdd = [];
+ var elements = getLegalVars(item.assignTo, bits);
+ var sourceElements = getLegalVars(item.ident, bits);
+ var indexElements = getLegalVars(item.value.ident, indexBits, true); // possibly legal
+ var sourceIndex = 0;
+ for (var partIndex = 0; partIndex < parts.length; partIndex++) {
+ var currNum = getStructuralTypePartBits(parts[partIndex])/32;
+ for (var j = 0; j < currNum; j++) {
+ toAdd.push({
+ intertype: 'value',
+ assignTo: elements[sourceIndex+j].ident,
+ type: 'i' + elements[sourceIndex+j].bits,
+ ident: partIndex == index ? indexElements[j].ident : sourceElements[sourceIndex+j].ident
+ });
+ }
+ sourceIndex += currNum;
+ }
+ i += removeAndAdd(label.lines, i, toAdd);
+ continue;
+ }
case 'bitcast': {
var inType = item.type2;
var outType = item.type;
@@ -477,17 +578,16 @@ function analyzer(data, sidePass) {
}
case 'select': {
sourceBits = targetBits = getBits(value.params[1].type);
- var otherElementsA = getLegalVars(value.params[1].ident, sourceBits);
- var otherElementsB = getLegalVars(value.params[2].ident, sourceBits);
+ var params = getLegalParams(value.params.slice(1), sourceBits);
processor = function(result, j) {
return {
intertype: 'mathop',
op: 'select',
- type: 'i' + otherElementsA[j].bits,
+ type: 'i' + params[0][j].bits,
params: [
value.params[0],
- { intertype: 'value', ident: otherElementsA[j].ident, type: 'i' + otherElementsA[j].bits },
- { intertype: 'value', ident: otherElementsB[j].ident, type: 'i' + otherElementsB[j].bits }
+ { intertype: 'value', ident: params[0][j].ident, type: 'i' + params[0][j].bits },
+ { intertype: 'value', ident: params[1][j].ident, type: 'i' + params[1][j].bits }
]
};
};
@@ -554,9 +654,10 @@ function analyzer(data, sidePass) {
// We can't statically legalize this, do the operation at runtime TODO: optimize
assert(sourceBits == 64, 'TODO: handle nonconstant shifts on != 64 bits');
value.intertype = 'value';
- value.ident = 'Runtime.bitshift64(' + sourceElements[0].ident + ', ' +
+ value.ident = 'Runtime' + (ASM_JS ? '_' : '.') + 'bitshift64(' + sourceElements[0].ident + ', ' +
sourceElements[1].ident + ',"' + value.op + '",' + value.params[1].ident + '$0);' +
- 'var ' + value.assignTo + '$0 = ' + value.assignTo + '[0], ' + value.assignTo + '$1 = ' + value.assignTo + '[1];';
+ 'var ' + value.assignTo + '$0 = ' + makeGetTempDouble(0) + ', ' + value.assignTo + '$1 = ' + makeGetTempDouble(1) + ';';
+ value.assignTo = null;
i++;
continue;
}
diff --git a/src/compiler.js b/src/compiler.js
index 3ce53b1e..7ca20c40 100644
--- a/src/compiler.js
+++ b/src/compiler.js
@@ -172,18 +172,24 @@ RUNTIME_DEBUG = LIBRARY_DEBUG || GL_DEBUG;
// Settings sanity checks
assert(!(USE_TYPED_ARRAYS === 2 && QUANTUM_SIZE !== 4), 'For USE_TYPED_ARRAYS == 2, must have normal QUANTUM_SIZE of 4');
+if (ASM_JS) {
+ assert(!ALLOW_MEMORY_GROWTH, 'Cannot grow asm.js heap');
+ assert((TOTAL_MEMORY&(TOTAL_MEMORY-1)) == 0, 'asm.js heap must be power of 2');
+}
// Output some info and warnings based on settings
-if (!MICRO_OPTS || !RELOOP || ASSERTIONS || CHECK_SIGNS || CHECK_OVERFLOWS || INIT_STACK || INIT_HEAP ||
- !SKIP_STACK_IN_SMALL || SAFE_HEAP || PGO || PROFILE || !DISABLE_EXCEPTION_CATCHING) {
- print('// Note: Some Emscripten settings will significantly limit the speed of the generated code.');
-} else {
- print('// Note: For maximum-speed code, see "Optimizing Code" on the Emscripten wiki, https://github.com/kripken/emscripten/wiki/Optimizing-Code');
-}
+if (phase == 'pre') {
+ if (!MICRO_OPTS || !RELOOP || ASSERTIONS || CHECK_SIGNS || CHECK_OVERFLOWS || INIT_STACK || INIT_HEAP ||
+ !SKIP_STACK_IN_SMALL || SAFE_HEAP || PGO || PROFILE || !DISABLE_EXCEPTION_CATCHING) {
+ print('// Note: Some Emscripten settings will significantly limit the speed of the generated code.');
+ } else {
+ print('// Note: For maximum-speed code, see "Optimizing Code" on the Emscripten wiki, https://github.com/kripken/emscripten/wiki/Optimizing-Code');
+ }
-if (DOUBLE_MODE || CORRECT_SIGNS || CORRECT_OVERFLOWS || CORRECT_ROUNDINGS) {
- print('// Note: Some Emscripten settings may limit the speed of the generated code.');
+ if (DOUBLE_MODE || CORRECT_SIGNS || CORRECT_OVERFLOWS || CORRECT_ROUNDINGS) {
+ print('// Note: Some Emscripten settings may limit the speed of the generated code.');
+ }
}
// Load compiler code
diff --git a/src/intertyper.js b/src/intertyper.js
index 1d18c3cf..2de6c6b9 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -125,6 +125,7 @@ function intertyper(data, sidePass, baseLineNums) {
// We need this early, to know basic function info - ident, params, varargs
ident: toNiceIdent(func.ident),
params: func.params,
+ returnType: func.returnType,
hasVarArgs: func.hasVarArgs,
lineNum: currFunctionLineNum,
lines: currFunctionLines
@@ -520,7 +521,12 @@ function intertyper(data, sidePass, baseLineNums) {
if (item.tokens[3].item) {
var subTokens = item.tokens[3].item.tokens;
splitTokenList(subTokens).forEach(function(segment) {
- ret.ctors.push(segment[1].tokens.slice(-1)[0].text);
+ var ctor = toNiceIdent(segment[1].tokens.slice(-1)[0].text);
+ ret.ctors.push(ctor);
+ if (ASM_JS) { // must export the global constructors from asm.js module, so mark as implemented and exported
+ Functions.implementedFunctions[ctor] = 'v';
+ EXPORTED_FUNCTIONS[ctor] = 1;
+ }
});
}
} else if (!external) {
@@ -741,6 +747,7 @@ function intertyper(data, sidePass, baseLineNums) {
}
var last = getTokenIndexByText(item.tokens, ';');
item.params = splitTokenList(item.tokens.slice(1, last)).map(parseLLVMSegment);
+ item.type = item.params[1].type;
this.forwardItem(item, 'Reintegrator');
}
});
diff --git a/src/jsifier.js b/src/jsifier.js
index 50703b90..5e159ccf 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -9,6 +9,8 @@ var STRUCT_LIST = set('struct', 'list');
var UNDERSCORE_OPENPARENS = set('_', '(');
var RELOOP_IGNORED_LASTS = set('return', 'unreachable', 'resume');
+var addedLibraryItems = {};
+
// JSifier
function JSify(data, functionsOnly, givenFunctions) {
var mainPass = !functionsOnly;
@@ -42,7 +44,9 @@ function JSify(data, functionsOnly, givenFunctions) {
var pre = processMacros(preprocess(read(preFile).replace('{{RUNTIME}}', getRuntime())));
print(pre);
- Functions.implementedFunctions = set(data.unparsedFunctions.map(function(func) { return func.ident }));
+ data.unparsedFunctions.forEach(function(func) {
+ Functions.implementedFunctions[func.ident] = Functions.getSignature(func.returnType, func.params.map(function(param) { return param.type }));
+ });
}
}
@@ -258,7 +262,7 @@ function JSify(data, functionsOnly, givenFunctions) {
var ret = [item];
if (item.ident == '_llvm_global_ctors') {
item.JS = '\n__ATINIT__ = __ATINIT__.concat([\n' +
- item.ctors.map(function(ctor) { return ' { func: ' + toNiceIdent(ctor) + ' }' }).join(',\n') +
+ item.ctors.map(function(ctor) { return ' { func: function() { ' + ctor + '() } }' }).join(',\n') +
'\n]);\n';
return ret;
} else {
@@ -279,6 +283,7 @@ function JSify(data, functionsOnly, givenFunctions) {
if (LibraryManager.library[shortident] &&
LibraryManager.library[shortident].length &&
!BUILD_AS_SHARED_LIB) {
+ if (addedLibraryItems[shortident]) return ret;
var val = LibraryManager.library[shortident];
var padding;
if (Runtime.isNumberType(item.type) || isPointerType(item.type)) {
@@ -333,7 +338,7 @@ function JSify(data, functionsOnly, givenFunctions) {
}
js += '\n' + makePointer('[0]', null, allocator, ['void*'], index) + ';';
}
- if (EXPORT_ALL || (item.ident in EXPORTED_GLOBALS)) {
+ if (!ASM_JS && (EXPORT_ALL || (item.ident in EXPORTED_GLOBALS))) {
js += '\nModule["' + item.ident + '"] = ' + item.ident + ';';
}
if (BUILD_AS_SHARED_LIB == 2 && !item.private_) {
@@ -377,8 +382,6 @@ function JSify(data, functionsOnly, givenFunctions) {
}
});
- var addedLibraryItems = {};
-
// functionStub
substrate.addActor('FunctionStub', {
processItem: function(item) {
@@ -406,6 +409,7 @@ function JSify(data, functionsOnly, givenFunctions) {
deps.push(snippet);
snippet = '_' + snippet;
}
+ if (ASM_JS) Functions.libraryFunctions[ident] = 1;
} else if (typeof snippet === 'object') {
snippet = stringifyWithFunctions(snippet);
} else if (typeof snippet === 'function') {
@@ -420,6 +424,7 @@ function JSify(data, functionsOnly, givenFunctions) {
snippet = snippet.replace('{', '{ var ret = (function() { if (Runtime.debug) Module.printErr("[library call:' + ident + ': " + Array.prototype.slice.call(arguments).map(Runtime.prettyPrint) + "]"); ');
snippet = snippet.substr(0, snippet.length-1) + '}).apply(this, arguments); if (Runtime.debug && typeof ret !== "undefined") Module.printErr(" [ return:" + Runtime.prettyPrint(ret)); return ret; }';
}
+ if (ASM_JS) Functions.libraryFunctions[ident] = 1;
}
var postsetId = ident + '__postset';
@@ -519,8 +524,8 @@ function JSify(data, functionsOnly, givenFunctions) {
func.JS = '\n';
var paramIdents = func.params.map(function(param) {
- return (param.intertype == 'varargs') ? null : toNiceIdent(param.ident);
- }).filter(function(param) { return param != null; })
+ return toNiceIdent(param.ident);
+ });
if (CLOSURE_ANNOTATIONS) {
func.JS += '/**\n';
@@ -538,6 +543,34 @@ function JSify(data, functionsOnly, givenFunctions) {
func.JS += 'function ' + func.ident + '(' + paramIdents.join(', ') + ') {\n';
+ if (ASM_JS) {
+ // spell out argument types
+ func.params.forEach(function(param) {
+ func.JS += ' ' + param.ident + ' = ' + asmCoercion(param.ident, param.type) + ';\n';
+ });
+
+ // spell out local variables
+ var vars = values(func.variables).filter(function(v) { return v.origin != 'funcparam' });
+ if (vars.length > 0) {
+ var chunkSize = 8;
+ var chunks = [];
+ var i = 0;
+ while (i < vars.length) {
+ chunks.push(vars.slice(i, i+chunkSize));
+ i += chunkSize;
+ }
+ for (i = 0; i < chunks.length; i++) {
+ func.JS += ' var ' + chunks[i].map(function(v) {
+ if (v.type != 'i64') {
+ return v.ident + ' = ' + asmInitializer(v.type); //, func.variables[v.ident].impl);
+ } else {
+ return v.ident + '$0 = 0, ' + v.ident + '$1 = 1';
+ }
+ }).join(', ') + ';\n';
+ }
+ }
+ }
+
if (PROFILE) {
func.JS += ' if (PROFILING) { '
+ 'var __parentProfilingNode__ = PROFILING_NODE; PROFILING_NODE = PROFILING_NODE.children["' + func.ident + '"]; '
@@ -547,6 +580,21 @@ function JSify(data, functionsOnly, givenFunctions) {
+ '}\n';
}
+ if (true) { // TODO: optimize away when not needed
+ if (CLOSURE_ANNOTATIONS) func.JS += '/** @type {number} */';
+ func.JS += ' var label = 0;\n';
+ }
+
+ if (ASM_JS) {
+ var hasByVal = false;
+ func.params.forEach(function(param) {
+ hasByVal = hasByVal = hasByVal || param.byVal;
+ });
+ if (hasByVal) {
+ func.js += ' var tempParam = 0;\n';
+ }
+ }
+
// Prepare the stack, if we need one. If we have other stack allocations, force the stack to be set up.
func.JS += ' ' + RuntimeGenerator.stackEnter(func.initialStack, func.otherStackAllocations) + ';\n';
@@ -561,18 +609,13 @@ function JSify(data, functionsOnly, givenFunctions) {
if (param.byVal) {
var type = removePointing(param.type);
var typeInfo = Types.types[type];
- func.JS += ' var tempParam = ' + param.ident + '; ' + param.ident + ' = ' + RuntimeGenerator.stackAlloc(typeInfo.flatSize) + ';' +
+ func.JS += ' ' + (ASM_JS ? '' : 'var ') + 'tempParam = ' + param.ident + '; ' + param.ident + ' = ' + RuntimeGenerator.stackAlloc(typeInfo.flatSize) + ';' +
makeCopyValues(param.ident, 'tempParam', typeInfo.flatSize, 'null', null, param.byVal) + ';\n';
}
});
if (LABEL_DEBUG) func.JS += " Module.print(INDENT + ' Entering: " + func.ident + ": ' + Array.prototype.slice.call(arguments)); INDENT += ' ';\n";
- if (true) { // TODO: optimize away when not needed
- if (CLOSURE_ANNOTATIONS) func.JS += '/** @type {number} */';
- func.JS += ' var label;\n';
- }
-
// Walk function blocks and generate JS
function walkBlock(block, indent) {
if (!block) return '';
@@ -703,12 +746,12 @@ function JSify(data, functionsOnly, givenFunctions) {
if (PRINT_SPLIT_FILE_MARKER) {
func.JS += '\n//FUNCTION_END_MARKER_OF_SOURCE_FILE_' + associatedSourceFile + '\n';
}
-
- if (EXPORT_ALL || (func.ident in EXPORTED_FUNCTIONS)) {
+
+ if (!ASM_JS && (EXPORT_ALL || (func.ident in EXPORTED_FUNCTIONS))) {
func.JS += 'Module["' + func.ident + '"] = ' + func.ident + ';';
}
- if (INLINING_LIMIT && func.lines.length >= INLINING_LIMIT) {
+ if (!ASM_JS && INLINING_LIMIT && func.lines.length >= INLINING_LIMIT) {
func.JS += func.ident + '["X"]=1;';
}
@@ -754,8 +797,9 @@ function JSify(data, functionsOnly, givenFunctions) {
var valueJS = item.JS;
item.JS = '';
if (CLOSURE_ANNOTATIONS) item.JS += '/** @type {number} */ ';
- item.JS += (item.overrideSSA ? '' : 'var ') + toNiceIdent(item.assignTo);
-
+ if (!ASM_JS || item.intertype != 'alloca' || item.funcData.variables[item.assignTo].impl == VAR_EMULATED) { // asm only needs non-allocas
+ item.JS += ((ASM_JS || item.overrideSSA) ? '' : 'var ') + toNiceIdent(item.assignTo);
+ }
var value = parseNumerical(valueJS);
var impl = getVarImpl(item.funcData, item.assignTo);
switch (impl) {
@@ -785,7 +829,7 @@ function JSify(data, functionsOnly, givenFunctions) {
return substrate.addActor('Intertype:' + intertype, {
processItem: function(item) {
item.JS = func(item);
- if (!item.JS) throw "No JS generated for " + dump(item);
+ if (!item.JS) throw "No JS generated for " + dump((item.funcData=null,item));
if (item.assignTo) {
makeAssign(item);
if (!item.JS) throw "No assign JS generated for " + dump(item);
@@ -801,7 +845,7 @@ function JSify(data, functionsOnly, givenFunctions) {
return ';';
});
makeFuncLineActor('var', function(item) { // assigns into phis become simple vars
- return 'var ' + item.ident + ';';
+ return ASM_JS ? ';' : ('var ' + item.ident + ';');
});
makeFuncLineActor('store', function(item) {
var value = finalizeLLVMParameter(item.value);
@@ -895,7 +939,7 @@ function JSify(data, functionsOnly, givenFunctions) {
var labelSets = phiSets[label];
// FIXME: Many of the |var |s here are not needed, but without them we get slowdowns with closure compiler. TODO: remove this workaround.
if (labelSets.length == 1) {
- return 'var ' + labelSets[0].ident + ' = ' + labelSets[0].valueJS + ';';
+ return (ASM_JS ? '' : 'var ') + labelSets[0].ident + ' = ' + labelSets[0].valueJS + ';';
}
// TODO: eliminate unneeded sets (to undefined etc.)
var deps = {}; // for each ident we will set, which others it depends on
@@ -1031,33 +1075,36 @@ function JSify(data, functionsOnly, givenFunctions) {
}
ret += 'return';
if (item.value) {
- ret += ' ' + finalizeLLVMParameter(item.value);
+ ret += ' ' + asmCoercion(finalizeLLVMParameter(item.value), item.type);
}
return ret + ';';
});
makeFuncLineActor('resume', function(item) {
// If there is no current exception, set this one as it (during a resume, the current exception can be wiped out)
+ var ptr = makeStructuralAccess(item.ident, 0);
return (EXCEPTION_DEBUG ? 'Module.print("Resuming exception");' : '') +
- 'if (' + makeGetValue('_llvm_eh_exception.buf', 0, 'void*') + ' == 0) { ' + makeSetValue('_llvm_eh_exception.buf', 0, item.ident + '.f0', 'void*') + ' } ' +
- 'throw ' + item.ident + '.f0;';
+ 'if (' + makeGetValue('_llvm_eh_exception.buf', 0, 'void*') + ' == 0) { ' + makeSetValue('_llvm_eh_exception.buf', 0, ptr, 'void*') + ' } ' +
+ 'throw ' + ptr + ';';
});
makeFuncLineActor('invoke', function(item) {
// Wrapping in a function lets us easily return values if we are
// in an assignment
var phiSets = calcPhiSets(item);
var call_ = makeFunctionCall(item.ident, item.params, item.funcData, item.type);
- var ret = '(function() { try { __THREW__ = false; return '
+ var ret = '(function() { try { __THREW__ = 0; return '
+ call_ + ' '
+ '} catch(e) { '
+ 'if (typeof e != "number") throw e; '
- + 'if (ABORT) throw e; __THREW__ = true; '
+ + 'if (ABORT) throw e; __THREW__ = 1; '
+ (EXCEPTION_DEBUG ? 'Module.print("Exception: " + e + ", currently at: " + (new Error().stack)); ' : '')
+ 'return null } })();';
if (item.assignTo) {
ret = 'var ' + item.assignTo + ' = ' + ret;
- if (isIllegalType(item.type)) {
- assert(item.type == 'i64', 'Can only handle i64 invoke among illegal invokes');
- ret += 'var ' + item.assignTo + '$0 = ' + item.assignTo + '[0], ' + item.assignTo + '$1 = ' + item.assignTo + '[1];';
+ if (USE_TYPED_ARRAYS == 2 && isIllegalType(item.type)) {
+ var bits = getBits(item.type);
+ for (var i = 0; i < bits/32; i++) {
+ ret += 'var ' + item.assignTo + '$' + i + ' = ' + (i == 0 ? item.assignTo : 'tempRet' + (i-1)) + ';'
+ }
}
item.assignTo = null;
}
@@ -1085,7 +1132,12 @@ function JSify(data, functionsOnly, givenFunctions) {
});
makeFuncLineActor('landingpad', function(item) {
var catchTypeArray = item.catchables.map(finalizeLLVMParameter).join(',');
- return '___cxa_find_matching_catch('+ makeGetValue('_llvm_eh_exception.buf', '0', 'void*') +',' + makeGetValue('_llvm_eh_exception.buf', QUANTUM_SIZE, 'void*') + ',[' + catchTypeArray +'])';
+ var ret = '___cxa_find_matching_catch('+ makeGetValue('_llvm_eh_exception.buf', '0', 'void*') +',' + makeGetValue('_llvm_eh_exception.buf', QUANTUM_SIZE, 'void*') + ',[' + catchTypeArray +'])';
+ if (USE_TYPED_ARRAYS == 2) {
+ ret = makeVarDef(item.assignTo) + '$0 = ' + ret + '; ' + item.assignTo + '$1 = tempRet0;';
+ item.assignTo = null;
+ }
+ return ret;
});
makeFuncLineActor('load', function(item) {
var value = finalizeLLVMParameter(item.pointer);
@@ -1160,6 +1212,7 @@ function JSify(data, functionsOnly, givenFunctions) {
var useJSArgs = (shortident + '__jsargs') in LibraryManager.library;
var hasVarArgs = isVarArgsFunctionType(type);
var normalArgs = (hasVarArgs && !useJSArgs) ? countNormalArgs(type) : -1;
+ var byPointer = getVarData(funcData, ident);
params.forEach(function(param, i) {
var val = finalizeParam(param);
@@ -1182,7 +1235,10 @@ function JSify(data, functionsOnly, givenFunctions) {
}
});
- args = args.map(function(arg, i) { return indexizeFunctions(arg, argsTypes[i]) });
+ if (ASM_JS && shortident in Functions.libraryFunctions) {
+ args = args.map(function(arg, i) { return asmCoercion(indexizeFunctions(arg, argsTypes[i]), argsTypes[i]) });
+ }
+
varargs = varargs.map(function(vararg, i) {
if (ignoreFunctionIndexizing.indexOf(i) >= 0) return vararg;
return vararg === 0 ? 0 : indexizeFunctions(vararg, varargsTypes[i])
@@ -1225,11 +1281,23 @@ function JSify(data, functionsOnly, givenFunctions) {
return inline.apply(null, args); // Warning: inlining does not prevent recalculation of the arguments. They should be simple identifiers
}
- if (getVarData(funcData, ident)) {
- ident = 'FUNCTION_TABLE[' + ident + ']';
+ var returnType;
+ if (byPointer || ASM_JS) returnType = type.split(' ')[0];
+
+ if (byPointer) {
+ var sig = Functions.getSignature(returnType, argsTypes);
+ if (ASM_JS) {
+ assert(returnType.search(/\("'\[,/) == -1); // XXX need isFunctionType(type, out)
+ ident = '(' + ident + ')&{{{ FTM_' + sig + ' }}}'; // the function table mask is set in emscripten.py
+ }
+ ident = Functions.getTable(sig) + '[' + ident + ']';
}
- return ident + '(' + args.join(', ') + ')';
+ var ret = ident + '(' + args.join(', ') + ')';
+ if (ASM_JS && shortident in Functions.libraryFunctions) {
+ ret = asmCoercion(ret, returnType);
+ }
+ return ret;
}
makeFuncLineActor('getelementptr', function(item) { return finalizeLLVMFunctionCall(item) });
makeFuncLineActor('call', function(item) {
@@ -1325,8 +1393,7 @@ function JSify(data, functionsOnly, givenFunctions) {
}
if (phase == 'pre' || phase == 'funcs') {
- // serialize out the data that later passes need
- PassManager.serialize(); // XXX for funcs pass, do not serialize it all. I think we just need which were indexized.
+ PassManager.serialize();
return;
}
@@ -1353,11 +1420,11 @@ function JSify(data, functionsOnly, givenFunctions) {
var postParts = processMacros(preprocess(read(postFile))).split('{{GLOBAL_VARS}}');
print(postParts[0]);
- print(Functions.generateIndexing()); // done last, as it may rely on aliases set in postsets
+ Functions.generateIndexing(); // done last, as it may rely on aliases set in postsets
// Load runtime-linked libraries
RUNTIME_LINKED_LIBS.forEach(function(lib) {
- print('eval(Module["read"]("' + lib + '"))(FUNCTION_TABLE.length, this);');
+ print('eval(Module["read"]("' + lib + '"))(' + Functions.getTable('x') + '.length, this);');
});
print(postParts[1]);
@@ -1369,6 +1436,8 @@ function JSify(data, functionsOnly, givenFunctions) {
return IGNORED_FUNCTIONS.indexOf(func.ident) < 0;
})) + '\n');
+ PassManager.serialize();
+
return null;
}
diff --git a/src/library.js b/src/library.js
index 1bdd840d..c01b2d70 100644
--- a/src/library.js
+++ b/src/library.js
@@ -20,10 +20,11 @@ LibraryManager.library = {
// File system base.
// ==========================================================================
- stdin: 0,
- stdout: 0,
- stderr: 0,
- _impure_ptr: 0,
+ // keep this low in memory, because we flatten arrays with them in them
+ stdin: 'allocate(1, "i32*", ALLOC_STACK)',
+ stdout: 'allocate(1, "i32*", ALLOC_STACK)',
+ stderr: 'allocate(1, "i32*", ALLOC_STACK)',
+ _impure_ptr: 'allocate(1, "i32*", ALLOC_STACK)',
$FS__deps: ['$ERRNO_CODES', '__setErrNo', 'stdin', 'stdout', 'stderr', '_impure_ptr'],
$FS__postset: '__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });' +
@@ -572,10 +573,10 @@ LibraryManager.library = {
eof: false,
ungotten: []
};
- // Allocate these on the stack (and never free, we are called from ATINIT or earlier), to keep their locations low
- _stdin = allocate([1], 'void*', ALLOC_STACK);
- _stdout = allocate([2], 'void*', ALLOC_STACK);
- _stderr = allocate([3], 'void*', ALLOC_STACK);
+ assert(Math.max(_stdin, _stdout, _stderr) < 128); // make sure these are low, we flatten arrays with these
+ {{{ makeSetValue('_stdin', 0, 1, 'void*') }}};
+ {{{ makeSetValue('_stdout', 0, 2, 'void*') }}};
+ {{{ makeSetValue('_stderr', 0, 3, 'void*') }}};
// Other system paths
FS.createPath('/', 'dev/shm/tmp', true, true); // temp files
@@ -591,9 +592,9 @@ LibraryManager.library = {
FS.checkStreams();
assert(FS.streams.length < 1024); // at this early stage, we should not have a large set of file descriptors - just a few
#endif
- __impure_ptr = allocate([ allocate(
+ allocate([ allocate(
{{{ Runtime.QUANTUM_SIZE === 4 ? '[0, 0, 0, 0, _stdin, 0, 0, 0, _stdout, 0, 0, 0, _stderr, 0, 0, 0]' : '[0, _stdin, _stdout, _stderr]' }}},
- 'void*', ALLOC_STATIC) ], 'void*', ALLOC_STATIC);
+ 'void*', ALLOC_STATIC) ], 'void*', ALLOC_NONE, __impure_ptr);
},
quit: function() {
@@ -3616,7 +3617,9 @@ LibraryManager.library = {
},
bsearch: function(key, base, num, size, compar) {
- var cmp = FUNCTION_TABLE[compar];
+ var cmp = function(x, y) {
+ return Runtime.dynCall('iii', compar, [x, y])
+ };
var left = 0;
var right = num;
var mid, test, addr;
@@ -3810,7 +3813,7 @@ LibraryManager.library = {
#if USE_TYPED_ARRAYS == 2
if (bits == 64) {
- ret = [{{{ splitI64('ret') }}}];
+ {{{ makeStructuralReturn(splitI64('ret')) }}};
}
#endif
@@ -3854,11 +3857,13 @@ LibraryManager.library = {
},
qsort__deps: ['memcpy'],
- qsort: function(base, num, size, comparator) {
+ qsort: function(base, num, size, cmp) {
if (num == 0 || size == 0) return;
// forward calls to the JavaScript sort method
// first, sort the items logically
- comparator = FUNCTION_TABLE[comparator];
+ var comparator = function(x, y) {
+ return Runtime.dynCall('iii', cmp, [x, y]);
+ }
var keys = [];
for (var i = 0; i < num; i++) keys.push(i);
keys.sort(function(a, b) {
@@ -3874,9 +3879,10 @@ LibraryManager.library = {
_free(temp);
},
- environ: null,
- __environ: null,
- __buildEnvironment__deps: ['environ', '__environ'],
+ environ: 'allocate(1, "i32*", ALLOC_STACK)',
+ __environ__deps: ['environ'],
+ __environ: '_environ',
+ __buildEnvironment__deps: ['__environ'],
__buildEnvironment: function(env) {
// WARNING: Arbitrary limit!
var MAX_ENV_VALUES = 64;
@@ -3885,7 +3891,8 @@ LibraryManager.library = {
// Statically allocate memory for the environment.
var poolPtr;
var envPtr;
- if (_environ === null) {
+ if (!___buildEnvironment.called) {
+ ___buildEnvironment.called = true;
// Set default values. Use string keys for Closure Compiler compatibility.
ENV['USER'] = 'root';
ENV['PATH'] = '/';
@@ -3898,9 +3905,7 @@ LibraryManager.library = {
envPtr = allocate(MAX_ENV_VALUES * {{{ Runtime.QUANTUM_SIZE }}},
'i8*', ALLOC_STATIC);
{{{ makeSetValue('envPtr', '0', 'poolPtr', 'i8*') }}}
- _environ = allocate([envPtr], 'i8**', ALLOC_STATIC);
- // Set up global variable alias.
- ___environ = _environ;
+ {{{ makeSetValue('_environ', 0, 'envPtr', 'i8*') }}};
} else {
envPtr = {{{ makeGetValue('_environ', '0', 'i8**') }}};
poolPtr = {{{ makeGetValue('envPtr', '0', 'i8*') }}};
@@ -4097,14 +4102,14 @@ LibraryManager.library = {
memcpy__inline: function (dest, src, num, align) {
var ret = '';
#if ASSERTIONS
- ret += "assert(" + num + " % 1 === 0, 'memcpy given ' + " + num + " + ' bytes to copy. Problem with quantum=1 corrections perhaps?');";
+ ret += "assert(" + num + " % 1 === 0);"; //, 'memcpy given ' + " + num + " + ' bytes to copy. Problem with quantum=1 corrections perhaps?');";
#endif
ret += makeCopyValues(dest, src, num, 'null', null, align);
return ret;
},
memcpy: function (dest, src, num, align) {
#if ASSERTIONS
- assert(num % 1 === 0, 'memcpy given ' + num + ' bytes to copy. Problem with quantum=1 corrections perhaps?');
+ assert(num % 1 === 0); //, 'memcpy given ' + num + ' bytes to copy. Problem with quantum=1 corrections perhaps?');
#endif
#if USE_TYPED_ARRAYS == 2
if (num >= {{{ SEEK_OPTIMAL_ALIGN_MIN }}} && src % 2 == dest % 2) {
@@ -4716,9 +4721,8 @@ LibraryManager.library = {
// ==========================================================================
llvm_va_start__inline: function(ptr) {
- // varargs - we received a pointer to the varargs as a final 'extra' parameter
- var data = 'arguments[' + Framework.currItem.funcData.ident + '.length]';
- return makeSetValue(ptr, 0, data, 'void*');
+ // varargs - we received a pointer to the varargs as a final 'extra' parameter called 'varrp'
+ return makeSetValue(ptr, 0, 'varrp', 'void*');
},
llvm_va_end: function() {},
@@ -4844,14 +4848,18 @@ LibraryManager.library = {
return;
}
// Clear state flag.
- __THREW__ = false;
+#if ASM_JS
+ asm.setThrew(0);
+#else
+ __THREW__ = 0;
+#endif
// Clear type.
{{{ makeSetValue('_llvm_eh_exception.buf', QUANTUM_SIZE, '0', 'void*') }}}
// Call destructor if one is registered then clear it.
var ptr = {{{ makeGetValue('_llvm_eh_exception.buf', '0', 'void*') }}};
var destructor = {{{ makeGetValue('_llvm_eh_exception.buf', 2 * QUANTUM_SIZE, 'void*') }}};
if (destructor) {
- FUNCTION_TABLE[destructor](ptr);
+ Runtime.dynCall('vi', destructor, [ptr]);
{{{ makeSetValue('_llvm_eh_exception.buf', 2 * QUANTUM_SIZE, '0', 'i32') }}}
}
// Free ptr if it isn't null.
@@ -4933,12 +4941,12 @@ LibraryManager.library = {
// return the type of the catch block which should be called.
for (var i = 0; i < typeArray.length; i++) {
if (___cxa_does_inherit(typeArray[i], throwntype, thrown))
- return { f0:thrown, f1:typeArray[i] };
+ {{{ makeStructuralReturn(['thrown', 'typeArray[i]']) }}};
}
// Shouldn't happen unless we have bogus data in typeArray
// or encounter a type for which emscripten doesn't have suitable
// typeinfo defined. Best-efforts match just in case.
- return { f0:thrown, f1 :throwntype };
+ {{{ makeStructuralReturn(['thrown', 'throwntype']) }}};
},
// Recursively walks up the base types of 'possibilityType'
@@ -5004,73 +5012,51 @@ LibraryManager.library = {
llvm_uadd_with_overflow_i8: function(x, y) {
x = x & 0xff;
y = y & 0xff;
- return {
- f0: (x+y) & 0xff,
- f1: x+y > 255
- };
+ {{{ makeStructuralReturn(['(x+y) & 0xff', 'x+y > 255']) }}};
},
llvm_umul_with_overflow_i8: function(x, y) {
x = x & 0xff;
y = y & 0xff;
- return {
- f0: (x*y) & 0xff,
- f1: x*y > 255
- };
+ {{{ makeStructuralReturn(['(x*y) & 0xff', 'x*y > 255']) }}};
},
llvm_uadd_with_overflow_i16: function(x, y) {
x = x & 0xffff;
y = y & 0xffff;
- return {
- f0: (x+y) & 0xffff,
- f1: x+y > 65535
- };
+ {{{ makeStructuralReturn(['(x+y) & 0xffff', 'x+y > 65535']) }}};
},
llvm_umul_with_overflow_i16: function(x, y) {
x = x & 0xffff;
y = y & 0xffff;
- return {
- f0: (x*y) & 0xffff,
- f1: x*y > 65535
- };
+ {{{ makeStructuralReturn(['(x*y) & 0xffff', 'x*y > 65535']) }}};
},
llvm_uadd_with_overflow_i32: function(x, y) {
x = x>>>0;
y = y>>>0;
- return {
- f0: (x+y)>>>0,
- f1: x+y > 4294967295
- };
+ {{{ makeStructuralReturn(['(x+y)>>>0', 'x+y > 4294967295']) }}};
},
llvm_umul_with_overflow_i32: function(x, y) {
x = x>>>0;
y = y>>>0;
- return {
- f0: (x*y)>>>0,
- f1: x*y > 4294967295
- };
+ {{{ makeStructuralReturn(['(x*y)>>>0', 'x*y > 4294967295']) }}};
},
llvm_uadd_with_overflow_i64__deps: [function() { Types.preciseI64MathUsed = 1 }],
llvm_uadd_with_overflow_i64: function(xl, xh, yl, yh) {
i64Math.add(xl, xh, yl, yh);
- return {
- f0: i64Math.result,
- f1: 0 // XXX Need to hack support for this in long.js
- };
+ {{{ makeStructuralReturn(['HEAP32[tempDoublePtr>>2]', 'HEAP32[tempDoublePtr+4>>2]', '0']) }}};
+ // XXX Need to hack support for second param in long.js
},
llvm_umul_with_overflow_i64__deps: [function() { Types.preciseI64MathUsed = 1 }],
llvm_umul_with_overflow_i64: function(xl, xh, yl, yh) {
- i64Math.mul(xl, xh, yl, yh);
- return {
- f0: i64Math.result,
- f1: 0 // XXX Need to hack support for this in long.js
- };
+ i64Math.multiply(xl, xh, yl, yh);
+ {{{ makeStructuralReturn(['HEAP32[tempDoublePtr>>2]', 'HEAP32[tempDoublePtr+4>>2]', '0']) }}};
+ // XXX Need to hack support for second param in long.js
},
llvm_stacksave: function() {
@@ -5510,7 +5496,7 @@ LibraryManager.library = {
}
try {
- var lib_module = eval(lib_data)(FUNCTION_TABLE.length);
+ var lib_module = eval(lib_data)({{{ Functions.getTable('x') }}}.length);
} catch (e) {
#if ASSERTIONS
Module.printErr('Error in loading dynamic library: ' + e);
@@ -5583,9 +5569,9 @@ LibraryManager.library = {
} else {
var result = lib.module[symbol];
if (typeof result == 'function') {
- FUNCTION_TABLE.push(result);
- FUNCTION_TABLE.push(0);
- result = FUNCTION_TABLE.length - 2;
+ {{{ Functions.getTable('x') }}}.push(result);
+ {{{ Functions.getTable('x') }}}.push(0);
+ result = {{{ Functions.getTable('x') }}}.length - 2;
lib.cached_functions = result;
}
return result;
@@ -5653,11 +5639,11 @@ LibraryManager.library = {
'tm_gmtoff',
'tm_zone'], '%struct.tm'),
// Statically allocated time struct.
- __tm_current: 0,
+ __tm_current: 'allocate({{{ Runtime.QUANTUM_SIZE }}}*26, "i8", ALLOC_STACK)',
// Statically allocated timezone strings.
__tm_timezones: {},
// Statically allocated time strings.
- __tm_formatted: 0,
+ __tm_formatted: 'allocate({{{ Runtime.QUANTUM_SIZE }}}*26, "i8", ALLOC_STACK)',
mktime__deps: ['__tm_struct_layout', 'tzset'],
mktime: function(tmPtr) {
@@ -5680,7 +5666,6 @@ LibraryManager.library = {
gmtime__deps: ['malloc', '__tm_struct_layout', '__tm_current', 'gmtime_r'],
gmtime: function(time) {
- if (!___tm_current) ___tm_current = _malloc(___tm_struct_layout.__size__);
return _gmtime_r(time, ___tm_current);
},
@@ -5723,7 +5708,6 @@ LibraryManager.library = {
localtime__deps: ['malloc', '__tm_struct_layout', '__tm_current', 'localtime_r'],
localtime: function(time) {
- if (!___tm_current) ___tm_current = _malloc(___tm_struct_layout.__size__);
return _localtime_r(time, ___tm_current);
},
@@ -5759,7 +5743,6 @@ LibraryManager.library = {
asctime__deps: ['malloc', '__tm_formatted', 'asctime_r'],
asctime: function(tmPtr) {
- if (!___tm_formatted) ___tm_formatted = _malloc(26);
return _asctime_r(tmPtr, ___tm_formatted);
},
@@ -5794,18 +5777,17 @@ LibraryManager.library = {
// TODO: Initialize these to defaults on startup from system settings.
// Note: glibc has one fewer underscore for all of these. Also used in other related functions (timegm)
- _tzname: null,
- _daylight: null,
- _timezone: null,
+ _tzname: 'allocate({{{ 2*Runtime.QUANTUM_SIZE }}}, "i32*", ALLOC_STACK)',
+ _daylight: 'allocate(1, "i32*", ALLOC_STACK)',
+ _timezone: 'allocate(1, "i32*", ALLOC_STACK)',
tzset__deps: ['_tzname', '_daylight', '_timezone'],
tzset: function() {
// TODO: Use (malleable) environment variables instead of system settings.
- if (__tzname) return; // glibc does not need the double __
+ if (_tzset.called) return;
+ _tzset.called = true;
- __timezone = _malloc({{{ Runtime.QUANTUM_SIZE }}});
{{{ makeSetValue('__timezone', '0', '-(new Date()).getTimezoneOffset() * 60', 'i32') }}}
- __daylight = _malloc({{{ Runtime.QUANTUM_SIZE }}});
var winter = new Date(2000, 0, 1);
var summer = new Date(2000, 6, 1);
{{{ makeSetValue('__daylight', '0', 'Number(winter.getTimezoneOffset() != summer.getTimezoneOffset())', 'i32') }}}
@@ -5814,7 +5796,6 @@ LibraryManager.library = {
var summerName = 'GMT'; // XXX do not rely on browser timezone info, it is very unpredictable | summer.toString().match(/\(([A-Z]+)\)/)[1];
var winterNamePtr = allocate(intArrayFromString(winterName), 'i8', ALLOC_NORMAL);
var summerNamePtr = allocate(intArrayFromString(summerName), 'i8', ALLOC_NORMAL);
- __tzname = _malloc(2 * {{{ Runtime.QUANTUM_SIZE }}}); // glibc does not need the double __
{{{ makeSetValue('__tzname', '0', 'winterNamePtr', 'i32') }}}
{{{ makeSetValue('__tzname', Runtime.QUANTUM_SIZE, 'summerNamePtr', 'i32') }}}
},
@@ -6014,6 +5995,8 @@ LibraryManager.library = {
return 0;
},
+ freelocale: function(locale) {},
+
uselocale: function(locale) {
return 0;
},
@@ -6453,6 +6436,8 @@ LibraryManager.library = {
pthread_mutexattr_destroy: function() {},
pthread_mutex_lock: function() {},
pthread_mutex_unlock: function() {},
+ pthread_cond_init: function() {},
+ pthread_cond_destroy: function() {},
pthread_cond_broadcast: function() {},
pthread_self: function() {
//FIXME: assumes only a single thread
@@ -6486,7 +6471,7 @@ LibraryManager.library = {
pthread_once: function(ptr, func) {
if (!_pthread_once.seen) _pthread_once.seen = {};
if (ptr in _pthread_once.seen) return;
- FUNCTION_TABLE[func]();
+ Runtime.dynCall('v', func);
_pthread_once.seen[ptr] = 1;
},
@@ -6504,7 +6489,7 @@ LibraryManager.library = {
},
pthread_cleanup_push: function(routine, arg) {
- __ATEXIT__.push({ func: function() { FUNCTION_TABLE[routine](arg) } })
+ __ATEXIT__.push({ func: function() { Runtime.dynCall('vi', routine, [arg]) } })
_pthread_cleanup_push.level = __ATEXIT__.length;
},
diff --git a/src/library_browser.js b/src/library_browser.js
index 00ee158c..21bad254 100644
--- a/src/library_browser.js
+++ b/src/library_browser.js
@@ -377,10 +377,10 @@ mergeInto(LibraryManager.library, {
_file.substr(index +1),
_url, true, true,
function() {
- if (onload) FUNCTION_TABLE[onload](file);
+ if (onload) Runtime.dynCall('vi', onload, [file]);
},
function() {
- if (onerror) FUNCTION_TABLE[onerror](file);
+ if (onerror) Runtime.dynCall('vi', onerror, [file]);
}
);
},
@@ -395,10 +395,10 @@ mergeInto(LibraryManager.library, {
_file.substr(index +1),
new Uint8Array(data.object.contents), true, true,
function() {
- if (onload) FUNCTION_TABLE[onload](file);
+ if (onload) Runtime.dynCall('vi', onload, [file]);
},
function() {
- if (onerror) FUNCTION_TABLE[onerror](file);
+ if (onerror) Runtime.dynCall('vi', onerror, [file]);
},
true // don'tCreateFile - it's already there
);
@@ -417,10 +417,10 @@ mergeInto(LibraryManager.library, {
{{{ makeHEAPView('U8', 'data', 'data + size') }}},
true, true,
function() {
- if (onload) FUNCTION_TABLE[onload](arg, cname);
+ if (onload) Runtime.dynCall('vii', onload, [file, cname]);
},
function() {
- if (onerror) FUNCTION_TABLE[onerror](arg);
+ if (onerror) Runtime.dynCall('vi', onerror, [file]);
},
true // don'tCreateFile - it's already there
);
@@ -440,7 +440,6 @@ mergeInto(LibraryManager.library, {
emscripten_set_main_loop: function(func, fps, simulateInfiniteLoop) {
Module['noExitRuntime'] = true;
- var jsFunc = FUNCTION_TABLE[func];
Browser.mainLoop.runner = function() {
if (Browser.mainLoop.queue.length > 0) {
var start = Date.now();
@@ -473,7 +472,7 @@ mergeInto(LibraryManager.library, {
Module['preMainLoop']();
}
- jsFunc();
+ Runtime.dynCall('v', func);
if (Module['postMainLoop']) {
Module['postMainLoop']();
@@ -517,12 +516,16 @@ mergeInto(LibraryManager.library, {
},
_emscripten_push_main_loop_blocker: function(func, arg, name) {
- Browser.mainLoop.queue.push({ func: FUNCTION_TABLE[func], arg: arg, name: Pointer_stringify(name), counted: true });
+ Browser.mainLoop.queue.push({ func: function() {
+ Runtime.dynCall('vi', func, [arg]);
+ }, name: Pointer_stringify(name), counted: true });
Browser.mainLoop.updateStatus();
},
_emscripten_push_uncounted_main_loop_blocker: function(func, arg, name) {
- Browser.mainLoop.queue.push({ func: FUNCTION_TABLE[func], arg: arg, name: Pointer_stringify(name), counted: false });
+ Browser.mainLoop.queue.push({ func: function() {
+ Runtime.dynCall('vi', func, [arg]);
+ }, name: Pointer_stringify(name), counted: false });
Browser.mainLoop.updateStatus();
},
diff --git a/src/library_gc.js b/src/library_gc.js
index a06e2f01..fe4cbf63 100644
--- a/src/library_gc.js
+++ b/src/library_gc.js
@@ -1,5 +1,7 @@
if (GC_SUPPORT) {
+ EXPORTED_FUNCTIONS['_calloc'] = 1;
+
var LibraryGC = {
$GC__deps: ['sbrk'],
$GC: {
@@ -50,7 +52,7 @@ if (GC_SUPPORT) {
free: function(ptr) { // does not check if anything refers to it, this is a forced free
var finalizer = GC.finalizers[ptr];
if (finalizer) {
- Runtime.getFuncWrapper(finalizer)(ptr, GC.finalizerArgs[ptr]);
+ Runtime.getFuncWrapper(finalizer, 'vii')(ptr, GC.finalizerArgs[ptr]);
GC.finalizers[ptr] = 0;
}
_free(ptr);
diff --git a/src/library_gl.js b/src/library_gl.js
index b4098813..6927c3ec 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -1275,11 +1275,12 @@ var LibraryGL = {
getProcAddress: function(name) {
name = name.replace('EXT', '').replace('ARB', '');
// Do the translation carefully because of closure
+ var sig = '';
switch (name) {
- case 'glCreateShaderObject': case 'glCreateShader': func = _glCreateShader; break;
- case 'glCreateProgramObject': case 'glCreateProgram': func = _glCreateProgram; break;
- case 'glAttachObject': case 'glAttachShader': func = _glAttachShader; break;
- case 'glUseProgramObject': case 'glUseProgram': func = _glUseProgram; break;
+ case 'glCreateShaderObject': case 'glCreateShader': func = _glCreateShader; sig = 'ii'; break;
+ case 'glCreateProgramObject': case 'glCreateProgram': func = _glCreateProgram; sig = 'ii'; break;
+ case 'glAttachObject': case 'glAttachShader': func = _glAttachShader; sig = 'vi'; break;
+ case 'glUseProgramObject': case 'glUseProgram': func = _glUseProgram; sig = 'vi'; break;
case 'glDeleteObject': func = function(id) {
if (GL.programs[id]) {
_glDeleteProgram(id);
@@ -1288,7 +1289,7 @@ var LibraryGL = {
} else {
Module.printErr('WARNING: deleteObject received invalid id: ' + id);
}
- }; break;
+ }; sig = 'vi'; break;
case 'glGetObjectParameteriv': func = function(id, type, result) {
if (GL.programs[id]) {
if (type == 0x8B84) { // GL_OBJECT_INFO_LOG_LENGTH_ARB
@@ -1305,7 +1306,7 @@ var LibraryGL = {
} else {
Module.printErr('WARNING: getObjectParameteriv received invalid id: ' + id);
}
- }; break;
+ }; sig = 'viii'; break;
case 'glGetInfoLog': func = function(id, maxLength, length, infoLog) {
if (GL.programs[id]) {
_glGetProgramInfoLog(id, maxLength, length, infoLog);
@@ -1314,58 +1315,58 @@ var LibraryGL = {
} else {
Module.printErr('WARNING: getObjectParameteriv received invalid id: ' + id);
}
- }; break;
+ }; sig = 'viiii'; break;
case 'glBindProgram': func = function(type, id) {
assert(id == 0);
- }; break;
- case 'glDrawRangeElements': func = _glDrawRangeElements; break;
- case 'glShaderSource': func = _glShaderSource; break;
- case 'glCompileShader': func = _glCompileShader; break;
- case 'glLinkProgram': func = _glLinkProgram; break;
- case 'glGetUniformLocation': func = _glGetUniformLocation; break;
- case 'glUniform1f': func = _glUniform1f; break;
- case 'glUniform2f': func = _glUniform2f; break;
- case 'glUniform3f': func = _glUniform3f; break;
- case 'glUniform4f': func = _glUniform4f; break;
- case 'glUniform1fv': func = _glUniform1fv; break;
- case 'glUniform2fv': func = _glUniform2fv; break;
- case 'glUniform3fv': func = _glUniform3fv; break;
- case 'glUniform4fv': func = _glUniform4fv; break;
- case 'glUniform1i': func = _glUniform1i; break;
- case 'glUniform2i': func = _glUniform2i; break;
- case 'glUniform3i': func = _glUniform3i; break;
- case 'glUniform4i': func = _glUniform4i; break;
- case 'glUniform1iv': func = _glUniform1iv; break;
- case 'glUniform2iv': func = _glUniform2iv; break;
- case 'glUniform3iv': func = _glUniform3iv; break;
- case 'glUniform4iv': func = _glUniform4iv; break;
- case 'glBindAttribLocation': func = _glBindAttribLocation; break;
- case 'glGetActiveUniform': func = _glGetActiveUniform; break;
- case 'glGenBuffers': func = _glGenBuffers; break;
- case 'glBindBuffer': func = _glBindBuffer; break;
- case 'glBufferData': func = _glBufferData; break;
- case 'glBufferSubData': func = _glBufferSubData; break;
- case 'glDeleteBuffers': func = _glDeleteBuffers; break;
- case 'glActiveTexture': func = _glActiveTexture; break;
- case 'glClientActiveTexture': func = _glClientActiveTexture; break;
- case 'glGetProgramiv': func = _glGetProgramiv; break;
- case 'glEnableVertexAttribArray': func = _glEnableVertexAttribArray; break;
- case 'glDisableVertexAttribArray': func = _glDisableVertexAttribArray; break;
- case 'glVertexAttribPointer': func = _glVertexAttribPointer; break;
- case 'glBindRenderbuffer': func = _glBindRenderbuffer; break;
- case 'glDeleteRenderbuffers': func = _glDeleteRenderbuffers; break;
- case 'glGenRenderbuffers': func = _glGenRenderbuffers; break;
- case 'glCompressedTexImage2D': func = _glCompressedTexImage2D; break;
- case 'glCompressedTexSubImage2D': func = _glCompressedTexSubImage2D; break;
- case 'glBindFramebuffer': func = _glBindFramebuffer; break;
- case 'glGenFramebuffers': func = _glGenFramebuffers; break;
- case 'glDeleteFramebuffers': func = _glDeleteFramebuffers; break;
- case 'glFramebufferRenderbuffer': func = _glFramebufferRenderbuffer; break;
- case 'glFramebufferTexture2D': func = _glFramebufferTexture2D; break;
- case 'glGetFramebufferAttachmentParameteriv': func = _glGetFramebufferAttachmentParameteriv; break;
- case 'glIsFramebuffer': func = _glIsFramebuffer; break;
- case 'glCheckFramebufferStatus': func = _glCheckFramebufferStatus; break;
- case 'glRenderbufferStorage': func = _glRenderbufferStorage; break;
+ }; sig = 'vii'; break;
+ case 'glDrawRangeElements': func = _glDrawRangeElements; sig = 'viiiiii'; break;
+ case 'glShaderSource': func = _glShaderSource; sig = 'viiii'; break;
+ case 'glCompileShader': func = _glCompileShader; sig = 'vi'; break;
+ case 'glLinkProgram': func = _glLinkProgram; sig = 'vi'; break;
+ case 'glGetUniformLocation': func = _glGetUniformLocation; sig = 'iii'; break;
+ case 'glUniform1f': func = _glUniform1f; sig = 'vid'; break;
+ case 'glUniform2f': func = _glUniform2f; sig = 'vidd'; break;
+ case 'glUniform3f': func = _glUniform3f; sig = 'viddd'; break;
+ case 'glUniform4f': func = _glUniform4f; sig = 'vidddd'; break;
+ case 'glUniform1fv': func = _glUniform1fv; sig = 'viii'; break;
+ case 'glUniform2fv': func = _glUniform2fv; sig = 'viii'; break;
+ case 'glUniform3fv': func = _glUniform3fv; sig = 'viii'; break;
+ case 'glUniform4fv': func = _glUniform4fv; sig = 'viii'; break;
+ case 'glUniform1i': func = _glUniform1i; sig = 'vii'; break;
+ case 'glUniform2i': func = _glUniform2i; sig = 'viii'; break;
+ case 'glUniform3i': func = _glUniform3i; sig = 'viiii'; break;
+ case 'glUniform4i': func = _glUniform4i; sig = 'viiii'; break;
+ case 'glUniform1iv': func = _glUniform1iv; sig = 'viii'; break;
+ case 'glUniform2iv': func = _glUniform2iv; sig = 'viii'; break;
+ case 'glUniform3iv': func = _glUniform3iv; sig = 'viii'; break;
+ case 'glUniform4iv': func = _glUniform4iv; sig = 'viii'; break;
+ case 'glBindAttribLocation': func = _glBindAttribLocation; sig = 'viii'; break;
+ case 'glGetActiveUniform': func = _glGetActiveUniform; sig = 'viiiiiii'; break;
+ case 'glGenBuffers': func = _glGenBuffers; sig = 'iii'; break;
+ case 'glBindBuffer': func = _glBindBuffer; sig = 'vii'; break;
+ case 'glBufferData': func = _glBufferData; sig = 'viiii'; break;
+ case 'glBufferSubData': func = _glBufferSubData; sig = 'viiii'; break;
+ case 'glDeleteBuffers': func = _glDeleteBuffers; sig = 'vii'; break;
+ case 'glActiveTexture': func = _glActiveTexture; sig = 'vi'; break;
+ case 'glClientActiveTexture': func = _glClientActiveTexture; sig = 'vi'; break;
+ case 'glGetProgramiv': func = _glGetProgramiv; sig = 'viii'; break;
+ case 'glEnableVertexAttribArray': func = _glEnableVertexAttribArray; sig = 'vi'; break;
+ case 'glDisableVertexAttribArray': func = _glDisableVertexAttribArray; sig = 'vi'; break;
+ case 'glVertexAttribPointer': func = _glVertexAttribPointer; sig = 'viiiiii'; break;
+ case 'glBindRenderbuffer': func = _glBindRenderbuffer; sig = 'vii'; break;
+ case 'glDeleteRenderbuffers': func = _glDeleteRenderbuffers; sig = 'vii'; break;
+ case 'glGenRenderbuffers': func = _glGenRenderbuffers; sig = 'vii'; break;
+ case 'glCompressedTexImage2D': func = _glCompressedTexImage2D; sig = 'viiiiiiii'; break;
+ case 'glCompressedTexSubImage2D': func = _glCompressedTexSubImage2D; sig = 'viiiiiiiii'; break;
+ case 'glBindFramebuffer': func = _glBindFramebuffer; sig = 'vii'; break;
+ case 'glGenFramebuffers': func = _glGenFramebuffers; sig = 'vii'; break;
+ case 'glDeleteFramebuffers': func = _glDeleteFramebuffers; sig = 'vii'; break;
+ case 'glFramebufferRenderbuffer': func = _glFramebufferRenderbuffer; sig = 'viiii'; break;
+ case 'glFramebufferTexture2D': func = _glFramebufferTexture2D; sig = 'viiiii'; break;
+ case 'glGetFramebufferAttachmentParameteriv': func = _glGetFramebufferAttachmentParameteriv; sig = 'viiii'; break;
+ case 'glIsFramebuffer': func = _glIsFramebuffer; sig = 'ii'; break;
+ case 'glCheckFramebufferStatus': func = _glCheckFramebufferStatus; sig = 'ii'; break;
+ case 'glRenderbufferStorage': func = _glRenderbufferStorage; sig = 'viiii'; break;
default: {
Module.printErr('WARNING: getProcAddress failed for ' + name);
func = function() {
@@ -1374,7 +1375,7 @@ var LibraryGL = {
};
}
}
- return Runtime.addFunction(func);
+ return Runtime.addFunction(func, sig);
}
},
diff --git a/src/library_glut.js b/src/library_glut.js
index 6069b484..0994df34 100644
--- a/src/library_glut.js
+++ b/src/library_glut.js
@@ -54,11 +54,11 @@ var LibraryGLUT = {
if (GLUT.buttons == 0 && event.target == Module["canvas"] && GLUT.passiveMotionFunc) {
event.preventDefault();
GLUT.saveModifiers(event);
- FUNCTION_TABLE[GLUT.passiveMotionFunc](GLUT.lastX, GLUT.lastY);
+ Runtime.dynCall('vii', GLUT.passiveMotionFunc, [GLUT.lastX, GLUT.lastY]);
} else if (GLUT.buttons != 0 && GLUT.motionFunc) {
event.preventDefault();
GLUT.saveModifiers(event);
- FUNCTION_TABLE[GLUT.motionFunc](GLUT.lastX, GLUT.lastY);
+ Runtime.dynCall('vii', GLUT.motionFunc, [GLUT.lastX, GLUT.lastY]);
}
},
@@ -159,7 +159,7 @@ var LibraryGLUT = {
if( GLUT.specialFunc ) {
event.preventDefault();
GLUT.saveModifiers(event);
- FUNCTION_TABLE[GLUT.specialFunc](key, GLUT.lastX, GLUT.lastY);
+ Runtime.dynCall('viii', GLUT.specialFunc, [key, GLUT.lastX, GLUT.lastY]);
}
}
else
@@ -168,7 +168,7 @@ var LibraryGLUT = {
if( key !== null && GLUT.keyboardFunc ) {
event.preventDefault();
GLUT.saveModifiers(event);
- FUNCTION_TABLE[GLUT.keyboardFunc](key, GLUT.lastX, GLUT.lastY);
+ Runtime.dynCall('viii', GLUT.keyboardFunc, [key, GLUT.lastX, GLUT.lastY]);
}
}
}
@@ -181,7 +181,7 @@ var LibraryGLUT = {
if(GLUT.specialUpFunc) {
event.preventDefault ();
GLUT.saveModifiers(event);
- FUNCTION_TABLE[GLUT.specialUpFunc](key, GLUT.lastX, GLUT.lastY);
+ Runtime.dynCall('viii', GLUT.specialUpFunc, key, [GLUT.lastX, GLUT.lastY]);
}
}
else
@@ -190,7 +190,7 @@ var LibraryGLUT = {
if( key !== null && GLUT.keyboardUpFunc ) {
event.preventDefault ();
GLUT.saveModifiers(event);
- FUNCTION_TABLE[GLUT.keyboardUpFunc](key, GLUT.lastX, GLUT.lastY);
+ Runtime.dynCall('viii', GLUT.keyboardUpFunc, [key, GLUT.lastX, GLUT.lastY]);
}
}
}
@@ -206,7 +206,7 @@ var LibraryGLUT = {
} catch (e) {}
event.preventDefault();
GLUT.saveModifiers(event);
- FUNCTION_TABLE[GLUT.mouseFunc](event['button'], 0/*GLUT_DOWN*/, GLUT.lastX, GLUT.lastY);
+ Runtime.dynCall('viiii', GLUT.mouseFunc, [event['button'], 0/*GLUT_DOWN*/, GLUT.lastX, GLUT.lastY]);
}
},
@@ -217,7 +217,7 @@ var LibraryGLUT = {
if(GLUT.mouseFunc) {
event.preventDefault();
GLUT.saveModifiers(event);
- FUNCTION_TABLE[GLUT.mouseFunc](event['button'], 1/*GLUT_UP*/, GLUT.lastX, GLUT.lastY);
+ Runtime.dynCal('viiii', GLUT.mouseFunc, [event['button'], 1/*GLUT_UP*/, GLUT.lastX, GLUT.lastY]);
}
},
@@ -241,7 +241,7 @@ var LibraryGLUT = {
/* Can't call _glutReshapeWindow as that requests cancelling fullscreen. */
if (GLUT.reshapeFunc) {
// console.log("GLUT.reshapeFunc (from FS): " + width + ", " + height);
- FUNCTION_TABLE[GLUT.reshapeFunc](width, height);
+ Runtime.dynCall('vii', GLUT.reshapeFunc, [width, height]);
}
_glutPostRedisplay();
},
@@ -326,7 +326,7 @@ var LibraryGLUT = {
glutIdleFunc: function(func) {
var callback = function() {
if (GLUT.idleFunc) {
- FUNCTION_TABLE[GLUT.idleFunc]();
+ Runtime.dynCall('v', GLUT.idleFunc);
window.setTimeout(callback, 0);
}
}
@@ -336,7 +336,7 @@ var LibraryGLUT = {
},
glutTimerFunc: function(msec, func, value) {
- window.setTimeout(function() { FUNCTION_TABLE[func](value); }, msec);
+ window.setTimeout(function() { Runtime.dynCall('vi', func, [value]); }, msec);
},
glutDisplayFunc: function(func) {
@@ -388,7 +388,7 @@ var LibraryGLUT = {
Browser.setCanvasSize(width, height);
if (GLUT.reshapeFunc) {
// console.log("GLUT.reshapeFunc: " + width + ", " + height);
- FUNCTION_TABLE[GLUT.reshapeFunc](width, height);
+ Runtime.dynCall('vii', GLUT.reshapeFunc, [width, height]);
}
_glutPostRedisplay();
},
@@ -417,7 +417,9 @@ var LibraryGLUT = {
glutPostRedisplay: function() {
if (GLUT.displayFunc) {
- Browser.requestAnimationFrame(FUNCTION_TABLE[GLUT.displayFunc]);
+ Browser.requestAnimationFrame(function() {
+ Runtime.dynCall('vi', GLUT.displayFunc);
+ });
}
},
diff --git a/src/library_sdl.js b/src/library_sdl.js
index 0969f738..6f1ed32b 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -1116,7 +1116,7 @@ var LibrarySDL = {
SDL.audio.bufferSize = totalSamples*2; // hardcoded 16-bit audio
SDL.audio.buffer = _malloc(SDL.audio.bufferSize);
SDL.audio.caller = function() {
- FUNCTION_TABLE[SDL.audio.callback](SDL.audio.userdata, SDL.audio.buffer, SDL.audio.bufferSize);
+ Runtime.dynCall('viii', SDL.audio.callback, [SDL.audio.userdata, SDL.audio.buffer, SDL.audio.bufferSize]);
SDL.audio.pushAudio(SDL.audio.buffer, SDL.audio.bufferSize);
};
// Mozilla Audio API. TODO: Other audio APIs
@@ -1408,7 +1408,7 @@ var LibrarySDL = {
audio.pause();
SDL.music.audio = null;
if (SDL.hookMusicFinished) {
- FUNCTION_TABLE[SDL.hookMusicFinished]();
+ Runtime.dynCall('v', SDL.hookMusicFinished);
}
return 0;
},
@@ -1439,6 +1439,10 @@ var LibrarySDL = {
return id;
},
+ TTF_CloseFont: function(font) {
+ SDL.fonts[font] = null;
+ },
+
TTF_RenderText_Solid: function(font, text, color) {
// XXX the font and color are ignored
text = Pointer_stringify(text) || ' '; // if given an empty string, still return a valid surface
@@ -1551,7 +1555,7 @@ var LibrarySDL = {
SDL_AddTimer: function(interval, callback, param) {
return window.setTimeout(function() {
- FUNCTION_TABLE[callback](interval, param);
+ Runtime.dynCall('ii', callback, [interval, param]);
}, interval);
},
SDL_RemoveTimer: function(id) {
diff --git a/src/long.js b/src/long.js
index d5770e48..865540db 100644
--- a/src/long.js
+++ b/src/long.js
@@ -1530,27 +1530,26 @@ var i64Math = (function() { // Emscripten wrapper
// Emscripten wrapper
var Wrapper = {
- result: [0, 0], // return result stored here
add: function(xl, xh, yl, yh) {
var x = new goog.math.Long(xl, xh);
var y = new goog.math.Long(yl, yh);
var ret = x.add(y);
- Wrapper.result[0] = ret.low_;
- Wrapper.result[1] = ret.high_;
+ HEAP32[tempDoublePtr>>2] = ret.low_;
+ HEAP32[tempDoublePtr+4>>2] = ret.high_;
},
subtract: function(xl, xh, yl, yh) {
var x = new goog.math.Long(xl, xh);
var y = new goog.math.Long(yl, yh);
var ret = x.subtract(y);
- Wrapper.result[0] = ret.low_;
- Wrapper.result[1] = ret.high_;
+ HEAP32[tempDoublePtr>>2] = ret.low_;
+ HEAP32[tempDoublePtr+4>>2] = ret.high_;
},
multiply: function(xl, xh, yl, yh) {
var x = new goog.math.Long(xl, xh);
var y = new goog.math.Long(yl, yh);
var ret = x.multiply(y);
- Wrapper.result[0] = ret.low_;
- Wrapper.result[1] = ret.high_;
+ HEAP32[tempDoublePtr>>2] = ret.low_;
+ HEAP32[tempDoublePtr+4>>2] = ret.high_;
},
makeTwo32: function() {
Wrapper.two32 = new BigInteger();
@@ -1573,8 +1572,8 @@ var i64Math = (function() { // Emscripten wrapper
var x = new goog.math.Long(xl, xh);
var y = new goog.math.Long(yl, yh);
var ret = x.div(y);
- Wrapper.result[0] = ret.low_;
- Wrapper.result[1] = ret.high_;
+ HEAP32[tempDoublePtr>>2] = ret.low_;
+ HEAP32[tempDoublePtr+4>>2] = ret.high_;
} else {
// slow precise bignum division
var x = Wrapper.lh2bignum(xl >>> 0, xh >>> 0);
@@ -1584,8 +1583,8 @@ var i64Math = (function() { // Emscripten wrapper
var l = new BigInteger();
var h = new BigInteger();
z.divRemTo(Wrapper.two32, h, l);
- Wrapper.result[0] = parseInt(l.toString()) | 0;
- Wrapper.result[1] = parseInt(h.toString()) | 0;
+ HEAP32[tempDoublePtr>>2] = parseInt(l.toString()) | 0;
+ HEAP32[tempDoublePtr+4>>2] = parseInt(h.toString()) | 0;
}
},
modulo: function(xl, xh, yl, yh, unsigned) {
@@ -1594,8 +1593,8 @@ var i64Math = (function() { // Emscripten wrapper
var x = new goog.math.Long(xl, xh);
var y = new goog.math.Long(yl, yh);
var ret = x.modulo(y);
- Wrapper.result[0] = ret.low_;
- Wrapper.result[1] = ret.high_;
+ HEAP32[tempDoublePtr>>2] = ret.low_;
+ HEAP32[tempDoublePtr+4>>2] = ret.high_;
} else {
// slow precise bignum division
var x = Wrapper.lh2bignum(xl >>> 0, xh >>> 0);
@@ -1605,8 +1604,8 @@ var i64Math = (function() { // Emscripten wrapper
var l = new BigInteger();
var h = new BigInteger();
z.divRemTo(Wrapper.two32, h, l);
- Wrapper.result[0] = parseInt(l.toString()) | 0;
- Wrapper.result[1] = parseInt(h.toString()) | 0;
+ HEAP32[tempDoublePtr>>2] = parseInt(l.toString()) | 0;
+ HEAP32[tempDoublePtr+4>>2] = parseInt(h.toString()) | 0;
}
},
stringify: function(l, h, unsigned) {
diff --git a/src/modules.js b/src/modules.js
index fd0ec35e..5c1d6a1d 100644
--- a/src/modules.js
+++ b/src/modules.js
@@ -216,14 +216,26 @@ var Types = {
};
var Functions = {
- // All functions that will be implemented in this file
+ // All functions that will be implemented in this file. Maps id to signature
implementedFunctions: {},
+ libraryFunctions: {}, // functions added from the library
+ unimplementedFunctions: {}, // library etc. functions that we need to index, maps id to signature
indexedFunctions: {},
nextIndex: 2, // Start at a non-0 (even, see below) value
blockAddresses: {}, // maps functions to a map of block labels to label ids
+ getSignature: function(returnType, argTypes) {
+ var sig = returnType == 'void' ? 'v' : (isIntImplemented(returnType) ? 'i' : 'f');
+ for (var i = 0; i < argTypes.length; i++) {
+ var type = argTypes[i];
+ if (!type) break; // varargs
+ sig += isIntImplemented(type) ? (getBits(type) == 64 ? 'ii' : 'i') : 'f'; // legalized i64s will be i32s
+ }
+ return sig;
+ },
+
// Mark a function as needing indexing. Python will coordinate them all
getIndex: function(ident) {
if (phase != 'post') {
@@ -240,27 +252,53 @@ var Functions = {
}
},
+ getTable: function(sig) {
+ return ASM_JS ? 'FUNCTION_TABLE_' + sig : 'FUNCTION_TABLE';
+ },
+
// Generate code for function indexing
generateIndexing: function() {
- var vals = zeros(this.nextIndex);
+ var total = this.nextIndex;
+ if (ASM_JS) total = ceilPowerOfTwo(total); // must be power of 2 for mask
+ function emptyTable(sig) {
+ return zeros(total);
+ }
+ var tables = {};
+ if (ASM_JS) {
+ ['v', 'vi', 'ii', 'iii'].forEach(function(sig) { // add some default signatures that are used in the library
+ tables[sig] = emptyTable(sig); // TODO: make them compact
+ });
+ }
for (var ident in this.indexedFunctions) {
- vals[this.indexedFunctions[ident]] = ident;
+ var sig = ASM_JS ? Functions.implementedFunctions[ident] || Functions.unimplementedFunctions[ident] : 'x';
+ assert(sig, ident);
+ if (!tables[sig]) tables[sig] = emptyTable(sig); // TODO: make them compact
+ tables[sig][this.indexedFunctions[ident]] = ident;
}
// Resolve multi-level aliases all the way down
- for (var i = 0; i < vals.length; i++) {
- while (1) {
- var varData = Variables.globals[vals[i]];
- if (!(varData && varData.resolvedAlias)) break;
- vals[i] = vals[+varData.resolvedAlias || eval(varData.resolvedAlias)]; // might need to eval to turn (6) into 6
+ var generated = false;
+ for (var t in tables) {
+ generated = true;
+ var table = tables[t];
+ for (var i = 0; i < table.length; i++) {
+ while (1) {
+ var varData = Variables.globals[table[i]];
+ if (!(varData && varData.resolvedAlias)) break;
+ table[i] = table[+varData.resolvedAlias || eval(varData.resolvedAlias)]; // might need to eval to turn (6) into 6
+ }
+ }
+ var indices = table.toString().replace('"', '');
+ if (BUILD_AS_SHARED_LIB) {
+ // Shared libraries reuse the parent's function table.
+ tables[t] = Functions.getTable(t) + '.push.apply(' + Functions.getTable(t) + ', [' + indices + ']);\n';
+ } else {
+ tables[t] = 'var ' + Functions.getTable(t) + ' = [' + indices + '];\n';
}
}
- var indices = vals.toString().replace('"', '');
- if (BUILD_AS_SHARED_LIB) {
- // Shared libraries reuse the parent's function table.
- return 'FUNCTION_TABLE.push.apply(FUNCTION_TABLE, [' + indices + ']);';
- } else {
- return 'FUNCTION_TABLE = [' + indices + ']; Module["FUNCTION_TABLE"] = FUNCTION_TABLE;';
+ if (!generated && !ASM_JS) {
+ tables['x'] = 'var FUNCTION_TABLE = [0, 0];\n'; // default empty table
}
+ Functions.tables = tables;
}
};
@@ -311,16 +349,23 @@ var PassManager = {
print('\n//FORWARDED_DATA:' + JSON.stringify({
Types: Types,
Variables: Variables,
- Functions: Functions
+ Functions: Functions,
+ EXPORTED_FUNCTIONS: EXPORTED_FUNCTIONS // needed for asm.js global constructors (ctors)
}));
} else if (phase == 'funcs') {
print('\n//FORWARDED_DATA:' + JSON.stringify({
Types: { preciseI64MathUsed: Types.preciseI64MathUsed },
Functions: {
blockAddresses: Functions.blockAddresses,
- indexedFunctions: Functions.indexedFunctions
+ indexedFunctions: Functions.indexedFunctions,
+ implementedFunctions: ASM_JS ? Functions.implementedFunctions : [],
+ unimplementedFunctions: Functions.unimplementedFunctions,
}
}));
+ } else if (phase == 'post') {
+ print('\n//FORWARDED_DATA:' + JSON.stringify({
+ Functions: { tables: Functions.tables }
+ }));
}
},
load: function(json) {
diff --git a/src/parseTools.js b/src/parseTools.js
index 4a76a9a2..36d62204 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -128,16 +128,48 @@ function isStructType(type) {
return type[0] == '%';
}
+function isStructuralType(type) {
+ return /^{ ?[^}]* ?}$/.test(type); // { i32, i8 } etc. - anonymous struct types
+}
+
+function getStructuralTypeParts(type) { // split { i32, i8 } etc. into parts
+ return type.replace(/[ {}]/g, '').split(',');
+}
+
+function getStructureTypeParts(type) {
+ if (isStructuralType(type)) {
+ return type.replace(/[ {}]/g, '').split(',');
+ } else {
+ var typeData = Types.types[type];
+ assert(typeData, type);
+ return typeData.fields;
+ }
+}
+
+function getStructuralTypePartBits(part) {
+ return Math.ceil((getBits(part) || 32)/32)*32; // simple 32-bit alignment. || 32 is for pointers
+}
+
function isIntImplemented(type) {
return type[0] == 'i' || isPointerType(type);
}
-// Note: works for iX types, not pointers (even though they are implemented as ints)
+// Note: works for iX types and structure types, not pointers (even though they are implemented as ints)
function getBits(type) {
- if (!type || type[0] != 'i') return 0;
- var left = type.substr(1);
- if (!isNumber(left)) return 0;
- return parseInt(left);
+ if (!type) return 0;
+ if (type[0] == 'i') {
+ var left = type.substr(1);
+ if (!isNumber(left)) return 0;
+ return parseInt(left);
+ }
+ if (isStructuralType(type)) {
+ return sum(getStructuralTypeParts(type).map(getStructuralTypePartBits));
+ }
+ if (isStructType(type)) {
+ var typeData = Types.types[type];
+ return typeData.flatSize*8;
+ }
+ return 0;
}
function isIllegalType(type) {
@@ -163,11 +195,13 @@ function isFunctionDef(token, out) {
var subtext = segment[0].text;
fail = fail || segment.length > 1 || !(isType(subtext) || subtext == '...');
});
- if (out) out.numArgs = segments.length;
+ if (out) {
+ out.segments = segments;
+ out.numArgs = segments.length;
+ }
return !fail;
}
-
function isPossiblyFunctionType(type) {
// A quick but unreliable way to see if something is a function type. Yes is just 'maybe', no is definite.
var len = type.length;
@@ -189,6 +223,7 @@ function isFunctionType(type, out) {
if (pointingLevels(type) !== 1) return false;
var text = removeAllPointing(parts.slice(1).join(' '));
if (!text) return false;
+ if (out) out.returnType = parts[0];
return isType(parts[0]) && isFunctionDef({ text: text, item: tokenize(text.substr(1, text.length-2), true) }, out);
}
@@ -310,7 +345,9 @@ function parseParamTokens(params) {
if (segment.length == 1) {
if (segment[0].text == '...') {
ret.push({
- intertype: 'varargs'
+ intertype: 'varargs',
+ type: 'i8*',
+ ident: 'varrp' // the conventional name we have for this
});
} else {
// Clang sometimes has a parameter with just a type,
@@ -373,12 +410,12 @@ function isIndexableGlobal(ident) {
function makeGlobalDef(ident) {
if (!NAMED_GLOBALS && isIndexableGlobal(ident)) return '';
- return 'var ' + ident + ';'; // TODO: add option for namespacing or offsetting to allow reducing the number of globals
+ return 'var ' + ident + ';';
}
function makeGlobalUse(ident) {
if (!NAMED_GLOBALS && isIndexableGlobal(ident)) return '(' + getFastValue('GLOBAL_BASE', '+', Variables.indexedGlobals[ident]) + ')';
- return ident; // TODO: add option for namespacing or offsetting to allow reducing the number of globals
+ return ident;
}
function sortGlobals(globals) {
@@ -922,6 +959,12 @@ function checkSafeHeap() {
return SAFE_HEAP === 1 || checkSpecificSafeHeap();
}
+if (ASM_JS) {
+ var hexMemoryMask = '0x' + (TOTAL_MEMORY-1).toString(16);
+ var decMemoryMask = (TOTAL_MEMORY-1).toString();
+ var memoryMask = hexMemoryMask.length <= decMemoryMask.length ? hexMemoryMask : decMemoryMask;
+}
+
function getHeapOffset(offset, type) {
if (USE_TYPED_ARRAYS !== 2) {
return offset;
@@ -930,14 +973,42 @@ function getHeapOffset(offset, type) {
type = 'i32'; // XXX we emulate 64-bit values as 32
}
var shifts = Math.log(Runtime.getNativeTypeSize(type))/Math.LN2;
+ offset = '(' + offset + ')';
+ if (ASM_JS && phase == 'funcs') offset = '(' + offset + '&' + memoryMask + ')';
if (shifts != 0) {
- return '((' + offset + ')>>' + (shifts) + ')';
+ return '(' + offset + '>>' + shifts + ')';
} else {
- return '(' + offset + ')';
+ return offset;
}
}
}
+function makeVarDef(js) {
+ if (!ASM_JS) js = 'var ' + js;
+ return js;
+}
+
+function asmInitializer(type, impl) {
+ if (isIntImplemented(type)) {// || (impl && impl == 'VAR_EMULATED')) {
+ return '0';
+ } else {
+ return '+0';
+ }
+}
+
+function asmCoercion(value, type) {
+ if (!ASM_JS) return value;
+ if (isIntImplemented(type)) {
+ return '((' + value + ')|0)';
+ } else {
+ return '(+(' + value + '))';
+ }
+}
+
+function makeGetTempDouble(i) {
+ return makeGetValue('tempDoublePtr', Runtime.getNativeTypeSize('i32')*i, 'i32');
+}
+
// See makeSetValue
function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align, noSafe) {
noticePtr(ptr);
@@ -952,9 +1023,9 @@ function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align, noSa
}
if (DOUBLE_MODE == 1 && USE_TYPED_ARRAYS == 2 && type == 'double') {
- return '(tempDoubleI32[0]=' + makeGetValue(ptr, pos, 'i32', noNeedFirst, unsigned, ignore, align) + ',' +
- 'tempDoubleI32[1]=' + makeGetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'i32', noNeedFirst, unsigned, ignore, align) + ',' +
- 'tempDoubleF64[0])';
+ return '(HEAP32[tempDoublePtr>>2]=' + makeGetValue(ptr, pos, 'i32', noNeedFirst, unsigned, ignore, align) + ',' +
+ 'HEAP32[tempDoublePtr+4>>2]=' + makeGetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'i32', noNeedFirst, unsigned, ignore, align) + ',' +
+ 'HEAPF64[tempDoublePtr>>3])';
}
if (USE_TYPED_ARRAYS == 2 && align) {
@@ -977,9 +1048,9 @@ function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align, noSa
}
} else {
if (type == 'float') {
- ret += 'copyTempFloat(' + getFastValue(ptr, '+', pos) + '),tempDoubleF32[0]';
+ ret += 'copyTempFloat(' + getFastValue(ptr, '+', pos) + '),HEAPF32[tempDoublePtr>>2]';
} else {
- ret += 'copyTempDouble(' + getFastValue(ptr, '+', pos) + '),tempDoubleF64[0]';
+ ret += 'copyTempDouble(' + getFastValue(ptr, '+', pos) + '),HEAP64[tempDoublePtr>>3]';
}
}
ret += ')';
@@ -993,14 +1064,24 @@ function makeGetValue(ptr, pos, type, noNeedFirst, unsigned, ignore, align, noSa
if (type[0] === '#') type = type.substr(1);
return 'SAFE_HEAP_LOAD(' + offset + ', ' + type + ', ' + (!!unsigned+0) + ', ' + ((!checkSafeHeap() || ignore)|0) + ')';
} else {
- return makeGetSlabs(ptr, type, false, unsigned)[0] + '[' + getHeapOffset(offset, type) + ']';
+ var ret = makeGetSlabs(ptr, type, false, unsigned)[0] + '[' + getHeapOffset(offset, type) + ']';
+ if (ASM_JS && phase == 'funcs') {
+ ret = asmCoercion(ret, type);
+ }
+ return ret;
}
}
function indexizeFunctions(value, type) {
assert((type && type !== '?') || (typeof value === 'string' && value.substr(0, 6) === 'CHECK_'), 'No type given for function indexizing');
assert(value !== type, 'Type set to value');
- if (type && isFunctionType(type) && value[0] === '_') { // checking for _ differentiates from $ (local vars)
+ var out = {};
+ if (type && isFunctionType(type, out) && value[0] === '_') { // checking for _ differentiates from $ (local vars)
+ // add signature to library functions that we now know need indexing
+ if (!(value in Functions.implementedFunctions) && !(value in Functions.unimplementedFunctions)) {
+ Functions.unimplementedFunctions[value] = Functions.getSignature(out.returnType, out.segments ? out.segments.map(function(segment) { return segment[0].text }) : []);
+ }
+
if (BUILD_AS_SHARED_LIB) {
return '(FUNCTION_TABLE_OFFSET + ' + Functions.getIndex(value) + ')';
} else {
@@ -1039,9 +1120,9 @@ function makeSetValue(ptr, pos, value, type, noNeedFirst, ignore, align, noSafe,
}
if (DOUBLE_MODE == 1 && USE_TYPED_ARRAYS == 2 && type == 'double') {
- return '(tempDoubleF64[0]=' + value + ',' +
- makeSetValue(ptr, pos, 'tempDoubleI32[0]', 'i32', noNeedFirst, ignore, align, noSafe, ',') + ',' +
- makeSetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'tempDoubleI32[1]', 'i32', noNeedFirst, ignore, align, noSafe, ',') + ')';
+ return '(HEAPF64[tempDoublePtr>>3]=' + value + ',' +
+ makeSetValue(ptr, pos, 'HEAP32[tempDoublePtr>>2]', 'i32', noNeedFirst, ignore, align, noSafe, ',') + ',' +
+ makeSetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'HEAP32[tempDoublePtr+4>>2]', 'i32', noNeedFirst, ignore, align, noSafe, ',') + ')';
} else if (USE_TYPED_ARRAYS == 2 && type == 'i64') {
return '(tempI64 = [' + splitI64(value) + '],' +
makeSetValue(ptr, pos, 'tempI64[0]', 'i32', noNeedFirst, ignore, align, noSafe, ',') + ',' +
@@ -1125,7 +1206,7 @@ function makeSetValues(ptr, pos, value, type, num, align) {
[4, 2, 1].forEach(function(possibleAlign) {
if (num == 0) return;
if (align >= possibleAlign) {
- if (num <= UNROLL_LOOP_MAX*possibleAlign) {
+ if (num <= UNROLL_LOOP_MAX*possibleAlign || ASM_JS) { // XXX test asm performance
ret.push(unroll('i' + (possibleAlign*8), Math.floor(num/possibleAlign), possibleAlign, values[possibleAlign]));
} else {
ret.push('for (var $$dest = ' + getFastValue(ptr, '+', pos) + (possibleAlign > 1 ? '>>' + log2(possibleAlign) : '') + ', ' +
@@ -1179,7 +1260,7 @@ function makeCopyValues(dest, src, num, type, modifier, align, sep) {
if (num == 0) return;
if (align >= possibleAlign) {
// If we can unroll the loop, do so. Also do so if we must unroll it (we do not create real loops when inlined)
- if (num <= UNROLL_LOOP_MAX*possibleAlign || sep == ',') {
+ if (num <= UNROLL_LOOP_MAX*possibleAlign || sep == ',' || ASM_JS) { // XXX test asm performance
ret.push(unroll('i' + (possibleAlign*8), Math.floor(num/possibleAlign), possibleAlign));
} else {
assert(sep == ';');
@@ -1489,8 +1570,35 @@ function handleOverflow(text, bits) {
}
}
-function makeLLVMStruct(values) { // TODO: Use this everywhere
- return '{ ' + values.map(function(value, i) { return 'f' + i + ': ' + value }).join(', ') + ' }'
+function makeLLVMStruct(values) {
+ if (USE_TYPED_ARRAYS == 2) {
+ return 'DEPRECATED' + (new Error().stack) + 'XXX';
+ } else {
+ return '{ ' + values.map(function(value, i) { return 'f' + i + ': ' + value }).join(', ') + ' }'
+ }
+}
+
+function makeStructuralReturn(values) {
+ if (USE_TYPED_ARRAYS == 2) {
+ var i = 0;
+ return 'return (' + values.slice(1).map(function(value) {
+ return ASM_JS ? 'asm.setTempRet' + (i++) + '(' + value + ')'
+ : 'tempRet' + (i++) + ' = ' + value;
+ }).concat([values[0]]).join(',') + ')';
+ } else {
+ var i = 0;
+ return 'return { ' + values.map(function(value) {
+ return 'f' + (i++) + ': ' + value;
+ }).join(', ') + ' }';
+ }
+}
+
+function makeStructuralAccess(ident, i) {
+ if (USE_TYPED_ARRAYS == 2) {
+ return ident + '$' + i;
+ } else {
+ return ident + '.f' + i;
+ }
}
// From parseLLVMSegment
@@ -1599,6 +1707,10 @@ function makeSignOp(value, type, op, force, ignore) {
function makeRounding(value, bits, signed, floatConversion) {
// TODO: handle roundings of i64s
assert(bits);
+ if (ASM_JS && floatConversion && bits <= 32) {
+ return '(~~(' + value + '))'; // explicit float-to-int conversion
+ }
+
// C rounds to 0 (-5.5 to -5, +5.5 to 5), while JS has no direct way to do that.
if (bits <= 32 && signed) return '((' + value + ')&-1)'; // This is fast and even correct, for all cases. Note that it is the same
// as |0, but &-1 hints to the js optimizer that this is a rounding correction
@@ -1696,8 +1808,8 @@ function processMathop(item) {
}
function i64PreciseOp(type, lastArg) {
Types.preciseI64MathUsed = true;
- return finish(['(i64Math.' + type + '(' + low1 + ',' + high1 + ',' + low2 + ',' + high2 +
- (lastArg ? ',' + lastArg : '') + '),i64Math.result[0])', 'i64Math.result[1]']);
+ return finish(['(i64Math' + (ASM_JS ? '_' : '.') + type + '(' + low1 + ',' + high1 + ',' + low2 + ',' + high2 +
+ (lastArg ? ',' + lastArg : '') + '),' + makeGetValue('tempDoublePtr', 0, 'i32') + ')', makeGetValue('tempDoublePtr', Runtime.getNativeTypeSize('i32'), 'i32')]);
}
switch (op) {
// basic integer ops
@@ -1714,7 +1826,8 @@ function processMathop(item) {
case 'ashr':
case 'lshr': {
if (!isNumber(idents[1])) {
- return 'Runtime.bitshift64(' + idents[0] + '[0], ' + idents[0] + '[1],"' + op + '",' + stripCorrections(idents[1]) + '[0]|0)';
+ return '(Runtime' + (ASM_JS ? '_' : '.') + 'bitshift64(' + idents[0] + '[0], ' + idents[0] + '[1],"' + op + '",' + stripCorrections(idents[1]) + '[0]|0),' +
+ '[' + makeGetTempDouble(0) + ',' + makeGetTempDouble(1) + '])';
}
bits = parseInt(idents[1]);
var ander = Math.pow(2, bits)-1;
@@ -1831,15 +1944,15 @@ function processMathop(item) {
var outType = item.type;
if (inType in Runtime.INT_TYPES && outType in Runtime.FLOAT_TYPES) {
if (legalizedI64s) {
- return '(tempDoubleI32[0]=' + idents[0] + '$0, tempDoubleI32[1]=' + idents[0] + '$1, tempDoubleF64[0])';
+ return '(HEAP32[tempDoublePtr>>2]=' + idents[0] + '$0, HEAP32[tempDoublePtr+4>>2]=' + idents[0] + '$1, HEAPF64[tempDoublePtr>>3])';
} else {
- return makeInlineCalculation('tempDoubleI32[0]=VALUE[0],tempDoubleI32[1]=VALUE[1],tempDoubleF64[0]', idents[0], 'tempI64');
+ return makeInlineCalculation('HEAP32[tempDoublePtr>>2]=VALUE[0],HEAP32[tempDoublePtr+4>>2]=VALUE[1],HEAPF64[tempDoublePtr>>>3]', idents[0], 'tempI64');
}
} else if (inType in Runtime.FLOAT_TYPES && outType in Runtime.INT_TYPES) {
if (legalizedI64s) {
- return 'tempDoubleF64[0]=' + idents[0] + '; ' + finish(['tempDoubleI32[0]','tempDoubleI32[1]']);
+ return 'HEAPF64[tempDoublePtr>>3]=' + idents[0] + '; ' + finish(['HEAP32[tempDoublePtr>>2]','HEAP32[tempDoublePtr+4>>2]']);
} else {
- return '(tempDoubleF64[0]=' + idents[0] + ',[tempDoubleI32[0],tempDoubleI32[1]])';
+ return '(HEAPF64[tempDoublePtr>>3]=' + idents[0] + ',[HEAP32[tempDoublePtr>>2],HEAP32[tempDoublePtr+4>>2]])';
}
} else {
throw 'Invalid USE_TYPED_ARRAYS == 2 bitcast: ' + dump(item) + ' : ' + item.params[0].type;
@@ -1857,7 +1970,7 @@ function processMathop(item) {
case 'mul': {
if (bits == 32 && PRECISE_I32_MUL) {
Types.preciseI64MathUsed = true;
- return '(i64Math.multiply(' + idents[0] + ',0,' + idents[1] + ',0),i64Math.result[0])';
+ return '(i64Math' + (ASM_JS ? '_' : '.') + 'multiply(' + idents[0] + ',0,' + idents[1] + ',0),' + makeGetValue('tempDoublePtr', 0, 'i32') + ')';
} else {
return handleOverflow(getFastValue(idents[0], '*', idents[1], item.type), bits);
}
@@ -1978,9 +2091,9 @@ function processMathop(item) {
(inType in Runtime.FLOAT_TYPES && outType in Runtime.INT_TYPES)) {
assert(USE_TYPED_ARRAYS == 2, 'Can only bitcast ints <-> floats with typed arrays mode 2');
if (inType in Runtime.INT_TYPES) {
- return '(tempDoubleI32[0] = ' + idents[0] + ',tempDoubleF32[0])';
+ return '(HEAP32[tempDoublePtr>>2] = ' + idents[0] + ',HEAPF32[tempDoublePtr>>2])';
} else {
- return '(tempDoubleF32[0] = ' + idents[0] + ',tempDoubleI32[0])';
+ return '(HEAPF32[tempDoublePtr>>2] = ' + idents[0] + ',HEAP32[tempDoublePtr>>2])';
}
}
return idents[0];
diff --git a/src/postamble.js b/src/postamble.js
index 144b5af9..83a4daa6 100644
--- a/src/postamble.js
+++ b/src/postamble.js
@@ -19,11 +19,11 @@ Module.callMain = function callMain(args) {
#if CATCH_EXIT_CODE
try {
- return _main(argc, argv, 0);
+ return Module['_main'](argc, argv, 0);
}
catch(e) { if (e.name == "ExitStatus") return e.status; throw e; }
#else
- return _main(argc, argv, 0);
+ return Module['_main'](argc, argv, 0);
#endif
}
diff --git a/src/preamble.js b/src/preamble.js
index 0917f977..b28dfc0d 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -275,7 +275,7 @@ Module['printProfiling'] = printProfiling;
// Runtime essentials
//========================================
-var __THREW__ = false; // Used in checking for thrown exceptions.
+var __THREW__ = 0; // Used in checking for thrown exceptions.
var setjmpId = 1; // Used in setjmp/longjmp
var setjmpLabels = {};
@@ -287,6 +287,7 @@ var undef = 0;
var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD;
#if USE_TYPED_ARRAYS == 2
var tempI64, tempI64b;
+var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
#endif
function abort(text) {
@@ -577,9 +578,6 @@ Module['Array_stringify'] = Array_stringify;
// Memory management
-var FUNCTION_TABLE; // XXX: In theory the indexes here can be equal to pointers to stacked or malloced memory. Such comparisons should
- // be false, but can turn out true. We should probably set the top bit to prevent such issues.
-
var PAGE_SIZE = 4096;
function alignMemoryPage(x) {
return ((x+4095)>>12)<<12;
@@ -703,25 +701,21 @@ STACK_MAX = STACK_ROOT + TOTAL_STACK;
#if USE_TYPED_ARRAYS == 2
var tempDoublePtr = Runtime.alignMemory(STACK_MAX, 8);
-var tempDoubleI8 = HEAP8.subarray(tempDoublePtr);
-var tempDoubleI32 = HEAP32.subarray(tempDoublePtr >> 2);
-var tempDoubleF32 = HEAPF32.subarray(tempDoublePtr >> 2);
-var tempDoubleF64 = HEAPF64.subarray(tempDoublePtr >> 3);
function copyTempFloat(ptr) { // functions, because inlining this code is increases code size too much
- tempDoubleI8[0] = HEAP8[ptr];
- tempDoubleI8[1] = HEAP8[ptr+1];
- tempDoubleI8[2] = HEAP8[ptr+2];
- tempDoubleI8[3] = HEAP8[ptr+3];
+ HEAP8[tempDoublePtr] = HEAP8[ptr];
+ HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
+ HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
+ HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
}
function copyTempDouble(ptr) {
- tempDoubleI8[0] = HEAP8[ptr];
- tempDoubleI8[1] = HEAP8[ptr+1];
- tempDoubleI8[2] = HEAP8[ptr+2];
- tempDoubleI8[3] = HEAP8[ptr+3];
- tempDoubleI8[4] = HEAP8[ptr+4];
- tempDoubleI8[5] = HEAP8[ptr+5];
- tempDoubleI8[6] = HEAP8[ptr+6];
- tempDoubleI8[7] = HEAP8[ptr+7];
+ HEAP8[tempDoublePtr] = HEAP8[ptr];
+ HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
+ HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
+ HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
+ HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
+ HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
+ HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
+ HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
}
STACK_MAX = tempDoublePtr + 8;
#endif
@@ -737,9 +731,14 @@ function callRuntimeCallbacks(callbacks) {
var callback = callbacks.shift();
var func = callback.func;
if (typeof func === 'number') {
- func = FUNCTION_TABLE[func];
+ if (callback.arg === undefined) {
+ Runtime.dynCall('v', func);
+ } else {
+ Runtime.dynCall('vi', func, [callback.arg]);
+ }
+ } else {
+ func(callback.arg === undefined ? null : callback.arg);
}
- func(callback.arg === undefined ? null : callback.arg);
}
}
diff --git a/src/runtime.js b/src/runtime.js
index dd14e779..9d5e5e1f 100644
--- a/src/runtime.js
+++ b/src/runtime.js
@@ -13,7 +13,7 @@ var RuntimeGenerator = {
if (init) {
ret += sep + '_memset(' + type + 'TOP, 0, ' + size + ')';
}
- ret += sep + type + 'TOP += ' + size;
+ ret += sep + type + 'TOP = (' + type + 'TOP + ' + size + ')|0';
if ({{{ QUANTUM_SIZE }}} > 1 && !ignoreAlign) {
ret += sep + RuntimeGenerator.alignMemory(type + 'TOP', {{{ QUANTUM_SIZE }}});
}
@@ -23,27 +23,27 @@ var RuntimeGenerator = {
// An allocation that lives as long as the current function call
stackAlloc: function(size, sep) {
sep = sep || ';';
- if (USE_TYPED_ARRAYS === 2) 'STACKTOP += STACKTOP % ' + ({{{ QUANTUM_SIZE }}} - (isNumber(size) ? Math.min(size, {{{ QUANTUM_SIZE }}}) : {{{ QUANTUM_SIZE }}})) + sep;
+ if (USE_TYPED_ARRAYS === 2) 'STACKTOP = (STACKTOP + STACKTOP|0 % ' + ({{{ QUANTUM_SIZE }}} - (isNumber(size) ? Math.min(size, {{{ QUANTUM_SIZE }}}) : {{{ QUANTUM_SIZE }}})) + ')' + sep;
// The stack is always QUANTUM SIZE aligned, so we may not need to force alignment here
var ret = RuntimeGenerator.alloc(size, 'STACK', INIT_STACK, sep, USE_TYPED_ARRAYS != 2 || (isNumber(size) && parseInt(size) % {{{ QUANTUM_SIZE }}} == 0));
if (ASSERTIONS) {
- ret += sep + 'assert(STACKTOP < STACK_ROOT + STACK_MAX, "Ran out of stack")';
+ ret += sep + 'assert(STACKTOP|0 < STACK_MAX|0)';
}
return ret;
},
stackEnter: function(initial, force) {
if (initial === 0 && SKIP_STACK_IN_SMALL && !force) return '';
- var ret = 'var __stackBase__ = STACKTOP';
- if (initial > 0) ret += '; STACKTOP += ' + initial;
+ var ret = 'var __stackBase__ = ' + (ASM_JS ? '0; __stackBase__ = ' : '') + 'STACKTOP';
+ if (initial > 0) ret += '; STACKTOP = (STACKTOP + ' + initial + ')|0';
if (USE_TYPED_ARRAYS == 2) {
assert(initial % QUANTUM_SIZE == 0);
if (ASSERTIONS) {
- ret += '; assert(STACKTOP % {{{ QUANTUM_SIZE }}} == 0, "Stack is unaligned")';
+ ret += '; assert(STACKTOP|0 % {{{ QUANTUM_SIZE }}} == 0)';
}
}
if (ASSERTIONS) {
- ret += '; assert(STACKTOP < STACK_MAX, "Ran out of stack")';
+ ret += '; assert(STACKTOP < STACK_MAX)';
}
if (INIT_STACK) {
ret += '; _memset(__stackBase__, 0, ' + initial + ')';
@@ -124,36 +124,50 @@ var Runtime = {
// Mirrors processMathop's treatment of constants (which we optimize directly)
bitshift64: function(low, high, op, bits) {
+ var ret;
var ander = Math.pow(2, bits)-1;
if (bits < 32) {
switch (op) {
case 'shl':
- return [low << bits, (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits))];
+ ret = [low << bits, (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits))];
+ break;
case 'ashr':
- return [(((low >>> bits ) | ((high&ander) << (32 - bits))) >> 0) >>> 0, (high >> bits) >>> 0];
+ ret = [(((low >>> bits ) | ((high&ander) << (32 - bits))) >> 0) >>> 0, (high >> bits) >>> 0];
+ break;
case 'lshr':
- return [((low >>> bits) | ((high&ander) << (32 - bits))) >>> 0, high >>> bits];
+ ret = [((low >>> bits) | ((high&ander) << (32 - bits))) >>> 0, high >>> bits];
+ break;
}
} else if (bits == 32) {
switch (op) {
case 'shl':
- return [0, low];
+ ret = [0, low];
+ break;
case 'ashr':
- return [high, (high|0) < 0 ? ander : 0];
+ ret = [high, (high|0) < 0 ? ander : 0];
+ break;
case 'lshr':
- return [high, 0];
+ ret = [high, 0];
+ break;
}
} else { // bits > 32
switch (op) {
case 'shl':
- return [0, low << (bits - 32)];
+ ret = [0, low << (bits - 32)];
+ break;
case 'ashr':
- return [(high >> (bits - 32)) >>> 0, (high|0) < 0 ? ander : 0];
+ ret = [(high >> (bits - 32)) >>> 0, (high|0) < 0 ? ander : 0];
+ break;
case 'lshr':
- return [high >>> (bits - 32) , 0];
+ ret = [high >>> (bits - 32) , 0];
+ break;
}
}
- abort('unknown bitshift64 op: ' + [value, op, bits]);
+#if ASSERTIONS
+ assert(ret);
+#endif
+ HEAP32[tempDoublePtr>>2] = ret[0]; // cannot use utility functions since we are in runtime itself
+ HEAP32[tempDoublePtr+4>>2] = ret[1];
},
// Imprecise bitops utilities
@@ -311,10 +325,35 @@ var Runtime = {
return ret;
},
- addFunction: function(func) {
- var ret = FUNCTION_TABLE.length;
- FUNCTION_TABLE.push(func);
- FUNCTION_TABLE.push(0);
+ dynCall: function(sig, ptr, args) {
+ if (args && args.length) {
+#if ASSERTIONS
+ assert(args.length == sig.length-1);
+#endif
+#if ASM_JS
+ args.splice(0, 0, ptr);
+ return Module['dynCall_' + sig].apply(null, args);
+#else
+ return FUNCTION_TABLE[ptr].apply(null, args);
+#endif
+ } else {
+#if ASSERTIONS
+ assert(sig.length == 1);
+#endif
+#if ASM_JS
+ return Module['dynCall_' + sig].call(null, ptr);
+#else
+ return FUNCTION_TABLE[ptr]();
+#endif
+ }
+ },
+
+ addFunction: function(func, sig) {
+ assert(sig);
+ var table = FUNCTION_TABLE; // TODO: support asm
+ var ret = table.length;
+ table.push(func);
+ table.push(0);
return ret;
},
@@ -328,10 +367,11 @@ var Runtime = {
funcWrappers: {},
- getFuncWrapper: function(func) {
+ getFuncWrapper: function(func, sig) {
+ assert(sig);
if (!Runtime.funcWrappers[func]) {
Runtime.funcWrappers[func] = function() {
- FUNCTION_TABLE[func].apply(null, arguments);
+ Runtime.dynCall(sig, func, arguments);
};
}
return Runtime.funcWrappers[func];
diff --git a/src/settings.js b/src/settings.js
index 1d8805a8..b9dfa9e9 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -43,7 +43,7 @@ var TOTAL_STACK = 5*1024*1024; // The total stack size. There is no way to enlar
// value must be large enough for the program's requirements. If
// assertions are on, we will assert on not exceeding this, otherwise,
// it will fail silently.
-var TOTAL_MEMORY = 10*1024*1024; // The total amount of memory to use. Using more memory than this will
+var TOTAL_MEMORY = 16777216; // The total amount of memory to use. Using more memory than this will
// cause us to expand the heap, which can be costly with typed arrays:
// we need to copy the old heap into a new one in that case.
var FAST_MEMORY = 2*1024*1024; // The amount of memory to initialize to 0. This ensures it will be
@@ -294,6 +294,8 @@ var HEADLESS = 0; // If 1, will include shim code that tries to 'fake' a browser
// very partial - it is hard to fake a whole browser! - so
// keep your expectations low for this to work.
+var ASM_JS = 0; // If 1, generate code in asm.js format
+
var NECESSARY_BLOCKADDRS = []; // List of (function, block) for all block addresses that are taken.
// Compiler debugging options
diff --git a/src/utility.js b/src/utility.js
index 84b50ce9..63582ae8 100644
--- a/src/utility.js
+++ b/src/utility.js
@@ -321,6 +321,12 @@ function isPowerOfTwo(x) {
return x > 0 && ((x & (x-1)) == 0);
}
+function ceilPowerOfTwo(x) {
+ var ret = 1;
+ while (ret < x) ret <<= 1;
+ return ret;
+}
+
function Benchmarker() {
var starts = {}, times = {}, counts = {};
this.start = function(id) {
diff --git a/tests/cases/aliasbitcast2.ll b/tests/cases/aliasbitcast2_noasm.ll
index 8537e272..8537e272 100644
--- a/tests/cases/aliasbitcast2.ll
+++ b/tests/cases/aliasbitcast2_noasm.ll
diff --git a/tests/cases/aliasbitcast3.ll b/tests/cases/aliasbitcast3_noasm.ll
index 4ff969e3..4ff969e3 100644
--- a/tests/cases/aliasbitcast3.ll
+++ b/tests/cases/aliasbitcast3_noasm.ll
diff --git a/tests/cases/aliasbitcastdollar.ll b/tests/cases/aliasbitcastdollar_noasm.ll
index 1ecf6047..1ecf6047 100644
--- a/tests/cases/aliasbitcastdollar.ll
+++ b/tests/cases/aliasbitcastdollar_noasm.ll
diff --git a/tests/cases/longjmp_tiny.ll b/tests/cases/longjmp_tiny_noasm.ll
index 0045847c..0045847c 100644
--- a/tests/cases/longjmp_tiny.ll
+++ b/tests/cases/longjmp_tiny_noasm.ll
diff --git a/tests/cases/longjmp_tiny.txt b/tests/cases/longjmp_tiny_noasm.txt
index 8a0aa386..8a0aa386 100644
--- a/tests/cases/longjmp_tiny.txt
+++ b/tests/cases/longjmp_tiny_noasm.txt
diff --git a/tests/cases/selectstruct.ll b/tests/cases/selectstruct.ll
index 90c15ac7..5c9fecf7 100644
--- a/tests/cases/selectstruct.ll
+++ b/tests/cases/selectstruct.ll
@@ -10,7 +10,8 @@ entry:
%retval = alloca i32, align 4 ; [#uses=1 type=i32*]
%. = select i1 %retval, { i32, i32 } { i32 55, i32 99 }, { i32, i32 } { i32 2, i32 6 } ; [#uses=1 type={ i32, i32 }]
store i32 0, i32* %retval
- %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0), i32 %.) ; [#uses=0 type=i32]
+ %.1 = extractvalue { i32, i32 } %., 0
+ %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0), i32 %.1) ; [#uses=0 type=i32]
ret i32 1
}
diff --git a/tests/cases/structparam.ll b/tests/cases/structparam.ll
new file mode 100644
index 00000000..c59ad600
--- /dev/null
+++ b/tests/cases/structparam.ll
@@ -0,0 +1,36 @@
+; ModuleID = '/dev/shm/tmp/src.cpp.o'
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
+target triple = "i386-pc-linux-gnu"
+
+@.str = private unnamed_addr constant [15 x i8] c"hello, %d %d!\0A\00", align 1 ; [#uses=1 type=[15 x i8]*]
+@_dispatchTable = internal global i64 0
+
+define i32 @doit(i32 %x, { i32, i32 } %y) {
+ %y0 = extractvalue { i32, i32 } %y, 0
+ %y1 = extractvalue { i32, i32 } %y, 1
+ %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0), i32 %y0, i32 %y1) ; [#uses=0 type=i32] [debug line = 5:13]
+ ret i32 0
+}
+
+define i32 @main() {
+entry:
+ %retval = alloca i32, align 4 ; [#uses=1 type=i32*]
+ %myi64 = alloca i64, align 4
+ %comp = alloca { i32, i32 }, align 4 ; [#uses=1]
+ store i32 0, i32* %retval
+ br label %cond.end
+
+cond.null:
+ br label %cond.end
+
+cond.end: ; preds = %cond.false, %cond.true
+ %cond = phi { i32, i32 } [ { i32 5, i32 6 }, %entry ], [ zeroinitializer, %cond.null ] ; [#uses=1]
+ store { i32, i32 } %cond, { i32, i32 }* %comp
+ %call = call i32 (i32, { i32, i32 })* @doit(i32 1, { i32, i32 } %cond) ;
+ store { i32, i32 } { i32 ptrtoint (i64* @_dispatchTable to i32), i32 0 }, { i32, i32 }* getelementptr inbounds ([1 x i64]* @_dispatchTable, i32 0, i32 0, i32 1), align 4
+ ret i32 0 ; [debug line = 6:13]
+}
+
+; [#uses=1]
+declare i32 @printf(i8*, ...)
+
diff --git a/tests/cases/structparam.txt b/tests/cases/structparam.txt
new file mode 100644
index 00000000..b2a63262
--- /dev/null
+++ b/tests/cases/structparam.txt
@@ -0,0 +1 @@
+hello, 5 6!
diff --git a/tests/cases/uadd_overflow.ll b/tests/cases/uadd_overflow.ll
deleted file mode 100644
index a808b9de..00000000
--- a/tests/cases/uadd_overflow.ll
+++ /dev/null
@@ -1,25 +0,0 @@
-; ModuleID = 'tests/hello_world.bc'
-target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128"
-target triple = "i386-pc-linux-gnu"
-
-@.str2 = private constant [9 x i8] c"*%d,%d*\0A\00", align 1 ; [#uses=1]
-
-; [#uses=0]
-define i32 @main() {
-entry:
- %retval = alloca i32, align 4 ; [#uses=1 type=i32*]
- %mul7 = bitcast i32 -259741926 to i32
- %shl10 = shl i32 4014, 16
- %uadd1 = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %mul7, i32 %shl10)
- %a0 = extractvalue { i32, i1 } %uadd1, 0
- %a1 = extractvalue { i32, i1 } %uadd1, 1
- %a2 = zext i1 %a1 to i32
- call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @.str2, i32 0, i32 0), i32 %a0, i32 %a2) ; [#uses=0]
- ret i32 1
-}
-
-; [#uses=1]
-declare i32 @printf(i8*, ...)
-
-declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32) nounwind readnone
-
diff --git a/tests/cases/uadd_overflow.txt b/tests/cases/uadd_overflow.txt
deleted file mode 100644
index dcda9240..00000000
--- a/tests/cases/uadd_overflow.txt
+++ /dev/null
@@ -1 +0,0 @@
-*3319578,1*
diff --git a/tests/cases/uadd_overflow_ta2.ll b/tests/cases/uadd_overflow_ta2.ll
new file mode 100644
index 00000000..81a76bcd
--- /dev/null
+++ b/tests/cases/uadd_overflow_ta2.ll
@@ -0,0 +1,44 @@
+; ModuleID = 'tests/hello_world.bc'
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128"
+target triple = "i386-pc-linux-gnu"
+
+@.str2 = private constant [9 x i8] c"*%d,%d*\0A\00", align 1 ; [#uses=1]
+
+; [#uses=0]
+define i32 @main() {
+entry:
+ %retval = alloca i32, align 4 ; [#uses=1 type=i32*]
+ %mul7 = bitcast i32 -259741926 to i32
+ %shl10 = shl i32 4014, 16
+ %uadd1 = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %mul7, i32 %shl10)
+ %a0 = extractvalue { i32, i1 } %uadd1, 0
+ %a1 = extractvalue { i32, i1 } %uadd1, 1
+ %a2 = zext i1 %a1 to i32
+ call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @.str2, i32 0, i32 0), i32 %a0, i32 %a2) ; [#uses=0]
+
+ %buadd1prepre = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %mul7, i32 %shl10)
+ %buadd1pre = insertvalue { i32, i1 } %buadd1prepre, i1 0, 1
+ %buadd1 = insertvalue { i32, i1 } %buadd1pre, i32 5177, 0
+ %ba0 = extractvalue { i32, i1 } %buadd1, 0
+ %ba1 = extractvalue { i32, i1 } %buadd1, 1
+ %ba2 = zext i1 %ba1 to i32
+ call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @.str2, i32 0, i32 0), i32 %ba0, i32 %ba2) ; [#uses=0]
+
+ %64buadd1pre = tail call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 5000, i64 3000)
+ %64buadd1 = insertvalue { i64, i1 } %64buadd1pre, i64 9875, 0
+ %64buadd2 = insertvalue { i64, i1 } %64buadd1, i1 1, 1
+ %64ba0pre = extractvalue { i64, i1 } %64buadd2, 0
+ %64ba0 = trunc i64 %64ba0pre to i32
+ %64ba1 = extractvalue { i64, i1 } %64buadd2, 1
+ %64ba2 = zext i1 %64ba1 to i32
+ call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @.str2, i32 0, i32 0), i32 %64ba0, i32 %64ba2) ; [#uses=0]
+
+ ret i32 1
+}
+
+; [#uses=1]
+declare i32 @printf(i8*, ...)
+
+declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32) nounwind readnone
+declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i32) nounwind readnone
+
diff --git a/tests/cases/uadd_overflow_ta2.txt b/tests/cases/uadd_overflow_ta2.txt
new file mode 100644
index 00000000..bcd04599
--- /dev/null
+++ b/tests/cases/uadd_overflow_ta2.txt
@@ -0,0 +1,3 @@
+*3319578,1*
+*5177,0*
+*9875,1*
diff --git a/tests/runner.py b/tests/runner.py
index 775225c6..f6383edd 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -428,7 +428,7 @@ if 'benchmark' not in str(sys.argv) and 'sanity' not in str(sys.argv) and 'brows
if len(sys.argv) == 2 and 'ALL.' in sys.argv[1]:
ignore, test = sys.argv[1].split('.')
print 'Running all test modes on test "%s"' % test
- sys.argv = [sys.argv[0], 'default.'+test, 'o1.'+test, 'o2.'+test, 's_0_0.'+test, 's_0_1.'+test, 's_0_1_q1.'+test, 's_1_0.'+test, 's_1_1.'+test, 's_1_1_q1.'+test]
+ sys.argv = [sys.argv[0], 'default.'+test, 'o1.'+test, 'o2.'+test, 'asm.'+test, 'asm2.'+test, 's_0_0.'+test, 's_0_1.'+test, 's_0_1_q1.'+test, 's_1_0.'+test, 's_1_1.'+test, 's_1_1_q1.'+test]
class T(RunnerCore): # Short name, to make it more fun to use manually on the commandline
## Does a complete test - builds, runs, checks output, etc.
@@ -836,6 +836,7 @@ if 'benchmark' not in str(sys.argv) and 'sanity' not in str(sys.argv) and 'brows
def test_i64_cmp2(self):
if Settings.USE_TYPED_ARRAYS != 2: return self.skip('full i64 stuff only in ta2')
+
src = r'''
#include <inttypes.h>
#include <stdio.h>
@@ -881,6 +882,8 @@ m_divisor is 1091269979
def test_i64_double(self):
if Settings.USE_TYPED_ARRAYS != 2: return self.skip('full i64 stuff only in ta2')
+
+
src = r'''
#include <stdio.h>
@@ -923,6 +926,7 @@ m_divisor is 1091269979
def test_i64_umul(self):
if Settings.USE_TYPED_ARRAYS != 2: return self.skip('full i64 stuff only in ta2')
+
src = r'''
#include <inttypes.h>
#include <stdio.h>
@@ -1193,6 +1197,7 @@ c5,de,15,8a
self.do_run(open(path_from_root('tests', 'cube2md5.cpp')).read(), open(path_from_root('tests', 'cube2md5.ok')).read())
def test_cube2hash(self):
+
try:
old_chunk_size = os.environ.get('EMSCRIPT_MAX_CHUNK_SIZE') or ''
os.environ['EMSCRIPT_MAX_CHUNK_SIZE'] = '1' # test splitting out each function to a chunk in emscripten.py (21 functions here)
@@ -1322,7 +1327,7 @@ c5,de,15,8a
# corrections otherwise
if Settings.USE_TYPED_ARRAYS == 2:
Settings.CORRECT_SIGNS = 0
- Settings.CHECK_SIGNS = 1
+ Settings.CHECK_SIGNS = 1 if not Settings.ASM_JS else 0
else:
Settings.CORRECT_SIGNS = 1
Settings.CHECK_SIGNS = 0
@@ -1998,6 +2003,8 @@ c5,de,15,8a
self.do_run(src, 'Assertion failed: 1 == false')
def test_longjmp(self):
+ if Settings.ASM_JS: return self.skip('asm does not support longjmp')
+
src = r'''
#include <stdio.h>
#include <setjmp.h>
@@ -2033,6 +2040,8 @@ c5,de,15,8a
self.do_run(src, 'second\nmain: 0\n')
def test_longjmp2(self):
+ if Settings.ASM_JS: return self.skip('asm does not support longjmp')
+
src = r'''
#include <setjmp.h>
#include <stdio.h>
@@ -2079,6 +2088,8 @@ Exiting stack_manipulate_func, level: 0
''')
def test_longjmp3(self):
+ if Settings.ASM_JS: return self.skip('asm does not support longjmp')
+
src = r'''
#include <setjmp.h>
#include <stdio.h>
@@ -2131,6 +2142,8 @@ Exiting setjmp function, level: 0
''')
def test_longjmp4(self):
+ if Settings.ASM_JS: return self.skip('asm does not support longjmp')
+
src = r'''
#include <setjmp.h>
#include <stdio.h>
@@ -2491,6 +2504,7 @@ Exiting setjmp function, level: 0, prev_jmp: -1
def test_segfault(self):
if self.emcc_args is None: return self.skip('SAFE_HEAP without ta2 means we check types too, which hide segfaults')
+ if Settings.ASM_JS: return self.skip('asm does not support safe heap')
Settings.SAFE_HEAP = 1
@@ -3035,7 +3049,7 @@ Exiting setjmp function, level: 0, prev_jmp: -1
emscripten_run_script("Module.print('hello world' + '!')");
printf("*%d*\n", emscripten_run_script_int("5*20"));
printf("*%s*\n", emscripten_run_script_string("'five'+'six'"));
- emscripten_run_script("_save_me_aimee()");
+ emscripten_run_script("Module['_save_me_aimee']()");
return 0;
}
'''
@@ -3045,7 +3059,7 @@ def process(filename):
src = open(filename, 'r').read()
# TODO: restore this (see comment in emscripten.h) assert '// hello from the source' in src
'''
-
+ Settings.EXPORTED_FUNCTIONS = ['_main', '_save_me_aimee']
self.do_run(src, 'hello world!\n*100*\n*fivesix*\nmann\n', post_build=check)
def test_inlinejs(self):
@@ -3069,6 +3083,7 @@ def process(filename):
def test_memorygrowth(self):
if Settings.USE_TYPED_ARRAYS == 0: return self.skip('memory growth is only supported with typed arrays')
+ if Settings.ASM_JS: return self.skip('asm does not support memory growth yet')
# With typed arrays in particular, it is dangerous to use more memory than TOTAL_MEMORY,
# since we then need to enlarge the heap(s).
@@ -3259,6 +3274,7 @@ def process(filename):
def test_varargs(self):
if Settings.QUANTUM_SIZE == 1: return self.skip('FIXME: Add support for this')
+ if Settings.ASM_JS: return self.skip('varargs by function pointer not yet supported')
src = '''
#include <stdio.h>
@@ -3913,6 +3929,7 @@ The current type of b is: 9
def test_runtimelink(self):
if Building.LLVM_OPTS: return self.skip('LLVM opts will optimize printf into puts in the parent, and the child will still look for puts')
if Settings.NAMED_GLOBALS == 0: return self.skip('dlopen cannot work without named globals, TODO')
+ if Settings.ASM_JS: return self.skip('asm does not support runtime linking')
main, supp = self.setup_runtimelink_test()
@@ -3928,6 +3945,8 @@ The current type of b is: 9
self.do_run(main, 'supp: 54,2\nmain: 56\nsupp see: 543\nmain see: 76\nok.')
def test_dlfcn_basic(self):
+ if Settings.ASM_JS: return self.skip('TODO: dlopen in asm')
+
Settings.LINKABLE = 1
lib_src = '''
@@ -3979,6 +3998,8 @@ def process(filename):
post_build=add_pre_run_and_checks)
def test_dlfcn_qsort(self):
+ if Settings.ASM_JS: return self.skip('TODO: dlopen in asm')
+
Settings.LINKABLE = 1
if Settings.USE_TYPED_ARRAYS == 2:
@@ -4071,6 +4092,7 @@ def process(filename):
post_build=add_pre_run_and_checks)
def test_dlfcn_data_and_fptr(self):
+ if Settings.ASM_JS: return self.skip('TODO: dlopen in asm')
if Building.LLVM_OPTS: return self.skip('LLVM opts will optimize out parent_func')
if Settings.NAMED_GLOBALS == 0: return self.skip('dlopen cannot work without named globals, TODO')
@@ -4174,6 +4196,8 @@ def process(filename):
post_build=add_pre_run_and_checks)
def test_dlfcn_alias(self):
+ if Settings.ASM_JS: return self.skip('TODO: dlopen in asm')
+
Settings.LINKABLE = 1
if Building.LLVM_OPTS == 2: return self.skip('LLVM LTO will optimize away stuff we expect from the shared library')
@@ -4229,6 +4253,8 @@ def process(filename):
Settings.INCLUDE_FULL_LIBRARY = 0
def test_dlfcn_varargs(self):
+ if Settings.ASM_JS: return self.skip('TODO: dlopen in asm')
+
Settings.LINKABLE = 1
if Building.LLVM_OPTS == 2: return self.skip('LLVM LTO will optimize things that prevent shared objects from working')
@@ -5358,6 +5384,7 @@ def process(filename):
}
'''
for linkable in [0, 1]:
+ print linkable
Settings.LINKABLE = linkable # regression check for issue #273
self.do_run(src, "1 2 3")
@@ -5939,7 +5966,7 @@ int main(int argc, char **argv) {
Settings.CORRECT_SIGNS = 2
Settings.CORRECT_SIGNS_LINES = ['src.cpp:' + str(i+4) for i in [4816, 4191, 4246, 4199, 4205, 4235, 4227]]
- Settings.TOTAL_MEMORY = 100*1024*1024 # needed with typed arrays
+ Settings.TOTAL_MEMORY = 128*1024*1024 # needed with typed arrays
src = open(path_from_root('system', 'lib', 'dlmalloc.c'), 'r').read() + '\n\n\n' + open(path_from_root('tests', 'dlmalloc_test.c'), 'r').read()
self.do_run(src, '*1,0*', ['200', '1'])
@@ -5954,7 +5981,7 @@ int main(int argc, char **argv) {
# emcc should build in dlmalloc automatically, and do all the sign correction etc. for it
try_delete(os.path.join(self.get_dir(), 'src.cpp.o.js'))
- output = Popen(['python', EMCC, path_from_root('tests', 'dlmalloc_test.c'), '-s', 'TOTAL_MEMORY=100000000',
+ output = Popen(['python', EMCC, path_from_root('tests', 'dlmalloc_test.c'), '-s', 'TOTAL_MEMORY=' + str(128*1024*1024),
'-o', os.path.join(self.get_dir(), 'src.cpp.o.js')], stdout=PIPE, stderr=self.stderr_redirect).communicate()
self.do_run('x', '*1,0*', ['200', '1'], no_build=True)
@@ -6141,7 +6168,7 @@ void*:16
self.do_run(src, '*10,22*')
def test_mmap(self):
- Settings.TOTAL_MEMORY = 100*1024*1024
+ Settings.TOTAL_MEMORY = 128*1024*1024
src = '''
#include <stdio.h>
@@ -6238,6 +6265,7 @@ void*:16
def test_freetype(self):
if Settings.QUANTUM_SIZE == 1: return self.skip('TODO: Figure out and try to fix')
+ if Settings.ASM_JS: return self.skip('asm does not support longjmp')
if Settings.CORRECT_SIGNS == 0: Settings.CORRECT_SIGNS = 1 # Not sure why, but needed
@@ -6294,16 +6322,13 @@ def process(filename):
if self.emcc_args is None: return self.skip('Very slow without ta2, and we would also need to include dlmalloc manually without emcc')
if Settings.QUANTUM_SIZE == 1: return self.skip('TODO FIXME')
- pgo_data = read_pgo_data(path_from_root('tests', 'sqlite', 'sqlite-autooptimize.fails.txt'))
-
Settings.CORRECT_SIGNS = 1 # XXX: in default, we fail with 2 here, even though the pgo_data should be correct (and works in s_0_0). Investigate this.
- Settings.CORRECT_SIGNS_LINES = pgo_data['signs_lines']
Settings.CORRECT_OVERFLOWS = 0
Settings.CORRECT_ROUNDINGS = 0
if self.emcc_args is None: Settings.SAFE_HEAP = 0 # uses time.h to set random bytes, other stuff
Settings.DISABLE_EXCEPTION_CATCHING = 1
Settings.FAST_MEMORY = 4*1024*1024
- Settings.EXPORTED_FUNCTIONS = ['_main', '_sqlite3_open', '_sqlite3_close', '_sqlite3_exec', '_sqlite3_free', '_callback'];
+ Settings.EXPORTED_FUNCTIONS += ['_sqlite3_open', '_sqlite3_close', '_sqlite3_exec', '_sqlite3_free', '_callback'];
self.do_run(r'''
#define SQLITE_DISABLE_LFS
@@ -6349,6 +6374,7 @@ def process(filename):
def test_poppler(self):
if self.emcc_args is None: return self.skip('very slow, we only do this in emcc runs')
+ if Settings.ASM_JS: return self.skip('asm does not support relying on function pointers being cast to different types')
Settings.CORRECT_OVERFLOWS = 1
Settings.CORRECT_SIGNS = 1
@@ -6519,7 +6545,7 @@ def process(filename):
Settings.CHECK_OVERFLOWS = 0
if self.emcc_args is None: Settings.SAFE_HEAP = 0 # Has bitfields which are false positives. Also the PyFloat_Init tries to detect endianness.
Settings.CORRECT_SIGNS = 1 # Not sure why, but needed
- Settings.EXPORTED_FUNCTIONS = ['_main', '_PyRun_SimpleStringFlags'] # for the demo
+ Settings.EXPORTED_FUNCTIONS += ['_PyRun_SimpleStringFlags'] # for the demo
self.do_ll_run(path_from_root('tests', 'python', 'python.small.bc'),
'hello python world!\n[0, 2, 4, 6]\n5\n22\n5.470000',
@@ -6557,6 +6583,9 @@ def process(filename):
if '_ta2' in shortname and not Settings.USE_TYPED_ARRAYS == 2:
print self.skip('case "%s" only relevant for ta2' % shortname)
continue
+ if '_noasm' in shortname and Settings.ASM_JS:
+ print self.skip('case "%s" not relevant for asm.js' % shortname)
+ continue
print >> sys.stderr, "Testing case '%s'..." % shortname
output_file = path_from_root('tests', 'cases', shortname + '.txt')
if Settings.QUANTUM_SIZE == 1:
@@ -6630,6 +6659,8 @@ def process(filename):
self.do_run(src, '''AD:-1,1''', build_ll_hook=self.do_autodebug)
def test_profiling(self):
+ if Settings.ASM_JS: return self.skip('asm does not support profiling')
+
src = '''
#include <emscripten.h>
#include <unistd.h>
@@ -6734,11 +6765,13 @@ def process(filename):
open(filename, 'w').write(src)
'''
- Settings.EXPORTED_FUNCTIONS = ['_get_int', '_get_float', '_get_string', '_print_int', '_print_float', '_print_string', '_multi', '_pointer', '_malloc']
+ Settings.EXPORTED_FUNCTIONS += ['_get_int', '_get_float', '_get_string', '_print_int', '_print_float', '_print_string', '_multi', '_pointer']
self.do_run(src, '*\nnumber,5\nnumber,3.14\nstring,hello world\n12\nundefined\n14.56\nundefined\ncheez\nundefined\narr-ay\nundefined\nmore\nnumber,10\n650\nnumber,21\n*\natr\n10\nbret\n53\n*\nstack is ok.\n', post_build=post)
def test_scriptaclass(self):
+ if Settings.ASM_JS: return self.skip('asm does not bindings generator yet')
+
header_filename = os.path.join(self.get_dir(), 'header.h')
header = '''
struct ScriptMe {
@@ -6983,6 +7016,8 @@ Child2:9
''', post_build=[post2, post3])
def test_scriptaclass_2(self):
+ if Settings.ASM_JS: return self.skip('asm does not bindings generator yet')
+
header_filename = os.path.join(self.get_dir(), 'header.h')
header = '''
#include <stdio.h>
@@ -7240,6 +7275,8 @@ def process(filename):
assert 'Assertion failed' in str(e), str(e)
def test_linespecific(self):
+ if Settings.ASM_JS: return self.skip('asm always has corrections on')
+
if '-g' not in Building.COMPILER_TEST_OPTS: Building.COMPILER_TEST_OPTS.append('-g')
if self.emcc_args: self.emcc_args += ['--llvm-opts', '0'] # llvm full opts make the expected failures here not happen
@@ -7397,6 +7434,8 @@ def process(filename):
Settings.CORRECT_SIGNS = 0
def test_pgo(self):
+ if Settings.ASM_JS: return self.skip('asm does not support pgo')
+
if '-g' not in Building.COMPILER_TEST_OPTS: Building.COMPILER_TEST_OPTS.append('-g')
Settings.PGO = Settings.CHECK_OVERFLOWS = Settings.CORRECT_OVERFLOWS = Settings.CHECK_SIGNS = Settings.CORRECT_SIGNS = 1
@@ -7472,6 +7511,7 @@ def process(filename):
def test_gc(self):
if self.emcc_args == None: return self.skip('needs ta2')
+ if Settings.ASM_JS: return self.skip('asm cannot support generic function table')
Settings.GC_SUPPORT = 1
@@ -7654,6 +7694,10 @@ TT = %s
# Make one run with -O2, but without closure (we enable closure in specific tests, otherwise on everything it is too slow)
exec('o2 = make_run("o2", compiler=CLANG, emcc_args=["-O2", "--closure", "0"])')
+ # asm.js
+ exec('asm = make_run("asm", compiler=CLANG, emcc_args=["-O0", "--closure", "0", "-s", "ASM_JS=1"])')
+ exec('asm2 = make_run("asm2", compiler=CLANG, emcc_args=["-O2", "--closure", "0", "-s", "ASM_JS=1"])')
+
# Make custom runs with various options
for compiler, quantum, embetter, typed_arrays, llvm_opts in [
(CLANG, 1, 1, 0, 0),
@@ -8182,6 +8226,8 @@ f.close()
self.assertContained('hello from lib', run_js(os.path.join(self.get_dir(), 'a.out.js')))
def test_runtimelink_multi(self):
+ if Settings.ASM_JS: return self.skip('asm does not support runtime linking yet')
+
if SPIDERMONKEY_ENGINE not in JS_ENGINES: return self.skip('cannot run without spidermonkey due to node limitations')
open('testa.h', 'w').write(r'''
@@ -8694,6 +8740,10 @@ f.close()
['eliminate']),
(path_from_root('tools', 'eliminator', 'safe-eliminator-test.js'), open(path_from_root('tools', 'eliminator', 'safe-eliminator-test-output.js')).read(),
['eliminateMemSafe']),
+ (path_from_root('tools', 'eliminator', 'asm-eliminator-test.js'), open(path_from_root('tools', 'eliminator', 'asm-eliminator-test-output.js')).read(),
+ ['eliminateAsm']),
+ (path_from_root('tools', 'test-js-optimizer-asm-regs.js'), open(path_from_root('tools', 'test-js-optimizer-asm-regs-output.js')).read(),
+ ['registerizeAsm']),
]:
output = Popen([NODE_JS, path_from_root('tools', 'js-optimizer.js'), input] + passes, stdin=PIPE, stdout=PIPE).communicate()[0]
self.assertIdentical(expected, output.replace('\r\n', '\n').replace('\n\n', '\n'))
@@ -10247,7 +10297,7 @@ elif 'benchmark' in str(sys.argv):
try_delete(final_filename)
output = Popen(['python', EMCC, filename, #'-O3',
'-O2', '-s', 'INLINING_LIMIT=0', '-s', 'DOUBLE_MODE=0', '-s', 'PRECISE_I64_MATH=0',
- '-s', 'TOTAL_MEMORY=100*1024*1024', '-s', 'FAST_MEMORY=10*1024*1024',
+ '-s', 'TOTAL_MEMORY=128*1024*1024', '-s', 'FAST_MEMORY=10*1024*1024',
'-o', final_filename] + emcc_args, stdout=PIPE, stderr=self.stderr_redirect).communicate()
assert os.path.exists(final_filename), 'Failed to compile file: ' + output[0]
diff --git a/tests/sqlite/sqlite-autooptimize.fails.txt b/tests/sqlite/sqlite-autooptimize.fails.txt
deleted file mode 100644
index a8fb95c9..00000000
--- a/tests/sqlite/sqlite-autooptimize.fails.txt
+++ /dev/null
@@ -1,3436 +0,0 @@
-UnSign|src.c:53573 : 5437030 hits, %0 failures
-UnSign|src.c:48532 : 5148135 hits, %0 failures
-UnSign|src.c:48527 : 5100537 hits, %0 failures
-UnSign|src.c:52005 : 4073874 hits, %0 failures
-UnSign|src.c:53050 : 3934072 hits, %0 failures
-UnSign|src.c:18445 : 3774770 hits, %0 failures
-ReSign|src.c:53625 : 3436900 hits, %0 failures
-ReSign|src.c:53628 : 3425390 hits, %0 failures
-UnSign|src.c:60549 : 3283684 hits, %0 failures
-UnSign|src.c:60553 : 3273669 hits, %0 failures
-UnSign|src.c:48406 : 3040270 hits, %0 failures
-ReSign|src.c:20723 : 2661440 hits, %0 failures
-ReSign|src.c:60568 : 2383652 hits, %0 failures
-ReSign|src.c:57231 : 2322446 hits, %0 failures
-UnSign|src.c:20762 : 2255540 hits, %0 failures
-ReSign|src.c:53571 : 2197772 hits, %0 failures
-ReSign|src.c:60549 : 2182456 hits, %0 failures
-ReSign|src.c:60554 : 2182446 hits, %0 failures
-ReSign|src.c:60562 : 2182446 hits, %0 failures
-UnSign|src.c:60543 : 2096937 hits, %0 failures
-ReSign|src.c:52033 : 2036931 hits, %0 failures
-ReSign|src.c:104878 : 1954211 hits, %0 failures
-ReSign|src.c:20762 : 1904614 hits, %0 failures
-ReSign|src.c:104872 : 1779034 hits, %0 failures
-ReSign|src.c:53101 : 1720386 hits, %0 failures
-UnSign|src.c:48501 : 1716045 hits, %0 failures
-ReSign|src.c:48513 : 1716045 hits, %0 failures
-UnSign|src.c:48545 : 1716045 hits, %0 failures
-UnSign|src.c:53627 : 1712695 hits, %0 failures
-UnSign|src.c:53104 : 1701640 hits, %0 failures
-UnSign|src.c:53106 : 1701640 hits, %0 failures
-ReSign|src.c:48527 : 1700179 hits, %0 failures
-ReSign|src.c:20618 : 1582657 hits, %0 failures
-ReSign|src.c:82816 : 1520000 hits, %0 failures
-ReSign|src.c:57232 : 1374742 hits, %0 failures
-ReSign|src.c:52083 : 1357954 hits, %0 failures
-ReSign|src.c:107278 : 1330720 hits, %0 failures
-ReSign|src.c:18445 : 1271522 hits, %0 failures
-ReSign|src.c:106763 : 1253037 hits, %0 failures
-ReSign|src.c:18496 : 1251458 hits, %0 failures
-ReSign|src.c:53561 : 1239128 hits, %0 failures
-ReSign|src.c:48399 : 1227618 hits, %0 failures
-ReSign|src.c:48394 : 1221863 hits, %0 failures
-UnSign|src.c:57190 : 1161232 hits, %0 failures
-UnSign|src.c:57191 : 1161232 hits, %0 failures
-ReSign|src.c:57198 : 1161232 hits, %0 failures
-ReSign|src.c:57206 : 1161232 hits, %0 failures
-ReSign|src.c:57207 : 1161223 hits, %0 failures
-ReSign|src.c:57210 : 1161223 hits, %0 failures
-ReSign|src.c:57213 : 1161223 hits, %0 failures
-ReSign|src.c:12957 : 1159636 hits, %0 failures
-ReSign|src.c:107458 : 1127259 hits, %0 failures
-ReSign|src.c:60553 : 1091223 hits, %0 failures
-ReSign|src.c:60564 : 1091223 hits, %0 failures
-ReSign|src.c:52086 : 1086554 hits, %0 failures
-ReSign|src.c:18497 : 1071311 hits, %0 failures
-ReSign|src.c:18501 : 1071311 hits, %0 failures
-UnSign|src.c:48434 : 1050126 hits, %0 failures
-ReSign|src.c:63375 : 1035403 hits, %0 failures
-ReSign|src.c:63377 : 1035403 hits, %0 failures
-ReSign|src.c:63416 : 1035403 hits, %0 failures
-UnSign|src.c:63436 : 1035403 hits, %0 failures
-ReSign|src.c:63436 : 1035403 hits, %0 failures
-UnSign|src.c:63477 : 1035403 hits, %1 failures
-UnSign|src.c:65084 : 990123 hits, %0 failures
-ReSign|src.c:18476 : 983487 hits, %0 failures
-UnSign|src.c:104878 : 952092 hits, %0 failures
-ReSign|src.c:18631 : 951200 hits, %0 failures
-ReSign|src.c:65081 : 940100 hits, %0 failures
-UnSign|src.c:107411 : 902598 hits, %0 failures
-UnSign|src.c:48491 : 850065 hits, %0 failures
-UnSign|src.c:58216 : 800956 hits, %0 failures
-UnSign|src.c:104870 : 776776 hits, %0 failures
-ReSign|src.c:106658 : 776773 hits, %0 failures
-ReSign|src.c:107463 : 751466 hits, %0 failures
-ReSign|src.c:18639 : 750974 hits, %0 failures
-ReSign|src.c:57991 : 750898 hits, %0 failures
-ReSign|src.c:57712 : 750896 hits, %0 failures
-UnSign|src.c:57989 : 750895 hits, %1 failures
-ReSign|src.c:57989 : 750895 hits, %0 failures
-ReSign|src.c:21066 : 750278 hits, %0 failures
-ReSign|dlmalloc.c:4240 : 744231 hits, %0 failures
-UnSign|src.c:48449 : 735069 hits, %0 failures
-UnSign|src.c:21501 : 728920 hits, %0 failures
-UnSign|src.c:57991 : 725878 hits, %1 failures
-UnSign|src.c:58639 : 700848 hits, %0 failures
-ReSign|src.c:60543 : 698979 hits, %0 failures
-UnSign|src.c:60545 : 698979 hits, %0 failures
-ReSign|src.c:60545 : 698979 hits, %0 failures
-UnSign|src.c:60548 : 698979 hits, %0 failures
-UnSign|src.c:60577 : 693974 hits, %0 failures
-ReSign|src.c:60577 : 693974 hits, %0 failures
-ReSign|src.c:60317 : 683799 hits, %0 failures
-UnSign|src.c:60317 : 683799 hits, %0 failures
-ReSign|src.c:52006 : 678979 hits, %0 failures
-ReSign|src.c:52067 : 678979 hits, %0 failures
-UnSign|src.c:52032 : 678977 hits, %0 failures
-UnSign|src.c:52033 : 678977 hits, %0 failures
-ReSign|src.c:52078 : 678977 hits, %0 failures
-UnSign|src.c:107277 : 665360 hits, %0 failures
-ReSign|src.c:107277 : 665360 hits, %0 failures
-ReSign|src.c:20722 : 665360 hits, %0 failures
-UnSign|src.c:65082 : 660082 hits, %0 failures
-UnSign|src.c:65087 : 660082 hits, %0 failures
-UnSign|src.c:20140 : 660000 hits, %0 failures
-UnSign|src.c:20141 : 660000 hits, %0 failures
-UnSign|src.c:60170 : 655075 hits, %0 failures
-UnSign|src.c:56685 : 640140 hits, %0 failures
-ReSign|src.c:56685 : 640140 hits, %0 failures
-ReSign|src.c:62565 : 630092 hits, %0 failures
-UnSign|src.c:48394 : 613809 hits, %0 failures
-UnSign|src.c:48398 : 613809 hits, %0 failures
-UnSign|src.c:104882 : 601752 hits, %0 failures
-ReSign|src.c:62574 : 580020 hits, %0 failures
-UnSign|src.c:52949 : 574492 hits, %0 failures
-UnSign|src.c:65110 : 560036 hits, %0 failures
-UnSign|src.c:60174 : 555027 hits, %0 failures
-ReSign|src.c:35705 : 546585 hits, %0 failures
-ReSign|src.c:35973 : 543546 hits, %0 failures
-UnSign|src.c:60126 : 525078 hits, %0 failures
-ReSign|src.c:60129 : 525078 hits, %0 failures
-ReSign|src.c:60132 : 525078 hits, %0 failures
-UnSign|src.c:48438 : 525063 hits, %0 failures
-UnSign|src.c:104877 : 501069 hits, %0 failures
-ReSign|src.c:73314 : 500922 hits, %0 failures
-ReSign|src.c:58163 : 500579 hits, %0 failures
-UnSign|src.c:65266 : 500064 hits, %0 failures
-UnSign|src.c:65309 : 500064 hits, %0 failures
-UnSign|src.c:65313 : 500064 hits, %0 failures
-UnSign|src.c:60447 : 500000 hits, %0 failures
-UnSign|src.c:48453 : 490046 hits, %0 failures
-ReSign|src.c:106663 : 476264 hits, %0 failures
-UnSign|src.c:106514 : 476264 hits, %100 failures
-UnSign|src.c:106515 : 476264 hits, %0 failures
-UnSign|src.c:106517 : 476264 hits, %0 failures
-ReSign|src.c:104942 : 476264 hits, %0 failures
-UnSign|src.c:104945 : 476264 hits, %0 failures
-UnSign|src.c:104954 : 476264 hits, %0 failures
-ReSign|src.c:106518 : 476264 hits, %0 failures
-ReSign|src.c:106524 : 476244 hits, %0 failures
-ReSign|src.c:18625 : 475798 hits, %0 failures
-ReSign|src.c:18627 : 475786 hits, %0 failures
-ReSign|src.c:18630 : 475786 hits, %0 failures
-UnSign|src.c:18631 : 475600 hits, %0 failures
-ReSign|src.c:82818 : 475000 hits, %0 failures
-UnSign|src.c:82818 : 475000 hits, %0 failures
-ReSign|src.c:65110 : 460036 hits, %0 failures
-ReSign|src.c:107411 : 451299 hits, %0 failures
-ReSign|src.c:60137 : 450024 hits, %0 failures
-ReSign|src.c:60140 : 450024 hits, %0 failures
-UnSign|src.c:60147 : 450024 hits, %0 failures
-UnSign|src.c:34405 : 429302 hits, %0 failures
-ReSign|src.c:58005 : 425545 hits, %0 failures
-ReSign|src.c:60312 : 422021 hits, %0 failures
-UnSign|src.c:65026 : 420027 hits, %0 failures
-UnSign|src.c:48442 : 420012 hits, %0 failures
-ReSign|src.c:60266 : 419766 hits, %0 failures
-UnSign|src.c:51654 : 415194 hits, %0 failures
-ReSign|src.c:51654 : 415194 hits, %0 failures
-ReSign|src.c:104896 : 401065 hits, %0 failures
-UnSign|src.c:106968 : 400964 hits, %0 failures
-ReSign|src.c:104995 : 400841 hits, %0 failures
-UnSign|src.c:60322 : 400822 hits, %0 failures
-ReSign|src.c:57985 : 400478 hits, %0 failures
-ReSign|src.c:18462 : 400410 hits, %0 failures
-UnSign|src.c:107315 : 400116 hits, %0 failures
-ReSign|src.c:48147 : 400016 hits, %0 failures
-ReSign|src.c:60447 : 400000 hits, %0 failures
-ReSign|src.c:53661 : 392936 hits, %0 failures
-ReSign|src.c:51745 : 389964 hits, %0 failures
-ReSign|src.c:48244 : 380058 hits, %0 failures
-UnSign|src.c:107153 : 375733 hits, %0 failures
-ReSign|src.c:18633 : 375487 hits, %0 failures
-UnSign|src.c:57988 : 375448 hits, %1 failures
-UnSign|src.c:58005 : 375448 hits, %0 failures
-ReSign|src.c:58217 : 375448 hits, %7 failures
-ReSign|src.c:48400 : 374580 hits, %0 failures
-ReSign|src.c:14805 : 366584 hits, %0 failures
-UnSign|src.c:36054 : 364390 hits, %0 failures
-ReSign|src.c:34970 : 364390 hits, %0 failures
-ReSign|src.c:34989 : 364390 hits, %0 failures
-UnSign|src.c:35972 : 364386 hits, %0 failures
-ReSign|src.c:41807 : 362867 hits, %0 failures
-UnSign|src.c:49129 : 361314 hits, %0 failures
-UnSign|src.c:57994 : 350436 hits, %1 failures
-ReSign|src.c:57994 : 350436 hits, %0 failures
-UnSign|src.c:57996 : 350436 hits, %1 failures
-ReSign|src.c:57996 : 350436 hits, %0 failures
-ReSign|src.c:59118 : 350374 hits, %0 failures
-UnSign|src.c:65311 : 350052 hits, %0 failures
-ReSign|src.c:34758 : 343676 hits, %0 failures
-ReSign|src.c:65084 : 330041 hits, %0 failures
-ReSign|src.c:21492 : 325038 hits, %0 failures
-UnSign|src.c:60254 : 325034 hits, %0 failures
-ReSign|src.c:12969 : 302946 hits, %0 failures
-UnSign|src.c:60568 : 301730 hits, %0 failures
-UnSign|src.c:104918 : 300533 hits, %0 failures
-ReSign|src.c:106632 : 300529 hits, %0 failures
-ReSign|src.c:106647 : 300529 hits, %0 failures
-UnSign|src.c:106647 : 300529 hits, %0 failures
-ReSign|src.c:107490 : 300491 hits, %0 failures
-ReSign|src.c:18781 : 300473 hits, %0 failures
-UnSign|src.c:58654 : 300370 hits, %0 failures
-ReSign|src.c:58654 : 300370 hits, %0 failures
-ReSign|src.c:71511 : 300360 hits, %0 failures
-UnSign|src.c:60450 : 300000 hits, %0 failures
-ReSign|src.c:52164 : 299700 hits, %0 failures
-UnSign|src.c:60148 : 299250 hits, %0 failures
-UnSign|src.c:52095 : 297650 hits, %0 failures
-ReSign|dlmalloc.c:4816 : 290833 hits, %0 failures
-ReSign|src.c:51102 : 286959 hits, %0 failures
-ReSign|src.c:64945 : 280054 hits, %0 failures
-UnSign|src.c:64981 : 280054 hits, %0 failures
-ReSign|src.c:64992 : 280054 hits, %0 failures
-UnSign|src.c:65016 : 280018 hits, %0 failures
-ReSign|src.c:65056 : 280018 hits, %0 failures
-ReSign|src.c:49151 : 277476 hits, %0 failures
-UnSign|dlmalloc.c:4746 : 276872 hits, %0 failures
-ReSign|src.c:51643 : 276796 hits, %0 failures
-UnSign|dlmalloc.c:4776 : 276734 hits, %0 failures
-UnSign|src.c:104874 : 275707 hits, %0 failures
-ReSign|src.c:73312 : 275374 hits, %0 failures
-ReSign|src.c:58656 : 275364 hits, %0 failures
-ReSign|src.c:56504 : 275189 hits, %0 failures
-ReSign|src.c:51998 : 271404 hits, %0 failures
-UnSign|dlmalloc.c:4816 : 265512 hits, %0 failures
-ReSign|src.c:18308 : 265362 hits, %0 failures
-ReSign|src.c:53012 : 263997 hits, %0 failures
-UnSign|src.c:53661 : 261628 hits, %0 failures
-ReSign|src.c:71858 : 250490 hits, %0 failures
-UnSign|src.c:58958 : 250308 hits, %0 failures
-ReSign|src.c:58283 : 250250 hits, %0 failures
-ReSign|src.c:56494 : 250226 hits, %0 failures
-ReSign|src.c:56452 : 250146 hits, %0 failures
-UnSign|src.c:48430 : 245023 hits, %0 failures
-ReSign|src.c:48432 : 245023 hits, %0 failures
-ReSign|src.c:48453 : 245023 hits, %0 failures
-UnSign|src.c:53060 : 243828 hits, %0 failures
-UnSign|src.c:62526 : 240010 hits, %0 failures
-ReSign|src.c:62526 : 240010 hits, %0 failures
-UnSign|src.c:62578 : 240010 hits, %0 failures
-ReSign|src.c:62578 : 240010 hits, %0 failures
-ReSign|src.c:21148 : 233522 hits, %0 failures
-ReSign|dlmalloc.c:4678 : 226376 hits, %0 failures
-UnSign|dlmalloc.c:4191 : 226332 hits, %0 failures
-ReSign|src.c:69940 : 225884 hits, %0 failures
-ReSign|src.c:106972 : 225598 hits, %0 failures
-ReSign|src.c:90019 : 225198 hits, %0 failures
-ReSign|src.c:85988 : 225048 hits, %0 failures
-UnSign|src.c:42240 : 216588 hits, %0 failures
-ReSign|src.c:37792 : 216588 hits, %0 failures
-UnSign|src.c:42215 : 216588 hits, %0 failures
-ReSign|src.c:51833 : 214830 hits, %0 failures
-ReSign|src.c:34404 : 214651 hits, %0 failures
-ReSign|src.c:42143 : 212714 hits, %0 failures
-UnSign|src.c:42145 : 212714 hits, %0 failures
-ReSign|src.c:82790 : 210000 hits, %0 failures
-ReSign|dlmalloc.c:4778 : 208952 hits, %0 failures
-UnSign|src.c:51191 : 205008 hits, %0 failures
-ReSign|src.c:51191 : 205008 hits, %0 failures
-UnSign|src.c:104879 : 200536 hits, %0 failures
-ReSign|src.c:104879 : 200536 hits, %0 failures
-UnSign|src.c:107408 : 200534 hits, %0 failures
-UnSign|src.c:104895 : 200533 hits, %0 failures
-UnSign|src.c:104916 : 200533 hits, %0 failures
-UnSign|src.c:104896 : 200532 hits, %0 failures
-ReSign|src.c:60322 : 200411 hits, %0 failures
-ReSign|src.c:59190 : 200248 hits, %0 failures
-ReSign|src.c:72334 : 200194 hits, %0 failures
-ReSign|src.c:91875 : 200136 hits, %0 failures
-ReSign|src.c:86205 : 200064 hits, %0 failures
-ReSign|src.c:107315 : 200058 hits, %0 failures
-ReSign|src.c:85709 : 200040 hits, %0 failures
-ReSign|src.c:85965 : 200040 hits, %0 failures
-ReSign|src.c:48146 : 200018 hits, %0 failures
-UnSign|src.c:51212 : 200018 hits, %0 failures
-ReSign|src.c:51212 : 200018 hits, %0 failures
-ReSign|dlmalloc.c:4215 : 197420 hits, %0 failures
-UnSign|dlmalloc.c:4199 : 190700 hits, %43 failures
-ReSign|src.c:56535 : 190085 hits, %0 failures
-ReSign|src.c:60052 : 190029 hits, %0 failures
-ReSign|src.c:60068 : 190029 hits, %0 failures
-UnSign|src.c:48239 : 190029 hits, %0 failures
-ReSign|src.c:48239 : 190029 hits, %0 failures
-ReSign|src.c:48240 : 190029 hits, %0 failures
-UnSign|src.c:48244 : 190029 hits, %0 failures
-ReSign|src.c:60071 : 190029 hits, %0 failures
-ReSign|src.c:60072 : 190029 hits, %0 failures
-ReSign|dlmalloc.c:4799 : 186357 hits, %0 failures
-ReSign|src.c:35977 : 183718 hits, %0 failures
-ReSign|src.c:34904 : 182197 hits, %0 failures
-ReSign|src.c:41785 : 182195 hits, %0 failures
-ReSign|src.c:41791 : 182195 hits, %0 failures
-ReSign|src.c:34916 : 182195 hits, %0 failures
-UnSign|src.c:34916 : 182195 hits, %0 failures
-ReSign|src.c:34917 : 182195 hits, %0 failures
-UnSign|src.c:35971 : 182195 hits, %0 failures
-ReSign|src.c:36054 : 182195 hits, %0 failures
-ReSign|src.c:36058 : 182195 hits, %0 failures
-ReSign|src.c:34921 : 182195 hits, %0 failures
-ReSign|src.c:34956 : 182195 hits, %0 failures
-ReSign|src.c:34957 : 182195 hits, %0 failures
-ReSign|src.c:34974 : 182195 hits, %0 failures
-ReSign|src.c:34979 : 182195 hits, %0 failures
-ReSign|src.c:41797 : 182195 hits, %0 failures
-ReSign|src.c:49080 : 182195 hits, %0 failures
-ReSign|src.c:49054 : 182195 hits, %0 failures
-ReSign|src.c:41905 : 182195 hits, %0 failures
-ReSign|src.c:41718 : 182195 hits, %0 failures
-ReSign|src.c:35701 : 182195 hits, %0 failures
-ReSign|src.c:48911 : 180663 hits, %0 failures
-ReSign|src.c:49133 : 180657 hits, %0 failures
-ReSign|src.c:49135 : 180657 hits, %0 failures
-UnSign|src.c:48715 : 177520 hits, %0 failures
-UnSign|src.c:34992 : 176430 hits, %0 failures
-ReSign|src.c:34992 : 176430 hits, %0 failures
-UnSign|src.c:53012 : 175998 hits, %0 failures
-ReSign|src.c:18596 : 175318 hits, %0 failures
-ReSign|src.c:58629 : 175222 hits, %0 failures
-ReSign|src.c:56507 : 175111 hits, %0 failures
-UnSign|src.c:56452 : 175099 hits, %0 failures
-ReSign|src.c:65268 : 175026 hits, %0 failures
-ReSign|src.c:65269 : 175026 hits, %0 failures
-UnSign|src.c:65271 : 175026 hits, %0 failures
-ReSign|src.c:65271 : 175026 hits, %0 failures
-UnSign|src.c:65278 : 175026 hits, %0 failures
-ReSign|src.c:65278 : 175026 hits, %0 failures
-ReSign|src.c:65282 : 175026 hits, %0 failures
-UnSign|src.c:21197 : 175023 hits, %0 failures
-ReSign|src.c:21199 : 175023 hits, %0 failures
-ReSign|src.c:48433 : 175021 hits, %0 failures
-ReSign|src.c:48434 : 175021 hits, %0 failures
-UnSign|src.c:21206 : 174110 hits, %0 failures
-ReSign|src.c:21208 : 174110 hits, %0 failures
-ReSign|src.c:34802 : 171875 hits, %0 failures
-ReSign|src.c:34794 : 171838 hits, %0 failures
-ReSign|src.c:34799 : 171838 hits, %0 failures
-ReSign|src.c:34766 : 171838 hits, %0 failures
-ReSign|src.c:34772 : 171838 hits, %0 failures
-ReSign|src.c:52092 : 171400 hits, %0 failures
-UnSign|src.c:51953 : 169341 hits, %0 failures
-ReSign|src.c:51953 : 169341 hits, %0 failures
-UnSign|src.c:48697 : 162552 hits, %0 failures
-UnSign|src.c:48698 : 162552 hits, %0 failures
-ReSign|src.c:48699 : 162552 hits, %0 failures
-ReSign|src.c:48709 : 162552 hits, %0 failures
-UnSign|src.c:53042 : 162552 hits, %0 failures
-UnSign|dlmalloc.c:4235 : 161074 hits, %50 failures
-UnSign|dlmalloc.c:4236 : 161072 hits, %0 failures
-UnSign|dlmalloc.c:4239 : 161072 hits, %0 failures
-ReSign|src.c:51566 : 160011 hits, %0 failures
-UnSign|src.c:51568 : 160011 hits, %0 failures
-ReSign|src.c:51568 : 160011 hits, %0 failures
-UnSign|src.c:51573 : 160011 hits, %0 failures
-ReSign|src.c:51574 : 160011 hits, %0 failures
-ReSign|src.c:51579 : 160011 hits, %0 failures
-ReSign|dlmalloc.c:4790 : 159632 hits, %0 failures
-ReSign|dlmalloc.c:4225 : 156108 hits, %0 failures
-ReSign|src.c:69944 : 150695 hits, %0 failures
-UnSign|src.c:107160 : 150564 hits, %0 failures
-UnSign|src.c:106972 : 150356 hits, %0 failures
-ReSign|src.c:74962 : 150255 hits, %0 failures
-ReSign|src.c:71530 : 150220 hits, %0 failures
-UnSign|src.c:71864 : 150218 hits, %0 failures
-ReSign|src.c:71864 : 150218 hits, %0 failures
-ReSign|src.c:47514 : 150204 hits, %0 failures
-ReSign|src.c:20644 : 150182 hits, %0 failures
-ReSign|src.c:90198 : 150180 hits, %0 failures
-ReSign|src.c:80587 : 150144 hits, %0 failures
-ReSign|src.c:71202 : 150142 hits, %0 failures
-UnSign|src.c:71210 : 150142 hits, %0 failures
-ReSign|src.c:86929 : 150132 hits, %0 failures
-ReSign|src.c:72233 : 150132 hits, %0 failures
-ReSign|src.c:61132 : 150132 hits, %0 failures
-ReSign|src.c:77513 : 150120 hits, %0 failures
-ReSign|src.c:70643 : 150118 hits, %0 failures
-UnSign|src.c:57375 : 150094 hits, %0 failures
-UnSign|src.c:57393 : 150094 hits, %0 failures
-ReSign|src.c:57393 : 150094 hits, %0 failures
-ReSign|src.c:74130 : 150056 hits, %0 failures
-ReSign|src.c:86206 : 150052 hits, %0 failures
-ReSign|src.c:51743 : 150052 hits, %0 failures
-ReSign|src.c:74135 : 150044 hits, %0 failures
-ReSign|src.c:85967 : 150032 hits, %0 failures
-ReSign|src.c:54323 : 150016 hits, %0 failures
-ReSign|src.c:52823 : 150014 hits, %0 failures
-ReSign|src.c:65289 : 150012 hits, %0 failures
-ReSign|src.c:65293 : 150012 hits, %0 failures
-UnSign|src.c:65308 : 150012 hits, %0 failures
-ReSign|src.c:52878 : 150012 hits, %0 failures
-ReSign|src.c:52890 : 150012 hits, %0 failures
-ReSign|src.c:60257 : 150008 hits, %0 failures
-ReSign|src.c:64149 : 150000 hits, %0 failures
-UnSign|src.c:60444 : 150000 hits, %0 failures
-UnSign|src.c:52141 : 149850 hits, %0 failures
-ReSign|src.c:52141 : 149850 hits, %0 failures
-ReSign|src.c:52142 : 149850 hits, %0 failures
-UnSign|src.c:52146 : 149850 hits, %0 failures
-ReSign|src.c:52146 : 149850 hits, %0 failures
-ReSign|src.c:52150 : 149850 hits, %0 failures
-ReSign|src.c:52157 : 149850 hits, %0 failures
-ReSign|src.c:52158 : 149850 hits, %0 failures
-UnSign|src.c:52158 : 149850 hits, %0 failures
-UnSign|src.c:52164 : 149850 hits, %0 failures
-ReSign|src.c:67157 : 145009 hits, %0 failures
-ReSign|src.c:67161 : 145009 hits, %0 failures
-ReSign|src.c:67165 : 145009 hits, %0 failures
-UnSign|src.c:67171 : 145009 hits, %0 failures
-ReSign|src.c:67171 : 145009 hits, %0 failures
-ReSign|src.c:67175 : 145009 hits, %0 failures
-ReSign|src.c:67177 : 144999 hits, %0 failures
-ReSign|src.c:52190 : 144727 hits, %0 failures
-ReSign|src.c:48747 : 143902 hits, %0 failures
-UnSign|src.c:56533 : 140047 hits, %0 failures
-ReSign|src.c:56533 : 140047 hits, %0 failures
-UnSign|src.c:56534 : 140047 hits, %0 failures
-UnSign|src.c:64918 : 140027 hits, %0 failures
-ReSign|src.c:64939 : 140027 hits, %0 failures
-ReSign|src.c:64942 : 140027 hits, %0 failures
-ReSign|src.c:64943 : 140027 hits, %0 failures
-ReSign|src.c:64976 : 140027 hits, %0 failures
-ReSign|src.c:65123 : 140027 hits, %0 failures
-ReSign|src.c:65125 : 140027 hits, %0 failures
-ReSign|src.c:65152 : 140027 hits, %0 failures
-UnSign|src.c:64561 : 140018 hits, %0 failures
-UnSign|src.c:64618 : 140018 hits, %0 failures
-UnSign|src.c:64619 : 140018 hits, %0 failures
-ReSign|src.c:64948 : 140009 hits, %0 failures
-ReSign|src.c:65002 : 140009 hits, %0 failures
-ReSign|src.c:65005 : 140009 hits, %0 failures
-ReSign|src.c:65026 : 140009 hits, %0 failures
-UnSign|src.c:65037 : 140009 hits, %0 failures
-ReSign|src.c:65064 : 140009 hits, %0 failures
-ReSign|src.c:18277 : 138436 hits, %0 failures
-UnSign|dlmalloc.c:4621 : 138436 hits, %0 failures
-ReSign|src.c:14774 : 138436 hits, %0 failures
-ReSign|src.c:18293 : 138436 hits, %0 failures
-ReSign|dlmalloc.c:4733 : 138436 hits, %0 failures
-ReSign|dlmalloc.c:4746 : 138436 hits, %0 failures
-ReSign|dlmalloc.c:4749 : 138436 hits, %0 failures
-ReSign|src.c:51636 : 138398 hits, %0 failures
-ReSign|src.c:51647 : 138398 hits, %0 failures
-ReSign|dlmalloc.c:4776 : 138367 hits, %0 failures
-ReSign|dlmalloc.c:4777 : 138367 hits, %0 failures
-ReSign|src.c:51982 : 135702 hits, %0 failures
-UnSign|src.c:51994 : 135702 hits, %0 failures
-ReSign|src.c:51995 : 135702 hits, %0 failures
-ReSign|src.c:52090 : 135700 hits, %0 failures
-ReSign|src.c:52097 : 135700 hits, %0 failures
-ReSign|src.c:21145 : 133506 hits, %0 failures
-ReSign|src.c:18317 : 132681 hits, %0 failures
-ReSign|src.c:18479 : 132681 hits, %0 failures
-ReSign|src.c:54292 : 126028 hits, %0 failures
-ReSign|src.c:20617 : 125321 hits, %0 failures
-ReSign|src.c:21857 : 125288 hits, %0 failures
-ReSign|src.c:21858 : 125283 hits, %0 failures
-ReSign|src.c:18733 : 125219 hits, %0 failures
-ReSign|src.c:18738 : 125203 hits, %0 failures
-ReSign|src.c:58956 : 125170 hits, %0 failures
-UnSign|src.c:58283 : 125125 hits, %0 failures
-ReSign|src.c:58291 : 125125 hits, %0 failures
-ReSign|src.c:58295 : 125125 hits, %0 failures
-ReSign|src.c:58297 : 125125 hits, %0 failures
-ReSign|src.c:86953 : 125124 hits, %0 failures
-ReSign|src.c:56493 : 125113 hits, %0 failures
-UnSign|src.c:56507 : 125113 hits, %0 failures
-ReSign|src.c:56512 : 125113 hits, %0 failures
-UnSign|src.c:56515 : 125113 hits, %0 failures
-ReSign|src.c:56518 : 125113 hits, %0 failures
-ReSign|src.c:71630 : 125101 hits, %0 failures
-ReSign|src.c:104840 : 125090 hits, %0 failures
-UnSign|src.c:18463 : 125057 hits, %0 failures
-UnSign|src.c:51618 : 125009 hits, %0 failures
-ReSign|src.c:51618 : 125009 hits, %0 failures
-UnSign|src.c:51581 : 125009 hits, %0 failures
-ReSign|src.c:82791 : 120000 hits, %0 failures
-ReSign|src.c:82829 : 120000 hits, %0 failures
-UnSign|src.c:53662 : 119285 hits, %0 failures
-UnSign|src.c:53663 : 119285 hits, %0 failures
-UnSign|dlmalloc.c:4684 : 115690 hits, %0 failures
-UnSign|dlmalloc.c:4674 : 113210 hits, %0 failures
-ReSign|dlmalloc.c:4191 : 113166 hits, %0 failures
-ReSign|dlmalloc.c:4192 : 113166 hits, %0 failures
-ReSign|dlmalloc.c:4235 : 113166 hits, %0 failures
-ReSign|src.c:42135 : 110231 hits, %0 failures
-UnSign|src.c:51188 : 110004 hits, %0 failures
-ReSign|src.c:51188 : 110004 hits, %0 failures
-UnSign|dlmalloc.c:4246 : 109879 hits, %0 failures
-ReSign|dlmalloc.c:4801 : 109584 hits, %0 failures
-UnSign|src.c:42246 : 108294 hits, %0 failures
-ReSign|src.c:42107 : 108294 hits, %0 failures
-ReSign|src.c:42111 : 108294 hits, %0 failures
-UnSign|src.c:42124 : 108294 hits, %0 failures
-ReSign|src.c:42124 : 108294 hits, %0 failures
-UnSign|src.c:35034 : 108294 hits, %0 failures
-UnSign|src.c:35036 : 108294 hits, %0 failures
-ReSign|src.c:35036 : 108294 hits, %0 failures
-ReSign|src.c:37580 : 106445 hits, %0 failures
-UnSign|src.c:37580 : 106445 hits, %0 failures
-ReSign|src.c:42208 : 106357 hits, %0 failures
-UnSign|src.c:42194 : 106351 hits, %0 failures
-ReSign|src.c:42194 : 106351 hits, %0 failures
-UnSign|src.c:42195 : 106351 hits, %0 failures
-ReSign|dlmalloc.c:4246 : 104139 hits, %0 failures
-ReSign|dlmalloc.c:4206 : 103611 hits, %0 failures
-UnSign|src.c:48824 : 103034 hits, %0 failures
-UnSign|dlmalloc.c:4240 : 101712 hits, %0 failures
-ReSign|src.c:71649 : 100442 hits, %0 failures
-UnSign|src.c:106971 : 100379 hits, %0 failures
-ReSign|src.c:106971 : 100379 hits, %0 failures
-ReSign|src.c:104882 : 100340 hits, %0 failures
-ReSign|src.c:18652 : 100311 hits, %0 failures
-ReSign|src.c:20763 : 100281 hits, %0 failures
-ReSign|src.c:107408 : 100267 hits, %0 failures
-ReSign|src.c:106967 : 100267 hits, %0 failures
-ReSign|src.c:106968 : 100241 hits, %0 failures
-ReSign|src.c:90137 : 100202 hits, %0 failures
-ReSign|src.c:90138 : 100202 hits, %0 failures
-ReSign|src.c:77634 : 100188 hits, %0 failures
-ReSign|src.c:72331 : 100168 hits, %0 failures
-ReSign|src.c:18786 : 100159 hits, %0 failures
-UnSign|src.c:18781 : 100157 hits, %0 failures
-ReSign|src.c:20724 : 100140 hits, %0 failures
-ReSign|src.c:107498 : 100136 hits, %0 failures
-UnSign|src.c:59190 : 100124 hits, %0 failures
-UnSign|src.c:18668 : 100122 hits, %0 failures
-ReSign|src.c:18668 : 100122 hits, %0 failures
-ReSign|src.c:18669 : 100122 hits, %0 failures
-ReSign|src.c:80463 : 100096 hits, %0 failures
-ReSign|src.c:80487 : 100096 hits, %0 failures
-ReSign|src.c:58302 : 100091 hits, %0 failures
-ReSign|src.c:58305 : 100091 hits, %0 failures
-ReSign|src.c:58326 : 100091 hits, %0 failures
-ReSign|src.c:59709 : 100088 hits, %0 failures
-ReSign|src.c:77464 : 100084 hits, %0 failures
-ReSign|src.c:58329 : 100081 hits, %0 failures
-ReSign|src.c:58334 : 100081 hits, %0 failures
-ReSign|src.c:104806 : 100076 hits, %0 failures
-UnSign|src.c:104711 : 100076 hits, %0 failures
-UnSign|src.c:104817 : 100076 hits, %0 failures
-ReSign|src.c:65778 : 100056 hits, %0 failures
-ReSign|src.c:21059 : 100048 hits, %0 failures
-ReSign|src.c:21062 : 100048 hits, %0 failures
-ReSign|src.c:21065 : 100048 hits, %0 failures
-UnSign|src.c:60171 : 100048 hits, %0 failures
-UnSign|src.c:107322 : 100028 hits, %0 failures
-ReSign|src.c:107322 : 100028 hits, %0 failures
-UnSign|src.c:107332 : 100028 hits, %0 failures
-ReSign|src.c:51067 : 100028 hits, %0 failures
-ReSign|src.c:51068 : 100028 hits, %0 failures
-ReSign|src.c:21132 : 100016 hits, %0 failures
-UnSign|src.c:21146 : 100016 hits, %0 failures
-ReSign|src.c:85724 : 100016 hits, %0 failures
-ReSign|src.c:60432 : 100000 hits, %0 failures
-ReSign|src.c:60450 : 100000 hits, %0 failures
-ReSign|src.c:52811 : 100000 hits, %0 failures
-ReSign|src.c:48830 : 94673 hits, %0 failures
-ReSign|src.c:68079 : 90000 hits, %0 failures
-ReSign|src.c:83531 : 90000 hits, %0 failures
-ReSign|src.c:48715 : 88760 hits, %0 failures
-UnSign|dlmalloc.c:4810 : 88677 hits, %0 failures
-ReSign|dlmalloc.c:4818 : 88552 hits, %0 failures
-ReSign|src.c:52998 : 87999 hits, %0 failures
-ReSign|src.c:53000 : 87999 hits, %0 failures
-UnSign|dlmalloc.c:4227 : 85884 hits, %17 failures
-UnSign|src.c:52092 : 85700 hits, %0 failures
-ReSign|src.c:52103 : 85700 hits, %0 failures
-ReSign|src.c:52107 : 85700 hits, %0 failures
-ReSign|dlmalloc.c:4201 : 85299 hits, %0 failures
-ReSign|src.c:53026 : 81276 hits, %0 failures
-UnSign|src.c:53032 : 81276 hits, %0 failures
-UnSign|src.c:53033 : 81276 hits, %0 failures
-UnSign|src.c:48678 : 81276 hits, %0 failures
-UnSign|src.c:48695 : 81276 hits, %0 failures
-ReSign|src.c:48704 : 81276 hits, %0 failures
-ReSign|src.c:53036 : 81276 hits, %0 failures
-ReSign|src.c:53044 : 81276 hits, %0 failures
-ReSign|src.c:53062 : 81276 hits, %0 failures
-UnSign|dlmalloc.c:4241 : 80536 hits, %0 failures
-UnSign|src.c:53476 : 80360 hits, %0 failures
-UnSign|src.c:48828 : 80070 hits, %0 failures
-UnSign|src.c:48829 : 80070 hits, %0 failures
-ReSign|src.c:82833 : 80000 hits, %0 failures
-ReSign|src.c:82865 : 80000 hits, %0 failures
-ReSign|src.c:82873 : 80000 hits, %0 failures
-ReSign|src.c:69964 : 75350 hits, %0 failures
-UnSign|src.c:69944 : 75292 hits, %0 failures
-ReSign|src.c:69946 : 75292 hits, %0 failures
-ReSign|src.c:107160 : 75282 hits, %0 failures
-ReSign|src.c:69947 : 75258 hits, %0 failures
-UnSign|src.c:69948 : 75258 hits, %0 failures
-ReSign|src.c:69948 : 75258 hits, %0 failures
-ReSign|src.c:69951 : 75258 hits, %0 failures
-ReSign|src.c:107469 : 75242 hits, %0 failures
-ReSign|src.c:59645 : 75162 hits, %0 failures
-ReSign|src.c:57110 : 75146 hits, %0 failures
-ReSign|src.c:71182 : 75118 hits, %0 failures
-ReSign|src.c:71629 : 75109 hits, %0 failures
-ReSign|src.c:71637 : 75109 hits, %0 failures
-ReSign|src.c:71640 : 75109 hits, %0 failures
-UnSign|src.c:71568 : 75109 hits, %0 failures
-ReSign|src.c:71568 : 75109 hits, %0 failures
-ReSign|src.c:71537 : 75109 hits, %0 failures
-UnSign|src.c:70483 : 75109 hits, %0 failures
-ReSign|src.c:70483 : 75109 hits, %0 failures
-UnSign|src.c:70484 : 75109 hits, %0 failures
-UnSign|src.c:70494 : 75109 hits, %0 failures
-UnSign|src.c:71861 : 75109 hits, %0 failures
-ReSign|src.c:71861 : 75109 hits, %0 failures
-UnSign|src.c:71867 : 75109 hits, %0 failures
-ReSign|src.c:71867 : 75109 hits, %0 failures
-UnSign|src.c:71873 : 75109 hits, %0 failures
-ReSign|src.c:71873 : 75109 hits, %0 failures
-UnSign|src.c:107094 : 75104 hits, %0 failures
-ReSign|src.c:71690 : 75101 hits, %0 failures
-ReSign|src.c:71695 : 75101 hits, %0 failures
-ReSign|src.c:71702 : 75101 hits, %0 failures
-ReSign|src.c:71729 : 75101 hits, %0 failures
-UnSign|src.c:56896 : 75097 hits, %0 failures
-ReSign|src.c:56896 : 75097 hits, %0 failures
-UnSign|src.c:56901 : 75097 hits, %0 failures
-ReSign|src.c:56901 : 75097 hits, %0 failures
-UnSign|src.c:56904 : 75097 hits, %0 failures
-ReSign|src.c:71641 : 75091 hits, %0 failures
-ReSign|src.c:20646 : 75090 hits, %0 failures
-ReSign|src.c:57540 : 75090 hits, %0 failures
-ReSign|src.c:77553 : 75090 hits, %0 failures
-ReSign|src.c:90255 : 75090 hits, %0 failures
-ReSign|src.c:90282 : 75090 hits, %0 failures
-ReSign|src.c:73511 : 75086 hits, %0 failures
-ReSign|src.c:73516 : 75086 hits, %0 failures
-UnSign|src.c:73519 : 75086 hits, %1 failures
-ReSign|src.c:77872 : 75084 hits, %0 failures
-ReSign|src.c:77871 : 75072 hits, %0 failures
-ReSign|src.c:80480 : 75072 hits, %0 failures
-ReSign|src.c:51762 : 75072 hits, %0 failures
-UnSign|src.c:56585 : 75072 hits, %0 failures
-ReSign|src.c:56585 : 75072 hits, %0 failures
-ReSign|src.c:71186 : 75071 hits, %0 failures
-UnSign|src.c:71192 : 75071 hits, %0 failures
-ReSign|src.c:71205 : 75071 hits, %0 failures
-ReSign|src.c:71210 : 75071 hits, %0 failures
-ReSign|src.c:72226 : 75066 hits, %0 failures
-ReSign|src.c:90032 : 75066 hits, %0 failures
-ReSign|src.c:71207 : 75064 hits, %0 failures
-UnSign|src.c:70643 : 75059 hits, %0 failures
-ReSign|src.c:60154 : 75054 hits, %0 failures
-ReSign|src.c:60159 : 75054 hits, %0 failures
-ReSign|src.c:60163 : 75054 hits, %0 failures
-UnSign|src.c:60163 : 75054 hits, %0 failures
-ReSign|src.c:57365 : 75047 hits, %0 failures
-UnSign|src.c:57371 : 75047 hits, %0 failures
-ReSign|src.c:57371 : 75047 hits, %0 failures
-UnSign|src.c:57376 : 75047 hits, %0 failures
-ReSign|src.c:57376 : 75047 hits, %0 failures
-UnSign|src.c:57377 : 75047 hits, %0 failures
-ReSign|src.c:57377 : 75047 hits, %0 failures
-ReSign|src.c:51782 : 75036 hits, %0 failures
-UnSign|src.c:105942 : 75035 hits, %0 failures
-ReSign|src.c:58338 : 75035 hits, %0 failures
-UnSign|src.c:57378 : 75032 hits, %0 failures
-UnSign|src.c:57379 : 75032 hits, %0 failures
-ReSign|src.c:57379 : 75032 hits, %0 failures
-UnSign|src.c:74130 : 75028 hits, %1 failures
-UnSign|src.c:86209 : 75026 hits, %0 failures
-ReSign|src.c:86210 : 75026 hits, %0 failures
-UnSign|src.c:51735 : 75026 hits, %0 failures
-ReSign|src.c:51735 : 75026 hits, %0 failures
-UnSign|src.c:51782 : 75026 hits, %0 failures
-UnSign|src.c:51789 : 75026 hits, %0 failures
-ReSign|src.c:51789 : 75026 hits, %0 failures
-ReSign|src.c:85710 : 75016 hits, %0 failures
-ReSign|src.c:85975 : 75016 hits, %0 failures
-ReSign|src.c:85976 : 75016 hits, %0 failures
-ReSign|src.c:85990 : 75016 hits, %0 failures
-ReSign|src.c:85992 : 75016 hits, %0 failures
-UnSign|src.c:54219 : 75008 hits, %0 failures
-ReSign|src.c:54219 : 75008 hits, %0 failures
-ReSign|src.c:54238 : 75008 hits, %0 failures
-ReSign|src.c:54254 : 75008 hits, %0 failures
-ReSign|src.c:54255 : 75008 hits, %0 failures
-ReSign|src.c:48184 : 75008 hits, %0 failures
-ReSign|src.c:48193 : 75008 hits, %0 failures
-ReSign|src.c:54257 : 75008 hits, %0 failures
-ReSign|src.c:54261 : 75008 hits, %0 failures
-ReSign|src.c:49527 : 75008 hits, %0 failures
-ReSign|src.c:54271 : 75008 hits, %0 failures
-ReSign|src.c:52790 : 75008 hits, %0 failures
-ReSign|src.c:52793 : 75008 hits, %0 failures
-ReSign|src.c:52806 : 75008 hits, %0 failures
-UnSign|src.c:52818 : 75008 hits, %0 failures
-UnSign|src.c:52819 : 75008 hits, %0 failures
-UnSign|src.c:52821 : 75008 hits, %0 failures
-ReSign|src.c:54273 : 75008 hits, %0 failures
-ReSign|src.c:54276 : 75008 hits, %0 failures
-UnSign|src.c:54276 : 75008 hits, %0 failures
-ReSign|src.c:54277 : 75008 hits, %0 failures
-UnSign|src.c:54323 : 75008 hits, %0 failures
-UnSign|src.c:65256 : 75006 hits, %0 failures
-ReSign|src.c:65302 : 75006 hits, %0 failures
-ReSign|src.c:65322 : 75006 hits, %0 failures
-ReSign|src.c:52824 : 75006 hits, %0 failures
-ReSign|src.c:52889 : 75006 hits, %0 failures
-ReSign|src.c:52901 : 75006 hits, %0 failures
-ReSign|src.c:51960 : 75006 hits, %0 failures
-UnSign|src.c:67177 : 75001 hits, %0 failures
-UnSign|src.c:48525 : 73841 hits, %0 failures
-UnSign|dlmalloc.c:4799 : 73506 hits, %0 failures
-ReSign|dlmalloc.c:4194 : 70273 hits, %0 failures
-ReSign|src.c:64561 : 70009 hits, %0 failures
-UnSign|src.c:64586 : 70009 hits, %0 failures
-ReSign|src.c:64587 : 70009 hits, %0 failures
-ReSign|src.c:64590 : 70009 hits, %0 failures
-UnSign|src.c:64594 : 70009 hits, %0 failures
-ReSign|src.c:64594 : 70009 hits, %0 failures
-UnSign|src.c:64595 : 70009 hits, %0 failures
-ReSign|src.c:64595 : 70009 hits, %0 failures
-UnSign|src.c:64598 : 70009 hits, %0 failures
-UnSign|src.c:64607 : 70009 hits, %0 failures
-ReSign|src.c:64607 : 70009 hits, %0 failures
-ReSign|src.c:64613 : 70009 hits, %0 failures
-ReSign|src.c:48442 : 70002 hits, %0 failures
-ReSign|src.c:82789 : 70000 hits, %0 failures
-UnSign|src.c:82790 : 70000 hits, %0 failures
-UnSign|dlmalloc.c:4220 : 69355 hits, %0 failures
-UnSign|src.c:52938 : 68892 hits, %0 failures
-ReSign|src.c:48717 : 67236 hits, %0 failures
-ReSign|dlmalloc.c:4208 : 66565 hits, %0 failures
-UnSign|dlmalloc.c:4704 : 65468 hits, %0 failures
-ReSign|src.c:53744 : 61694 hits, %0 failures
-UnSign|src.c:21223 : 60318 hits, %0 failures
-ReSign|src.c:21225 : 60318 hits, %0 failures
-ReSign|src.c:57330 : 60006 hits, %0 failures
-UnSign|src.c:60149 : 60000 hits, %0 failures
-UnSign|src.c:82791 : 60000 hits, %0 failures
-ReSign|src.c:48824 : 51517 hits, %0 failures
-UnSign|src.c:54292 : 51022 hits, %0 failures
-ReSign|src.c:54294 : 51016 hits, %0 failures
-UnSign|src.c:54294 : 51016 hits, %0 failures
-UnSign|dlmalloc.c:4641 : 50388 hits, %0 failures
-ReSign|src.c:20713 : 50165 hits, %0 failures
-ReSign|src.c:20715 : 50149 hits, %0 failures
-ReSign|src.c:56495 : 50142 hits, %0 failures
-ReSign|src.c:77942 : 50140 hits, %0 failures
-ReSign|src.c:77636 : 50136 hits, %0 failures
-ReSign|src.c:57812 : 50134 hits, %0 failures
-ReSign|src.c:21849 : 50112 hits, %0 failures
-ReSign|src.c:59750 : 50107 hits, %0 failures
-UnSign|src.c:77312 : 50106 hits, %0 failures
-ReSign|src.c:77312 : 50106 hits, %0 failures
-ReSign|src.c:90136 : 50099 hits, %0 failures
-ReSign|src.c:21911 : 50096 hits, %0 failures
-ReSign|src.c:21917 : 50096 hits, %0 failures
-ReSign|src.c:77635 : 50082 hits, %0 failures
-ReSign|src.c:59192 : 50072 hits, %0 failures
-ReSign|src.c:107279 : 50070 hits, %0 failures
-ReSign|src.c:47516 : 50068 hits, %0 failures
-ReSign|src.c:107525 : 50068 hits, %0 failures
-UnSign|src.c:59068 : 50064 hits, %0 failures
-ReSign|src.c:107515 : 50064 hits, %0 failures
-ReSign|src.c:90589 : 50064 hits, %0 failures
-ReSign|src.c:90200 : 50060 hits, %0 failures
-ReSign|src.c:59105 : 50060 hits, %0 failures
-ReSign|src.c:60007 : 50060 hits, %0 failures
-ReSign|src.c:77430 : 50060 hits, %0 failures
-ReSign|src.c:58109 : 50060 hits, %0 failures
-ReSign|src.c:61194 : 50057 hits, %0 failures
-ReSign|src.c:61234 : 50057 hits, %0 failures
-ReSign|src.c:77639 : 50056 hits, %0 failures
-ReSign|src.c:58633 : 50054 hits, %0 failures
-ReSign|src.c:21579 : 50052 hits, %0 failures
-ReSign|src.c:21584 : 50052 hits, %0 failures
-ReSign|src.c:59963 : 50052 hits, %0 failures
-ReSign|src.c:59688 : 50052 hits, %0 failures
-ReSign|src.c:59180 : 50052 hits, %0 failures
-ReSign|src.c:59188 : 50052 hits, %0 failures
-ReSign|src.c:59198 : 50052 hits, %0 failures
-ReSign|src.c:59201 : 50052 hits, %0 failures
-ReSign|src.c:59692 : 50052 hits, %0 failures
-ReSign|src.c:65906 : 50052 hits, %0 failures
-ReSign|src.c:65935 : 50052 hits, %0 failures
-ReSign|src.c:63711 : 50050 hits, %0 failures
-ReSign|src.c:90020 : 50048 hits, %0 failures
-ReSign|src.c:80483 : 50048 hits, %0 failures
-UnSign|src.c:51762 : 50048 hits, %0 failures
-UnSign|src.c:90020 : 50044 hits, %0 failures
-ReSign|src.c:50178 : 50044 hits, %0 failures
-ReSign|src.c:80549 : 50044 hits, %0 failures
-ReSign|src.c:93606 : 50044 hits, %0 failures
-ReSign|src.c:63522 : 50044 hits, %0 failures
-ReSign|src.c:65910 : 50044 hits, %0 failures
-ReSign|src.c:61134 : 50044 hits, %0 failures
-ReSign|src.c:61136 : 50044 hits, %0 failures
-UnSign|src.c:86994 : 50044 hits, %0 failures
-ReSign|src.c:90042 : 50044 hits, %0 failures
-ReSign|src.c:18704 : 50042 hits, %0 failures
-ReSign|src.c:77514 : 50040 hits, %0 failures
-ReSign|src.c:77527 : 50040 hits, %0 failures
-ReSign|src.c:63604 : 50040 hits, %0 failures
-ReSign|src.c:50991 : 50036 hits, %0 failures
-ReSign|src.c:80408 : 50028 hits, %0 failures
-ReSign|src.c:65647 : 50026 hits, %0 failures
-UnSign|src.c:62442 : 50025 hits, %0 failures
-ReSign|src.c:62443 : 50025 hits, %0 failures
-ReSign|src.c:62446 : 50025 hits, %0 failures
-ReSign|src.c:21076 : 50024 hits, %0 failures
-ReSign|src.c:21080 : 50024 hits, %0 failures
-ReSign|src.c:21083 : 50024 hits, %0 failures
-UnSign|src.c:65883 : 50020 hits, %50 failures
-ReSign|src.c:65883 : 50020 hits, %0 failures
-ReSign|src.c:48000 : 50016 hits, %0 failures
-ReSign|src.c:66790 : 50016 hits, %0 failures
-ReSign|src.c:51956 : 50016 hits, %0 failures
-ReSign|src.c:56690 : 50016 hits, %0 failures
-UnSign|src.c:107317 : 50014 hits, %0 failures
-ReSign|src.c:107317 : 50014 hits, %0 failures
-ReSign|src.c:107332 : 50014 hits, %0 failures
-ReSign|src.c:95210 : 50012 hits, %0 failures
-ReSign|src.c:81648 : 50012 hits, %0 failures
-ReSign|src.c:42912 : 50012 hits, %0 failures
-ReSign|src.c:62449 : 50010 hits, %0 failures
-ReSign|src.c:62452 : 50010 hits, %0 failures
-ReSign|src.c:71631 : 50010 hits, %0 failures
-UnSign|src.c:71642 : 50010 hits, %0 failures
-UnSign|src.c:73192 : 50010 hits, %0 failures
-ReSign|src.c:73192 : 50010 hits, %0 failures
-ReSign|src.c:73195 : 50010 hits, %0 failures
-ReSign|src.c:51967 : 50008 hits, %0 failures
-UnSign|src.c:51973 : 50008 hits, %0 failures
-ReSign|src.c:51973 : 50008 hits, %0 failures
-ReSign|src.c:85516 : 50008 hits, %0 failures
-ReSign|src.c:85575 : 50008 hits, %0 failures
-ReSign|src.c:85587 : 50008 hits, %0 failures
-ReSign|src.c:85777 : 50008 hits, %0 failures
-ReSign|src.c:86542 : 50008 hits, %0 failures
-ReSign|src.c:85798 : 50008 hits, %0 failures
-ReSign|src.c:86048 : 50008 hits, %0 failures
-ReSign|src.c:86061 : 50006 hits, %0 failures
-UnSign|src.c:64832 : 50002 hits, %0 failures
-ReSign|src.c:64832 : 50002 hits, %0 failures
-ReSign|src.c:66984 : 50002 hits, %0 failures
-ReSign|src.c:66987 : 50002 hits, %0 failures
-ReSign|src.c:66990 : 50002 hits, %0 failures
-ReSign|src.c:67000 : 50002 hits, %0 failures
-ReSign|src.c:67001 : 50002 hits, %0 failures
-UnSign|src.c:64152 : 50000 hits, %0 failures
-ReSign|src.c:64152 : 50000 hits, %0 failures
-ReSign|src.c:64158 : 50000 hits, %50 failures
-ReSign|src.c:57558 : 50000 hits, %0 failures
-ReSign|src.c:82923 : 50000 hits, %0 failures
-ReSign|src.c:82942 : 50000 hits, %0 failures
-ReSign|src.c:82799 : 50000 hits, %0 failures
-ReSign|src.c:82804 : 50000 hits, %0 failures
-ReSign|src.c:67212 : 50000 hits, %0 failures
-UnSign|src.c:67214 : 50000 hits, %0 failures
-ReSign|src.c:67214 : 50000 hits, %0 failures
-ReSign|src.c:67215 : 50000 hits, %0 failures
-UnSign|src.c:67218 : 50000 hits, %0 failures
-ReSign|src.c:67218 : 50000 hits, %0 failures
-UnSign|src.c:60431 : 50000 hits, %0 failures
-UnSign|src.c:60441 : 50000 hits, %0 failures
-ReSign|src.c:60444 : 50000 hits, %0 failures
-ReSign|src.c:48188 : 50000 hits, %0 failures
-UnSign|src.c:60483 : 50000 hits, %0 failures
-ReSign|src.c:60483 : 50000 hits, %0 failures
-ReSign|dlmalloc.c:4782 : 49320 hits, %0 failures
-UnSign|dlmalloc.c:4786 : 49320 hits, %0 failures
-ReSign|src.c:53692 : 47066 hits, %0 failures
-ReSign|src.c:53772 : 47066 hits, %0 failures
-ReSign|src.c:53985 : 47066 hits, %0 failures
-UnSign|src.c:51834 : 46608 hits, %0 failures
-ReSign|src.c:51835 : 46608 hits, %0 failures
-ReSign|dlmalloc.c:4217 : 46500 hits, %0 failures
-ReSign|src.c:53547 : 45980 hits, %0 failures
-ReSign|src.c:53982 : 45980 hits, %0 failures
-ReSign|src.c:53578 : 45950 hits, %0 failures
-ReSign|src.c:48807 : 45544 hits, %0 failures
-UnSign|src.c:61387 : 45005 hits, %0 failures
-ReSign|src.c:61387 : 45005 hits, %0 failures
-UnSign|src.c:68074 : 45000 hits, %0 failures
-UnSign|src.c:68096 : 45000 hits, %0 failures
-ReSign|src.c:68096 : 45000 hits, %0 failures
-ReSign|src.c:68103 : 45000 hits, %0 failures
-ReSign|src.c:82812 : 45000 hits, %0 failures
-ReSign|src.c:82813 : 45000 hits, %0 failures
-ReSign|src.c:82814 : 45000 hits, %0 failures
-UnSign|src.c:82814 : 45000 hits, %0 failures
-ReSign|src.c:82815 : 45000 hits, %0 failures
-UnSign|src.c:82815 : 45000 hits, %0 failures
-ReSign|src.c:82825 : 45000 hits, %0 failures
-ReSign|dlmalloc.c:4763 : 44824 hits, %0 failures
-ReSign|dlmalloc.c:4231 : 42942 hits, %0 failures
-ReSign|src.c:60718 : 40004 hits, %0 failures
-UnSign|src.c:82829 : 40000 hits, %0 failures
-UnSign|src.c:82833 : 40000 hits, %0 failures
-ReSign|src.c:82869 : 40000 hits, %0 failures
-ReSign|src.c:82870 : 40000 hits, %0 failures
-UnSign|src.c:82870 : 40000 hits, %0 failures
-ReSign|src.c:82871 : 40000 hits, %0 failures
-UnSign|src.c:82871 : 40000 hits, %0 failures
-UnSign|src.c:48846 : 38640 hits, %0 failures
-ReSign|src.c:48846 : 38640 hits, %0 failures
-UnSign|src.c:53745 : 37648 hits, %0 failures
-UnSign|src.c:49031 : 37516 hits, %0 failures
-UnSign|src.c:48807 : 35662 hits, %0 failures
-ReSign|src.c:53694 : 35556 hits, %0 failures
-ReSign|src.c:53741 : 35556 hits, %0 failures
-ReSign|src.c:53787 : 35556 hits, %0 failures
-UnSign|src.c:51810 : 35399 hits, %0 failures
-ReSign|src.c:48525 : 35191 hits, %0 failures
-UnSign|src.c:51609 : 35002 hits, %0 failures
-ReSign|src.c:51609 : 35002 hits, %0 failures
-UnSign|src.c:51583 : 35002 hits, %0 failures
-UnSign|src.c:53458 : 34993 hits, %0 failures
-UnSign|src.c:53467 : 34470 hits, %0 failures
-UnSign|src.c:53559 : 34470 hits, %0 failures
-UnSign|src.c:48720 : 33618 hits, %0 failures
-ReSign|src.c:48721 : 33618 hits, %0 failures
-ReSign|src.c:51808 : 30375 hits, %0 failures
-ReSign|src.c:82797 : 30000 hits, %0 failures
-UnSign|src.c:35525 : 29128 hits, %0 failures
-UnSign|src.c:52093 : 26170 hits, %0 failures
-UnSign|dlmalloc.c:4624 : 25226 hits, %0 failures
-UnSign|dlmalloc.c:4626 : 25226 hits, %0 failures
-ReSign|dlmalloc.c:4628 : 25226 hits, %0 failures
-UnSign|dlmalloc.c:4687 : 25111 hits, %0 failures
-ReSign|src.c:57818 : 25067 hits, %0 failures
-ReSign|src.c:57833 : 25067 hits, %0 failures
-UnSign|src.c:59750 : 25064 hits, %0 failures
-ReSign|src.c:49970 : 25062 hits, %0 failures
-ReSign|src.c:47763 : 25047 hits, %0 failures
-ReSign|src.c:61484 : 25044 hits, %0 failures
-UnSign|src.c:61484 : 25044 hits, %0 failures
-ReSign|src.c:60853 : 25043 hits, %0 failures
-ReSign|src.c:50070 : 25043 hits, %0 failures
-UnSign|src.c:49970 : 25043 hits, %0 failures
-ReSign|src.c:77316 : 25042 hits, %0 failures
-UnSign|src.c:50070 : 25041 hits, %0 failures
-ReSign|src.c:58131 : 25041 hits, %0 failures
-ReSign|src.c:80842 : 25040 hits, %0 failures
-ReSign|src.c:80844 : 25040 hits, %0 failures
-ReSign|src.c:80849 : 25040 hits, %0 failures
-ReSign|src.c:90057 : 25038 hits, %0 failures
-ReSign|src.c:90060 : 25038 hits, %0 failures
-ReSign|src.c:59100 : 25038 hits, %0 failures
-ReSign|src.c:50994 : 25038 hits, %0 failures
-ReSign|src.c:68358 : 25036 hits, %0 failures
-UnSign|src.c:62570 : 25036 hits, %0 failures
-ReSign|src.c:62570 : 25036 hits, %0 failures
-UnSign|src.c:62573 : 25036 hits, %0 failures
-ReSign|src.c:72237 : 25035 hits, %0 failures
-UnSign|src.c:72241 : 25035 hits, %0 failures
-UnSign|src.c:107273 : 25035 hits, %0 failures
-UnSign|src.c:107279 : 25035 hits, %0 failures
-ReSign|src.c:107286 : 25035 hits, %0 failures
-ReSign|src.c:60861 : 25035 hits, %0 failures
-ReSign|src.c:61295 : 25035 hits, %0 failures
-ReSign|src.c:61159 : 25035 hits, %0 failures
-ReSign|src.c:61189 : 25035 hits, %0 failures
-ReSign|src.c:61199 : 25035 hits, %0 failures
-ReSign|src.c:61221 : 25035 hits, %0 failures
-ReSign|src.c:63348 : 25035 hits, %0 failures
-ReSign|src.c:63358 : 25035 hits, %0 failures
-ReSign|src.c:63361 : 25035 hits, %0 failures
-UnSign|src.c:63361 : 25035 hits, %0 failures
-ReSign|src.c:61241 : 25035 hits, %0 failures
-ReSign|src.c:61250 : 25035 hits, %0 failures
-UnSign|src.c:61265 : 25035 hits, %0 failures
-ReSign|src.c:61265 : 25035 hits, %0 failures
-ReSign|src.c:61300 : 25035 hits, %0 failures
-ReSign|src.c:61306 : 25035 hits, %0 failures
-ReSign|src.c:86988 : 25035 hits, %0 failures
-UnSign|src.c:74947 : 25035 hits, %0 failures
-ReSign|src.c:74947 : 25035 hits, %0 failures
-ReSign|src.c:97494 : 25034 hits, %0 failures
-ReSign|src.c:107439 : 25034 hits, %0 failures
-ReSign|src.c:104686 : 25034 hits, %0 failures
-ReSign|src.c:107447 : 25034 hits, %0 failures
-ReSign|src.c:107457 : 25034 hits, %0 failures
-ReSign|src.c:77490 : 25034 hits, %0 failures
-ReSign|src.c:77491 : 25034 hits, %0 failures
-ReSign|src.c:59068 : 25034 hits, %0 failures
-ReSign|src.c:59095 : 25034 hits, %0 failures
-ReSign|src.c:104839 : 25034 hits, %0 failures
-ReSign|src.c:107512 : 25034 hits, %0 failures
-ReSign|src.c:107519 : 25034 hits, %0 failures
-UnSign|src.c:107530 : 25034 hits, %0 failures
-ReSign|src.c:107530 : 25034 hits, %0 failures
-ReSign|src.c:107540 : 25034 hits, %0 failures
-ReSign|src.c:95614 : 25034 hits, %0 failures
-ReSign|src.c:107549 : 25034 hits, %0 failures
-ReSign|src.c:107552 : 25034 hits, %0 failures
-ReSign|src.c:107557 : 25034 hits, %0 failures
-ReSign|src.c:107562 : 25034 hits, %0 failures
-ReSign|src.c:72228 : 25031 hits, %0 failures
-ReSign|src.c:90322 : 25030 hits, %0 failures
-ReSign|src.c:90166 : 25030 hits, %0 failures
-ReSign|src.c:90203 : 25030 hits, %0 failures
-ReSign|src.c:90216 : 25030 hits, %0 failures
-ReSign|src.c:77492 : 25030 hits, %0 failures
-ReSign|src.c:57605 : 25030 hits, %0 failures
-ReSign|src.c:57607 : 25030 hits, %0 failures
-ReSign|src.c:91878 : 25030 hits, %0 failures
-ReSign|src.c:57680 : 25030 hits, %0 failures
-ReSign|src.c:57682 : 25030 hits, %0 failures
-UnSign|src.c:57683 : 25030 hits, %0 failures
-ReSign|src.c:57686 : 25030 hits, %0 failures
-ReSign|src.c:57713 : 25030 hits, %0 failures
-ReSign|src.c:77500 : 25030 hits, %0 failures
-ReSign|src.c:77509 : 25030 hits, %0 failures
-ReSign|src.c:77561 : 25030 hits, %0 failures
-UnSign|src.c:59069 : 25030 hits, %0 failures
-ReSign|src.c:59069 : 25030 hits, %0 failures
-ReSign|src.c:59103 : 25030 hits, %0 failures
-ReSign|src.c:59110 : 25030 hits, %0 failures
-ReSign|src.c:59112 : 25030 hits, %0 failures
-ReSign|src.c:59115 : 25030 hits, %0 failures
-ReSign|src.c:90239 : 25030 hits, %0 failures
-ReSign|src.c:90242 : 25030 hits, %0 failures
-ReSign|src.c:90243 : 25030 hits, %0 failures
-ReSign|src.c:90246 : 25030 hits, %0 failures
-ReSign|src.c:90249 : 25030 hits, %0 failures
-UnSign|src.c:90255 : 25030 hits, %0 failures
-UnSign|src.c:90278 : 25030 hits, %0 failures
-ReSign|src.c:90278 : 25030 hits, %0 failures
-UnSign|src.c:90282 : 25030 hits, %0 failures
-ReSign|src.c:90289 : 25030 hits, %0 failures
-ReSign|src.c:90297 : 25030 hits, %0 failures
-ReSign|src.c:90328 : 25030 hits, %0 failures
-ReSign|src.c:59698 : 25030 hits, %0 failures
-ReSign|src.c:59840 : 25030 hits, %0 failures
-ReSign|src.c:59849 : 25030 hits, %0 failures
-ReSign|src.c:59857 : 25030 hits, %0 failures
-ReSign|src.c:59862 : 25030 hits, %0 failures
-ReSign|src.c:59900 : 25030 hits, %0 failures
-ReSign|src.c:60022 : 25030 hits, %0 failures
-ReSign|src.c:60024 : 25030 hits, %0 failures
-ReSign|src.c:60030 : 25030 hits, %0 failures
-ReSign|src.c:60000 : 25030 hits, %0 failures
-UnSign|src.c:60001 : 25030 hits, %0 failures
-ReSign|src.c:60002 : 25030 hits, %0 failures
-ReSign|src.c:58214 : 25030 hits, %0 failures
-UnSign|src.c:77872 : 25030 hits, %0 failures
-ReSign|src.c:58536 : 25030 hits, %0 failures
-ReSign|src.c:59132 : 25028 hits, %0 failures
-ReSign|src.c:77664 : 25026 hits, %0 failures
-ReSign|src.c:77669 : 25026 hits, %0 failures
-ReSign|src.c:77424 : 25026 hits, %0 failures
-ReSign|src.c:80858 : 25026 hits, %0 failures
-ReSign|src.c:65866 : 25026 hits, %0 failures
-UnSign|src.c:65880 : 25026 hits, %0 failures
-ReSign|src.c:65880 : 25026 hits, %0 failures
-ReSign|src.c:65889 : 25026 hits, %0 failures
-ReSign|src.c:62492 : 25026 hits, %0 failures
-ReSign|src.c:62498 : 25026 hits, %0 failures
-ReSign|src.c:62502 : 25026 hits, %0 failures
-ReSign|src.c:62507 : 25026 hits, %0 failures
-ReSign|src.c:62510 : 25026 hits, %0 failures
-ReSign|src.c:65915 : 25026 hits, %0 failures
-ReSign|src.c:65926 : 25026 hits, %0 failures
-UnSign|src.c:65935 : 25026 hits, %0 failures
-ReSign|src.c:65936 : 25026 hits, %0 failures
-UnSign|src.c:65936 : 25026 hits, %0 failures
-ReSign|src.c:59135 : 25026 hits, %0 failures
-ReSign|src.c:59139 : 25026 hits, %0 failures
-ReSign|src.c:59143 : 25026 hits, %0 failures
-ReSign|src.c:71652 : 25025 hits, %0 failures
-UnSign|src.c:63694 : 25025 hits, %0 failures
-ReSign|src.c:63694 : 25025 hits, %0 failures
-ReSign|src.c:80538 : 25024 hits, %0 failures
-ReSign|src.c:80540 : 25024 hits, %0 failures
-ReSign|src.c:80543 : 25024 hits, %0 failures
-ReSign|src.c:80544 : 25024 hits, %0 failures
-ReSign|src.c:80548 : 25024 hits, %0 failures
-ReSign|src.c:80552 : 25024 hits, %0 failures
-ReSign|src.c:80586 : 25024 hits, %0 failures
-ReSign|src.c:51007 : 25024 hits, %0 failures
-ReSign|src.c:51751 : 25024 hits, %0 failures
-ReSign|src.c:51089 : 25024 hits, %0 failures
-ReSign|src.c:51094 : 25024 hits, %0 failures
-ReSign|src.c:51099 : 25024 hits, %0 failures
-ReSign|src.c:86924 : 25022 hits, %0 failures
-ReSign|src.c:86925 : 25022 hits, %0 failures
-ReSign|src.c:90014 : 25022 hits, %0 failures
-UnSign|src.c:90014 : 25022 hits, %0 failures
-ReSign|src.c:77441 : 25022 hits, %0 failures
-UnSign|src.c:77467 : 25022 hits, %0 failures
-ReSign|src.c:86936 : 25022 hits, %0 failures
-ReSign|src.c:86939 : 25022 hits, %0 failures
-UnSign|src.c:61194 : 25022 hits, %0 failures
-ReSign|src.c:61204 : 25022 hits, %0 failures
-ReSign|src.c:61211 : 25022 hits, %0 failures
-UnSign|src.c:61217 : 25022 hits, %0 failures
-ReSign|src.c:61217 : 25022 hits, %0 failures
-ReSign|src.c:68793 : 25022 hits, %0 failures
-UnSign|src.c:68358 : 25022 hits, %0 failures
-ReSign|src.c:55592 : 25022 hits, %0 failures
-ReSign|src.c:68364 : 25022 hits, %0 failures
-UnSign|src.c:59709 : 25022 hits, %0 failures
-ReSign|src.c:59711 : 25022 hits, %0 failures
-ReSign|src.c:59740 : 25022 hits, %0 failures
-ReSign|src.c:59802 : 25022 hits, %0 failures
-ReSign|src.c:59820 : 25022 hits, %0 failures
-ReSign|src.c:59830 : 25022 hits, %0 failures
-ReSign|src.c:59842 : 25022 hits, %0 failures
-ReSign|src.c:46509 : 25022 hits, %0 failures
-ReSign|src.c:61244 : 25022 hits, %0 failures
-ReSign|src.c:59901 : 25022 hits, %0 failures
-ReSign|src.c:59908 : 25022 hits, %0 failures
-ReSign|src.c:59913 : 25022 hits, %0 failures
-ReSign|src.c:86991 : 25022 hits, %0 failures
-ReSign|src.c:86994 : 25022 hits, %0 failures
-ReSign|src.c:87005 : 25022 hits, %0 failures
-ReSign|src.c:87009 : 25022 hits, %0 failures
-ReSign|src.c:87018 : 25022 hits, %0 failures
-UnSign|src.c:90032 : 25022 hits, %0 failures
-UnSign|src.c:57816 : 25020 hits, %0 failures
-ReSign|src.c:80846 : 25020 hits, %0 failures
-ReSign|src.c:80861 : 25020 hits, %0 failures
-ReSign|src.c:77516 : 25020 hits, %0 failures
-UnSign|src.c:77516 : 25020 hits, %0 failures
-UnSign|src.c:77517 : 25020 hits, %0 failures
-ReSign|src.c:77517 : 25020 hits, %0 failures
-ReSign|src.c:85272 : 25020 hits, %0 failures
-ReSign|src.c:65636 : 25020 hits, %0 failures
-ReSign|src.c:65638 : 25020 hits, %0 failures
-ReSign|src.c:65643 : 25020 hits, %0 failures
-ReSign|src.c:63628 : 25020 hits, %0 failures
-ReSign|src.c:63633 : 25020 hits, %0 failures
-ReSign|src.c:63639 : 25020 hits, %0 failures
-ReSign|src.c:63644 : 25020 hits, %0 failures
-UnSign|src.c:60377 : 25019 hits, %0 failures
-ReSign|src.c:60381 : 25019 hits, %0 failures
-ReSign|src.c:56536 : 25019 hits, %0 failures
-UnSign|src.c:56541 : 25019 hits, %0 failures
-UnSign|src.c:85063 : 25018 hits, %0 failures
-ReSign|src.c:85063 : 25018 hits, %0 failures
-ReSign|src.c:85066 : 25018 hits, %0 failures
-UnSign|src.c:60274 : 25018 hits, %0 failures
-UnSign|src.c:60280 : 25018 hits, %0 failures
-ReSign|src.c:60280 : 25018 hits, %0 failures
-ReSign|src.c:59587 : 25018 hits, %0 failures
-ReSign|src.c:57622 : 25016 hits, %0 failures
-ReSign|src.c:81638 : 25014 hits, %0 failures
-ReSign|src.c:65772 : 25014 hits, %0 failures
-ReSign|src.c:80897 : 25010 hits, %0 failures
-UnSign|src.c:80900 : 25010 hits, %0 failures
-UnSign|src.c:81638 : 25010 hits, %0 failures
-UnSign|src.c:50991 : 25010 hits, %0 failures
-ReSign|src.c:64600 : 25009 hits, %0 failures
-UnSign|src.c:64600 : 25009 hits, %0 failures
-ReSign|src.c:81612 : 25008 hits, %0 failures
-ReSign|src.c:81615 : 25008 hits, %0 failures
-UnSign|src.c:66755 : 25008 hits, %0 failures
-ReSign|src.c:66755 : 25008 hits, %0 failures
-UnSign|src.c:66766 : 25008 hits, %0 failures
-ReSign|src.c:66766 : 25008 hits, %0 failures
-UnSign|src.c:66767 : 25008 hits, %0 failures
-ReSign|src.c:66767 : 25008 hits, %0 failures
-UnSign|src.c:66768 : 25008 hits, %0 failures
-ReSign|src.c:66768 : 25008 hits, %0 failures
-UnSign|src.c:66774 : 25008 hits, %0 failures
-ReSign|src.c:66774 : 25008 hits, %0 failures
-UnSign|src.c:66775 : 25008 hits, %0 failures
-ReSign|src.c:66775 : 25008 hits, %0 failures
-UnSign|src.c:66781 : 25008 hits, %0 failures
-UnSign|src.c:48001 : 25008 hits, %0 failures
-ReSign|src.c:48001 : 25008 hits, %0 failures
-UnSign|src.c:56686 : 25008 hits, %0 failures
-ReSign|src.c:56686 : 25008 hits, %0 failures
-UnSign|src.c:56690 : 25008 hits, %0 failures
-UnSign|src.c:56694 : 25008 hits, %0 failures
-ReSign|src.c:56694 : 25008 hits, %0 failures
-UnSign|src.c:56696 : 25008 hits, %0 failures
-ReSign|src.c:56696 : 25008 hits, %0 failures
-ReSign|src.c:95796 : 25006 hits, %0 failures
-ReSign|src.c:95206 : 25006 hits, %0 failures
-ReSign|src.c:95213 : 25006 hits, %0 failures
-ReSign|src.c:95224 : 25006 hits, %0 failures
-ReSign|src.c:95800 : 25006 hits, %0 failures
-ReSign|src.c:95805 : 25006 hits, %0 failures
-ReSign|src.c:95808 : 25006 hits, %0 failures
-UnSign|src.c:97840 : 25006 hits, %0 failures
-ReSign|src.c:97840 : 25006 hits, %0 failures
-ReSign|src.c:79111 : 25006 hits, %0 failures
-UnSign|src.c:79114 : 25006 hits, %0 failures
-ReSign|src.c:79114 : 25006 hits, %0 failures
-ReSign|src.c:79121 : 25006 hits, %0 failures
-UnSign|src.c:81637 : 25006 hits, %0 failures
-ReSign|src.c:81637 : 25006 hits, %0 failures
-ReSign|src.c:86195 : 25006 hits, %0 failures
-ReSign|src.c:86251 : 25006 hits, %0 failures
-ReSign|src.c:86270 : 25006 hits, %0 failures
-ReSign|src.c:86349 : 25006 hits, %0 failures
-ReSign|src.c:86445 : 25006 hits, %0 failures
-ReSign|src.c:86480 : 25006 hits, %0 failures
-ReSign|src.c:86481 : 25006 hits, %0 failures
-ReSign|src.c:85142 : 25006 hits, %0 failures
-ReSign|src.c:86493 : 25006 hits, %0 failures
-ReSign|src.c:86499 : 25006 hits, %0 failures
-ReSign|src.c:86502 : 25006 hits, %0 failures
-ReSign|src.c:86506 : 25006 hits, %0 failures
-UnSign|src.c:65647 : 25006 hits, %0 failures
-ReSign|src.c:66565 : 25006 hits, %0 failures
-ReSign|src.c:66593 : 25006 hits, %0 failures
-ReSign|src.c:66595 : 25006 hits, %0 failures
-UnSign|src.c:51880 : 25006 hits, %0 failures
-ReSign|src.c:51880 : 25006 hits, %0 failures
-ReSign|src.c:51895 : 25006 hits, %0 failures
-UnSign|src.c:51896 : 25006 hits, %0 failures
-ReSign|src.c:51896 : 25006 hits, %0 failures
-ReSign|src.c:66597 : 25006 hits, %0 failures
-ReSign|src.c:66600 : 25006 hits, %0 failures
-ReSign|src.c:66615 : 25006 hits, %0 failures
-ReSign|src.c:66645 : 25006 hits, %0 failures
-ReSign|src.c:66647 : 25006 hits, %0 failures
-ReSign|src.c:59783 : 25005 hits, %0 failures
-ReSign|src.c:59784 : 25005 hits, %0 failures
-ReSign|src.c:59804 : 25005 hits, %0 failures
-UnSign|src.c:56985 : 25005 hits, %0 failures
-ReSign|src.c:56985 : 25005 hits, %0 failures
-UnSign|src.c:105905 : 25004 hits, %0 failures
-UnSign|src.c:85516 : 25004 hits, %0 failures
-ReSign|src.c:85524 : 25004 hits, %0 failures
-ReSign|src.c:85526 : 25004 hits, %0 failures
-ReSign|src.c:85533 : 25004 hits, %0 failures
-ReSign|src.c:85542 : 25004 hits, %0 failures
-UnSign|src.c:85542 : 25004 hits, %0 failures
-ReSign|src.c:85558 : 25004 hits, %0 failures
-ReSign|src.c:85566 : 25004 hits, %0 failures
-ReSign|src.c:85573 : 25004 hits, %0 failures
-UnSign|src.c:85574 : 25004 hits, %0 failures
-ReSign|src.c:85574 : 25004 hits, %0 failures
-UnSign|src.c:85575 : 25004 hits, %0 failures
-ReSign|src.c:86665 : 25004 hits, %0 failures
-UnSign|src.c:85232 : 25004 hits, %0 failures
-ReSign|src.c:85232 : 25004 hits, %0 failures
-ReSign|src.c:85604 : 25004 hits, %0 failures
-ReSign|src.c:85708 : 25004 hits, %0 failures
-UnSign|src.c:85719 : 25004 hits, %0 failures
-ReSign|src.c:85719 : 25004 hits, %0 failures
-ReSign|src.c:85730 : 25004 hits, %0 failures
-ReSign|src.c:85746 : 25004 hits, %0 failures
-ReSign|src.c:85783 : 25004 hits, %0 failures
-ReSign|src.c:85789 : 25004 hits, %0 failures
-UnSign|src.c:86530 : 25004 hits, %0 failures
-ReSign|src.c:86530 : 25004 hits, %0 failures
-ReSign|src.c:86535 : 25004 hits, %0 failures
-ReSign|src.c:85795 : 25004 hits, %0 failures
-ReSign|src.c:85804 : 25004 hits, %0 failures
-ReSign|src.c:85816 : 25004 hits, %0 failures
-UnSign|src.c:85835 : 25004 hits, %0 failures
-ReSign|src.c:85835 : 25004 hits, %0 failures
-ReSign|src.c:85844 : 25004 hits, %0 failures
-ReSign|src.c:85916 : 25004 hits, %0 failures
-UnSign|src.c:85917 : 25004 hits, %0 failures
-ReSign|src.c:85917 : 25004 hits, %0 failures
-ReSign|src.c:85921 : 25004 hits, %0 failures
-UnSign|src.c:85953 : 25004 hits, %0 failures
-ReSign|src.c:85953 : 25004 hits, %0 failures
-ReSign|src.c:85301 : 25004 hits, %0 failures
-UnSign|src.c:86003 : 25004 hits, %0 failures
-ReSign|src.c:86003 : 25004 hits, %0 failures
-ReSign|src.c:86013 : 25004 hits, %0 failures
-UnSign|src.c:86013 : 25004 hits, %0 failures
-UnSign|src.c:84537 : 25004 hits, %0 failures
-ReSign|src.c:84543 : 25004 hits, %0 failures
-ReSign|src.c:86017 : 25004 hits, %0 failures
-UnSign|src.c:86017 : 25004 hits, %0 failures
-UnSign|src.c:86500 : 25004 hits, %0 failures
-UnSign|src.c:86503 : 25004 hits, %0 failures
-ReSign|src.c:86025 : 25004 hits, %0 failures
-ReSign|src.c:86029 : 25004 hits, %0 failures
-ReSign|src.c:86039 : 25004 hits, %0 failures
-ReSign|src.c:86043 : 25004 hits, %0 failures
-UnSign|src.c:86048 : 25004 hits, %0 failures
-ReSign|src.c:86051 : 25004 hits, %0 failures
-UnSign|src.c:86061 : 25004 hits, %0 failures
-ReSign|src.c:86070 : 25004 hits, %0 failures
-UnSign|src.c:64824 : 25002 hits, %0 failures
-ReSign|src.c:64824 : 25002 hits, %0 failures
-UnSign|src.c:56796 : 25002 hits, %0 failures
-ReSign|src.c:56796 : 25002 hits, %0 failures
-UnSign|src.c:56798 : 25002 hits, %0 failures
-ReSign|src.c:56798 : 25002 hits, %0 failures
-ReSign|src.c:56799 : 25002 hits, %0 failures
-UnSign|src.c:64830 : 25002 hits, %0 failures
-ReSign|src.c:64834 : 25002 hits, %0 failures
-ReSign|src.c:86497 : 25002 hits, %0 failures
-UnSign|src.c:86497 : 25002 hits, %0 failures
-ReSign|src.c:85319 : 25002 hits, %0 failures
-ReSign|src.c:59821 : 25002 hits, %0 failures
-ReSign|src.c:51838 : 25002 hits, %0 failures
-UnSign|src.c:51839 : 25002 hits, %0 failures
-ReSign|src.c:51839 : 25002 hits, %0 failures
-ReSign|src.c:51903 : 25002 hits, %0 failures
-ReSign|src.c:66606 : 25002 hits, %0 failures
-UnSign|src.c:51960 : 25002 hits, %0 failures
-ReSign|src.c:64602 : 25000 hits, %0 failures
-UnSign|src.c:64602 : 25000 hits, %0 failures
-UnSign|src.c:64139 : 25000 hits, %0 failures
-UnSign|src.c:64176 : 25000 hits, %0 failures
-UnSign|src.c:64179 : 25000 hits, %0 failures
-ReSign|src.c:64179 : 25000 hits, %0 failures
-UnSign|src.c:57558 : 25000 hits, %0 failures
-UnSign|src.c:57559 : 25000 hits, %0 failures
-ReSign|src.c:57559 : 25000 hits, %0 failures
-ReSign|src.c:82929 : 25000 hits, %0 failures
-UnSign|src.c:82804 : 25000 hits, %0 failures
-ReSign|src.c:64192 : 25000 hits, %0 failures
-ReSign|src.c:64198 : 25000 hits, %0 failures
-ReSign|src.c:64209 : 25000 hits, %0 failures
-UnSign|src.c:64215 : 25000 hits, %0 failures
-ReSign|src.c:64217 : 25000 hits, %0 failures
-ReSign|src.c:82826 : 25000 hits, %0 failures
-ReSign|src.c:53750 : 24046 hits, %0 failures
-UnSign|src.c:53794 : 24046 hits, %0 failures
-ReSign|src.c:53470 : 23130 hits, %0 failures
-UnSign|src.c:18409 : 23020 hits, %0 failures
-UnSign|src.c:52934 : 22964 hits, %0 failures
-ReSign|src.c:48813 : 22964 hits, %0 failures
-UnSign|src.c:48820 : 22964 hits, %0 failures
-UnSign|src.c:52947 : 22964 hits, %0 failures
-UnSign|src.c:53590 : 22960 hits, %0 failures
-ReSign|src.c:54097 : 21546 hits, %0 failures
-ReSign|src.c:67341 : 20002 hits, %0 failures
-ReSign|src.c:67347 : 20002 hits, %0 failures
-ReSign|src.c:57323 : 20002 hits, %0 failures
-UnSign|src.c:57330 : 20002 hits, %0 failures
-ReSign|src.c:60724 : 20002 hits, %0 failures
-UnSign|src.c:67357 : 20002 hits, %0 failures
-ReSign|src.c:67357 : 20002 hits, %0 failures
-ReSign|src.c:67363 : 20002 hits, %0 failures
-ReSign|src.c:64604 : 20000 hits, %0 failures
-UnSign|src.c:64604 : 20000 hits, %0 failures
-UnSign|src.c:48876 : 18764 hits, %0 failures
-ReSign|src.c:48878 : 18764 hits, %0 failures
-ReSign|src.c:49024 : 18758 hits, %0 failures
-UnSign|src.c:49027 : 18758 hits, %0 failures
-UnSign|src.c:49028 : 18758 hits, %0 failures
-ReSign|src.c:49028 : 18758 hits, %0 failures
-UnSign|src.c:49029 : 18758 hits, %0 failures
-UnSign|src.c:49030 : 18758 hits, %0 failures
-UnSign|src.c:49032 : 18758 hits, %0 failures
-UnSign|src.c:53086 : 18746 hits, %0 failures
-UnSign|src.c:53099 : 18746 hits, %0 failures
-UnSign|src.c:53110 : 18746 hits, %0 failures
-ReSign|src.c:53651 : 17778 hits, %0 failures
-ReSign|src.c:48883 : 17654 hits, %0 failures
-ReSign|src.c:53463 : 17235 hits, %0 failures
-ReSign|src.c:53468 : 17235 hits, %0 failures
-UnSign|src.c:53560 : 17235 hits, %0 failures
-ReSign|src.c:53560 : 17235 hits, %0 failures
-ReSign|src.c:53699 : 17235 hits, %0 failures
-UnSign|src.c:54097 : 16605 hits, %0 failures
-ReSign|src.c:48515 : 15866 hits, %0 failures
-ReSign|src.c:52180 : 15336 hits, %0 failures
-UnSign|src.c:64846 : 15000 hits, %0 failures
-ReSign|src.c:64846 : 15000 hits, %0 failures
-ReSign|src.c:35492 : 14564 hits, %0 failures
-ReSign|src.c:54076 : 13384 hits, %0 failures
-ReSign|src.c:54079 : 13384 hits, %0 failures
-ReSign|src.c:48808 : 12698 hits, %0 failures
-ReSign|src.c:54106 : 12531 hits, %0 failures
-UnSign|src.c:53629 : 12023 hits, %0 failures
-ReSign|src.c:53631 : 12023 hits, %0 failures
-ReSign|src.c:53634 : 12023 hits, %0 failures
-ReSign|src.c:53796 : 12023 hits, %0 failures
-ReSign|src.c:53832 : 12023 hits, %0 failures
-ReSign|src.c:53798 : 11891 hits, %0 failures
-UnSign|src.c:53823 : 11891 hits, %0 failures
-ReSign|src.c:53823 : 11891 hits, %0 failures
-UnSign|src.c:53470 : 11650 hits, %0 failures
-UnSign|src.c:53440 : 11510 hits, %0 failures
-UnSign|src.c:53455 : 11510 hits, %0 failures
-ReSign|src.c:53455 : 11510 hits, %0 failures
-ReSign|src.c:53719 : 11510 hits, %0 failures
-ReSign|src.c:52926 : 11482 hits, %0 failures
-UnSign|src.c:52933 : 11482 hits, %0 failures
-UnSign|src.c:52935 : 11482 hits, %0 failures
-ReSign|src.c:48788 : 11482 hits, %0 failures
-UnSign|src.c:48803 : 11482 hits, %0 failures
-ReSign|src.c:52943 : 11482 hits, %0 failures
-UnSign|src.c:52959 : 11482 hits, %0 failures
-UnSign|src.c:52960 : 11482 hits, %0 failures
-UnSign|src.c:53478 : 11480 hits, %0 failures
-ReSign|src.c:53492 : 11480 hits, %0 failures
-UnSign|src.c:53503 : 11480 hits, %0 failures
-UnSign|src.c:53584 : 11480 hits, %0 failures
-UnSign|src.c:53587 : 11480 hits, %0 failures
-UnSign|src.c:53588 : 11480 hits, %0 failures
-ReSign|src.c:53591 : 11480 hits, %0 failures
-ReSign|src.c:53448 : 11406 hits, %0 failures
-UnSign|src.c:53599 : 11363 hits, %0 failures
-ReSign|src.c:53599 : 11363 hits, %0 failures
-UnSign|src.c:54106 : 10595 hits, %0 failures
-ReSign|src.c:52173 : 10244 hits, %0 failures
-UnSign|src.c:52180 : 10224 hits, %0 failures
-UnSign|dlmalloc.c:4761 : 10192 hits, %0 failures
-ReSign|dlmalloc.c:4762 : 10192 hits, %0 failures
-ReSign|src.c:51810 : 10114 hits, %0 failures
-ReSign|src.c:48629 : 9520 hits, %0 failures
-ReSign|src.c:48641 : 9520 hits, %0 failures
-ReSign|src.c:48832 : 9363 hits, %0 failures
-ReSign|src.c:48725 : 9325 hits, %0 failures
-UnSign|src.c:35773 : 9224 hits, %0 failures
-UnSign|src.c:48850 : 7968 hits, %0 failures
-ReSign|src.c:34814 : 7645 hits, %0 failures
-ReSign|src.c:53847 : 7344 hits, %0 failures
-ReSign|src.c:35524 : 7284 hits, %0 failures
-ReSign|src.c:35504 : 7282 hits, %0 failures
-ReSign|src.c:35509 : 7282 hits, %0 failures
-UnSign|src.c:53214 : 6776 hits, %0 failures
-ReSign|src.c:54170 : 6729 hits, %0 failures
-ReSign|src.c:53013 : 6723 hits, %0 failures
-ReSign|src.c:53017 : 6723 hits, %0 failures
-UnSign|src.c:53020 : 6723 hits, %0 failures
-UnSign|src.c:54101 : 6723 hits, %0 failures
-ReSign|src.c:54104 : 6723 hits, %0 failures
-UnSign|src.c:54068 : 6655 hits, %0 failures
-ReSign|src.c:54172 : 6655 hits, %0 failures
-ReSign|src.c:54330 : 6655 hits, %0 failures
-UnSign|src.c:48835 : 6242 hits, %0 failures
-UnSign|src.c:48836 : 6242 hits, %0 failures
-UnSign|src.c:48838 : 6242 hits, %0 failures
-ReSign|src.c:35776 : 6133 hits, %0 failures
-ReSign|src.c:48730 : 6124 hits, %0 failures
-ReSign|src.c:41824 : 6092 hits, %0 failures
-ReSign|src.c:51698 : 6090 hits, %0 failures
-UnSign|src.c:34416 : 5847 hits, %0 failures
-ReSign|src.c:54148 : 5755 hits, %0 failures
-UnSign|src.c:54148 : 5755 hits, %0 failures
-ReSign|src.c:53425 : 5755 hits, %0 failures
-ReSign|src.c:53441 : 5755 hits, %0 failures
-ReSign|src.c:18364 : 5755 hits, %0 failures
-ReSign|src.c:18372 : 5755 hits, %0 failures
-ReSign|src.c:18375 : 5755 hits, %0 failures
-ReSign|src.c:53521 : 5755 hits, %0 failures
-UnSign|src.c:53545 : 5755 hits, %0 failures
-UnSign|src.c:53546 : 5755 hits, %0 failures
-UnSign|src.c:53624 : 5755 hits, %0 failures
-UnSign|src.c:53687 : 5755 hits, %0 failures
-UnSign|src.c:53691 : 5755 hits, %0 failures
-ReSign|src.c:53842 : 5755 hits, %0 failures
-ReSign|src.c:53868 : 5755 hits, %0 failures
-ReSign|src.c:18398 : 5755 hits, %0 failures
-ReSign|src.c:18425 : 5755 hits, %0 failures
-ReSign|src.c:54149 : 5755 hits, %0 failures
-ReSign|src.c:53446 : 5730 hits, %0 failures
-UnSign|dlmalloc.c:4763 : 5429 hits, %0 failures
-ReSign|src.c:52165 : 5123 hits, %0 failures
-ReSign|src.c:52179 : 5112 hits, %0 failures
-ReSign|dlmalloc.c:4751 : 5096 hits, %0 failures
-ReSign|src.c:52182 : 5058 hits, %0 failures
-UnSign|src.c:60604 : 5005 hits, %0 failures
-ReSign|src.c:60604 : 5005 hits, %0 failures
-ReSign|src.c:128523 : 5001 hits, %0 failures
-ReSign|src.c:128524 : 5000 hits, %0 failures
-ReSign|src.c:128525 : 5000 hits, %0 failures
-ReSign|src.c:128526 : 5000 hits, %0 failures
-ReSign|src.c:128527 : 5000 hits, %0 failures
-ReSign|src.c:128528 : 5000 hits, %0 failures
-UnSign|src.c:53218 : 4892 hits, %0 failures
-UnSign|src.c:54944 : 4840 hits, %0 failures
-ReSign|src.c:48619 : 4828 hits, %0 failures
-UnSign|src.c:48622 : 4760 hits, %0 failures
-UnSign|src.c:48848 : 3984 hits, %0 failures
-ReSign|src.c:54931 : 3912 hits, %0 failures
-UnSign|src.c:35670 : 3594 hits, %0 failures
-ReSign|src.c:35673 : 3584 hits, %0 failures
-UnSign|src.c:35674 : 3584 hits, %0 failures
-UnSign|src.c:20755 : 3429 hits, %0 failures
-UnSign|src.c:48832 : 3121 hits, %0 failures
-ReSign|src.c:35050 : 3058 hits, %0 failures
-ReSign|src.c:38501 : 3054 hits, %0 failures
-UnSign|src.c:35777 : 3050 hits, %0 failures
-UnSign|src.c:36007 : 3046 hits, %0 failures
-UnSign|src.c:36042 : 3046 hits, %0 failures
-UnSign|src.c:41830 : 3046 hits, %0 failures
-UnSign|src.c:52299 : 3042 hits, %0 failures
-UnSign|src.c:52494 : 3042 hits, %0 failures
-ReSign|src.c:52494 : 3042 hits, %0 failures
-UnSign|src.c:41842 : 3042 hits, %0 failures
-UnSign|src.c:48516 : 2910 hits, %0 failures
-UnSign|src.c:48634 : 2380 hits, %0 failures
-ReSign|src.c:53218 : 2276 hits, %0 failures
-ReSign|src.c:20755 : 2101 hits, %0 failures
-ReSign|src.c:54925 : 1960 hits, %0 failures
-ReSign|src.c:54941 : 1956 hits, %0 failures
-UnSign|src.c:54931 : 1956 hits, %0 failures
-ReSign|src.c:34405 : 1949 hits, %0 failures
-ReSign|src.c:34407 : 1949 hits, %0 failures
-UnSign|src.c:34415 : 1949 hits, %0 failures
-ReSign|src.c:34416 : 1949 hits, %0 failures
-ReSign|src.c:19061 : 1894 hits, %0 failures
-ReSign|src.c:54080 : 1720 hits, %0 failures
-UnSign|dlmalloc.c:2557 : 1700 hits, %0 failures
-ReSign|dlmalloc.c:4026 : 1700 hits, %0 failures
-UnSign|dlmalloc.c:4026 : 1700 hits, %0 failures
-UnSign|src.c:53847 : 1589 hits, %0 failures
-ReSign|src.c:35061 : 1536 hits, %0 failures
-UnSign|src.c:35037 : 1529 hits, %0 failures
-UnSign|src.c:35047 : 1529 hits, %0 failures
-ReSign|src.c:35047 : 1529 hits, %0 failures
-UnSign|src.c:35049 : 1529 hits, %0 failures
-ReSign|src.c:14658 : 1528 hits, %0 failures
-ReSign|src.c:14664 : 1528 hits, %0 failures
-ReSign|src.c:35999 : 1523 hits, %0 failures
-ReSign|src.c:36012 : 1523 hits, %0 failures
-ReSign|src.c:36033 : 1523 hits, %0 failures
-ReSign|src.c:36034 : 1523 hits, %0 failures
-ReSign|src.c:35573 : 1523 hits, %0 failures
-ReSign|src.c:35575 : 1523 hits, %0 failures
-ReSign|src.c:36038 : 1523 hits, %0 failures
-ReSign|src.c:36041 : 1523 hits, %0 failures
-UnSign|src.c:41824 : 1523 hits, %0 failures
-UnSign|src.c:41829 : 1523 hits, %0 failures
-ReSign|src.c:41829 : 1523 hits, %0 failures
-ReSign|src.c:41834 : 1523 hits, %0 failures
-ReSign|src.c:35592 : 1523 hits, %0 failures
-ReSign|src.c:35594 : 1523 hits, %0 failures
-UnSign|src.c:52302 : 1521 hits, %0 failures
-ReSign|src.c:52492 : 1521 hits, %0 failures
-UnSign|src.c:52497 : 1521 hits, %0 failures
-ReSign|src.c:52497 : 1521 hits, %0 failures
-ReSign|src.c:52520 : 1521 hits, %0 failures
-ReSign|src.c:52522 : 1521 hits, %0 failures
-ReSign|src.c:52533 : 1521 hits, %0 failures
-ReSign|src.c:35233 : 1521 hits, %0 failures
-ReSign|src.c:52534 : 1521 hits, %0 failures
-UnSign|src.c:20361 : 1350 hits, %0 failures
-ReSign|dlmalloc.c:4024 : 1275 hits, %0 failures
-ReSign|src.c:57124 : 1256 hits, %0 failures
-UnSign|src.c:20756 : 1140 hits, %0 failures
-ReSign|src.c:108432 : 1002 hits, %0 failures
-ReSign|src.c:54909 : 990 hits, %0 failures
-ReSign|src.c:54900 : 980 hits, %0 failures
-ReSign|src.c:54908 : 980 hits, %0 failures
-UnSign|src.c:54909 : 980 hits, %0 failures
-ReSign|src.c:54923 : 980 hits, %0 failures
-ReSign|src.c:54940 : 978 hits, %0 failures
-UnSign|src.c:54940 : 978 hits, %0 failures
-UnSign|src.c:54941 : 978 hits, %0 failures
-ReSign|src.c:48516 : 970 hits, %0 failures
-UnSign|src.c:54910 : 970 hits, %0 failures
-UnSign|src.c:53165 : 968 hits, %0 failures
-ReSign|src.c:53165 : 968 hits, %0 failures
-ReSign|src.c:53173 : 968 hits, %0 failures
-ReSign|src.c:53194 : 968 hits, %0 failures
-UnSign|src.c:53216 : 968 hits, %0 failures
-ReSign|src.c:53216 : 968 hits, %0 failures
-UnSign|src.c:53221 : 968 hits, %0 failures
-UnSign|src.c:53225 : 968 hits, %0 failures
-ReSign|src.c:54933 : 968 hits, %0 failures
-ReSign|src.c:54934 : 968 hits, %0 failures
-ReSign|src.c:19452 : 920 hits, %0 failures
-ReSign|src.c:19470 : 920 hits, %0 failures
-UnSign|dlmalloc.c:3876 : 852 hits, %0 failures
-UnSign|dlmalloc.c:3996 : 852 hits, %0 failures
-UnSign|dlmalloc.c:4052 : 852 hits, %0 failures
-ReSign|dlmalloc.c:3930 : 850 hits, %0 failures
-ReSign|src.c:19451 : 768 hits, %0 failures
-UnSign|src.c:53456 : 756 hits, %0 failures
-ReSign|src.c:19136 : 645 hits, %0 failures
-ReSign|src.c:73426 : 627 hits, %0 failures
-ReSign|src.c:73427 : 570 hits, %0 failures
-ReSign|src.c:53703 : 543 hits, %0 failures
-ReSign|src.c:53708 : 543 hits, %0 failures
-ReSign|src.c:19468 : 512 hits, %0 failures
-UnSign|src.c:19903 : 512 hits, %0 failures
-ReSign|src.c:74966 : 460 hits, %0 failures
-ReSign|src.c:20361 : 450 hits, %0 failures
-UnSign|src.c:20362 : 444 hits, %0 failures
-ReSign|src.c:20362 : 444 hits, %0 failures
-ReSign|src.c:19435 : 432 hits, %0 failures
-ReSign|dlmalloc.c:3873 : 427 hits, %0 failures
-ReSign|dlmalloc.c:3876 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3904 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3906 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3910 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3936 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3963 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3975 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3994 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3999 : 426 hits, %0 failures
-ReSign|dlmalloc.c:3729 : 426 hits, %0 failures
-UnSign|dlmalloc.c:3929 : 425 hits, %0 failures
-ReSign|src.c:73407 : 397 hits, %0 failures
-UnSign|src.c:20763 : 396 hits, %0 failures
-ReSign|src.c:73406 : 331 hits, %0 failures
-ReSign|src.c:98930 : 304 hits, %0 failures
-ReSign|src.c:70225 : 290 hits, %0 failures
-UnSign|src.c:19539 : 274 hits, %0 failures
-ReSign|src.c:19547 : 274 hits, %0 failures
-ReSign|src.c:19550 : 274 hits, %0 failures
-ReSign|src.c:19899 : 257 hits, %0 failures
-ReSign|src.c:19902 : 257 hits, %0 failures
-ReSign|src.c:19903 : 256 hits, %0 failures
-UnSign|src.c:19904 : 256 hits, %0 failures
-UnSign|src.c:19905 : 256 hits, %0 failures
-ReSign|src.c:70196 : 252 hits, %0 failures
-ReSign|src.c:74965 : 252 hits, %0 failures
-ReSign|src.c:98754 : 240 hits, %0 failures
-ReSign|src.c:98755 : 240 hits, %0 failures
-ReSign|src.c:19135 : 215 hits, %0 failures
-UnSign|src.c:78319 : 208 hits, %0 failures
-ReSign|src.c:19056 : 208 hits, %0 failures
-ReSign|src.c:78388 : 200 hits, %0 failures
-ReSign|dlmalloc.c:4278 : 190 hits, %0 failures
-ReSign|src.c:81358 : 187 hits, %0 failures
-ReSign|src.c:72361 : 178 hits, %0 failures
-ReSign|src.c:81387 : 175 hits, %0 failures
-ReSign|src.c:78318 : 168 hits, %0 failures
-ReSign|src.c:70191 : 168 hits, %0 failures
-ReSign|src.c:81388 : 162 hits, %0 failures
-ReSign|src.c:59320 : 153 hits, %0 failures
-ReSign|src.c:59352 : 153 hits, %0 failures
-ReSign|src.c:59364 : 153 hits, %0 failures
-ReSign|src.c:78389 : 148 hits, %0 failures
-UnSign|src.c:78389 : 148 hits, %0 failures
-ReSign|src.c:78391 : 148 hits, %0 failures
-ReSign|src.c:78393 : 144 hits, %0 failures
-ReSign|src.c:78395 : 144 hits, %0 failures
-ReSign|src.c:19065 : 142 hits, %0 failures
-ReSign|src.c:19094 : 138 hits, %0 failures
-ReSign|src.c:19539 : 137 hits, %0 failures
-ReSign|src.c:19544 : 137 hits, %0 failures
-ReSign|src.c:70226 : 137 hits, %0 failures
-ReSign|src.c:98793 : 135 hits, %0 failures
-UnSign|src.c:81405 : 130 hits, %0 failures
-ReSign|src.c:78397 : 128 hits, %0 failures
-ReSign|src.c:78401 : 128 hits, %0 failures
-ReSign|src.c:78404 : 128 hits, %0 failures
-ReSign|src.c:78407 : 128 hits, %0 failures
-ReSign|src.c:78411 : 128 hits, %0 failures
-ReSign|src.c:71286 : 127 hits, %0 failures
-ReSign|dlmalloc.c:4811 : 125 hits, %0 failures
-ReSign|src.c:61509 : 125 hits, %0 failures
-ReSign|src.c:69965 : 120 hits, %0 failures
-ReSign|src.c:70405 : 118 hits, %0 failures
-ReSign|src.c:70025 : 112 hits, %0 failures
-ReSign|src.c:94265 : 112 hits, %0 failures
-ReSign|src.c:78319 : 108 hits, %0 failures
-UnSign|src.c:19235 : 106 hits, %0 failures
-UnSign|src.c:19236 : 106 hits, %0 failures
-ReSign|dlmalloc.c:4668 : 105 hits, %0 failures
-ReSign|src.c:91493 : 105 hits, %0 failures
-ReSign|src.c:70234 : 102 hits, %0 failures
-ReSign|src.c:70235 : 102 hits, %0 failures
-ReSign|src.c:98929 : 100 hits, %0 failures
-UnSign|src.c:57160 : 98 hits, %0 failures
-ReSign|src.c:57169 : 98 hits, %0 failures
-UnSign|dlmalloc.c:4262 : 95 hits, %0 failures
-ReSign|src.c:96342 : 92 hits, %0 failures
-ReSign|dlmalloc.c:4642 : 90 hits, %0 failures
-ReSign|src.c:74325 : 90 hits, %0 failures
-ReSign|src.c:73375 : 90 hits, %0 failures
-UnSign|src.c:72366 : 90 hits, %0 failures
-UnSign|src.c:72361 : 88 hits, %0 failures
-ReSign|src.c:19138 : 86 hits, %0 failures
-ReSign|src.c:80570 : 84 hits, %0 failures
-ReSign|src.c:93675 : 84 hits, %0 failures
-ReSign|src.c:93740 : 84 hits, %0 failures
-ReSign|src.c:70003 : 84 hits, %0 failures
-ReSign|src.c:71022 : 84 hits, %0 failures
-ReSign|src.c:70265 : 84 hits, %0 failures
-ReSign|src.c:70431 : 84 hits, %0 failures
-ReSign|src.c:71031 : 84 hits, %0 failures
-ReSign|src.c:93928 : 84 hits, %0 failures
-ReSign|src.c:102820 : 84 hits, %0 failures
-ReSign|src.c:91655 : 84 hits, %0 failures
-ReSign|src.c:57140 : 84 hits, %0 failures
-ReSign|src.c:91604 : 84 hits, %0 failures
-ReSign|src.c:91491 : 84 hits, %0 failures
-UnSign|src.c:19918 : 84 hits, %0 failures
-ReSign|src.c:19057 : 83 hits, %0 failures
-ReSign|src.c:77845 : 80 hits, %0 failures
-ReSign|dlmalloc.c:4765 : 79 hits, %0 failures
-ReSign|src.c:69966 : 76 hits, %0 failures
-ReSign|src.c:71531 : 76 hits, %0 failures
-ReSign|src.c:63912 : 76 hits, %0 failures
-ReSign|src.c:86971 : 76 hits, %0 failures
-UnSign|src.c:98794 : 73 hits, %33 failures
-ReSign|src.c:98794 : 73 hits, %0 failures
-ReSign|src.c:77699 : 72 hits, %0 failures
-ReSign|src.c:71341 : 72 hits, %0 failures
-ReSign|src.c:19083 : 71 hits, %0 failures
-ReSign|src.c:19086 : 71 hits, %0 failures
-ReSign|src.c:19099 : 71 hits, %0 failures
-ReSign|src.c:19103 : 71 hits, %0 failures
-ReSign|src.c:19120 : 71 hits, %0 failures
-ReSign|src.c:19150 : 71 hits, %0 failures
-UnSign|src.c:19175 : 71 hits, %0 failures
-ReSign|src.c:19511 : 71 hits, %0 failures
-ReSign|src.c:19514 : 71 hits, %0 failures
-ReSign|src.c:19518 : 71 hits, %0 failures
-ReSign|src.c:19521 : 71 hits, %0 failures
-ReSign|src.c:19528 : 71 hits, %0 failures
-ReSign|src.c:70027 : 70 hits, %0 failures
-ReSign|src.c:102926 : 70 hits, %0 failures
-ReSign|src.c:102990 : 70 hits, %0 failures
-ReSign|src.c:59248 : 70 hits, %0 failures
-ReSign|src.c:19596 : 69 hits, %0 failures
-ReSign|src.c:19063 : 68 hits, %0 failures
-ReSign|src.c:86961 : 68 hits, %0 failures
-ReSign|src.c:81487 : 68 hits, %0 failures
-UnSign|src.c:48614 : 68 hits, %0 failures
-ReSign|src.c:48658 : 68 hits, %0 failures
-UnSign|src.c:48750 : 68 hits, %0 failures
-ReSign|src.c:61677 : 66 hits, %0 failures
-ReSign|src.c:81405 : 65 hits, %0 failures
-ReSign|src.c:81407 : 65 hits, %0 failures
-ReSign|dlmalloc.c:4634 : 64 hits, %0 failures
-ReSign|src.c:78311 : 64 hits, %0 failures
-ReSign|src.c:78434 : 64 hits, %0 failures
-ReSign|src.c:91666 : 63 hits, %0 failures
-ReSign|src.c:91494 : 63 hits, %0 failures
-ReSign|src.c:69891 : 62 hits, %0 failures
-ReSign|src.c:69776 : 62 hits, %0 failures
-ReSign|src.c:74328 : 60 hits, %0 failures
-ReSign|src.c:96466 : 60 hits, %0 failures
-ReSign|dlmalloc.c:4266 : 58 hits, %0 failures
-ReSign|src.c:70317 : 58 hits, %0 failures
-UnSign|src.c:99994 : 58 hits, %0 failures
-ReSign|src.c:102867 : 56 hits, %0 failures
-ReSign|src.c:102928 : 56 hits, %0 failures
-ReSign|src.c:103079 : 56 hits, %0 failures
-ReSign|src.c:103141 : 56 hits, %0 failures
-ReSign|src.c:103273 : 56 hits, %0 failures
-ReSign|src.c:102606 : 56 hits, %0 failures
-ReSign|src.c:91662 : 56 hits, %0 failures
-ReSign|src.c:59276 : 56 hits, %0 failures
-UnSign|src.c:59281 : 56 hits, %0 failures
-ReSign|src.c:91477 : 56 hits, %0 failures
-UnSign|src.c:19915 : 56 hits, %0 failures
-UnSign|src.c:19916 : 56 hits, %0 failures
-ReSign|src.c:69773 : 56 hits, %0 failures
-ReSign|src.c:71374 : 56 hits, %0 failures
-ReSign|src.c:81485 : 55 hits, %0 failures
-ReSign|src.c:73271 : 55 hits, %0 failures
-ReSign|src.c:73272 : 55 hits, %0 failures
-UnSign|src.c:52166 : 55 hits, %0 failures
-ReSign|src.c:52167 : 55 hits, %0 failures
-UnSign|dlmalloc.c:4811 : 54 hits, %0 failures
-ReSign|src.c:83823 : 53 hits, %0 failures
-UnSign|src.c:19237 : 53 hits, %0 failures
-ReSign|src.c:19454 : 52 hits, %0 failures
-UnSign|src.c:19454 : 52 hits, %0 failures
-ReSign|src.c:38480 : 52 hits, %0 failures
-ReSign|src.c:50118 : 51 hits, %0 failures
-ReSign|src.c:101217 : 51 hits, %0 failures
-ReSign|src.c:98072 : 51 hits, %0 failures
-ReSign|src.c:55493 : 51 hits, %0 failures
-UnSign|src.c:55493 : 51 hits, %0 failures
-ReSign|src.c:81362 : 51 hits, %0 failures
-ReSign|src.c:38483 : 50 hits, %0 failures
-ReSign|src.c:21745 : 50 hits, %0 failures
-ReSign|src.c:81509 : 49 hits, %0 failures
-ReSign|src.c:103107 : 49 hits, %0 failures
-ReSign|src.c:57115 : 49 hits, %0 failures
-UnSign|src.c:57120 : 49 hits, %0 failures
-ReSign|src.c:57120 : 49 hits, %0 failures
-ReSign|src.c:57121 : 49 hits, %0 failures
-UnSign|src.c:57123 : 49 hits, %0 failures
-ReSign|src.c:57123 : 49 hits, %0 failures
-UnSign|src.c:57128 : 49 hits, %0 failures
-ReSign|src.c:57135 : 49 hits, %0 failures
-ReSign|src.c:57160 : 49 hits, %0 failures
-UnSign|src.c:57161 : 49 hits, %0 failures
-ReSign|src.c:57161 : 49 hits, %0 failures
-UnSign|src.c:57164 : 49 hits, %0 failures
-ReSign|src.c:57164 : 49 hits, %0 failures
-ReSign|src.c:77703 : 48 hits, %0 failures
-ReSign|src.c:80662 : 48 hits, %0 failures
-ReSign|src.c:70669 : 48 hits, %0 failures
-ReSign|src.c:108689 : 48 hits, %0 failures
-ReSign|src.c:108691 : 48 hits, %0 failures
-UnSign|src.c:81455 : 46 hits, %0 failures
-ReSign|src.c:98847 : 46 hits, %0 failures
-ReSign|src.c:34548 : 45 hits, %0 failures
-ReSign|src.c:81481 : 44 hits, %0 failures
-UnSign|src.c:98800 : 44 hits, %0 failures
-ReSign|src.c:98800 : 44 hits, %0 failures
-ReSign|src.c:98810 : 44 hits, %0 failures
-ReSign|src.c:128446 : 44 hits, %0 failures
-UnSign|src.c:74243 : 43 hits, %0 failures
-ReSign|src.c:74194 : 43 hits, %0 failures
-ReSign|src.c:74267 : 43 hits, %0 failures
-ReSign|src.c:80628 : 42 hits, %0 failures
-ReSign|src.c:80635 : 42 hits, %0 failures
-ReSign|src.c:94223 : 42 hits, %0 failures
-ReSign|src.c:90818 : 42 hits, %0 failures
-ReSign|src.c:93860 : 42 hits, %0 failures
-ReSign|src.c:70029 : 42 hits, %0 failures
-ReSign|src.c:70195 : 42 hits, %0 failures
-ReSign|src.c:70205 : 42 hits, %0 failures
-ReSign|src.c:70219 : 42 hits, %0 failures
-ReSign|src.c:70335 : 42 hits, %0 failures
-ReSign|src.c:70360 : 42 hits, %0 failures
-ReSign|src.c:70375 : 42 hits, %0 failures
-ReSign|src.c:70385 : 42 hits, %0 failures
-ReSign|src.c:70421 : 42 hits, %0 failures
-ReSign|src.c:70423 : 42 hits, %0 failures
-ReSign|src.c:77255 : 42 hits, %0 failures
-ReSign|src.c:101191 : 42 hits, %0 failures
-ReSign|src.c:103277 : 42 hits, %0 failures
-ReSign|src.c:91650 : 42 hits, %0 failures
-ReSign|src.c:91667 : 42 hits, %0 failures
-UnSign|src.c:57137 : 42 hits, %0 failures
-ReSign|src.c:57137 : 42 hits, %0 failures
-UnSign|src.c:57138 : 42 hits, %0 failures
-ReSign|src.c:57138 : 42 hits, %0 failures
-ReSign|src.c:57143 : 42 hits, %0 failures
-ReSign|src.c:37880 : 42 hits, %0 failures
-ReSign|src.c:50085 : 41 hits, %0 failures
-ReSign|src.c:81324 : 40 hits, %0 failures
-ReSign|src.c:81273 : 40 hits, %0 failures
-ReSign|src.c:81331 : 40 hits, %0 failures
-ReSign|src.c:106591 : 40 hits, %0 failures
-UnSign|src.c:107211 : 40 hits, %0 failures
-ReSign|src.c:85153 : 40 hits, %0 failures
-ReSign|src.c:49916 : 39 hits, %0 failures
-UnSign|dlmalloc.c:4274 : 38 hits, %0 failures
-UnSign|dlmalloc.c:4277 : 38 hits, %0 failures
-ReSign|src.c:98734 : 38 hits, %0 failures
-ReSign|src.c:74112 : 38 hits, %0 failures
-ReSign|src.c:71391 : 38 hits, %0 failures
-UnSign|src.c:34802 : 37 hits, %0 failures
-ReSign|src.c:102793 : 36 hits, %0 failures
-ReSign|src.c:99804 : 36 hits, %0 failures
-ReSign|src.c:50655 : 36 hits, %0 failures
-UnSign|src.c:71275 : 36 hits, %53 failures
-ReSign|src.c:71276 : 36 hits, %0 failures
-ReSign|src.c:71281 : 36 hits, %0 failures
-ReSign|src.c:38841 : 36 hits, %0 failures
-UnSign|src.c:91662 : 35 hits, %40 failures
-ReSign|src.c:19931 : 35 hits, %0 failures
-UnSign|src.c:81331 : 34 hits, %0 failures
-ReSign|src.c:41517 : 34 hits, %0 failures
-ReSign|src.c:41519 : 34 hits, %0 failures
-ReSign|src.c:50120 : 34 hits, %0 failures
-UnSign|src.c:50150 : 34 hits, %0 failures
-ReSign|src.c:50150 : 34 hits, %0 failures
-ReSign|src.c:70406 : 34 hits, %0 failures
-ReSign|src.c:70408 : 34 hits, %0 failures
-ReSign|src.c:59322 : 34 hits, %0 failures
-ReSign|src.c:59354 : 34 hits, %0 failures
-ReSign|src.c:59366 : 34 hits, %0 failures
-ReSign|src.c:47906 : 34 hits, %0 failures
-UnSign|src.c:38805 : 34 hits, %0 failures
-ReSign|src.c:38805 : 34 hits, %0 failures
-ReSign|src.c:101402 : 34 hits, %0 failures
-UnSign|src.c:81365 : 34 hits, %0 failures
-ReSign|src.c:81365 : 34 hits, %0 failures
-UnSign|src.c:48609 : 34 hits, %0 failures
-UnSign|src.c:48610 : 34 hits, %0 failures
-UnSign|src.c:48611 : 34 hits, %0 failures
-UnSign|src.c:48658 : 34 hits, %0 failures
-ReSign|src.c:48749 : 34 hits, %0 failures
-UnSign|dlmalloc.c:3745 : 33 hits, %0 failures
-ReSign|src.c:19594 : 33 hits, %0 failures
-UnSign|src.c:19596 : 33 hits, %0 failures
-ReSign|src.c:108065 : 32 hits, %0 failures
-ReSign|src.c:78309 : 32 hits, %0 failures
-ReSign|src.c:78317 : 32 hits, %0 failures
-ReSign|src.c:78325 : 32 hits, %0 failures
-ReSign|src.c:101105 : 32 hits, %0 failures
-ReSign|src.c:101400 : 32 hits, %0 failures
-ReSign|src.c:96330 : 32 hits, %0 failures
-ReSign|src.c:57436 : 32 hits, %0 failures
-ReSign|src.c:96338 : 32 hits, %0 failures
-ReSign|src.c:73248 : 32 hits, %0 failures
-ReSign|src.c:73222 : 32 hits, %0 failures
-ReSign|src.c:77432 : 32 hits, %0 failures
-ReSign|src.c:71466 : 32 hits, %0 failures
-ReSign|src.c:81209 : 32 hits, %0 failures
-ReSign|src.c:81216 : 32 hits, %0 failures
-ReSign|src.c:63914 : 32 hits, %0 failures
-ReSign|src.c:103311 : 32 hits, %0 failures
-ReSign|src.c:73537 : 31 hits, %0 failures
-ReSign|src.c:73542 : 31 hits, %0 failures
-UnSign|src.c:69891 : 31 hits, %0 failures
-ReSign|src.c:69775 : 31 hits, %0 failures
-ReSign|src.c:69778 : 31 hits, %0 failures
-ReSign|dlmalloc.c:4284 : 30 hits, %0 failures
-ReSign|src.c:49836 : 30 hits, %0 failures
-UnSign|src.c:73378 : 30 hits, %0 failures
-ReSign|src.c:73378 : 30 hits, %0 failures
-ReSign|src.c:73381 : 30 hits, %0 failures
-ReSign|src.c:96467 : 30 hits, %0 failures
-ReSign|src.c:98689 : 30 hits, %0 failures
-UnSign|src.c:74962 : 30 hits, %0 failures
-UnSign|src.c:38842 : 30 hits, %0 failures
-ReSign|src.c:98977 : 29 hits, %0 failures
-ReSign|src.c:102541 : 29 hits, %0 failures
-ReSign|src.c:98651 : 29 hits, %0 failures
-ReSign|src.c:99495 : 29 hits, %0 failures
-ReSign|src.c:71383 : 29 hits, %0 failures
-UnSign|src.c:105736 : 28 hits, %0 failures
-ReSign|src.c:72298 : 28 hits, %0 failures
-ReSign|src.c:80691 : 28 hits, %0 failures
-ReSign|src.c:80693 : 28 hits, %0 failures
-ReSign|src.c:93659 : 28 hits, %0 failures
-ReSign|src.c:93708 : 28 hits, %0 failures
-ReSign|src.c:93726 : 28 hits, %0 failures
-UnSign|src.c:93742 : 28 hits, %0 failures
-ReSign|src.c:93742 : 28 hits, %0 failures
-UnSign|src.c:93745 : 28 hits, %0 failures
-ReSign|src.c:93745 : 28 hits, %0 failures
-ReSign|src.c:93747 : 28 hits, %0 failures
-ReSign|src.c:69979 : 28 hits, %0 failures
-ReSign|src.c:69980 : 28 hits, %0 failures
-ReSign|src.c:69981 : 28 hits, %0 failures
-ReSign|src.c:69982 : 28 hits, %0 failures
-ReSign|src.c:69983 : 28 hits, %0 failures
-ReSign|src.c:69984 : 28 hits, %0 failures
-ReSign|src.c:69985 : 28 hits, %0 failures
-ReSign|src.c:70030 : 28 hits, %0 failures
-ReSign|src.c:70002 : 28 hits, %0 failures
-ReSign|src.c:70004 : 28 hits, %0 failures
-ReSign|src.c:70031 : 28 hits, %0 failures
-ReSign|src.c:93984 : 28 hits, %0 failures
-ReSign|src.c:70997 : 28 hits, %0 failures
-ReSign|src.c:71024 : 28 hits, %0 failures
-ReSign|src.c:71047 : 28 hits, %0 failures
-ReSign|src.c:71086 : 28 hits, %0 failures
-ReSign|src.c:93986 : 28 hits, %0 failures
-ReSign|src.c:93930 : 28 hits, %0 failures
-ReSign|src.c:94242 : 28 hits, %0 failures
-UnSign|src.c:94245 : 28 hits, %0 failures
-ReSign|src.c:90996 : 28 hits, %0 failures
-UnSign|src.c:94312 : 28 hits, %0 failures
-ReSign|src.c:74722 : 28 hits, %0 failures
-ReSign|src.c:71336 : 28 hits, %0 failures
-ReSign|src.c:71339 : 28 hits, %0 failures
-ReSign|src.c:81235 : 28 hits, %0 failures
-ReSign|src.c:71361 : 28 hits, %0 failures
-ReSign|src.c:102742 : 28 hits, %0 failures
-ReSign|src.c:102752 : 28 hits, %0 failures
-ReSign|src.c:102823 : 28 hits, %0 failures
-UnSign|src.c:102933 : 28 hits, %0 failures
-ReSign|src.c:102934 : 28 hits, %0 failures
-ReSign|src.c:102941 : 28 hits, %0 failures
-ReSign|src.c:99989 : 28 hits, %0 failures
-ReSign|src.c:103051 : 28 hits, %0 failures
-ReSign|src.c:103088 : 28 hits, %0 failures
-ReSign|src.c:91039 : 28 hits, %0 failures
-ReSign|src.c:91216 : 28 hits, %0 failures
-ReSign|src.c:103226 : 28 hits, %0 failures
-UnSign|src.c:103277 : 28 hits, %0 failures
-ReSign|src.c:98661 : 28 hits, %0 failures
-ReSign|src.c:94853 : 28 hits, %0 failures
-UnSign|src.c:91650 : 28 hits, %0 failures
-ReSign|src.c:91658 : 28 hits, %0 failures
-ReSign|src.c:91659 : 28 hits, %0 failures
-UnSign|src.c:91479 : 28 hits, %25 failures
-ReSign|src.c:91580 : 28 hits, %0 failures
-ReSign|src.c:72279 : 28 hits, %0 failures
-ReSign|src.c:99503 : 28 hits, %0 failures
-UnSign|src.c:37880 : 28 hits, %0 failures
-ReSign|src.c:19893 : 28 hits, %0 failures
-UnSign|src.c:19914 : 28 hits, %0 failures
-UnSign|src.c:19917 : 28 hits, %0 failures
-UnSign|src.c:19919 : 28 hits, %0 failures
-UnSign|src.c:38195 : 28 hits, %0 failures
-UnSign|src.c:38233 : 28 hits, %0 failures
-UnSign|dlmalloc.c:4278 : 28 hits, %0 failures
-ReSign|src.c:74937 : 28 hits, %0 failures
-ReSign|src.c:94483 : 28 hits, %0 failures
-ReSign|src.c:103312 : 28 hits, %0 failures
-UnSign|src.c:19446 : 26 hits, %0 failures
-ReSign|src.c:19446 : 26 hits, %0 failures
-ReSign|src.c:19448 : 26 hits, %0 failures
-UnSign|src.c:19448 : 26 hits, %0 failures
-ReSign|src.c:19449 : 26 hits, %0 failures
-ReSign|src.c:19456 : 26 hits, %0 failures
-ReSign|src.c:19466 : 26 hits, %0 failures
-ReSign|src.c:19472 : 26 hits, %0 failures
-ReSign|src.c:103098 : 26 hits, %0 failures
-ReSign|src.c:103282 : 26 hits, %0 failures
-ReSign|src.c:63828 : 26 hits, %0 failures
-UnSign|src.c:49892 : 26 hits, %0 failures
-UnSign|src.c:49893 : 26 hits, %0 failures
-ReSign|src.c:49901 : 26 hits, %0 failures
-ReSign|src.c:81499 : 25 hits, %0 failures
-UnSign|src.c:63914 : 25 hits, %0 failures
-UnSign|src.c:61509 : 25 hits, %0 failures
-ReSign|src.c:61569 : 25 hits, %0 failures
-ReSign|src.c:86973 : 25 hits, %0 failures
-ReSign|src.c:89699 : 24 hits, %0 failures
-ReSign|src.c:77700 : 24 hits, %0 failures
-UnSign|src.c:50085 : 24 hits, %0 failures
-ReSign|src.c:19429 : 24 hits, %0 failures
-UnSign|src.c:19431 : 24 hits, %0 failures
-ReSign|src.c:19431 : 24 hits, %0 failures
-ReSign|src.c:19434 : 24 hits, %0 failures
-ReSign|src.c:70925 : 24 hits, %0 failures
-ReSign|src.c:70880 : 24 hits, %0 failures
-ReSign|src.c:91250 : 24 hits, %0 failures
-UnSign|src.c:71340 : 24 hits, %0 failures
-ReSign|src.c:71347 : 24 hits, %0 failures
-ReSign|src.c:71348 : 24 hits, %0 failures
-ReSign|src.c:99834 : 24 hits, %0 failures
-ReSign|src.c:59333 : 24 hits, %0 failures
-UnSign|src.c:107349 : 24 hits, %0 failures
-ReSign|src.c:96438 : 24 hits, %0 failures
-ReSign|src.c:96462 : 24 hits, %0 failures
-ReSign|src.c:96692 : 24 hits, %0 failures
-ReSign|src.c:57775 : 24 hits, %0 failures
-ReSign|src.c:74271 : 24 hits, %0 failures
-UnSign|src.c:48933 : 24 hits, %0 failures
-UnSign|src.c:48934 : 24 hits, %0 failures
-UnSign|src.c:48935 : 24 hits, %0 failures
-UnSign|src.c:48974 : 24 hits, %0 failures
-ReSign|src.c:77015 : 24 hits, %0 failures
-ReSign|src.c:77792 : 24 hits, %0 failures
-ReSign|src.c:108704 : 24 hits, %0 failures
-ReSign|src.c:18335 : 23 hits, %0 failures
-ReSign|src.c:81455 : 23 hits, %0 failures
-ReSign|src.c:81460 : 23 hits, %0 failures
-ReSign|src.c:94356 : 22 hits, %0 failures
-ReSign|src.c:98733 : 22 hits, %0 failures
-ReSign|src.c:101265 : 22 hits, %0 failures
-ReSign|src.c:101447 : 22 hits, %0 failures
-ReSign|src.c:101472 : 22 hits, %0 failures
-ReSign|src.c:103104 : 22 hits, %0 failures
-UnSign|src.c:74971 : 22 hits, %0 failures
-ReSign|src.c:61685 : 22 hits, %0 failures
-ReSign|src.c:58152 : 22 hits, %0 failures
-ReSign|src.c:94407 : 21 hits, %0 failures
-ReSign|src.c:91665 : 21 hits, %0 failures
-ReSign|src.c:91671 : 21 hits, %0 failures
-ReSign|src.c:91673 : 21 hits, %0 failures
-ReSign|src.c:91678 : 21 hits, %0 failures
-ReSign|src.c:91681 : 21 hits, %0 failures
-ReSign|src.c:91488 : 21 hits, %0 failures
-ReSign|src.c:91502 : 21 hits, %0 failures
-ReSign|src.c:91524 : 21 hits, %0 failures
-ReSign|src.c:91541 : 21 hits, %0 failures
-ReSign|src.c:91544 : 21 hits, %0 failures
-ReSign|src.c:91546 : 21 hits, %0 failures
-ReSign|src.c:91554 : 21 hits, %0 failures
-UnSign|src.c:19182 : 21 hits, %0 failures
-ReSign|src.c:19182 : 21 hits, %0 failures
-ReSign|src.c:19184 : 21 hits, %0 failures
-ReSign|src.c:19191 : 21 hits, %0 failures
-ReSign|src.c:19200 : 21 hits, %0 failures
-ReSign|src.c:19201 : 21 hits, %0 failures
-ReSign|src.c:19214 : 21 hits, %0 failures
-UnSign|src.c:19215 : 21 hits, %0 failures
-ReSign|src.c:19215 : 21 hits, %0 failures
-UnSign|src.c:19219 : 21 hits, %0 failures
-ReSign|src.c:19219 : 21 hits, %0 failures
-UnSign|src.c:19232 : 21 hits, %0 failures
-UnSign|src.c:19233 : 21 hits, %0 failures
-ReSign|src.c:19240 : 21 hits, %0 failures
-ReSign|src.c:19243 : 21 hits, %0 failures
-UnSign|src.c:19244 : 21 hits, %0 failures
-ReSign|src.c:19244 : 21 hits, %0 failures
-ReSign|dlmalloc.c:4076 : 21 hits, %0 failures
-ReSign|dlmalloc.c:4113 : 21 hits, %0 failures
-ReSign|src.c:74936 : 21 hits, %0 failures
-ReSign|src.c:109580 : 20 hits, %0 failures
-ReSign|src.c:109583 : 20 hits, %0 failures
-ReSign|src.c:78055 : 20 hits, %0 failures
-ReSign|src.c:107499 : 20 hits, %0 failures
-UnSign|src.c:107299 : 20 hits, %0 failures
-ReSign|src.c:107211 : 20 hits, %0 failures
-ReSign|src.c:96468 : 20 hits, %0 failures
-ReSign|src.c:96476 : 20 hits, %0 failures
-ReSign|src.c:96693 : 20 hits, %0 failures
-UnSign|dlmalloc.c:4268 : 20 hits, %0 failures
-ReSign|src.c:69813 : 20 hits, %0 failures
-UnSign|dlmalloc.c:4648 : 20 hits, %0 failures
-ReSign|src.c:94007 : 20 hits, %0 failures
-ReSign|src.c:94053 : 20 hits, %0 failures
-ReSign|src.c:94033 : 20 hits, %0 failures
-ReSign|src.c:73359 : 20 hits, %0 failures
-UnSign|dlmalloc.c:4279 : 19 hits, %0 failures
-UnSign|src.c:50628 : 19 hits, %0 failures
-ReSign|src.c:50628 : 19 hits, %0 failures
-UnSign|src.c:50711 : 19 hits, %0 failures
-ReSign|src.c:50711 : 19 hits, %0 failures
-UnSign|src.c:50655 : 19 hits, %0 failures
-UnSign|src.c:50666 : 19 hits, %0 failures
-ReSign|src.c:50666 : 19 hits, %0 failures
-ReSign|src.c:38540 : 19 hits, %0 failures
-ReSign|src.c:38544 : 19 hits, %0 failures
-ReSign|src.c:38589 : 19 hits, %0 failures
-ReSign|src.c:98040 : 19 hits, %0 failures
-UnSign|src.c:98734 : 19 hits, %0 failures
-UnSign|src.c:19597 : 18 hits, %0 failures
-ReSign|src.c:19597 : 18 hits, %0 failures
-ReSign|src.c:19602 : 18 hits, %0 failures
-ReSign|src.c:19654 : 18 hits, %0 failures
-ReSign|src.c:70671 : 18 hits, %0 failures
-ReSign|src.c:101194 : 18 hits, %0 failures
-ReSign|src.c:101247 : 18 hits, %0 failures
-ReSign|src.c:99813 : 18 hits, %0 failures
-UnSign|src.c:101285 : 18 hits, %0 failures
-ReSign|src.c:101286 : 18 hits, %0 failures
-ReSign|src.c:101311 : 18 hits, %0 failures
-ReSign|src.c:101327 : 18 hits, %0 failures
-ReSign|src.c:101371 : 18 hits, %0 failures
-ReSign|src.c:101460 : 18 hits, %0 failures
-ReSign|src.c:103233 : 18 hits, %0 failures
-UnSign|src.c:106038 : 18 hits, %0 failures
-UnSign|src.c:71697 : 18 hits, %0 failures
-ReSign|src.c:71697 : 18 hits, %0 failures
-UnSign|src.c:71704 : 18 hits, %0 failures
-ReSign|src.c:71704 : 18 hits, %0 failures
-ReSign|src.c:72320 : 18 hits, %0 failures
-ReSign|src.c:98935 : 18 hits, %0 failures
-UnSign|src.c:71440 : 18 hits, %0 failures
-UnSign|src.c:57259 : 18 hits, %0 failures
-ReSign|src.c:57259 : 18 hits, %0 failures
-ReSign|src.c:108529 : 18 hits, %0 failures
-UnSign|src.c:36146 : 18 hits, %0 failures
-ReSign|src.c:78636 : 18 hits, %0 failures
-ReSign|src.c:108705 : 18 hits, %0 failures
-UnSign|src.c:50075 : 17 hits, %0 failures
-ReSign|src.c:50075 : 17 hits, %0 failures
-ReSign|src.c:50087 : 17 hits, %0 failures
-ReSign|src.c:50096 : 17 hits, %0 failures
-ReSign|src.c:50107 : 17 hits, %0 failures
-ReSign|src.c:50109 : 17 hits, %0 failures
-UnSign|src.c:50109 : 17 hits, %0 failures
-UnSign|src.c:41517 : 17 hits, %0 failures
-UnSign|src.c:41519 : 17 hits, %0 failures
-ReSign|src.c:41689 : 17 hits, %0 failures
-UnSign|src.c:41694 : 17 hits, %0 failures
-ReSign|src.c:41694 : 17 hits, %0 failures
-ReSign|src.c:41699 : 17 hits, %0 failures
-ReSign|src.c:49827 : 17 hits, %0 failures
-ReSign|src.c:49829 : 17 hits, %0 failures
-ReSign|src.c:49839 : 17 hits, %0 failures
-UnSign|src.c:49944 : 17 hits, %0 failures
-UnSign|src.c:49945 : 17 hits, %0 failures
-UnSign|src.c:49947 : 17 hits, %0 failures
-ReSign|src.c:50131 : 17 hits, %0 failures
-ReSign|src.c:50134 : 17 hits, %0 failures
-ReSign|src.c:50137 : 17 hits, %0 failures
-UnSign|src.c:50138 : 17 hits, %0 failures
-ReSign|src.c:50138 : 17 hits, %0 failures
-ReSign|src.c:50141 : 17 hits, %0 failures
-ReSign|src.c:50149 : 17 hits, %0 failures
-ReSign|src.c:50153 : 17 hits, %0 failures
-ReSign|src.c:59754 : 17 hits, %0 failures
-ReSign|src.c:59756 : 17 hits, %0 failures
-ReSign|src.c:59328 : 17 hits, %0 failures
-ReSign|src.c:59349 : 17 hits, %0 failures
-UnSign|src.c:50718 : 17 hits, %0 failures
-ReSign|src.c:50718 : 17 hits, %0 failures
-ReSign|src.c:47890 : 17 hits, %0 failures
-ReSign|src.c:50669 : 17 hits, %0 failures
-UnSign|src.c:38807 : 17 hits, %0 failures
-ReSign|src.c:38807 : 17 hits, %0 failures
-ReSign|src.c:38811 : 17 hits, %0 failures
-ReSign|src.c:59370 : 17 hits, %0 failures
-ReSign|src.c:59769 : 17 hits, %0 failures
-ReSign|src.c:59772 : 17 hits, %0 failures
-ReSign|src.c:83704 : 17 hits, %0 failures
-ReSign|src.c:101550 : 17 hits, %0 failures
-UnSign|src.c:101401 : 17 hits, %0 failures
-ReSign|src.c:101401 : 17 hits, %0 failures
-UnSign|src.c:101403 : 17 hits, %0 failures
-ReSign|src.c:101403 : 17 hits, %0 failures
-ReSign|src.c:74534 : 17 hits, %0 failures
-ReSign|src.c:74535 : 17 hits, %0 failures
-ReSign|src.c:71291 : 17 hits, %0 failures
-ReSign|src.c:71292 : 17 hits, %0 failures
-ReSign|src.c:21942 : 16 hits, %0 failures
-ReSign|src.c:21948 : 16 hits, %0 failures
-ReSign|src.c:21959 : 16 hits, %0 failures
-ReSign|src.c:108976 : 16 hits, %0 failures
-ReSign|src.c:78135 : 16 hits, %0 failures
-ReSign|src.c:78151 : 16 hits, %0 failures
-ReSign|src.c:78205 : 16 hits, %0 failures
-ReSign|src.c:78824 : 16 hits, %0 failures
-ReSign|src.c:80663 : 16 hits, %0 failures
-ReSign|src.c:80665 : 16 hits, %0 failures
-ReSign|src.c:103058 : 16 hits, %0 failures
-ReSign|src.c:103068 : 16 hits, %0 failures
-ReSign|src.c:101969 : 16 hits, %0 failures
-UnSign|src.c:101969 : 16 hits, %0 failures
-ReSign|src.c:103285 : 16 hits, %0 failures
-ReSign|src.c:103303 : 16 hits, %0 failures
-UnSign|src.c:71463 : 16 hits, %0 failures
-ReSign|src.c:71463 : 16 hits, %0 failures
-UnSign|src.c:71466 : 16 hits, %0 failures
-ReSign|src.c:81206 : 16 hits, %0 failures
-ReSign|src.c:81239 : 16 hits, %0 failures
-ReSign|src.c:71471 : 16 hits, %0 failures
-ReSign|src.c:74994 : 16 hits, %0 failures
-ReSign|src.c:79930 : 16 hits, %0 failures
-ReSign|src.c:79991 : 16 hits, %0 failures
-ReSign|src.c:80246 : 16 hits, %0 failures
-ReSign|src.c:81099 : 16 hits, %0 failures
-ReSign|src.c:85110 : 16 hits, %0 failures
-ReSign|src.c:18584 : 15 hits, %0 failures
-UnSign|src.c:101217 : 15 hits, %0 failures
-ReSign|src.c:101219 : 15 hits, %0 failures
-ReSign|src.c:99464 : 15 hits, %0 failures
-UnSign|src.c:99471 : 15 hits, %0 failures
-ReSign|src.c:99472 : 15 hits, %0 failures
-ReSign|src.c:99479 : 15 hits, %0 failures
-UnSign|src.c:99485 : 15 hits, %0 failures
-ReSign|src.c:99485 : 15 hits, %0 failures
-UnSign|src.c:98847 : 15 hits, %0 failures
-UnSign|src.c:99595 : 15 hits, %0 failures
-ReSign|src.c:99595 : 15 hits, %0 failures
-UnSign|src.c:83704 : 15 hits, %0 failures
-ReSign|src.c:99008 : 15 hits, %0 failures
-ReSign|src.c:99596 : 15 hits, %0 failures
-UnSign|src.c:99091 : 15 hits, %0 failures
-ReSign|src.c:99091 : 15 hits, %0 failures
-ReSign|src.c:99655 : 15 hits, %0 failures
-UnSign|src.c:98930 : 15 hits, %0 failures
-UnSign|src.c:99995 : 15 hits, %0 failures
-ReSign|src.c:99995 : 15 hits, %0 failures
-UnSign|src.c:102545 : 15 hits, %0 failures
-ReSign|src.c:102545 : 15 hits, %0 failures
-UnSign|src.c:98652 : 15 hits, %0 failures
-ReSign|src.c:98652 : 15 hits, %0 failures
-UnSign|src.c:98655 : 15 hits, %0 failures
-ReSign|src.c:98655 : 15 hits, %0 failures
-UnSign|src.c:98657 : 15 hits, %0 failures
-ReSign|src.c:98657 : 15 hits, %0 failures
-UnSign|src.c:57388 : 15 hits, %0 failures
-UnSign|src.c:56612 : 15 hits, %0 failures
-ReSign|src.c:56623 : 15 hits, %0 failures
-ReSign|src.c:56633 : 15 hits, %0 failures
-ReSign|src.c:19740 : 15 hits, %0 failures
-ReSign|src.c:19122 : 15 hits, %0 failures
-ReSign|src.c:19123 : 15 hits, %0 failures
-ReSign|src.c:19125 : 15 hits, %0 failures
-UnSign|src.c:19138 : 15 hits, %0 failures
-UnSign|src.c:56641 : 15 hits, %0 failures
-ReSign|src.c:14306 : 15 hits, %0 failures
-ReSign|src.c:70589 : 15 hits, %0 failures
-ReSign|src.c:93581 : 15 hits, %0 failures
-ReSign|src.c:18720 : 15 hits, %0 failures
-ReSign|src.c:18726 : 15 hits, %0 failures
-ReSign|src.c:109592 : 14 hits, %0 failures
-ReSign|src.c:21961 : 14 hits, %0 failures
-UnSign|src.c:21966 : 14 hits, %0 failures
-ReSign|src.c:21972 : 14 hits, %0 failures
-ReSign|src.c:21776 : 14 hits, %0 failures
-ReSign|src.c:21783 : 14 hits, %0 failures
-ReSign|src.c:21791 : 14 hits, %0 failures
-ReSign|src.c:80638 : 14 hits, %0 failures
-ReSign|src.c:80640 : 14 hits, %0 failures
-ReSign|src.c:90556 : 14 hits, %0 failures
-ReSign|src.c:90560 : 14 hits, %0 failures
-ReSign|src.c:90569 : 14 hits, %0 failures
-ReSign|src.c:90577 : 14 hits, %0 failures
-UnSign|src.c:94223 : 14 hits, %0 failures
-ReSign|src.c:94226 : 14 hits, %0 failures
-UnSign|src.c:94229 : 14 hits, %0 failures
-ReSign|src.c:94229 : 14 hits, %0 failures
-ReSign|src.c:93980 : 14 hits, %0 failures
-UnSign|src.c:93982 : 14 hits, %0 failures
-ReSign|src.c:93982 : 14 hits, %0 failures
-ReSign|src.c:93656 : 14 hits, %0 failures
-UnSign|src.c:93659 : 14 hits, %0 failures
-UnSign|src.c:93662 : 14 hits, %0 failures
-ReSign|src.c:80569 : 14 hits, %0 failures
-ReSign|src.c:80571 : 14 hits, %0 failures
-ReSign|src.c:80573 : 14 hits, %0 failures
-ReSign|src.c:93677 : 14 hits, %0 failures
-ReSign|src.c:93683 : 14 hits, %0 failures
-ReSign|src.c:93705 : 14 hits, %0 failures
-UnSign|src.c:93708 : 14 hits, %0 failures
-ReSign|src.c:93719 : 14 hits, %0 failures
-UnSign|src.c:93726 : 14 hits, %0 failures
-UnSign|src.c:93984 : 14 hits, %0 failures
-UnSign|src.c:70974 : 14 hits, %0 failures
-ReSign|src.c:70974 : 14 hits, %0 failures
-UnSign|src.c:70989 : 14 hits, %0 failures
-ReSign|src.c:70989 : 14 hits, %0 failures
-ReSign|src.c:70994 : 14 hits, %0 failures
-UnSign|src.c:70994 : 14 hits, %0 failures
-UnSign|src.c:71000 : 14 hits, %0 failures
-ReSign|src.c:71007 : 14 hits, %0 failures
-ReSign|src.c:71008 : 14 hits, %0 failures
-ReSign|src.c:71033 : 14 hits, %0 failures
-UnSign|src.c:71047 : 14 hits, %0 failures
-ReSign|src.c:71055 : 14 hits, %0 failures
-ReSign|src.c:71069 : 14 hits, %0 failures
-ReSign|src.c:71070 : 14 hits, %0 failures
-ReSign|src.c:70922 : 14 hits, %0 failures
-ReSign|src.c:71089 : 14 hits, %0 failures
-ReSign|src.c:71096 : 14 hits, %0 failures
-ReSign|src.c:71120 : 14 hits, %0 failures
-UnSign|src.c:93986 : 14 hits, %0 failures
-UnSign|src.c:93924 : 14 hits, %0 failures
-ReSign|src.c:93924 : 14 hits, %0 failures
-UnSign|src.c:93925 : 14 hits, %0 failures
-UnSign|src.c:93930 : 14 hits, %0 failures
-UnSign|src.c:94242 : 14 hits, %0 failures
-ReSign|src.c:94245 : 14 hits, %0 failures
-ReSign|src.c:94251 : 14 hits, %0 failures
-UnSign|src.c:90995 : 14 hits, %0 failures
-ReSign|src.c:94257 : 14 hits, %0 failures
-ReSign|src.c:94271 : 14 hits, %0 failures
-ReSign|src.c:94312 : 14 hits, %0 failures
-ReSign|src.c:94317 : 14 hits, %0 failures
-UnSign|src.c:94343 : 14 hits, %0 failures
-ReSign|src.c:94343 : 14 hits, %0 failures
-ReSign|src.c:94368 : 14 hits, %0 failures
-UnSign|src.c:94382 : 14 hits, %0 failures
-ReSign|src.c:94382 : 14 hits, %0 failures
-ReSign|src.c:91910 : 14 hits, %0 failures
-ReSign|src.c:91920 : 14 hits, %0 failures
-UnSign|src.c:94394 : 14 hits, %0 failures
-ReSign|src.c:94394 : 14 hits, %0 failures
-UnSign|src.c:102752 : 14 hits, %0 failures
-ReSign|src.c:102768 : 14 hits, %0 failures
-ReSign|src.c:74298 : 14 hits, %0 failures
-UnSign|src.c:102823 : 14 hits, %0 failures
-ReSign|src.c:102845 : 14 hits, %0 failures
-UnSign|src.c:102926 : 14 hits, %0 failures
-ReSign|src.c:102933 : 14 hits, %0 failures
-ReSign|src.c:102936 : 14 hits, %0 failures
-ReSign|src.c:102940 : 14 hits, %0 failures
-ReSign|src.c:102942 : 14 hits, %0 failures
-UnSign|src.c:102948 : 14 hits, %0 failures
-ReSign|src.c:102948 : 14 hits, %0 failures
-UnSign|src.c:101064 : 14 hits, %0 failures
-ReSign|src.c:101064 : 14 hits, %0 failures
-ReSign|src.c:101070 : 14 hits, %0 failures
-UnSign|src.c:101090 : 14 hits, %0 failures
-ReSign|src.c:101090 : 14 hits, %0 failures
-UnSign|src.c:99989 : 14 hits, %0 failures
-ReSign|src.c:100100 : 14 hits, %0 failures
-ReSign|src.c:100104 : 14 hits, %0 failures
-ReSign|src.c:102966 : 14 hits, %0 failures
-ReSign|src.c:103006 : 14 hits, %0 failures
-ReSign|src.c:103014 : 14 hits, %0 failures
-ReSign|src.c:103021 : 14 hits, %0 failures
-ReSign|src.c:103038 : 14 hits, %0 failures
-UnSign|src.c:103051 : 14 hits, %0 failures
-UnSign|src.c:103068 : 14 hits, %0 failures
-UnSign|src.c:103083 : 14 hits, %0 failures
-UnSign|src.c:103088 : 14 hits, %0 failures
-ReSign|src.c:103092 : 14 hits, %0 failures
-ReSign|src.c:103116 : 14 hits, %0 failures
-ReSign|src.c:103120 : 14 hits, %0 failures
-ReSign|src.c:103134 : 14 hits, %0 failures
-UnSign|src.c:103143 : 14 hits, %0 failures
-UnSign|src.c:101865 : 14 hits, %0 failures
-ReSign|src.c:101865 : 14 hits, %0 failures
-UnSign|src.c:101966 : 14 hits, %0 failures
-ReSign|src.c:101968 : 14 hits, %0 failures
-UnSign|src.c:101968 : 14 hits, %0 failures
-UnSign|src.c:101989 : 14 hits, %0 failures
-ReSign|src.c:101989 : 14 hits, %0 failures
-ReSign|src.c:101996 : 14 hits, %0 failures
-ReSign|src.c:102039 : 14 hits, %0 failures
-ReSign|src.c:102564 : 14 hits, %0 failures
-UnSign|src.c:91031 : 14 hits, %0 failures
-ReSign|src.c:91036 : 14 hits, %0 failures
-ReSign|src.c:91038 : 14 hits, %0 failures
-UnSign|src.c:91038 : 14 hits, %0 failures
-ReSign|src.c:90945 : 14 hits, %0 failures
-ReSign|src.c:91045 : 14 hits, %0 failures
-ReSign|src.c:91050 : 14 hits, %0 failures
-ReSign|src.c:91058 : 14 hits, %0 failures
-ReSign|src.c:91062 : 14 hits, %0 failures
-ReSign|src.c:91067 : 14 hits, %0 failures
-UnSign|src.c:91067 : 14 hits, %0 failures
-ReSign|src.c:91075 : 14 hits, %0 failures
-ReSign|src.c:91185 : 14 hits, %0 failures
-ReSign|src.c:91190 : 14 hits, %0 failures
-UnSign|src.c:103229 : 14 hits, %15 failures
-ReSign|src.c:103229 : 14 hits, %0 failures
-ReSign|src.c:103245 : 14 hits, %0 failures
-UnSign|src.c:103274 : 14 hits, %0 failures
-ReSign|src.c:102604 : 14 hits, %0 failures
-ReSign|src.c:102608 : 14 hits, %0 failures
-ReSign|src.c:102615 : 14 hits, %0 failures
-ReSign|src.c:94824 : 14 hits, %0 failures
-ReSign|src.c:94831 : 14 hits, %0 failures
-UnSign|src.c:94853 : 14 hits, %0 failures
-ReSign|src.c:91645 : 14 hits, %0 failures
-ReSign|src.c:91652 : 14 hits, %0 failures
-UnSign|src.c:91652 : 14 hits, %0 failures
-ReSign|src.c:91653 : 14 hits, %0 failures
-UnSign|src.c:91653 : 14 hits, %0 failures
-UnSign|src.c:59242 : 14 hits, %0 failures
-ReSign|src.c:59247 : 14 hits, %0 failures
-ReSign|src.c:72273 : 14 hits, %0 failures
-UnSign|src.c:99498 : 14 hits, %0 failures
-ReSign|src.c:99498 : 14 hits, %0 failures
-ReSign|src.c:99500 : 14 hits, %0 failures
-ReSign|src.c:98893 : 14 hits, %0 failures
-ReSign|src.c:98895 : 14 hits, %0 failures
-UnSign|src.c:99503 : 14 hits, %86 failures
-UnSign|src.c:109445 : 14 hits, %0 failures
-ReSign|src.c:42052 : 14 hits, %0 failures
-ReSign|src.c:41947 : 14 hits, %0 failures
-UnSign|src.c:38146 : 14 hits, %0 failures
-ReSign|src.c:38154 : 14 hits, %0 failures
-ReSign|src.c:38233 : 14 hits, %0 failures
-ReSign|src.c:50167 : 14 hits, %0 failures
-ReSign|src.c:42704 : 14 hits, %0 failures
-ReSign|src.c:38629 : 14 hits, %0 failures
-ReSign|src.c:74860 : 14 hits, %0 failures
-ReSign|src.c:74865 : 14 hits, %0 failures
-ReSign|src.c:80354 : 14 hits, %0 failures
-ReSign|src.c:80363 : 14 hits, %0 failures
-ReSign|src.c:71430 : 14 hits, %0 failures
-ReSign|src.c:98953 : 14 hits, %0 failures
-ReSign|src.c:98956 : 14 hits, %0 failures
-ReSign|src.c:81538 : 14 hits, %0 failures
-ReSign|src.c:94419 : 13 hits, %0 failures
-ReSign|src.c:69781 : 13 hits, %0 failures
-ReSign|src.c:69785 : 13 hits, %0 failures
-UnSign|src.c:57033 : 13 hits, %0 failures
-ReSign|src.c:57033 : 13 hits, %0 failures
-UnSign|src.c:57034 : 13 hits, %0 failures
-UnSign|src.c:57036 : 13 hits, %0 failures
-UnSign|src.c:63828 : 13 hits, %0 failures
-UnSign|src.c:74197 : 13 hits, %0 failures
-ReSign|src.c:74197 : 13 hits, %0 failures
-ReSign|src.c:63877 : 13 hits, %0 failures
-ReSign|src.c:63900 : 13 hits, %0 failures
-ReSign|src.c:63921 : 13 hits, %0 failures
-ReSign|src.c:86956 : 13 hits, %0 failures
-ReSign|src.c:86969 : 13 hits, %0 failures
-ReSign|src.c:86979 : 13 hits, %0 failures
-ReSign|src.c:49844 : 13 hits, %0 failures
-UnSign|src.c:49856 : 13 hits, %0 failures
-ReSign|src.c:49856 : 13 hits, %0 failures
-UnSign|src.c:49859 : 13 hits, %0 failures
-ReSign|src.c:49859 : 13 hits, %0 failures
-UnSign|src.c:49871 : 13 hits, %0 failures
-ReSign|src.c:49871 : 13 hits, %0 failures
-ReSign|src.c:49889 : 13 hits, %0 failures
-ReSign|src.c:49893 : 13 hits, %0 failures
-UnSign|src.c:49900 : 13 hits, %0 failures
-UnSign|src.c:49920 : 13 hits, %0 failures
-ReSign|src.c:49926 : 13 hits, %0 failures
-ReSign|src.c:49927 : 13 hits, %0 failures
-ReSign|src.c:128447 : 13 hits, %0 failures
-ReSign|src.c:108126 : 12 hits, %0 failures
-ReSign|src.c:14534 : 12 hits, %0 failures
-ReSign|src.c:40288 : 12 hits, %0 failures
-ReSign|src.c:21597 : 12 hits, %0 failures
-ReSign|src.c:78026 : 12 hits, %0 failures
-UnSign|src.c:78026 : 12 hits, %0 failures
-ReSign|src.c:77706 : 12 hits, %0 failures
-ReSign|src.c:89877 : 12 hits, %0 failures
-ReSign|src.c:105857 : 12 hits, %0 failures
-ReSign|src.c:70871 : 12 hits, %0 failures
-ReSign|src.c:70873 : 12 hits, %0 failures
-ReSign|src.c:74299 : 12 hits, %0 failures
-ReSign|src.c:101248 : 12 hits, %0 failures
-ReSign|src.c:99855 : 12 hits, %0 failures
-ReSign|src.c:99866 : 12 hits, %0 failures
-ReSign|src.c:99743 : 12 hits, %0 failures
-ReSign|src.c:99878 : 12 hits, %0 failures
-UnSign|src.c:103098 : 12 hits, %0 failures
-UnSign|src.c:103100 : 12 hits, %0 failures
-ReSign|src.c:103100 : 12 hits, %0 failures
-ReSign|src.c:102059 : 12 hits, %0 failures
-ReSign|src.c:102124 : 12 hits, %0 failures
-ReSign|src.c:58243 : 12 hits, %0 failures
-UnSign|src.c:103230 : 12 hits, %0 failures
-ReSign|src.c:67108 : 12 hits, %0 failures
-ReSign|src.c:67117 : 12 hits, %0 failures
-ReSign|src.c:107349 : 12 hits, %0 failures
-ReSign|src.c:18673 : 12 hits, %0 failures
-ReSign|src.c:86958 : 12 hits, %0 failures
-UnSign|src.c:34455 : 12 hits, %0 failures
-UnSign|src.c:53310 : 12 hits, %0 failures
-UnSign|src.c:53312 : 12 hits, %0 failures
-UnSign|src.c:48927 : 12 hits, %0 failures
-UnSign|src.c:48932 : 12 hits, %0 failures
-UnSign|src.c:48948 : 12 hits, %0 failures
-UnSign|src.c:48975 : 12 hits, %0 failures
-ReSign|src.c:49000 : 12 hits, %0 failures
-ReSign|src.c:57990 : 12 hits, %0 failures
-ReSign|src.c:73342 : 12 hits, %0 failures
-ReSign|src.c:79997 : 12 hits, %0 failures
-ReSign|src.c:101586 : 12 hits, %0 failures
-ReSign|src.c:77822 : 12 hits, %0 failures
-ReSign|src.c:108657 : 12 hits, %0 failures
-ReSign|src.c:108670 : 12 hits, %0 failures
-ReSign|src.c:56356 : 11 hits, %0 failures
-ReSign|src.c:35102 : 11 hits, %0 failures
-ReSign|src.c:35117 : 11 hits, %0 failures
-UnSign|src.c:58152 : 11 hits, %0 failures
-ReSign|src.c:73358 : 11 hits, %0 failures
-ReSign|src.c:73341 : 11 hits, %0 failures
-UnSign|src.c:109577 : 10 hits, %0 failures
-ReSign|src.c:109622 : 10 hits, %0 failures
-UnSign|src.c:109626 : 10 hits, %0 failures
-ReSign|src.c:78219 : 10 hits, %0 failures
-ReSign|src.c:107299 : 10 hits, %0 failures
-UnSign|src.c:101339 : 10 hits, %0 failures
-ReSign|src.c:101341 : 10 hits, %0 failures
-ReSign|src.c:47910 : 10 hits, %0 failures
-ReSign|src.c:96463 : 10 hits, %0 failures
-ReSign|src.c:96491 : 10 hits, %0 failures
-ReSign|src.c:96493 : 10 hits, %0 failures
-ReSign|src.c:96697 : 10 hits, %0 failures
-ReSign|src.c:77875 : 10 hits, %0 failures
-ReSign|src.c:97519 : 10 hits, %0 failures
-UnSign|src.c:56771 : 10 hits, %0 failures
-ReSign|src.c:56772 : 10 hits, %0 failures
-UnSign|src.c:56850 : 10 hits, %0 failures
-UnSign|src.c:54284 : 10 hits, %0 failures
-ReSign|src.c:101404 : 10 hits, %0 failures
-ReSign|src.c:102546 : 10 hits, %0 failures
-ReSign|src.c:102554 : 10 hits, %0 failures
-UnSign|src.c:74555 : 10 hits, %0 failures
-UnSign|src.c:74568 : 10 hits, %0 failures
-UnSign|src.c:102558 : 10 hits, %0 failures
-UnSign|dlmalloc.c:4284 : 10 hits, %0 failures
-ReSign|src.c:51856 : 10 hits, %0 failures
-UnSign|src.c:51857 : 10 hits, %0 failures
-ReSign|src.c:51857 : 10 hits, %0 failures
-ReSign|src.c:67110 : 10 hits, %0 failures
-UnSign|dlmalloc.c:4634 : 10 hits, %0 failures
-UnSign|src.c:54942 : 10 hits, %0 failures
-ReSign|src.c:94004 : 10 hits, %0 failures
-ReSign|src.c:94107 : 10 hits, %0 failures
-ReSign|src.c:94805 : 10 hits, %0 failures
-ReSign|src.c:56656 : 10 hits, %0 failures
-UnSign|src.c:60608 : 10 hits, %0 failures
-ReSign|src.c:14244 : 9 hits, %0 failures
-UnSign|src.c:74950 : 9 hits, %0 failures
-UnSign|src.c:71495 : 9 hits, %0 failures
-ReSign|src.c:57240 : 9 hits, %0 failures
-ReSign|src.c:57241 : 9 hits, %0 failures
-ReSign|src.c:57244 : 9 hits, %0 failures
-ReSign|src.c:57258 : 9 hits, %0 failures
-ReSign|src.c:108531 : 9 hits, %0 failures
-ReSign|src.c:35105 : 9 hits, %0 failures
-ReSign|src.c:14530 : 8 hits, %0 failures
-ReSign|src.c:55559 : 8 hits, %0 failures
-ReSign|src.c:109536 : 8 hits, %0 failures
-ReSign|src.c:109539 : 8 hits, %0 failures
-ReSign|src.c:78114 : 8 hits, %0 failures
-ReSign|src.c:78115 : 8 hits, %0 failures
-ReSign|src.c:78121 : 8 hits, %0 failures
-ReSign|src.c:78125 : 8 hits, %0 failures
-ReSign|src.c:78126 : 8 hits, %0 failures
-ReSign|src.c:78129 : 8 hits, %0 failures
-ReSign|src.c:78138 : 8 hits, %0 failures
-ReSign|src.c:78145 : 8 hits, %0 failures
-ReSign|src.c:78164 : 8 hits, %0 failures
-UnSign|src.c:89689 : 8 hits, %0 failures
-ReSign|src.c:89690 : 8 hits, %0 failures
-ReSign|src.c:89696 : 8 hits, %0 failures
-ReSign|src.c:89697 : 8 hits, %0 failures
-ReSign|src.c:21096 : 8 hits, %0 failures
-ReSign|src.c:78166 : 8 hits, %0 failures
-ReSign|src.c:78170 : 8 hits, %0 failures
-ReSign|src.c:78179 : 8 hits, %0 failures
-ReSign|src.c:78186 : 8 hits, %0 failures
-ReSign|src.c:78328 : 8 hits, %0 failures
-UnSign|src.c:78824 : 8 hits, %0 failures
-ReSign|src.c:78828 : 8 hits, %0 failures
-ReSign|src.c:78837 : 8 hits, %0 failures
-ReSign|src.c:78862 : 8 hits, %0 failures
-ReSign|src.c:78872 : 8 hits, %0 failures
-ReSign|src.c:78988 : 8 hits, %0 failures
-ReSign|src.c:89717 : 8 hits, %0 failures
-ReSign|src.c:60880 : 8 hits, %0 failures
-ReSign|src.c:60890 : 8 hits, %0 failures
-ReSign|src.c:59914 : 8 hits, %0 failures
-ReSign|src.c:72565 : 8 hits, %0 failures
-ReSign|src.c:72566 : 8 hits, %0 failures
-ReSign|src.c:101361 : 8 hits, %0 failures
-UnSign|src.c:77433 : 8 hits, %0 failures
-ReSign|src.c:85002 : 8 hits, %0 failures
-ReSign|src.c:77844 : 8 hits, %0 failures
-ReSign|src.c:97447 : 8 hits, %0 failures
-ReSign|src.c:97520 : 8 hits, %0 failures
-ReSign|src.c:54869 : 8 hits, %0 failures
-ReSign|src.c:54872 : 8 hits, %0 failures
-ReSign|src.c:65726 : 8 hits, %0 failures
-ReSign|src.c:65734 : 8 hits, %0 failures
-ReSign|src.c:34760 : 8 hits, %0 failures
-ReSign|dlmalloc.c:4652 : 8 hits, %0 failures
-ReSign|src.c:71760 : 8 hits, %0 failures
-ReSign|src.c:70550 : 8 hits, %0 failures
-ReSign|src.c:70565 : 8 hits, %0 failures
-ReSign|src.c:70573 : 8 hits, %0 failures
-UnSign|src.c:70573 : 8 hits, %0 failures
-ReSign|src.c:70576 : 8 hits, %0 failures
-ReSign|src.c:70578 : 8 hits, %0 failures
-ReSign|src.c:70593 : 8 hits, %0 failures
-ReSign|src.c:70596 : 8 hits, %0 failures
-ReSign|src.c:70601 : 8 hits, %0 failures
-ReSign|src.c:70605 : 8 hits, %0 failures
-ReSign|src.c:70607 : 8 hits, %0 failures
-UnSign|src.c:101337 : 8 hits, %0 failures
-UnSign|src.c:79782 : 8 hits, %0 failures
-ReSign|src.c:79782 : 8 hits, %0 failures
-ReSign|src.c:79809 : 8 hits, %0 failures
-ReSign|src.c:76981 : 8 hits, %0 failures
-ReSign|src.c:79824 : 8 hits, %0 failures
-ReSign|src.c:79903 : 8 hits, %0 failures
-ReSign|src.c:80000 : 8 hits, %0 failures
-ReSign|src.c:80036 : 8 hits, %0 failures
-ReSign|src.c:82203 : 8 hits, %0 failures
-ReSign|src.c:101268 : 8 hits, %0 failures
-ReSign|src.c:77794 : 8 hits, %0 failures
-ReSign|src.c:81533 : 8 hits, %0 failures
-UnSign|src.c:81545 : 8 hits, %0 failures
-ReSign|src.c:81545 : 8 hits, %0 failures
-ReSign|src.c:77808 : 8 hits, %0 failures
-ReSign|src.c:108701 : 8 hits, %0 failures
-ReSign|src.c:14557 : 7 hits, %0 failures
-ReSign|2639 : 7 hits, %0 failures
-ReSign|src.c:94412 : 7 hits, %0 failures
-ReSign|src.c:50121 : 7 hits, %0 failures
-ReSign|src.c:50124 : 7 hits, %0 failures
-UnSign|src.c:50124 : 7 hits, %0 failures
-ReSign|src.c:109445 : 7 hits, %0 failures
-ReSign|src.c:42020 : 7 hits, %0 failures
-UnSign|src.c:42024 : 7 hits, %0 failures
-ReSign|src.c:42024 : 7 hits, %0 failures
-ReSign|src.c:42027 : 7 hits, %0 failures
-ReSign|src.c:42057 : 7 hits, %0 failures
-ReSign|src.c:50125 : 7 hits, %0 failures
-UnSign|src.c:49990 : 7 hits, %0 failures
-ReSign|src.c:41945 : 7 hits, %0 failures
-UnSign|src.c:41947 : 7 hits, %0 failures
-ReSign|src.c:34392 : 7 hits, %0 failures
-ReSign|src.c:41949 : 7 hits, %0 failures
-ReSign|src.c:41954 : 7 hits, %0 failures
-UnSign|src.c:41955 : 7 hits, %0 failures
-ReSign|src.c:41955 : 7 hits, %0 failures
-ReSign|src.c:41979 : 7 hits, %0 failures
-ReSign|src.c:38055 : 7 hits, %0 failures
-UnSign|src.c:38183 : 7 hits, %0 failures
-ReSign|src.c:38183 : 7 hits, %0 failures
-ReSign|src.c:41989 : 7 hits, %0 failures
-ReSign|src.c:42126 : 7 hits, %0 failures
-ReSign|src.c:50158 : 7 hits, %0 failures
-UnSign|src.c:50158 : 7 hits, %0 failures
-UnSign|src.c:73223 : 7 hits, %0 failures
-ReSign|src.c:73223 : 7 hits, %0 failures
-UnSign|src.c:73224 : 7 hits, %0 failures
-ReSign|src.c:59324 : 7 hits, %0 failures
-ReSign|src.c:42490 : 7 hits, %0 failures
-ReSign|src.c:40452 : 7 hits, %0 failures
-ReSign|src.c:50632 : 7 hits, %0 failures
-ReSign|src.c:42537 : 7 hits, %0 failures
-UnSign|src.c:42543 : 7 hits, %0 failures
-ReSign|src.c:42543 : 7 hits, %0 failures
-ReSign|src.c:42545 : 7 hits, %0 failures
-ReSign|src.c:42732 : 7 hits, %0 failures
-UnSign|src.c:42751 : 7 hits, %0 failures
-ReSign|src.c:42751 : 7 hits, %0 failures
-UnSign|src.c:42761 : 7 hits, %0 failures
-UnSign|src.c:38708 : 7 hits, %0 failures
-ReSign|src.c:38708 : 7 hits, %0 failures
-ReSign|src.c:38714 : 7 hits, %0 failures
-ReSign|src.c:38718 : 7 hits, %0 failures
-ReSign|src.c:34549 : 7 hits, %0 failures
-ReSign|src.c:38767 : 7 hits, %0 failures
-ReSign|src.c:38775 : 7 hits, %0 failures
-ReSign|src.c:38784 : 7 hits, %0 failures
-ReSign|src.c:50724 : 7 hits, %0 failures
-ReSign|dlmalloc.c:4661 : 7 hits, %0 failures
-UnSign|src.c:48976 : 7 hits, %0 failures
-ReSign|src.c:48976 : 7 hits, %0 failures
-UnSign|src.c:71206 : 7 hits, %0 failures
-UnSign|src.c:71048 : 7 hits, %0 failures
-ReSign|src.c:94448 : 7 hits, %0 failures
-ReSign|src.c:94475 : 7 hits, %0 failures
-UnSign|src.c:74782 : 7 hits, %100 failures
-ReSign|src.c:74855 : 7 hits, %0 failures
-ReSign|src.c:80359 : 7 hits, %0 failures
-ReSign|src.c:74870 : 7 hits, %0 failures
-ReSign|src.c:74877 : 7 hits, %0 failures
-UnSign|src.c:74879 : 7 hits, %0 failures
-ReSign|src.c:74879 : 7 hits, %0 failures
-ReSign|src.c:94479 : 7 hits, %0 failures
-ReSign|src.c:94487 : 7 hits, %0 failures
-ReSign|src.c:94492 : 7 hits, %0 failures
-ReSign|src.c:94699 : 7 hits, %0 failures
-ReSign|src.c:73760 : 7 hits, %0 failures
-ReSign|src.c:73764 : 7 hits, %0 failures
-ReSign|src.c:74329 : 7 hits, %0 failures
-ReSign|src.c:57147 : 7 hits, %0 failures
-UnSign|src.c:57990 : 7 hits, %0 failures
-UnSign|src.c:101413 : 7 hits, %0 failures
-ReSign|src.c:101413 : 7 hits, %0 failures
-UnSign|src.c:98935 : 7 hits, %0 failures
-ReSign|src.c:71406 : 7 hits, %0 failures
-ReSign|src.c:71424 : 7 hits, %0 failures
-UnSign|src.c:71430 : 7 hits, %0 failures
-ReSign|src.c:98943 : 7 hits, %0 failures
-ReSign|src.c:102248 : 7 hits, %0 failures
-ReSign|src.c:108076 : 6 hits, %0 failures
-ReSign|src.c:108087 : 6 hits, %0 failures
-ReSign|src.c:108090 : 6 hits, %0 failures
-ReSign|src.c:108092 : 6 hits, %0 failures
-ReSign|src.c:108100 : 6 hits, %0 failures
-ReSign|src.c:108108 : 6 hits, %0 failures
-ReSign|src.c:108152 : 6 hits, %0 failures
-ReSign|src.c:14537 : 6 hits, %0 failures
-ReSign|src.c:81275 : 6 hits, %0 failures
-ReSign|src.c:81292 : 6 hits, %0 failures
-ReSign|src.c:49238 : 6 hits, %0 failures
-ReSign|src.c:40287 : 6 hits, %0 failures
-ReSign|src.c:40314 : 6 hits, %0 failures
-ReSign|src.c:78994 : 6 hits, %0 failures
-ReSign|src.c:79004 : 6 hits, %0 failures
-ReSign|src.c:79008 : 6 hits, %0 failures
-ReSign|src.c:20355 : 6 hits, %0 failures
-UnSign|src.c:70667 : 6 hits, %0 failures
-ReSign|src.c:70667 : 6 hits, %0 failures
-ReSign|src.c:70928 : 6 hits, %0 failures
-UnSign|src.c:72451 : 6 hits, %0 failures
-ReSign|src.c:72451 : 6 hits, %0 failures
-UnSign|src.c:72455 : 6 hits, %0 failures
-ReSign|src.c:70936 : 6 hits, %0 failures
-ReSign|src.c:70950 : 6 hits, %0 failures
-UnSign|src.c:70871 : 6 hits, %0 failures
-ReSign|src.c:70881 : 6 hits, %0 failures
-ReSign|src.c:74723 : 6 hits, %0 failures
-ReSign|src.c:91245 : 6 hits, %0 failures
-ReSign|src.c:91253 : 6 hits, %0 failures
-UnSign|src.c:101248 : 6 hits, %0 failures
-UnSign|src.c:99813 : 6 hits, %0 failures
-ReSign|src.c:99819 : 6 hits, %0 failures
-ReSign|src.c:99822 : 6 hits, %0 failures
-UnSign|src.c:99854 : 6 hits, %0 failures
-ReSign|src.c:99877 : 6 hits, %0 failures
-UnSign|src.c:99877 : 6 hits, %0 failures
-ReSign|src.c:101250 : 6 hits, %0 failures
-ReSign|src.c:101254 : 6 hits, %0 failures
-ReSign|src.c:102070 : 6 hits, %0 failures
-ReSign|src.c:102075 : 6 hits, %0 failures
-ReSign|src.c:102103 : 6 hits, %0 failures
-ReSign|src.c:102105 : 6 hits, %0 failures
-ReSign|src.c:102121 : 6 hits, %0 failures
-ReSign|src.c:102129 : 6 hits, %0 failures
-ReSign|src.c:58240 : 6 hits, %0 failures
-ReSign|src.c:58244 : 6 hits, %0 failures
-ReSign|src.c:19186 : 6 hits, %0 failures
-ReSign|src.c:107350 : 6 hits, %0 failures
-UnSign|src.c:105971 : 6 hits, %0 failures
-ReSign|src.c:105971 : 6 hits, %0 failures
-ReSign|src.c:105976 : 6 hits, %0 failures
-ReSign|src.c:18672 : 6 hits, %0 failures
-UnSign|src.c:18673 : 6 hits, %0 failures
-ReSign|src.c:96551 : 6 hits, %0 failures
-ReSign|src.c:66496 : 6 hits, %0 failures
-UnSign|src.c:52010 : 6 hits, %0 failures
-ReSign|src.c:66501 : 6 hits, %0 failures
-ReSign|src.c:66505 : 6 hits, %0 failures
-ReSign|src.c:108532 : 6 hits, %0 failures
-ReSign|src.c:42145 : 6 hits, %0 failures
-UnSign|src.c:42166 : 6 hits, %0 failures
-ReSign|src.c:42169 : 6 hits, %0 failures
-ReSign|src.c:42171 : 6 hits, %0 failures
-ReSign|src.c:42173 : 6 hits, %0 failures
-ReSign|src.c:34441 : 6 hits, %0 failures
-UnSign|src.c:34445 : 6 hits, %0 failures
-UnSign|src.c:34454 : 6 hits, %0 failures
-ReSign|src.c:42189 : 6 hits, %0 failures
-ReSign|src.c:54026 : 6 hits, %0 failures
-ReSign|src.c:53295 : 6 hits, %0 failures
-UnSign|src.c:53299 : 6 hits, %0 failures
-ReSign|src.c:53300 : 6 hits, %0 failures
-ReSign|src.c:48927 : 6 hits, %0 failures
-ReSign|src.c:53321 : 6 hits, %0 failures
-ReSign|src.c:53329 : 6 hits, %0 failures
-ReSign|src.c:54029 : 6 hits, %0 failures
-ReSign|src.c:54033 : 6 hits, %0 failures
-UnSign|src.c:54045 : 6 hits, %0 failures
-UnSign|src.c:54049 : 6 hits, %0 failures
-UnSign|src.c:54050 : 6 hits, %0 failures
-ReSign|src.c:54088 : 6 hits, %0 failures
-ReSign|src.c:102136 : 6 hits, %0 failures
-ReSign|src.c:101414 : 6 hits, %0 failures
-ReSign|src.c:71539 : 6 hits, %0 failures
-ReSign|src.c:98811 : 6 hits, %0 failures
-ReSign|src.c:74982 : 6 hits, %0 failures
-ReSign|src.c:73845 : 6 hits, %0 failures
-ReSign|src.c:79998 : 6 hits, %0 failures
-ReSign|src.c:80027 : 6 hits, %0 failures
-UnSign|src.c:78635 : 6 hits, %0 failures
-ReSign|src.c:80191 : 6 hits, %0 failures
-ReSign|src.c:101744 : 6 hits, %0 failures
-UnSign|src.c:72489 : 6 hits, %100 failures
-ReSign|src.c:72489 : 6 hits, %0 failures
-ReSign|src.c:72533 : 6 hits, %0 failures
-UnSign|src.c:72534 : 6 hits, %100 failures
-ReSign|src.c:72534 : 6 hits, %0 failures
-ReSign|src.c:72539 : 6 hits, %0 failures
-ReSign|src.c:108659 : 6 hits, %0 failures
-ReSign|src.c:128473 : 6 hits, %0 failures
-UnSign|src.c:31200 : 5 hits, %0 failures
-UnSign|src.c:35659 : 5 hits, %0 failures
-ReSign|src.c:35664 : 5 hits, %0 failures
-ReSign|src.c:35666 : 5 hits, %0 failures
-ReSign|src.c:35668 : 5 hits, %0 failures
-ReSign|src.c:35685 : 5 hits, %0 failures
-ReSign|src.c:36007 : 5 hits, %0 failures
-UnSign|src.c:101550 : 5 hits, %0 failures
-UnSign|src.c:101554 : 5 hits, %0 failures
-ReSign|src.c:101555 : 5 hits, %0 failures
-ReSign|src.c:93548 : 5 hits, %0 failures
-UnSign|src.c:93550 : 5 hits, %100 failures
-ReSign|src.c:93550 : 5 hits, %0 failures
-UnSign|src.c:93551 : 5 hits, %0 failures
-ReSign|src.c:93551 : 5 hits, %0 failures
-ReSign|src.c:93553 : 5 hits, %0 failures
-ReSign|src.c:94784 : 5 hits, %0 failures
-ReSign|src.c:94001 : 5 hits, %0 failures
-ReSign|src.c:94009 : 5 hits, %0 failures
-UnSign|src.c:94799 : 5 hits, %0 failures
-ReSign|src.c:94800 : 5 hits, %0 failures
-ReSign|src.c:94059 : 5 hits, %0 failures
-ReSign|src.c:94067 : 5 hits, %0 failures
-UnSign|src.c:94072 : 5 hits, %0 failures
-ReSign|src.c:94072 : 5 hits, %0 failures
-ReSign|src.c:94090 : 5 hits, %0 failures
-UnSign|src.c:94805 : 5 hits, %0 failures
-ReSign|src.c:94036 : 5 hits, %0 failures
-ReSign|src.c:61388 : 5 hits, %0 failures
-ReSign|src.c:61396 : 5 hits, %0 failures
-ReSign|src.c:83547 : 5 hits, %0 failures
-ReSign|src.c:68133 : 5 hits, %0 failures
-UnSign|src.c:68136 : 5 hits, %0 failures
-ReSign|src.c:68138 : 5 hits, %0 failures
-ReSign|src.c:99042 : 5 hits, %0 failures
-UnSign|src.c:60606 : 5 hits, %0 failures
-ReSign|src.c:60606 : 5 hits, %0 failures
-ReSign|src.c:128475 : 5 hits, %0 failures
-ReSign|src.c:75243 : 4 hits, %0 failures
-ReSign|src.c:31201 : 4 hits, %0 failures
-UnSign|src.c:31201 : 4 hits, %0 failures
-ReSign|src.c:14552 : 4 hits, %0 failures
-ReSign|src.c:14528 : 4 hits, %0 failures
-ReSign|src.c:14532 : 4 hits, %0 failures
-ReSign|src.c:109775 : 4 hits, %0 failures
-ReSign|src.c:49267 : 4 hits, %0 failures
-ReSign|src.c:41117 : 4 hits, %0 failures
-UnSign|src.c:40287 : 4 hits, %0 failures
-ReSign|src.c:40294 : 4 hits, %0 failures
-UnSign|src.c:40304 : 4 hits, %0 failures
-ReSign|src.c:40313 : 4 hits, %0 failures
-ReSign|src.c:41302 : 4 hits, %0 failures
-UnSign|src.c:49372 : 4 hits, %0 failures
-ReSign|src.c:49383 : 4 hits, %0 failures
-ReSign|src.c:35261 : 4 hits, %0 failures
-ReSign|src.c:81557 : 4 hits, %0 failures
-ReSign|src.c:81562 : 4 hits, %0 failures
-UnSign|src.c:81564 : 4 hits, %0 failures
-ReSign|src.c:81564 : 4 hits, %0 failures
-ReSign|src.c:108612 : 4 hits, %0 failures
-UnSign|src.c:109539 : 4 hits, %0 failures
-ReSign|src.c:108412 : 4 hits, %0 failures
-UnSign|src.c:78055 : 4 hits, %0 failures
-ReSign|src.c:78057 : 4 hits, %0 failures
-ReSign|src.c:89811 : 4 hits, %0 failures
-ReSign|src.c:89816 : 4 hits, %0 failures
-ReSign|src.c:89828 : 4 hits, %0 failures
-ReSign|src.c:89833 : 4 hits, %0 failures
-UnSign|src.c:89834 : 4 hits, %0 failures
-ReSign|src.c:89840 : 4 hits, %0 failures
-UnSign|src.c:55527 : 4 hits, %0 failures
-ReSign|src.c:35880 : 4 hits, %0 failures
-ReSign|src.c:89937 : 4 hits, %0 failures
-ReSign|src.c:89996 : 4 hits, %0 failures
-ReSign|src.c:78258 : 4 hits, %0 failures
-ReSign|src.c:19105 : 4 hits, %0 failures
-ReSign|src.c:19106 : 4 hits, %0 failures
-ReSign|src.c:19108 : 4 hits, %0 failures
-ReSign|src.c:19109 : 4 hits, %0 failures
-ReSign|src.c:77596 : 4 hits, %0 failures
-ReSign|src.c:77601 : 4 hits, %0 failures
-ReSign|src.c:18677 : 4 hits, %0 failures
-UnSign|src.c:18678 : 4 hits, %0 failures
-ReSign|src.c:96402 : 4 hits, %0 failures
-ReSign|src.c:96547 : 4 hits, %0 failures
-ReSign|src.c:77433 : 4 hits, %0 failures
-ReSign|src.c:96659 : 4 hits, %0 failures
-ReSign|src.c:96760 : 4 hits, %0 failures
-ReSign|src.c:85148 : 4 hits, %0 failures
-ReSign|src.c:65730 : 4 hits, %0 failures
-UnSign|src.c:67504 : 4 hits, %0 failures
-ReSign|src.c:67504 : 4 hits, %0 failures
-ReSign|src.c:54483 : 4 hits, %0 failures
-ReSign|src.c:54586 : 4 hits, %0 failures
-ReSign|src.c:54590 : 4 hits, %0 failures
-ReSign|src.c:52013 : 4 hits, %0 failures
-ReSign|src.c:52068 : 4 hits, %0 failures
-ReSign|src.c:67545 : 4 hits, %0 failures
-ReSign|src.c:67552 : 4 hits, %0 failures
-ReSign|src.c:67560 : 4 hits, %0 failures
-ReSign|src.c:67565 : 4 hits, %0 failures
-ReSign|src.c:65554 : 4 hits, %0 failures
-ReSign|src.c:65561 : 4 hits, %0 failures
-ReSign|src.c:108594 : 4 hits, %0 failures
-ReSign|src.c:100108 : 4 hits, %0 failures
-UnSign|src.c:100115 : 4 hits, %0 failures
-ReSign|src.c:102377 : 4 hits, %0 failures
-UnSign|src.c:102529 : 4 hits, %0 failures
-ReSign|src.c:73846 : 4 hits, %0 failures
-UnSign|src.c:106257 : 4 hits, %0 failures
-ReSign|src.c:106264 : 4 hits, %0 failures
-ReSign|src.c:79785 : 4 hits, %0 failures
-ReSign|src.c:79792 : 4 hits, %0 failures
-ReSign|src.c:79800 : 4 hits, %0 failures
-ReSign|src.c:79807 : 4 hits, %0 failures
-ReSign|src.c:79815 : 4 hits, %0 failures
-ReSign|src.c:77013 : 4 hits, %0 failures
-ReSign|src.c:77016 : 4 hits, %0 failures
-ReSign|src.c:77036 : 4 hits, %0 failures
-ReSign|src.c:77025 : 4 hits, %0 failures
-ReSign|src.c:77057 : 4 hits, %0 failures
-ReSign|src.c:77026 : 4 hits, %0 failures
-ReSign|src.c:79816 : 4 hits, %0 failures
-UnSign|src.c:79824 : 4 hits, %0 failures
-ReSign|src.c:79836 : 4 hits, %0 failures
-ReSign|src.c:79842 : 4 hits, %0 failures
-UnSign|src.c:79848 : 4 hits, %0 failures
-ReSign|src.c:79848 : 4 hits, %0 failures
-ReSign|src.c:79867 : 4 hits, %0 failures
-ReSign|src.c:79869 : 4 hits, %0 failures
-ReSign|src.c:79870 : 4 hits, %0 failures
-ReSign|src.c:79873 : 4 hits, %0 failures
-ReSign|src.c:79879 : 4 hits, %0 failures
-ReSign|src.c:79907 : 4 hits, %0 failures
-ReSign|src.c:79908 : 4 hits, %0 failures
-ReSign|src.c:79918 : 4 hits, %0 failures
-ReSign|src.c:79932 : 4 hits, %0 failures
-ReSign|src.c:79956 : 4 hits, %0 failures
-ReSign|src.c:79969 : 4 hits, %0 failures
-UnSign|src.c:79969 : 4 hits, %0 failures
-UnSign|src.c:79975 : 4 hits, %0 failures
-ReSign|src.c:79975 : 4 hits, %0 failures
-ReSign|src.c:80012 : 4 hits, %0 failures
-ReSign|src.c:80023 : 4 hits, %0 failures
-UnSign|src.c:80031 : 4 hits, %0 failures
-UnSign|src.c:80244 : 4 hits, %0 failures
-UnSign|src.c:80248 : 4 hits, %0 failures
-UnSign|src.c:80250 : 4 hits, %0 failures
-ReSign|src.c:80250 : 4 hits, %0 failures
-ReSign|src.c:80099 : 4 hits, %0 failures
-ReSign|src.c:81095 : 4 hits, %0 failures
-ReSign|src.c:81108 : 4 hits, %0 failures
-ReSign|src.c:82205 : 4 hits, %0 failures
-ReSign|src.c:82214 : 4 hits, %0 failures
-ReSign|src.c:85093 : 4 hits, %0 failures
-ReSign|src.c:85106 : 4 hits, %0 failures
-UnSign|src.c:80191 : 4 hits, %0 failures
-ReSign|src.c:80210 : 4 hits, %0 failures
-UnSign|src.c:65909 : 4 hits, %0 failures
-ReSign|src.c:48978 : 4 hits, %0 failures
-UnSign|src.c:48982 : 4 hits, %0 failures
-UnSign|src.c:48983 : 4 hits, %0 failures
-ReSign|src.c:60763 : 4 hits, %0 failures
-UnSign|src.c:102331 : 4 hits, %0 failures
-ReSign|src.c:102337 : 4 hits, %0 failures
-ReSign|src.c:77770 : 4 hits, %0 failures
-UnSign|src.c:81547 : 4 hits, %0 failures
-ReSign|src.c:108672 : 4 hits, %0 failures
-ReSign|src.c:35750 : 4 hits, %0 failures
-ReSign|src.c:49579 : 4 hits, %0 failures
-ReSign|src.c:108693 : 4 hits, %0 failures
-ReSign|src.c:87939 : 4 hits, %0 failures
-ReSign|src.c:14509 : 3 hits, %0 failures
-ReSign|src.c:14515 : 3 hits, %0 failures
-ReSign|src.c:14516 : 3 hits, %0 failures
-UnSign|src.c:101196 : 3 hits, %0 failures
-ReSign|src.c:101196 : 3 hits, %0 failures
-UnSign|src.c:101207 : 3 hits, %0 failures
-ReSign|src.c:101207 : 3 hits, %0 failures
-UnSign|src.c:101235 : 3 hits, %0 failures
-ReSign|src.c:101235 : 3 hits, %0 failures
-UnSign|src.c:101626 : 3 hits, %0 failures
-ReSign|src.c:101626 : 3 hits, %0 failures
-ReSign|src.c:65541 : 3 hits, %0 failures
-ReSign|src.c:65546 : 3 hits, %0 failures
-ReSign|src.c:74260 : 3 hits, %0 failures
-ReSign|src.c:99016 : 3 hits, %0 failures
-ReSign|src.c:57547 : 3 hits, %0 failures
-UnSign|src.c:48984 : 3 hits, %0 failures
-ReSign|src.c:48984 : 3 hits, %0 failures
-UnSign|src.c:72491 : 3 hits, %100 failures
-ReSign|src.c:72491 : 3 hits, %0 failures
-UnSign|src.c:72492 : 3 hits, %0 failures
-ReSign|src.c:72516 : 3 hits, %0 failures
-UnSign|src.c:72536 : 3 hits, %100 failures
-ReSign|src.c:72536 : 3 hits, %0 failures
-UnSign|src.c:72537 : 3 hits, %0 failures
-UnSign|src.c:72539 : 3 hits, %0 failures
-ReSign|src.c:102256 : 3 hits, %0 failures
-UnSign|src.c:102256 : 3 hits, %0 failures
-ReSign|src.c:102257 : 3 hits, %0 failures
-UnSign|src.c:102257 : 3 hits, %0 failures
-ReSign|src.c:102258 : 3 hits, %0 failures
-ReSign|src.c:101577 : 3 hits, %0 failures
-ReSign|src.c:101591 : 3 hits, %0 failures
-ReSign|src.c:101596 : 3 hits, %0 failures
-ReSign|src.c:102331 : 3 hits, %0 failures
-ReSign|src.c:66228 : 3 hits, %0 failures
-ReSign|src.c:100866 : 3 hits, %0 failures
-ReSign|src.c:108226 : 2 hits, %0 failures
-ReSign|src.c:108095 : 2 hits, %0 failures
-ReSign|dlmalloc.c:2982 : 2 hits, %0 failures
-ReSign|dlmalloc.c:3919 : 2 hits, %0 failures
-ReSign|dlmalloc.c:4009 : 2 hits, %0 failures
-ReSign|src.c:35465 : 2 hits, %0 failures
-ReSign|src.c:109984 : 2 hits, %0 failures
-ReSign|src.c:110003 : 2 hits, %0 failures
-ReSign|src.c:110005 : 2 hits, %0 failures
-ReSign|src.c:110007 : 2 hits, %0 failures
-ReSign|src.c:110009 : 2 hits, %0 failures
-ReSign|src.c:110014 : 2 hits, %0 failures
-ReSign|src.c:110016 : 2 hits, %0 failures
-ReSign|src.c:110045 : 2 hits, %0 failures
-ReSign|src.c:110046 : 2 hits, %0 failures
-ReSign|src.c:57405 : 2 hits, %0 failures
-ReSign|src.c:110096 : 2 hits, %0 failures
-ReSign|src.c:109942 : 2 hits, %0 failures
-ReSign|src.c:109949 : 2 hits, %0 failures
-ReSign|src.c:109954 : 2 hits, %0 failures
-ReSign|src.c:110109 : 2 hits, %0 failures
-UnSign|src.c:49238 : 2 hits, %0 failures
-ReSign|src.c:49247 : 2 hits, %0 failures
-ReSign|src.c:49246 : 2 hits, %0 failures
-UnSign|src.c:49247 : 2 hits, %0 failures
-ReSign|src.c:49261 : 2 hits, %0 failures
-ReSign|src.c:49264 : 2 hits, %0 failures
-ReSign|src.c:49271 : 2 hits, %0 failures
-ReSign|src.c:49286 : 2 hits, %0 failures
-ReSign|src.c:49336 : 2 hits, %0 failures
-ReSign|src.c:49349 : 2 hits, %0 failures
-ReSign|src.c:41102 : 2 hits, %0 failures
-UnSign|src.c:41102 : 2 hits, %0 failures
-ReSign|src.c:41103 : 2 hits, %0 failures
-UnSign|src.c:41103 : 2 hits, %0 failures
-ReSign|src.c:41127 : 2 hits, %0 failures
-ReSign|src.c:41137 : 2 hits, %0 failures
-ReSign|src.c:41192 : 2 hits, %0 failures
-ReSign|src.c:41205 : 2 hits, %0 failures
-ReSign|src.c:41226 : 2 hits, %0 failures
-ReSign|src.c:41283 : 2 hits, %0 failures
-UnSign|src.c:40294 : 2 hits, %0 failures
-ReSign|src.c:40297 : 2 hits, %0 failures
-ReSign|src.c:40299 : 2 hits, %0 failures
-ReSign|src.c:40302 : 2 hits, %0 failures
-ReSign|src.c:34877 : 2 hits, %0 failures
-ReSign|src.c:41292 : 2 hits, %0 failures
-UnSign|src.c:41302 : 2 hits, %0 failures
-ReSign|src.c:41309 : 2 hits, %0 failures
-UnSign|src.c:41332 : 2 hits, %0 failures
-ReSign|src.c:41332 : 2 hits, %0 failures
-UnSign|src.c:41333 : 2 hits, %0 failures
-ReSign|src.c:41333 : 2 hits, %0 failures
-ReSign|src.c:39325 : 2 hits, %0 failures
-UnSign|src.c:39332 : 2 hits, %0 failures
-UnSign|src.c:39335 : 2 hits, %0 failures
-ReSign|src.c:41342 : 2 hits, %0 failures
-ReSign|src.c:41344 : 2 hits, %0 failures
-ReSign|src.c:49355 : 2 hits, %0 failures
-ReSign|src.c:40399 : 2 hits, %0 failures
-ReSign|src.c:49358 : 2 hits, %0 failures
-UnSign|src.c:49373 : 2 hits, %0 failures
-UnSign|src.c:49397 : 2 hits, %0 failures
-ReSign|src.c:49398 : 2 hits, %0 failures
-UnSign|src.c:49399 : 2 hits, %0 failures
-ReSign|src.c:49405 : 2 hits, %0 failures
-ReSign|src.c:49430 : 2 hits, %0 failures
-ReSign|src.c:49459 : 2 hits, %0 failures
-ReSign|src.c:49471 : 2 hits, %0 failures
-ReSign|src.c:49475 : 2 hits, %0 failures
-ReSign|src.c:110119 : 2 hits, %0 failures
-ReSign|src.c:110139 : 2 hits, %0 failures
-ReSign|src.c:109150 : 2 hits, %0 failures
-ReSign|src.c:108981 : 2 hits, %0 failures
-ReSign|src.c:108993 : 2 hits, %0 failures
-ReSign|src.c:108995 : 2 hits, %0 failures
-ReSign|src.c:109018 : 2 hits, %0 failures
-ReSign|src.c:81500 : 2 hits, %0 failures
-ReSign|src.c:109031 : 2 hits, %0 failures
-ReSign|src.c:109039 : 2 hits, %0 failures
-ReSign|src.c:83657 : 2 hits, %0 failures
-ReSign|src.c:88073 : 2 hits, %0 failures
-ReSign|src.c:110155 : 2 hits, %0 failures
-ReSign|src.c:108397 : 2 hits, %0 failures
-ReSign|src.c:108404 : 2 hits, %0 failures
-ReSign|src.c:108410 : 2 hits, %0 failures
-ReSign|src.c:108411 : 2 hits, %0 failures
-ReSign|src.c:108415 : 2 hits, %0 failures
-ReSign|src.c:108427 : 2 hits, %0 failures
-ReSign|src.c:108439 : 2 hits, %0 failures
-ReSign|src.c:109294 : 2 hits, %0 failures
-ReSign|src.c:110211 : 2 hits, %0 failures
-ReSign|src.c:110216 : 2 hits, %0 failures
-ReSign|src.c:110219 : 2 hits, %0 failures
-ReSign|src.c:55527 : 2 hits, %0 failures
-ReSign|src.c:89851 : 2 hits, %0 failures
-ReSign|src.c:35851 : 2 hits, %0 failures
-ReSign|src.c:35861 : 2 hits, %0 failures
-ReSign|src.c:35862 : 2 hits, %0 failures
-ReSign|src.c:34909 : 2 hits, %0 failures
-ReSign|src.c:89853 : 2 hits, %0 failures
-ReSign|src.c:89887 : 2 hits, %0 failures
-UnSign|src.c:89905 : 2 hits, %0 failures
-ReSign|src.c:89909 : 2 hits, %0 failures
-ReSign|src.c:21671 : 2 hits, %0 failures
-ReSign|src.c:89911 : 2 hits, %0 failures
-UnSign|src.c:89923 : 2 hits, %0 failures
-ReSign|src.c:89923 : 2 hits, %0 failures
-UnSign|src.c:89926 : 2 hits, %0 failures
-ReSign|src.c:89926 : 2 hits, %0 failures
-ReSign|src.c:89960 : 2 hits, %0 failures
-ReSign|src.c:89963 : 2 hits, %0 failures
-ReSign|src.c:76440 : 2 hits, %0 failures
-ReSign|src.c:76450 : 2 hits, %0 failures
-ReSign|src.c:89968 : 2 hits, %0 failures
-ReSign|src.c:89972 : 2 hits, %0 failures
-UnSign|src.c:89981 : 2 hits, %0 failures
-ReSign|src.c:89990 : 2 hits, %0 failures
-ReSign|src.c:50743 : 2 hits, %0 failures
-ReSign|src.c:90022 : 2 hits, %0 failures
-UnSign|src.c:78115 : 2 hits, %0 failures
-ReSign|src.c:89841 : 2 hits, %0 failures
-UnSign|src.c:89842 : 2 hits, %0 failures
-ReSign|src.c:90035 : 2 hits, %0 failures
-ReSign|src.c:78226 : 2 hits, %0 failures
-ReSign|src.c:78240 : 2 hits, %0 failures
-UnSign|src.c:78244 : 2 hits, %0 failures
-ReSign|src.c:77957 : 2 hits, %0 failures
-ReSign|src.c:77960 : 2 hits, %0 failures
-ReSign|src.c:78880 : 2 hits, %0 failures
-ReSign|src.c:78887 : 2 hits, %0 failures
-ReSign|src.c:78912 : 2 hits, %0 failures
-ReSign|src.c:78936 : 2 hits, %0 failures
-ReSign|src.c:78949 : 2 hits, %0 failures
-UnSign|src.c:105889 : 2 hits, %0 failures
-UnSign|src.c:96402 : 2 hits, %0 failures
-ReSign|src.c:96410 : 2 hits, %0 failures
-ReSign|src.c:96418 : 2 hits, %0 failures
-UnSign|src.c:96418 : 2 hits, %0 failures
-ReSign|src.c:96430 : 2 hits, %0 failures
-ReSign|src.c:96433 : 2 hits, %0 failures
-ReSign|src.c:96437 : 2 hits, %0 failures
-ReSign|src.c:96446 : 2 hits, %0 failures
-ReSign|src.c:84715 : 2 hits, %0 failures
-ReSign|src.c:96507 : 2 hits, %0 failures
-ReSign|src.c:96508 : 2 hits, %0 failures
-ReSign|src.c:96512 : 2 hits, %0 failures
-ReSign|src.c:96530 : 2 hits, %0 failures
-UnSign|src.c:96531 : 2 hits, %0 failures
-ReSign|src.c:96531 : 2 hits, %0 failures
-UnSign|src.c:96536 : 2 hits, %0 failures
-ReSign|src.c:96536 : 2 hits, %0 failures
-ReSign|src.c:96558 : 2 hits, %0 failures
-ReSign|src.c:96566 : 2 hits, %0 failures
-ReSign|src.c:96574 : 2 hits, %0 failures
-ReSign|src.c:101238 : 2 hits, %0 failures
-ReSign|src.c:96582 : 2 hits, %0 failures
-UnSign|src.c:96583 : 2 hits, %0 failures
-ReSign|src.c:96588 : 2 hits, %0 failures
-ReSign|src.c:96599 : 2 hits, %0 failures
-ReSign|src.c:96604 : 2 hits, %0 failures
-ReSign|src.c:96611 : 2 hits, %0 failures
-ReSign|src.c:96612 : 2 hits, %0 failures
-ReSign|src.c:96616 : 2 hits, %0 failures
-ReSign|src.c:96623 : 2 hits, %0 failures
-ReSign|src.c:96634 : 2 hits, %0 failures
-ReSign|src.c:96652 : 2 hits, %0 failures
-ReSign|src.c:96245 : 2 hits, %0 failures
-ReSign|src.c:96250 : 2 hits, %0 failures
-ReSign|src.c:96716 : 2 hits, %0 failures
-ReSign|src.c:96743 : 2 hits, %0 failures
-ReSign|src.c:96747 : 2 hits, %0 failures
-ReSign|src.c:96751 : 2 hits, %0 failures
-ReSign|src.c:82169 : 2 hits, %0 failures
-ReSign|src.c:96765 : 2 hits, %0 failures
-ReSign|src.c:96775 : 2 hits, %0 failures
-ReSign|src.c:96782 : 2 hits, %0 failures
-ReSign|src.c:96191 : 2 hits, %0 failures
-ReSign|src.c:96796 : 2 hits, %0 failures
-UnSign|src.c:96807 : 2 hits, %0 failures
-ReSign|src.c:96807 : 2 hits, %0 failures
-ReSign|src.c:96816 : 2 hits, %0 failures
-ReSign|src.c:77351 : 2 hits, %0 failures
-UnSign|src.c:78968 : 2 hits, %0 failures
-ReSign|src.c:78968 : 2 hits, %0 failures
-ReSign|src.c:49997 : 2 hits, %0 failures
-UnSign|src.c:50015 : 2 hits, %0 failures
-UnSign|src.c:50016 : 2 hits, %0 failures
-UnSign|src.c:64339 : 2 hits, %0 failures
-ReSign|src.c:64339 : 2 hits, %0 failures
-UnSign|src.c:64347 : 2 hits, %0 failures
-ReSign|src.c:52008 : 2 hits, %0 failures
-ReSign|src.c:52010 : 2 hits, %0 failures
-UnSign|src.c:52068 : 2 hits, %0 failures
-UnSign|src.c:64858 : 2 hits, %0 failures
-ReSign|src.c:64858 : 2 hits, %0 failures
-ReSign|src.c:54281 : 2 hits, %0 failures
-ReSign|src.c:54285 : 2 hits, %0 failures
-UnSign|src.c:52699 : 2 hits, %0 failures
-ReSign|src.c:52699 : 2 hits, %0 failures
-UnSign|src.c:54290 : 2 hits, %0 failures
-ReSign|src.c:54291 : 2 hits, %0 failures
-UnSign|src.c:65541 : 2 hits, %0 failures
-UnSign|src.c:65561 : 2 hits, %0 failures
-ReSign|src.c:65562 : 2 hits, %0 failures
-ReSign|src.c:65566 : 2 hits, %0 failures
-ReSign|src.c:65570 : 2 hits, %0 failures
-ReSign|src.c:65579 : 2 hits, %0 failures
-UnSign|src.c:93590 : 2 hits, %0 failures
-ReSign|src.c:93590 : 2 hits, %0 failures
-UnSign|src.c:93591 : 2 hits, %100 failures
-ReSign|src.c:93591 : 2 hits, %0 failures
-UnSign|src.c:93592 : 2 hits, %0 failures
-ReSign|src.c:93592 : 2 hits, %0 failures
-UnSign|src.c:93593 : 2 hits, %0 failures
-ReSign|src.c:93593 : 2 hits, %0 failures
-ReSign|src.c:94736 : 2 hits, %0 failures
-ReSign|src.c:94741 : 2 hits, %0 failures
-ReSign|src.c:94748 : 2 hits, %0 failures
-UnSign|src.c:94124 : 2 hits, %0 failures
-ReSign|src.c:94124 : 2 hits, %0 failures
-ReSign|src.c:65345 : 2 hits, %0 failures
-UnSign|src.c:107229 : 2 hits, %0 failures
-ReSign|src.c:107229 : 2 hits, %0 failures
-ReSign|src.c:107232 : 2 hits, %0 failures
-UnSign|src.c:107214 : 2 hits, %0 failures
-ReSign|src.c:107214 : 2 hits, %0 failures
-ReSign|src.c:107217 : 2 hits, %0 failures
-ReSign|src.c:107220 : 2 hits, %0 failures
-ReSign|src.c:74261 : 2 hits, %0 failures
-UnSign|src.c:74261 : 2 hits, %0 failures
-ReSign|src.c:72370 : 2 hits, %0 failures
-ReSign|src.c:83714 : 2 hits, %0 failures
-UnSign|src.c:83726 : 2 hits, %0 failures
-ReSign|src.c:73839 : 2 hits, %0 failures
-UnSign|src.c:73849 : 2 hits, %0 failures
-ReSign|src.c:73849 : 2 hits, %0 failures
-ReSign|src.c:79874 : 2 hits, %0 failures
-ReSign|src.c:80137 : 2 hits, %0 failures
-ReSign|src.c:80148 : 2 hits, %0 failures
-ReSign|src.c:80151 : 2 hits, %0 failures
-ReSign|src.c:80163 : 2 hits, %0 failures
-ReSign|src.c:80176 : 2 hits, %0 failures
-ReSign|src.c:79680 : 2 hits, %0 failures
-ReSign|src.c:79690 : 2 hits, %0 failures
-ReSign|src.c:79691 : 2 hits, %0 failures
-ReSign|src.c:79700 : 2 hits, %0 failures
-ReSign|src.c:82212 : 2 hits, %0 failures
-UnSign|src.c:79707 : 2 hits, %0 failures
-ReSign|src.c:79707 : 2 hits, %0 failures
-ReSign|src.c:65901 : 2 hits, %0 failures
-UnSign|src.c:48978 : 2 hits, %0 failures
-ReSign|src.c:80105 : 2 hits, %0 failures
-ReSign|src.c:80111 : 2 hits, %0 failures
-ReSign|src.c:80192 : 2 hits, %0 failures
-ReSign|src.c:68333 : 2 hits, %0 failures
-UnSign|dlmalloc.c:4661 : 2 hits, %0 failures
-ReSign|src.c:101270 : 2 hits, %0 failures
-ReSign|src.c:101274 : 2 hits, %0 failures
-ReSign|src.c:101342 : 2 hits, %0 failures
-ReSign|src.c:101354 : 2 hits, %0 failures
-UnSign|src.c:102212 : 2 hits, %0 failures
-ReSign|src.c:102212 : 2 hits, %0 failures
-ReSign|src.c:102225 : 2 hits, %0 failures
-ReSign|src.c:102229 : 2 hits, %0 failures
-ReSign|src.c:101737 : 2 hits, %0 failures
-ReSign|src.c:101754 : 2 hits, %0 failures
-ReSign|src.c:101768 : 2 hits, %0 failures
-UnSign|src.c:102258 : 2 hits, %0 failures
-ReSign|src.c:102262 : 2 hits, %0 failures
-UnSign|src.c:102288 : 2 hits, %0 failures
-ReSign|src.c:102302 : 2 hits, %0 failures
-ReSign|src.c:102335 : 2 hits, %0 failures
-ReSign|src.c:102347 : 2 hits, %0 failures
-ReSign|src.c:102356 : 2 hits, %0 failures
-ReSign|src.c:102366 : 2 hits, %0 failures
-ReSign|src.c:102368 : 2 hits, %0 failures
-ReSign|src.c:58406 : 2 hits, %0 failures
-ReSign|src.c:58413 : 2 hits, %0 failures
-UnSign|src.c:103313 : 2 hits, %0 failures
-ReSign|src.c:103313 : 2 hits, %0 failures
-UnSign|src.c:103323 : 2 hits, %0 failures
-ReSign|src.c:103323 : 2 hits, %0 failures
-ReSign|src.c:66130 : 2 hits, %0 failures
-UnSign|src.c:66131 : 2 hits, %0 failures
-ReSign|src.c:66133 : 2 hits, %0 failures
-UnSign|src.c:66215 : 2 hits, %0 failures
-ReSign|src.c:66215 : 2 hits, %0 failures
-ReSign|src.c:66217 : 2 hits, %0 failures
-ReSign|src.c:66227 : 2 hits, %0 failures
-ReSign|src.c:66249 : 2 hits, %0 failures
-ReSign|src.c:100867 : 2 hits, %0 failures
-UnSign|src.c:102248 : 2 hits, %0 failures
-ReSign|src.c:102269 : 2 hits, %0 failures
-ReSign|src.c:102310 : 2 hits, %0 failures
-ReSign|src.c:108628 : 2 hits, %0 failures
-ReSign|src.c:108631 : 2 hits, %0 failures
-ReSign|src.c:77878 : 2 hits, %0 failures
-ReSign|src.c:108649 : 2 hits, %0 failures
-ReSign|src.c:55533 : 2 hits, %0 failures
-UnSign|src.c:55533 : 2 hits, %0 failures
-ReSign|src.c:49551 : 2 hits, %0 failures
-ReSign|src.c:50821 : 2 hits, %0 failures
-UnSign|src.c:50834 : 2 hits, %0 failures
-ReSign|src.c:50834 : 2 hits, %0 failures
-ReSign|src.c:49571 : 2 hits, %0 failures
-UnSign|src.c:40551 : 2 hits, %0 failures
-ReSign|src.c:45430 : 2 hits, %0 failures
-ReSign|src.c:40555 : 2 hits, %0 failures
-ReSign|src.c:38546 : 2 hits, %0 failures
-ReSign|src.c:38559 : 2 hits, %0 failures
-ReSign|src.c:37855 : 2 hits, %0 failures
-ReSign|src.c:38571 : 2 hits, %0 failures
-ReSign|src.c:35129 : 2 hits, %0 failures
-ReSign|src.c:49590 : 2 hits, %0 failures
-ReSign|src.c:49591 : 2 hits, %0 failures
-ReSign|src.c:108675 : 2 hits, %0 failures
-ReSign|src.c:108713 : 2 hits, %0 failures
-ReSign|src.c:108724 : 2 hits, %0 failures
-ReSign|src.c:108742 : 2 hits, %0 failures
-ReSign|src.c:18167 : 1 hits, %0 failures
-ReSign|src.c:18171 : 1 hits, %0 failures
-ReSign|src.c:18174 : 1 hits, %0 failures
-ReSign|src.c:18196 : 1 hits, %0 failures
-ReSign|src.c:108131 : 1 hits, %0 failures
-ReSign|src.c:34828 : 1 hits, %0 failures
-ReSign|src.c:35801 : 1 hits, %0 failures
-ReSign|src.c:108134 : 1 hits, %0 failures
-ReSign|dlmalloc.c:2958 : 1 hits, %0 failures
-ReSign|dlmalloc.c:3912 : 1 hits, %0 failures
-ReSign|dlmalloc.c:3915 : 1 hits, %0 failures
-UnSign|dlmalloc.c:3918 : 1 hits, %0 failures
-ReSign|dlmalloc.c:4000 : 1 hits, %0 failures
-ReSign|src.c:14487 : 1 hits, %0 failures
-ReSign|src.c:108138 : 1 hits, %0 failures
-ReSign|src.c:35460 : 1 hits, %0 failures
-ReSign|src.c:35469 : 1 hits, %0 failures
-ReSign|src.c:128492 : 1 hits, %0 failures
-ReSign|src.c:128515 : 1 hits, %0 failures
-ReSign|src.c:128517 : 1 hits, %0 failures
-ReSign|src.c:128518 : 1 hits, %0 failures
-ReSign|src.c:80712 : 1 hits, %0 failures
-ReSign|src.c:80716 : 1 hits, %0 failures
-ReSign|src.c:80717 : 1 hits, %0 failures
-ReSign|src.c:128520 : 1 hits, %0 failures
-ReSign|src.c:128530 : 1 hits, %0 failures
-ReSign|src.c:80737 : 1 hits, %0 failures
-ReSign|src.c:80741 : 1 hits, %0 failures
-ReSign|src.c:128532 : 1 hits, %0 failures
-ReSign|src.c:128533 : 1 hits, %0 failures
-ReSign|src.c:128536 : 1 hits, %0 failures
-ReSign|src.c:128537 : 1 hits, %0 failures
-ReSign|src.c:128538 : 1 hits, %0 failures
-ReSign|src.c:106054 : 1 hits, %0 failures
-ReSign|src.c:106057 : 1 hits, %0 failures
-UnSign|src.c:106057 : 1 hits, %0 failures
-ReSign|src.c:74257 : 1 hits, %0 failures
-UnSign|src.c:74200 : 1 hits, %0 failures
-ReSign|src.c:74200 : 1 hits, %0 failures
-UnSign|src.c:74201 : 1 hits, %0 failures
-UnSign|src.c:99551 : 1 hits, %0 failures
-ReSign|src.c:99551 : 1 hits, %0 failures
-UnSign|src.c:99577 : 1 hits, %0 failures
-ReSign|src.c:99577 : 1 hits, %0 failures
-UnSign|src.c:83714 : 1 hits, %0 failures
-ReSign|src.c:83726 : 1 hits, %0 failures
-UnSign|src.c:99016 : 1 hits, %0 failures
-UnSign|src.c:99024 : 1 hits, %0 failures
-ReSign|src.c:99025 : 1 hits, %0 failures
-ReSign|src.c:99028 : 1 hits, %0 failures
-ReSign|src.c:99037 : 1 hits, %0 failures
-ReSign|src.c:99040 : 1 hits, %0 failures
-ReSign|src.c:99045 : 1 hits, %0 failures
-ReSign|src.c:99073 : 1 hits, %0 failures
-UnSign|src.c:99073 : 1 hits, %0 failures
-ReSign|src.c:99094 : 1 hits, %0 failures
-UnSign|src.c:101427 : 1 hits, %0 failures
-ReSign|src.c:101427 : 1 hits, %0 failures
-UnSign|src.c:73783 : 1 hits, %0 failures
-ReSign|src.c:73783 : 1 hits, %0 failures
-ReSign|src.c:73788 : 1 hits, %0 failures
-ReSign|src.c:73793 : 1 hits, %0 failures
-UnSign|src.c:73802 : 1 hits, %0 failures
-ReSign|src.c:73802 : 1 hits, %0 failures
-ReSign|src.c:73818 : 1 hits, %0 failures
-UnSign|src.c:73839 : 1 hits, %0 failures
-ReSign|src.c:98231 : 1 hits, %0 failures
-UnSign|src.c:98232 : 1 hits, %0 failures
-ReSign|src.c:98232 : 1 hits, %0 failures
-ReSign|src.c:98234 : 1 hits, %0 failures
-UnSign|src.c:98235 : 1 hits, %0 failures
-ReSign|src.c:98235 : 1 hits, %0 failures
-UnSign|src.c:73853 : 1 hits, %0 failures
-ReSign|src.c:73853 : 1 hits, %0 failures
-ReSign|src.c:73860 : 1 hits, %0 failures
-ReSign|src.c:74652 : 1 hits, %0 failures
-UnSign|src.c:74652 : 1 hits, %0 failures
-ReSign|src.c:128539 : 1 hits, %0 failures
-ReSign|src.c:128540 : 1 hits, %0 failures
-UnSign|src.c:48989 : 1 hits, %0 failures
-ReSign|src.c:128543 : 1 hits, %0 failures
-ReSign|src.c:128544 : 1 hits, %0 failures
-ReSign|src.c:128545 : 1 hits, %0 failures
-ReSign|src.c:101748 : 1 hits, %0 failures
-ReSign|src.c:101755 : 1 hits, %0 failures
-UnSign|src.c:101764 : 1 hits, %0 failures
-ReSign|src.c:101764 : 1 hits, %0 failures
-ReSign|src.c:101767 : 1 hits, %0 failures
-ReSign|src.c:101771 : 1 hits, %0 failures
-ReSign|src.c:102281 : 1 hits, %0 failures
-ReSign|src.c:66230 : 1 hits, %0 failures
-ReSign|src.c:128547 : 1 hits, %0 failures
-UnSign|src.c:100866 : 1 hits, %0 failures
-ReSign|src.c:101223 : 1 hits, %0 failures
-ReSign|src.c:101228 : 1 hits, %0 failures
-UnSign|src.c:102265 : 1 hits, %0 failures
-ReSign|src.c:102265 : 1 hits, %0 failures
-ReSign|src.c:102268 : 1 hits, %0 failures
-ReSign|src.c:102275 : 1 hits, %0 failures
-UnSign|src.c:102306 : 1 hits, %0 failures
-ReSign|src.c:102306 : 1 hits, %0 failures
-ReSign|src.c:102309 : 1 hits, %0 failures
-ReSign|src.c:102316 : 1 hits, %0 failures
-ReSign|src.c:128548 : 1 hits, %0 failures
-ReSign|src.c:128549 : 1 hits, %0 failures
-ReSign|src.c:128468 : 1 hits, %0 failures
diff --git a/tools/bisect_pair.py b/tools/bisect_pair.py
index 8eea0d61..cdb76286 100644
--- a/tools/bisect_pair.py
+++ b/tools/bisect_pair.py
@@ -23,9 +23,15 @@ rightf = open('right', 'w')
rightf.write(file2)
rightf.close()
+def run_code(name):
+ ret = run_js(name, stderr=PIPE, full_output=True)
+ # fix stack traces
+ ret = filter(lambda line: not line.startswith(' at ') and not name in line, ret.split('\n'))
+ return '\n'.join(ret)
+
print 'running files'
-left_result = run_js('left', stderr=PIPE)
-right_result = run_js('right', stderr=PIPE) # right as in left-right, not as in correct
+left_result = run_code('left')
+right_result = run_code('right') # right as in left-right, not as in correct
assert left_result != right_result
# Calculate diff chunks
@@ -52,31 +58,31 @@ high = len(chunks)
print 'beginning bisection, %d chunks' % high
for mid in range(high):
- print ' current: %d' % mid
+ print ' current: %d' % mid,
# Take chunks from the middle and on. This is important because the eliminator removes variables, so starting from the beginning will add errors
curr_diff = '\n'.join(map(lambda parts: '\n'.join(parts), chunks[mid:])) + '\n'
difff = open('diff.diff', 'w')
difff.write(curr_diff)
difff.close()
shutil.copy('left', 'middle')
- Popen(['patch', 'middle', 'diff.diff'], stdout=PIPE, stderr=PIPE).communicate()
- result = run_js('middle', stderr=PIPE)
- if result == left_result:
- print 'found where it starts to work: %d' % mid
+ Popen(['patch', 'middle', 'diff.diff'], stdout=PIPE).communicate()
+ shutil.copyfile('middle', 'middle' + str(mid))
+ result = run_code('middle')
+ print result == left_result, result == right_result#, 'XXX', left_result, 'YYY', result, 'ZZZ', right_result
+ if mid == 0:
+ assert result == right_result, '<<< ' + result + ' ??? ' + right_result + ' >>>'
+ print 'sanity check passed (a)'
+ if mid == high-1:
+ assert result == left_result, '<<< ' + result + ' ??? ' + left_result + ' >>>'
+ print 'sanity check passed (b)'
+ if result != right_result:
+ print 'found where it changes: %d' % mid
found = mid
break
-critical = '\n'.join(chunks[found-1]) + '\n'
-
+critical = Popen(['diff', '-U', '5', 'middle' + str(mid-1), 'middle' + str(mid)], stdout=PIPE).communicate()[0]
c = open('critical.diff', 'w')
c.write(critical)
c.close()
-print 'sanity check'
-shutil.copy('middle', 'middle2')
-Popen(['patch', 'middle2', 'critical.diff'], stdout=PIPE, stderr=PIPE).communicate()
-assert run_js('middle', stderr=PIPE) == left_result, 'middle was expected %s' % left_result
-assert run_js('middle2', stderr=PIPE) != left_result, 'middle2 was expected NOT %s' % left_result
-
-print 'middle is like left, middle2 is like right, critical.diff is the difference that matters,'
-print critical
+print 'middle%d is like left, middle%d is like right, critical.diff is the difference that matters' % (mid-1, mid), 'diff:', critical
diff --git a/tools/eliminator/asm-eliminator-test-output.js b/tools/eliminator/asm-eliminator-test-output.js
new file mode 100644
index 00000000..3170bd9c
--- /dev/null
+++ b/tools/eliminator/asm-eliminator-test-output.js
@@ -0,0 +1,103 @@
+function asm(x, y) {
+ x = +x;
+ y = y | 0;
+ var a = 0;
+ a = cheez(y + ~~x | 0) | 0;
+ fleefl(a * a | 0, a | 0);
+}
+function __Z11printResultPiS_j($needle, $haystack, $len) {
+ $needle = $needle | 0;
+ $haystack = $haystack | 0;
+ $len = $len | 0;
+ var $3 = 0, __stackBase__ = 0;
+ __stackBase__ = STACKTOP;
+ $3 = _bsearch($needle, $haystack, $len, 4, 2);
+ if (($3 | 0) == 0) {
+ _puts(_str | 0);
+ STACKTOP = __stackBase__;
+ return;
+ } else {
+ _printf(__str1 | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 4 | 0, HEAP32[(tempInt & 16777215) >> 2] = HEAP32[($3 & 16777215) >> 2] | 0, tempInt));
+ STACKTOP = __stackBase__;
+ return;
+ }
+}
+function _segment_holding($addr) {
+ $addr = $addr | 0;
+ var $sp_0 = 0, $3 = 0, $12 = 0, $_0 = 0, label = 0;
+ $sp_0 = __gm_ + 444 | 0;
+ while (1) {
+ $3 = HEAP32[(($sp_0 | 0) & 16777215) >> 2] | 0;
+ if (!($3 >>> 0 > $addr >>> 0)) {
+ if (($3 + (HEAP32[(($sp_0 + 4 | 0) & 16777215) >> 2] | 0) | 0) >>> 0 > $addr >>> 0) {
+ $_0 = $sp_0;
+ label = 1658;
+ break;
+ }
+ }
+ $12 = HEAP32[(($sp_0 + 8 | 0) & 16777215) >> 2] | 0;
+ if (($12 | 0) == 0) {
+ $_0 = 0;
+ label = 1659;
+ break;
+ } else {
+ $sp_0 = $12;
+ }
+ }
+ if (label == 1659) {
+ return $_0;
+ } else if (label == 1658) {
+ return $_0;
+ }
+}
+function __ZN5identC2EiPKcPci($this, $n, $a) {
+ $this = $this | 0;
+ $n = $n | 0;
+ $a = $a | 0;
+ HEAP32[($this & 16777215) >> 2] = __ZTV5ident + 8 | 0;
+ HEAP32[($this + 4 & 16777215) >> 2] = 5;
+ HEAP32[($this + 8 & 16777215) >> 2] = $n;
+ HEAP32[($this + 20 & 16777215) >> 2] = 2147483647;
+ HEAP32[($this + 24 & 16777215) >> 2] = 0;
+ HEAP32[($this + 28 & 16777215) >> 2] = $a;
+ HEAP32[($this + 32 & 16777215) >> 2] = 0;
+ HEAP32[($this + 40 & 16777215) >> 2] = 1;
+ return;
+}
+function _vec2Length($this) {
+ $this = $this | 0;
+ var $__first_addr_i = 0, $__last_addr_i = 0, __stackBase__ = 0;
+ __stackBase__ = STACKTOP;
+ STACKTOP = STACKTOP + 8 | 0;
+ $__first_addr_i = __stackBase__;
+ $__last_addr_i = __stackBase__ + 4;
+ STACKTOP = __stackBase__;
+ return 0;
+}
+function exc($this) {
+ $this = $this | 0;
+ var $1 = 0, $5 = 0;
+ $1 = (function() {
+ try {
+ __THREW__ = false;
+ return __ZNSt3__16locale8__globalEv();
+ } catch (e) {
+ if (typeof e != "number") throw e;
+ if (ABORT) throw e;
+ __THREW__ = true;
+ Module.print("Exception: " + e + ", currently at: " + (new Error).stack);
+ return null;
+ }
+ })();
+ if (!__THREW__) {
+ $5 = HEAP32[(($1 | 0) & 16777215) >> 2] | 0;
+ HEAP32[(($this | 0) & 16777215) >> 2] = $5;
+ __ZNSt3__114__shared_count12__add_sharedEv($5 | 0);
+ return;
+ } else {
+ $8$0 = ___cxa_find_matching_catch(HEAP32[(_llvm_eh_exception.buf & 16777215) >> 2] | 0, HEAP32[(_llvm_eh_exception.buf + 4 & 16777215) >> 2] | 0, []);
+ $8$1 = tempRet0;
+ ___cxa_call_unexpected($8$0);
+ }
+}
+
diff --git a/tools/eliminator/asm-eliminator-test.js b/tools/eliminator/asm-eliminator-test.js
new file mode 100644
index 00000000..ce34a7a6
--- /dev/null
+++ b/tools/eliminator/asm-eliminator-test.js
@@ -0,0 +1,134 @@
+function asm(x, y) {
+ x = +x;
+ y = y|0;
+ var a = 0, b = +0, c = 0;
+ var label = 0;
+ a = cheez((y+~~x)|0)|0;
+ b = a*a;
+ fleefl(b|0, a|0);
+}
+function __Z11printResultPiS_j($needle, $haystack, $len) {
+ $needle = $needle | 0;
+ $haystack = $haystack | 0;
+ $len = $len | 0;
+ var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $puts = 0, $7 = 0, $8 = 0, $9 = 0;
+ var label = 0;
+ var __stackBase__ = 0;
+ __stackBase__ = STACKTOP;
+ $1 = $needle;
+ $2 = $haystack;
+ $3 = _bsearch($1, $2, $len, 4, 2);
+ $4 = ($3 | 0) == 0;
+ if ($4) {
+ $puts = _puts(_str | 0);
+ STACKTOP = __stackBase__;
+ return;
+ } else {
+ $7 = $3;
+ $8 = HEAP32[($7 & 16777215) >> 2] | 0;
+ $9 = _printf(__str1 | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 4 | 0, HEAP32[(tempInt & 16777215) >> 2] = $8, tempInt));
+ STACKTOP = __stackBase__;
+ return;
+ }
+}
+function _segment_holding($addr) {
+ $addr = $addr | 0;
+ var $sp_0 = 0, $2 = 0, $3 = 0, $4 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
+ var $11 = 0, $12 = 0, $13 = 0, $_0 = 0;
+ var label = 0;
+ $sp_0 = __gm_ + 444 | 0;
+ while (1) {
+ $2 = $sp_0 | 0;
+ $3 = HEAP32[($2 & 16777215) >> 2] | 0;
+ $4 = $3 >>> 0 > $addr >>> 0;
+ if (!$4) {
+ $6 = $sp_0 + 4 | 0;
+ $7 = HEAP32[($6 & 16777215) >> 2] | 0;
+ $8 = $3 + $7 | 0;
+ $9 = $8 >>> 0 > $addr >>> 0;
+ if ($9) {
+ $_0 = $sp_0;
+ label = 1658;
+ break;
+ }
+ }
+ $11 = $sp_0 + 8 | 0;
+ $12 = HEAP32[($11 & 16777215) >> 2] | 0;
+ $13 = ($12 | 0) == 0;
+ if ($13) {
+ $_0 = 0;
+ label = 1659;
+ break;
+ } else {
+ $sp_0 = $12;
+ }
+ }
+ if (label == 1659) {
+ return $_0;
+ } else if (label == 1658) {
+ return $_0;
+ }
+}
+function __ZN5identC2EiPKcPci($this, $n, $a) {
+ $this = $this | 0;
+ $n = $n | 0;
+ $a = $a | 0;
+ HEAP32[($this & 16777215) >> 2] = __ZTV5ident + 8 | 0;
+ HEAP32[($this + 4 & 16777215) >> 2] = 5;
+ HEAP32[($this + 8 & 16777215) >> 2] = $n;
+ HEAP32[($this + 20 & 16777215) >> 2] = 2147483647;
+ HEAP32[($this + 24 & 16777215) >> 2] = 0;
+ HEAP32[($this + 28 & 16777215) >> 2] = $a;
+ HEAP32[($this + 32 & 16777215) >> 2] = 0;
+ HEAP32[($this + 40 & 16777215) >> 2] = 1;
+ return;
+}
+function _vec2Length($this) {
+ $this = $this | 0;
+ var $__first_addr_i = 0, $__last_addr_i = 0, $__comp_addr_i = 0, $a13 = 0, $a14 = 0, $a18 = 0, $a19 = 0;
+ var label = 0;
+ var __stackBase__ = 0;
+ __stackBase__ = STACKTOP;
+ STACKTOP = STACKTOP + 8 | 0;
+ $__first_addr_i = __stackBase__;
+ $__last_addr_i = __stackBase__ + 4;
+ $a13 = $__first_addr_i;
+ $a14 = $__last_addr_i;
+ $a18 = $__first_addr_i;
+ $a19 = $__last_addr_i;
+ STACKTOP = __stackBase__;
+ return 0;
+}
+function exc($this) {
+ $this = $this | 0;
+ var $1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $8 = +0, $9 = 0;
+ var label = 0;
+ var $1 = (function() {
+ try {
+ __THREW__ = false;
+ return __ZNSt3__16locale8__globalEv();
+ } catch (e) {
+ if (typeof e != "number") throw e;
+ if (ABORT) throw e;
+ __THREW__ = true;
+ Module.print("Exception: " + e + ", currently at: " + (new Error).stack);
+ return null;
+ }
+ })();
+ if (!__THREW__) {
+ $3 = $this | 0;
+ $4 = $1 | 0;
+ $5 = HEAP32[($4 & 16777215) >> 2] | 0;
+ HEAP32[($3 & 16777215) >> 2] = $5;
+ $6 = $5 | 0;
+ __ZNSt3__114__shared_count12__add_sharedEv($6);
+ return;
+ } else {
+ $8$0 = ___cxa_find_matching_catch(HEAP32[(_llvm_eh_exception.buf & 16777215) >> 2] | 0, HEAP32[(_llvm_eh_exception.buf + 4 & 16777215) >> 2] | 0, []);
+ $8$1 = tempRet0;
+ $9 = $8$0;
+ ___cxa_call_unexpected($9);
+ }
+}
+// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "__Z11printResultPiS_j", "_segment_holding", "__ZN5identC2EiPKcPci", "_vec2Length", "exc"]
+
diff --git a/tools/eliminator/eliminator-test-output.js b/tools/eliminator/eliminator-test-output.js
index ede34103..cc164f57 100644
--- a/tools/eliminator/eliminator-test-output.js
+++ b/tools/eliminator/eliminator-test-output.js
@@ -6132,4 +6132,12 @@ function _mallocNoU($bytes) {
return $mem_0;
return null;
}
+function asm(x, y) {
+ x = +x;
+ y = y | 0;
+ var a = 0, b = +0;
+ a = cheez(y + ~~x | 0) | 0;
+ b = a * a;
+ fleefl(b | 0, a | 0);
+}
diff --git a/tools/eliminator/eliminator-test.js b/tools/eliminator/eliminator-test.js
index e44f28ad..07a41d71 100644
--- a/tools/eliminator/eliminator-test.js
+++ b/tools/eliminator/eliminator-test.js
@@ -8828,5 +8828,14 @@ function _mallocNoU($bytes) {
return $mem_0;
return null;
}
-// EMSCRIPTEN_GENERATED_FUNCTIONS: ["a", "b", "c", "f", "g", "h", "py", "r", "t", "f2", "f3", "llvm3_1", "_inflate", "_malloc", "_mallocNoU"]
+function asm(x, y) { // asm-style code, without special asm requested so will not be fully optimized
+ x = +x;
+ y = y|0;
+ var a = 0, b = +0, c = 0;
+ var label = 0;
+ a = cheez((y+~~x)|0)|0;
+ b = a*a;
+ fleefl(b|0, a|0);
+}
+// EMSCRIPTEN_GENERATED_FUNCTIONS: ["a", "b", "c", "f", "g", "h", "py", "r", "t", "f2", "f3", "llvm3_1", "_inflate", "_malloc", "_mallocNoU", "asm"]
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index 29aecdcf..518e451a 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -263,6 +263,10 @@ function emptyNode() { // XXX do we need to create new nodes here? can't we reus
return ['toplevel', []]
}
+function isEmptyNode(node) {
+ return node.length == 2 && node[0] == 'toplevel' && node[1].length == 0;
+}
+
// Passes
// Dump the AST. Useful for debugging. For example,
@@ -1197,14 +1201,163 @@ function loopOptimizer(ast) {
vacuum(ast);
}
+function unVarify(vars, ret) { // transform var x=1, y=2 etc. into (x=1, y=2), i.e., the same assigns, but without a var definition
+ ret = ret || [];
+ ret[0] = 'stat';
+ if (vars.length == 1) {
+ ret[1] = ['assign', true, ['name', vars[0][0]], vars[0][1]];
+ } else {
+ ret[1] = [];
+ var curr = ret[1];
+ for (var i = 0; i < vars.length-1; i++) {
+ curr[0] = 'seq';
+ curr[1] = ['assign', true, ['name', vars[i][0]], vars[i][1]];
+ if (i != vars.length-2) curr = curr[2] = [];
+ }
+ curr[2] = ['assign', true, ['name', vars[vars.length-1][0]], vars[vars.length-1][1]];
+ }
+ return ret;
+}
+
+// asm.js support code - normalize (convert asm.js code to 'normal' JS, without
+// annotations, plus explicit metadata) and denormalize (vice versa)
+var ASM_INT = 0;
+var ASM_DOUBLE = 1;
+
+function detectAsmCoercion(node) {
+ // for params, +x vs x|0, for vars, +0 vs 0, so check for "+"
+ return node[0] == 'unary-prefix' ? ASM_DOUBLE : ASM_INT;
+}
+
+function makeAsmParamCoercion(param, type) {
+ return type == ASM_INT ? ['binary', '|', ['name', param], ['num', 0]] : ['unary-prefix', '+', ['name', param]];
+}
+
+function makeAsmVarDef(v, type) {
+ return [v, type == ASM_INT ? ['num', 0] : ['unary-prefix', '+', ['num', 0]]];
+}
+
+function normalizeAsm(func) {
+ //printErr('pre-normalize \n\n' + astToSrc(func) + '\n\n');
+ var data = {
+ params: {}, // ident => ASM_* type
+ vars: {}, // ident => ASM_* type
+ };
+ // process initial params
+ var stats = func[3];
+ var i = 0;
+ while (i < stats.length) {
+ var node = stats[i];
+ if (node[0] != 'stat' || node[1][0] != 'assign' || node[1][2][0] != 'name') break;
+ node = node[1];
+ data.params[node[2][1]] = detectAsmCoercion(node[3]);
+ stats[i] = emptyNode();
+ i++;
+ }
+ // process initial variable definitions
+ outer:
+ while (i < stats.length) {
+ var node = stats[i];
+ if (node[0] != 'var') break;
+ for (var j = 0; j < node[1].length; j++) {
+ var v = node[1][j];
+ var name = v[0];
+ var value = v[1];
+ if (!(name in data.vars)) {
+ assert(value[0] == 'num' || (value[0] == 'unary-prefix' && value[2][0] == 'num')); // must be valid coercion no-op
+ data.vars[name] = detectAsmCoercion(value);
+ v.length = 1; // make an un-assigning var
+ } else {
+ break outer;
+ }
+ }
+ i++;
+ }
+ // finally, look for other var definitions and collect them
+ while (i < stats.length) {
+ traverse(stats[i], function(node, type) {
+ if (type == 'var') {
+ unVarify(node[1], node);
+ } else if (type == 'dot') {
+ if (node[1][0] == 'name' && node[1][1] == 'Math') {
+ // transform Math.max to Math_max; we forward in the latter version
+ node[0] = 'name';
+ node[1] = 'Math_' + node[2];
+ }
+ }
+ });
+ i++;
+ }
+ //printErr('normalized \n\n' + astToSrc(func) + '\n\nwith: ' + JSON.stringify(data));
+ return data;
+}
+
+function denormalizeAsm(func, data) {
+ //printErr('pre-denormalize \n\n' + astToSrc(func) + '\n\nwith: ' + JSON.stringify(data));
+ var stats = func[3];
+ // Remove var definitions, if any
+ for (var i = 0; i < stats.length; i++) {
+ if (stats[i][0] == 'var') {
+ stats[i] = emptyNode();
+ } else {
+ if (!isEmptyNode(stats[i])) break;
+ }
+ }
+ // each param needs a line; reuse emptyNodes as much as we can
+ var numParams = 0;
+ for (var i in data.params) numParams++;
+ var emptyNodes = 0;
+ while (emptyNodes < stats.length) {
+ if (!isEmptyNode(stats[emptyNodes])) break;
+ emptyNodes++;
+ }
+ var neededEmptyNodes = numParams + 1; // params plus one big var
+ if (neededEmptyNodes > emptyNodes) {
+ var args = [0, 0];
+ for (var i = 0; i < neededEmptyNodes - emptyNodes; i++) args[i+2] = 0;
+ stats.splice.apply(stats, args);
+ }
+ // add param coercions
+ var next = 0;
+ func[2].forEach(function(param) {
+ stats[next++] = ['stat', ['assign', true, ['name', param], makeAsmParamCoercion(param, data.params[param])]];
+ });
+ // add variable definitions
+ var varDefs = [];
+ for (var v in data.vars) {
+ varDefs.push(makeAsmVarDef(v, data.vars[v]));
+ }
+ if (varDefs.length) {
+ stats[next] = ['var', varDefs];
+ } else {
+ stats[next] = emptyNode();
+ }
+ //printErr('denormalized \n\n' + astToSrc(func) + '\n\n');
+}
+
// Very simple 'registerization', coalescing of variables into a smaller number.
// We do not optimize when there are switches, so this pass only makes sense with
// relooping.
// TODO: Consider how this fits in with the rest of the optimization toolchain. Do
// we still need the eliminator? Closure? And in what order? Perhaps just
// closure simple?
-function registerize(ast) {
+function registerize(ast, asm) {
traverseGeneratedFunctions(ast, function(fun) {
+ if (asm) var asmData = normalizeAsm(fun);
+ // Add parameters as a first (fake) var (with assignment), so they get taken into consideration
+ var params = {}; // note: params are special, they can never share a register between them (see later)
+ if (fun[2] && fun[2].length) {
+ var assign = ['num', 0];
+ fun[3].unshift(['var', fun[2].map(function(param) {
+ params[param] = 1;
+ return [param, assign];
+ })]);
+ }
+ if (asm) {
+ // copy params into vars
+ for (var p in asmData.params) asmData.vars[p] = asmData.params[p];
+ //printErr('fake params: \n\n' + astToSrc(fun) + '\n\n');
+ }
// Replace all var definitions with assignments; we will add var definitions at the top after we registerize
// We also mark local variables - i.e., having a var definition
var localVars = {};
@@ -1213,18 +1366,8 @@ function registerize(ast) {
if (type == 'var') {
node[1].forEach(function(defined) { localVars[defined[0]] = 1 });
var vars = node[1].filter(function(varr) { return varr[1] });
- if (vars.length > 1) {
- var ret = ['stat', []];
- var curr = ret[1];
- for (var i = 0; i < vars.length-1; i++) {
- curr[0] = 'seq';
- curr[1] = ['assign', true, ['name', vars[i][0]], vars[i][1]];
- if (i != vars.length-2) curr = curr[2] = [];
- }
- curr[2] = ['assign', true, ['name', vars[vars.length-1][0]], vars[vars.length-1][1]];
- return ret;
- } else if (vars.length == 1) {
- return ['stat', ['assign', true, ['name', vars[0][0]], vars[0][1]]];
+ if (vars.length >= 1) {
+ return unVarify(vars);
} else {
return emptyNode();
}
@@ -1293,7 +1436,7 @@ function registerize(ast) {
// we just use a fresh register to make sure we avoid this, but it could be
// optimized to check for safe registers (free, and not used in this loop level).
var varRegs = {}; // maps variables to the register they will use all their life
- var freeRegs = [];
+ var freeRegsClasses = asm ? [[], []] : []; // two classes for asm, one otherwise
var nextReg = 1;
var fullNames = {};
var loopRegs = {}; // for each loop nesting level, the list of bound variables
@@ -1301,18 +1444,24 @@ function registerize(ast) {
var saved = 0;
var activeOptimizables = {};
var optimizableLoops = {};
+ var paramRegs = {}; // true if the register is used by a parameter (and so needs no def at start of function; also cannot
+ // be shared with another param, each needs its own)
function decUse(name) {
if (!varUses[name]) return false; // no uses left, or not a relevant variable
if (optimizables[name]) activeOptimizables[name] = 1;
var reg = varRegs[name];
+ if (asm) assert(name in asmData.vars, name);
+ var freeRegs = asm ? freeRegsClasses[asmData.vars[name]] : freeRegsClasses;
if (!reg) {
// acquire register
- if (optimizables[name] && freeRegs.length > 0) {
+ if (optimizables[name] && freeRegs.length > 0 &&
+ !(params[name] && paramRegs[freeRegs[freeRegs.length-1]])) { // do not share registers between parameters
reg = freeRegs.pop();
saved++;
} else {
reg = nextReg++;
- fullNames[reg] = 'r' + reg; // TODO: even smaller names
+ fullNames[reg] = (asm ? (asmData.vars[name] ? 'd' : 'i') : 'r') + reg; // TODO: even smaller names
+ if (params[name]) paramRegs[reg] = 1;
}
varRegs[name] = reg;
}
@@ -1353,24 +1502,61 @@ function registerize(ast) {
if (type in LOOP) {
// Free registers that were locked to this loop
if (loopRegs[loops]) {
- freeRegs = freeRegs.concat(loopRegs[loops]);
- loopRegs[loops] = [];
+ if (asm) {
+ loopRegs[loops].forEach(function(loopReg) {
+ freeRegsClasses[fullNames[loopReg][0] == 'i' ? ASM_INT : ASM_DOUBLE].push(loopReg);
+ });
+ } else {
+ freeRegsClasses = freeRegsClasses.concat(loopRegs[loops]);
+ }
+ loopRegs[loops].length = 0;
}
loops--;
}
});
- // Add vars at the beginning
- if (nextReg > 1) {
- var vars = [];
+ if (fun[2] && fun[2].length) {
+ fun[2].length = 0; // clear params, we will fill with registers
+ fun[3].shift(); // remove fake initial var
+ }
+ //printErr('var regs: ' + JSON.stringify(varRegs) + '\n\nparam regs: ' + JSON.stringify(paramRegs));
+ if (!asm) {
+ if (nextReg > 1) {
+ var vars = [];
+ for (var i = 1; i < nextReg; i++) {
+ var reg = fullNames[i];
+ if (!paramRegs[i]) {
+ vars.push([reg]);
+ } else {
+ fun[2].push(reg);
+ }
+ }
+ getStatements(fun).unshift(['var', vars]);
+ }
+ } else {
+ //printErr('unfake params: \n\n' + astToSrc(fun) + '\n\n');
+ var finalAsmData = {
+ params: {},
+ vars: {},
+ };
for (var i = 1; i < nextReg; i++) {
- vars.push([fullNames[i]]);
+ var reg = fullNames[i];
+ var type = reg[0] == 'i' ? ASM_INT : ASM_DOUBLE
+ if (!paramRegs[i]) {
+ finalAsmData.vars[reg] = type;
+ } else {
+ finalAsmData.params[reg] = type;
+ fun[2].push(reg);
+ }
}
- getStatements(fun).unshift(['var', vars]);
+ denormalizeAsm(fun, finalAsmData);
}
- //printErr(fun[1] + ': saved ' + saved + ' / ' + (saved + nextReg - 1) + ' vars through registerization'); // not totally accurate
});
}
+function registerizeAsm(ast) {
+ registerize(ast, true);
+}
+
// Eliminator aka Expressionizer
//
// The goal of this pass is to eliminate unneeded variables (which represent one of the infinite registers in the LLVM
@@ -1408,9 +1594,10 @@ var NODES_WITHOUT_ELIMINATION_SIDE_EFFECTS = set('name', 'num', 'string', 'binar
var IGNORABLE_ELIMINATOR_SCAN_NODES = set('num', 'toplevel', 'string', 'break', 'continue', 'dot'); // dot can only be STRING_TABLE.*
var ABORTING_ELIMINATOR_SCAN_NODES = set('new', 'object', 'function', 'defun', 'switch', 'for', 'while', 'array', 'throw'); // we could handle some of these, TODO, but nontrivial (e.g. for while, the condition is hit multiple times after the body)
-function eliminate(ast, memSafe) {
+function eliminate(ast, memSafe, asm) {
// Find variables that have a single use, and if they can be eliminated, do so
traverseGeneratedFunctions(ast, function(func, type) {
+ if (asm) var asmData = normalizeAsm(func);
//printErr('eliminate in ' + func[1]);
// First, find the potentially eliminatable functions: that have one definition and one use
@@ -1418,7 +1605,7 @@ function eliminate(ast, memSafe) {
var uses = {};
var values = {};
var locals = {};
- var varsToRemove = {}; // variables being removed, that we can eliminate all 'var x;' of
+ var varsToRemove = {}; // variables being removed, that we can eliminate all 'var x;' of (this refers to 'var' nodes we should remove)
var varsToTryToRemove = {}; // variables that have 0 uses, but have side effects - when we scan we can try to remove them
// add arguments as locals
if (func[2]) {
@@ -1435,7 +1622,7 @@ function eliminate(ast, memSafe) {
var name = node1i[0];
var value = node1i[1];
if (value) {
- if (!definitions[name]) definitions[name] = 0;
+ if (!(name in definitions)) definitions[name] = 0;
definitions[name]++;
if (!values[name]) values[name] = value;
}
@@ -1450,7 +1637,7 @@ function eliminate(ast, memSafe) {
var target = node[2];
if (target[0] == 'name') {
var name = target[1];
- if (!definitions[name]) definitions[name] = 0;
+ if (!(name in definitions)) definitions[name] = 0;
definitions[name]++;
if (!uses[name]) uses[name] = 0;
if (!values[name]) values[name] = node[3];
@@ -1461,6 +1648,7 @@ function eliminate(ast, memSafe) {
}
});
var potentials = {}; // local variables with 1 definition and 1 use
+ var sideEffectFree = {}; // whether a local variable has no side effects in its definition
for (var name in locals) {
if (definitions[name] == 1 && uses[name] == 1) {
potentials[name] = 1;
@@ -1476,6 +1664,7 @@ function eliminate(ast, memSafe) {
}
if (!hasSideEffects) {
varsToRemove[name] = 1; // remove it normally
+ sideEffectFree[name] = true;
} else {
varsToTryToRemove[name] = 1; // try to remove it later during scanning
}
@@ -1483,10 +1672,11 @@ function eliminate(ast, memSafe) {
}
//printErr('defs: ' + JSON.stringify(definitions));
//printErr('uses: ' + JSON.stringify(uses));
+ //printErr('values: ' + JSON.stringify(values));
//printErr('locals: ' + JSON.stringify(locals));
//printErr('varsToRemove: ' + JSON.stringify(varsToRemove));
- //printErr('2varsToTryToRemove: ' + JSON.stringify(varsToTryToRemove));
- definitions = uses = values = null;
+ //printErr('varsToTryToRemove: ' + JSON.stringify(varsToTryToRemove));
+ definitions = values = null;
//printErr('potentials: ' + JSON.stringify(potentials));
// We can now proceed through the function. In each list of statements, we try to eliminate
var tracked = {};
@@ -1618,6 +1808,12 @@ function eliminate(ast, memSafe) {
invalidateGlobals();
globalsInvalidated = true;
}
+ // if we can track this name (that we assign into), and it has 0 uses and we want to remove its 'var'
+ // definition - then remove it right now, there is no later chance
+ if (allowTracking && (name in varsToRemove) && uses[name] == 0) {
+ track(name, node[3], node);
+ doEliminate(name, node);
+ }
} else {
// replace it in-place
node.length = value.length;
@@ -1768,24 +1964,31 @@ function eliminate(ast, memSafe) {
var info = tracked[name];
delete tracked[name];
var defNode = info.defNode;
- if (defNode[0] == 'var') {
- defNode[1].forEach(function(pair) {
- if (pair[0] == name) {
- value = pair[1];
- }
- });
- assert(value);
- } else { // assign
- value = defNode[3];
- // wipe out the assign
- defNode[0] = 'toplevel';
- defNode[1] = [];
- defNode.length = 2;
- }
- // replace this node in-place
- node.length = 0;
- for (var i = 0; i < value.length; i++) {
- node[i] = value[i];
+ if (!sideEffectFree[name]) {
+ if (defNode[0] == 'var') {
+ defNode[1].forEach(function(pair) {
+ if (pair[0] == name) {
+ value = pair[1];
+ }
+ });
+ assert(value);
+ } else { // assign
+ value = defNode[3];
+ // wipe out the assign
+ defNode[0] = 'toplevel';
+ defNode[1] = [];
+ defNode.length = 2;
+ }
+ // replace this node in-place
+ node.length = 0;
+ for (var i = 0; i < value.length; i++) {
+ node[i] = value[i];
+ }
+ } else {
+ // empty it out in-place
+ node.length = 0;
+ node[0] = 'toplevel';
+ node[1] = [];
}
}
traverse(func, function(block) {
@@ -1808,6 +2011,7 @@ function eliminate(ast, memSafe) {
tracked = {}; // not a var or assign, break all potential elimination so far
}
}
+ //printErr('delete StatBlock');
});
// clean up vars
@@ -1822,6 +2026,13 @@ function eliminate(ast, memSafe) {
}
}
});
+
+ if (asm) {
+ for (var v in varsToRemove) {
+ delete asmData.vars[v];
+ }
+ denormalizeAsm(func, asmData);
+ }
});
// A class for optimizing expressions. We know that it is legitimate to collapse
@@ -1872,6 +2083,10 @@ function eliminateMemSafe(ast) {
eliminate(ast, true);
}
+function eliminateAsm(ast) {
+ eliminate(ast, false, true);
+}
+
// Passes table
var compress = false, printMetadata = true;
@@ -1889,8 +2104,10 @@ var passes = {
hoistMultiples: hoistMultiples,
loopOptimizer: loopOptimizer,
registerize: registerize,
+ registerizeAsm: registerizeAsm,
eliminate: eliminate,
eliminateMemSafe: eliminateMemSafe,
+ eliminateAsm: eliminateAsm,
compress: function() { compress = true; },
noPrintMetadata: function() { printMetadata = false; }
};
@@ -1907,7 +2124,6 @@ if (metadata) setGeneratedFunctions(metadata);
arguments_.slice(1).forEach(function(arg) {
passes[arg](ast);
});
-
var js = astToSrc(ast, compress), old;
// remove unneeded newlines+spaces, and print
diff --git a/tools/js_optimizer.py b/tools/js_optimizer.py
index 5bed4cb7..744e068a 100644
--- a/tools/js_optimizer.py
+++ b/tools/js_optimizer.py
@@ -53,7 +53,7 @@ def run(filename, passes, js_engine, jcache):
jcache = False
# If we process only generated code, find that and save the rest on the side
- func_sig = re.compile('function (_[\w$]+)\(')
+ func_sig = re.compile('( *)function (_[\w$]+)\(')
if suffix:
pos = 0
gen_start = 0
@@ -62,12 +62,13 @@ def run(filename, passes, js_engine, jcache):
m = func_sig.search(js, pos)
if not m: break
pos = m.end()
- ident = m.group(1)
+ indent = m.group(1)
+ ident = m.group(2)
if ident in generated:
if not gen_start:
gen_start = m.start()
assert gen_start
- gen_end = js.find('\n}\n', m.end()) + 3
+ gen_end = js.find('\n%s}\n' % indent, m.end()) + (3 + len(indent))
assert gen_end > gen_start
pre = js[:gen_start]
post = js[gen_end:]
@@ -115,7 +116,7 @@ def run(filename, passes, js_engine, jcache):
if len(chunks) > 0:
def write_chunk(chunk, i):
- temp_file = temp_files.get('.jsfunc_%d.ll' % i).name
+ temp_file = temp_files.get('.jsfunc_%d.js' % i).name
f = open(temp_file, 'w')
f.write(chunk)
f.write(suffix)
@@ -128,6 +129,7 @@ def run(filename, passes, js_engine, jcache):
if len(filenames) > 0:
# XXX Use '--nocrankshaft' to disable crankshaft to work around v8 bug 1895, needed for older v8/node (node 0.6.8+ should be ok)
commands = map(lambda filename: [js_engine, JS_OPTIMIZER, filename, 'noPrintMetadata'] + passes, filenames)
+ #print [' '.join(command) for command in commands]
cores = min(multiprocessing.cpu_count(), filenames)
if len(chunks) > 1 and cores >= 2:
diff --git a/tools/shared.py b/tools/shared.py
index 1dec21cd..6f5bd646 100644
--- a/tools/shared.py
+++ b/tools/shared.py
@@ -433,7 +433,7 @@ def check_engine(engine):
print 'Checking JS engine %s failed. Check %s. Details: %s' % (str(engine), EM_CONFIG, str(e))
return False
-def timeout_run(proc, timeout, note='unnamed process'):
+def timeout_run(proc, timeout, note='unnamed process', full_output=False):
start = time.time()
if timeout is not None:
while time.time() - start < timeout and proc.poll() is None:
@@ -441,13 +441,14 @@ def timeout_run(proc, timeout, note='unnamed process'):
if proc.poll() is None:
proc.kill() # XXX bug: killing emscripten.py does not kill it's child process!
raise Exception("Timed out: " + note)
- return proc.communicate()[0]
+ out = proc.communicate()
+ return '\n'.join(out) if full_output else out[0]
-def run_js(filename, engine=None, args=[], check_timeout=False, stdout=PIPE, stderr=None, cwd=None):
+def run_js(filename, engine=None, args=[], check_timeout=False, stdout=PIPE, stderr=None, cwd=None, full_output=False):
if engine is None: engine = JS_ENGINES[0]
if type(engine) is not list: engine = [engine]
command = engine + [filename] + (['--'] if 'd8' in engine[0] else []) + args
- return timeout_run(Popen(command, stdout=stdout, stderr=stderr, cwd=cwd), 15*60 if check_timeout else None, 'Execution')
+ return timeout_run(Popen(command, stdout=stdout, stderr=stderr, cwd=cwd), 15*60 if check_timeout else None, 'Execution', full_output=full_output)
def to_cc(cxx):
# By default, LLVM_GCC and CLANG are really the C++ versions. This gets an explicit C version
diff --git a/tools/test-js-optimizer-asm-regs-output.js b/tools/test-js-optimizer-asm-regs-output.js
new file mode 100644
index 00000000..d9aa5c0c
--- /dev/null
+++ b/tools/test-js-optimizer-asm-regs-output.js
@@ -0,0 +1,21 @@
+function asm(d1, i2) {
+ d1 = +d1;
+ i2 = i2 | 0;
+ var i3 = 0, d4 = +0;
+ i2 = d1 + d1 | 0;
+ d1 = d(Math_max(10, Math_min(5, f())));
+ i3 = i2 + 2 | 0;
+ print(i3);
+ d4 = d1 * 5;
+ return d4;
+}
+function _doit(i1, i2, i3) {
+ i1 = i1 | 0;
+ i2 = i2 | 0;
+ i3 = i3 | 0;
+ i1 = STACKTOP;
+ _printf(__str | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[(tempInt & 16777215) >> 2] = i2, HEAP32[(tempInt + 4 & 16777215) >> 2] = i3, tempInt));
+ STACKTOP = i1;
+ return 0 | 0;
+}
+
diff --git a/tools/test-js-optimizer-asm-regs.js b/tools/test-js-optimizer-asm-regs.js
new file mode 100644
index 00000000..6ae7f7d0
--- /dev/null
+++ b/tools/test-js-optimizer-asm-regs.js
@@ -0,0 +1,24 @@
+function asm(x, y) {
+ x = +x;
+ y = y | 0;
+ var int1 = 0, int2 = 0; // do not mix the types!
+ var double1 = +0, double2 = +0;
+ int1 = (x+x)|0;
+ double1 = d(Math.max(10, Math_min(5, f())));
+ int2 = (int1+2)|0;
+ print(int2);
+ double2 = double1*5;
+ return double2;
+}
+function _doit($x, $y$0, $y$1) {
+ $x = $x | 0;
+ $y$0 = $y$0 | 0;
+ $y$1 = $y$1 | 0;
+ var __stackBase__ = 0;
+ __stackBase__ = STACKTOP;
+ _printf(__str | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[(tempInt & 16777215) >> 2] = $y$0, HEAP32[(tempInt + 4 & 16777215) >> 2] = $y$1, tempInt));
+ STACKTOP = __stackBase__;
+ return 0 | 0;
+}
+// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "_doit"]
+
diff --git a/tools/test-js-optimizer-regs-output.js b/tools/test-js-optimizer-regs-output.js
index 90b67a47..36006b7c 100644
--- a/tools/test-js-optimizer-regs-output.js
+++ b/tools/test-js-optimizer-regs-output.js
@@ -197,32 +197,32 @@ function ex() {
}))();
}
}
-function switchey(x) {
- var r1, r2, r3, r4, r5, r6, r7, r8;
- r1 = 5;
+function switchey(r1) {
+ var r2, r3, r4, r5, r6, r7, r8, r9;
+ r2 = 5;
while (1) {
- switch (x = f(x, r1)) {
+ switch (r1 = f(r1, r2)) {
case 1:
- g(r1);
- r2 = x + 1;
- x--;
+ g(r2);
+ r3 = r1 + 1;
+ r1--;
break;
case 2:
- g(r1 * 2);
- r3 = x + 22;
- r4 = r3 + 5;
- x -= 20;
+ g(r2 * 2);
+ r4 = r1 + 22;
+ r5 = r4 + 5;
+ r1 -= 20;
break;
default:
- r5 = x + 22;
- r6 = r3 + 5;
- ch(r5, r6 * r3);
+ r6 = r1 + 22;
+ r7 = r4 + 5;
+ ch(r6, r7 * r4);
throw 99;
}
}
- r7 = x + 1;
- p(r1, r7);
- r8 = x + 2;
- pp(r8);
+ r8 = r1 + 1;
+ p(r2, r8);
+ r9 = r1 + 2;
+ pp(r9);
}