diff options
-rw-r--r-- | src/library.js | 26 | ||||
-rwxr-xr-x | tests/runner.py | 30 |
2 files changed, 32 insertions, 24 deletions
diff --git a/src/library.js b/src/library.js index 0c6c7a63..6e4e7d0e 100644 --- a/src/library.js +++ b/src/library.js @@ -4528,33 +4528,11 @@ LibraryManager.library = { }, llvm_bswap_i16: function(x) { - x = unSign(x, 32); - var bytes = []; - bytes[0] = x & 255; - x >>= 8; - bytes[1] = x & 255; - x >>= 8; - var ret = 0; - ret <<= 8; - ret += bytes[0]; - ret <<= 8; - ret += bytes[1]; - return ret; + return ((x&0xff)<<8) | ((x>>8)&0xff); }, llvm_bswap_i32: function(x) { - x = unSign(x, 32); - var bytes = []; - for (var i = 0; i < 4; i++) { - bytes[i] = x & 255; - x >>= 8; - } - var ret = 0; - for (i = 0; i < 4; i++) { - ret <<= 8; - ret += bytes[i]; - } - return ret; + return ((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24); }, llvm_ctlz_i32: function(x) { diff --git a/tests/runner.py b/tests/runner.py index f3438e64..bf971996 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -978,6 +978,36 @@ m_divisor is 1091269979 ''' self.do_run(src, ',0,,2,C!,0,C!,0,,65535,C!,0,') + def test_bswap(self): + if self.emcc_args == None: return self.skip('needs ta2') + + src = r''' + #include <stdio.h> + + extern "C" { + extern unsigned short llvm_bswap_i16(unsigned short x); + extern unsigned int llvm_bswap_i32(unsigned int x); + } + + int main(void) { + unsigned short x = 0xc8ef; + printf("%x,%x\n", x&0xff, x >> 8); + x = llvm_bswap_i16(x); + printf("%x,%x\n", x&0xff, x >> 8); + + unsigned int y = 0xc5de158a; + printf("%x,%x,%x,%x\n", y&0xff, (y>>8)&0xff, (y>>16)&0xff, (y>>24)&0xff); + y = llvm_bswap_i32(y); + printf("%x,%x,%x,%x\n", y&0xff, (y>>8)&0xff, (y>>16)&0xff, (y>>24)&0xff); + return 0; + } + ''' + self.do_run(src, '''ef,c8 +c8,ef +8a,15,de,c5 +c5,de,15,8a +''') + def test_sha1(self): if self.emcc_args == None: return self.skip('needs ta2') |