diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-09-17 23:49:38 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-09-17 23:49:38 -0700 |
commit | 00d573c696084b8cc5f3beb8c2eead00552dbc22 (patch) | |
tree | 7e7f788b24153fab846f319d596a0279080cc5dd | |
parent | 6654bb5bb6cbd78fff9802922dd2a5001ee006aa (diff) |
fix ta2 memcpy bug, and enable ta2 in sqlite test
-rw-r--r-- | src/parseTools.js | 18 | ||||
-rw-r--r-- | tests/runner.py | 36 |
2 files changed, 40 insertions, 14 deletions
diff --git a/src/parseTools.js b/src/parseTools.js index f9f46b06..ab67cbf7 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -843,21 +843,15 @@ function makeCopyValues(dest, src, num, type, modifier) { }).join('; ') + '; ' + safety() ) + '\n' + '}'; } else { // USE_TYPED_ARRAYS == 2 -/* - return 'for (var $mcpi$ = 0; $mcpi$ < ' + num + '; $mcpi$++) {\n' + - ' HEAP8[' + dest + '+$mcpi$] = HEAP8[' + src + '+$mcpi$]; ' + safety() + ';\n' + - '}'; -*/ return '' + 'var $src$, $dest$, $stop$, $stop4$, $fast$;\n' + '$src$ = ' + src + ';\n' + '$dest$ = ' + dest + ';\n' + '$stop$ = $src$ + ' + num + ';\n' + - '$fast$ = ($dest$%4) === ($src$%4);\n' + - 'while ($src$%4 !== 0 && $src$ < $stop$) {\n' + - ' ' + safety('$dest$', '$src$') + '; HEAP8[$dest$++] = HEAP8[$src$++];\n' + - '}\n' + - 'if ($fast$) {\n' + + 'if (($dest$%4) == ($src$%4) && ' + num + ' > 8) {\n' + + ' while ($src$%4 !== 0 && $src$ < $stop$) {\n' + + ' ' + safety('$dest$', '$src$') + '; HEAP8[$dest$++] = HEAP8[$src$++];\n' + + ' }\n' + ' $src$ >>= 2;\n' + ' $dest$ >>= 2;\n' + ' $stop4$ = $stop$ >> 2;\n' + @@ -868,10 +862,10 @@ function makeCopyValues(dest, src, num, type, modifier) { ' }\n' + ' $src$ <<= 2;\n' + ' $dest$ <<= 2;\n' + - '}\n' + + '}' + 'while ($src$ < $stop$) {\n' + ' ' + safety('$dest$', '$src$') + '; HEAP8[$dest$++] = HEAP8[$src$++];\n' + - '}' + '}'; } return null; } diff --git a/tests/runner.py b/tests/runner.py index 306df8f5..3642da26 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -1779,6 +1779,38 @@ if 'benchmark' not in str(sys.argv): ''' self.do_test(src, '*0.00,0.00,0.00*\n*0,77,0*\n*0,77,0*\n*0,77,0*') + def test_memcpy(self): + src = ''' + #include <stdio.h> + #include <string.h> + #define MAXX 48 + void reset(unsigned char *buffer) { + for (int i = 0; i < MAXX; i++) buffer[i] = i+1; + } + void dump(unsigned char *buffer) { + for (int i = 0; i < MAXX-1; i++) printf("%2d,", buffer[i]); + printf("%d\\n", buffer[MAXX-1]); + } + int main() { + unsigned char buffer[MAXX]; + for (int i = MAXX/4; i < MAXX-MAXX/4; i++) { + for (int j = MAXX/4; j < MAXX-MAXX/4; j++) { + for (int k = 1; k < MAXX/4; k++) { + if (i == j) continue; + if (i < j && i+k > j) continue; + if (j < i && j+k > i) continue; + printf("[%d,%d,%d]\\n", i, j, k); + reset(buffer); + memcpy(buffer+i, buffer+j, k); + dump(buffer); + } + } + } + return 0; + } + ''' + self.do_test(src) + def test_nestedstructs(self): src = ''' #include <stdio.h> @@ -3105,7 +3137,7 @@ if 'benchmark' not in str(sys.argv): def test_sqlite(self): # gcc -O3 -I/home/alon/Dev/emscripten/tests/sqlite -ldl src.c global QUANTUM_SIZE, OPTIMIZE, RELOOP, USE_TYPED_ARRAYS - if QUANTUM_SIZE == 1 or USE_TYPED_ARRAYS == 2: return self.skip('TODO FIXME') + if QUANTUM_SIZE == 1: return self.skip('TODO FIXME') RELOOP = 0 # too slow auto_optimize_data = read_auto_optimize_data(path_from_root('tests', 'sqlite', 'sqlite-autooptimize.fails.txt')) @@ -4178,7 +4210,7 @@ else: def do_benchmark(self, src, args=[], expected_output='FAIL', main_file=None): global USE_TYPED_ARRAYS - self.pick_llvm_opts(3, True, allow_nonportable=USE_TYPED_ARRAYS == 2) + self.pick_llvm_opts(3, True) # XXX nonportable fails with dlmalloc #, allow_nonportable=USE_TYPED_ARRAYS == 2) dirname = self.get_dir() filename = os.path.join(dirname, 'src.cpp') |