diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-05-31 14:39:18 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-05-31 14:39:18 -0700 |
commit | 358260eefc7cfc3571d9bf6b26e26c74c77f57e0 (patch) | |
tree | e114e23b037e1364b033d9c69df89430fdaaf425 | |
parent | 89511656efa293c3d64d42b85d344483e4ab3756 (diff) | |
parent | 60766db449b7ceef9a5f0fecde2b2abf146b5926 (diff) |
Merge pull request #460 from adetaylor/llvm_uadd_with_overflow_i16
Adding LLVM intrinsic llvm_uadd_with_overflow_i16.
-rw-r--r-- | src/library.js | 9 | ||||
-rwxr-xr-x | tests/runner.py | 25 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/library.js b/src/library.js index 8d68251f..1cb4dd2a 100644 --- a/src/library.js +++ b/src/library.js @@ -4759,6 +4759,15 @@ LibraryManager.library = { // type_info for void*. _ZTIPv: [0], + llvm_uadd_with_overflow_i16: function(x, y) { + x = (x>>>0) & 0xffff; + y = (y>>>0) & 0xffff; + return { + f0: (x+y) & 0xffff, + f1: x+y > 65535 + }; + }, + llvm_uadd_with_overflow_i32: function(x, y) { x = x>>>0; y = y>>>0; diff --git a/tests/runner.py b/tests/runner.py index ce19aadb..dcb3632f 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -950,6 +950,31 @@ m_divisor is 1091269979 ''' self.do_run(src, 'zero 2, 104', ['hallo']) + def test_i16_emcc_intrinsic(self): + Settings.CORRECT_SIGNS = 1 # Relevant to this test + + src = r''' + #include <stdio.h> + + int test(unsigned short a, unsigned short b) { + unsigned short result = a; + result += b; + if (result < b) printf("C!"); + return result; + } + + int main(void) { + printf(",%d,", test(0, 0)); + printf(",%d,", test(1, 1)); + printf(",%d,", test(65535, 1)); + printf(",%d,", test(1, 65535)); + printf(",%d,", test(32768, 32767)); + printf(",%d,", test(32768, 32768)); + return 0; + } + ''' + self.do_run(src, ',0,,2,C!,0,C!,0,,65535,C!,0,') + def test_sha1(self): if self.emcc_args == None: return self.skip('needs ta2') |