diff options
author | Fraser Adams <fraser.adams@blueyonder.co.uk> | 2014-04-24 08:32:52 +0100 |
---|---|---|
committer | Fraser Adams <fraser.adams@blueyonder.co.uk> | 2014-04-24 08:32:52 +0100 |
commit | 55ba58508e65f70aed38ec57b78b46a83ecf9433 (patch) | |
tree | 63797861ed54fe983ddfbb7febd074a3fe7b4177 /tests | |
parent | 90940429ead09459cc29e8dda86b3d47a7dd20a0 (diff) |
The most significant 32 bits of a 64 bit long return value get passed in the global tempRet0, but this fails when asm.js and/or closure are enabled as tempRet0 was declared again inside the asm closure. This fix exports tempRet0 via an accessor method Runtime.getTempRet0() which is visible with or without optimisations being enabled
Diffstat (limited to 'tests')
-rw-r--r-- | tests/return64bit/test.c | 6 | ||||
-rw-r--r-- | tests/return64bit/testbind.js | 18 | ||||
-rw-r--r-- | tests/return64bit/testbindend.js | 2 | ||||
-rw-r--r-- | tests/return64bit/testbindstart.js | 3 |
4 files changed, 29 insertions, 0 deletions
diff --git a/tests/return64bit/test.c b/tests/return64bit/test.c new file mode 100644 index 00000000..e75ee5c1 --- /dev/null +++ b/tests/return64bit/test.c @@ -0,0 +1,6 @@ + +// This is just a trivial test function, the key bit of interest is that it returns a 64 bit long. +long long test() { + long long x = ((long long)1234 << 32) + 5678; + return x; +} diff --git a/tests/return64bit/testbind.js b/tests/return64bit/testbind.js new file mode 100644 index 00000000..f2cc0e7b --- /dev/null +++ b/tests/return64bit/testbind.js @@ -0,0 +1,18 @@ +// This code represents a simple native JavaScript binding to a test C function +// that returns a 64 bit long. Notice that the least significant 32 bits are +// returned in the normal return value, but the most significant 32 bits are +// returned via the accessor method Runtime.getTempRet0() + +var Module = { + 'noExitRuntime' : true +}; + +Module['runtest'] = function() { + var low = _test(); + var high = Runtime.getTempRet0(); + + console.log("low = " + low); + console.log("high = " + high); +}; + + diff --git a/tests/return64bit/testbindend.js b/tests/return64bit/testbindend.js new file mode 100644 index 00000000..2218f14d --- /dev/null +++ b/tests/return64bit/testbindend.js @@ -0,0 +1,2 @@ + +})(); // End of self calling lambda used to wrap library. diff --git a/tests/return64bit/testbindstart.js b/tests/return64bit/testbindstart.js new file mode 100644 index 00000000..4956806b --- /dev/null +++ b/tests/return64bit/testbindstart.js @@ -0,0 +1,3 @@ + +(function() { // Start of self-calling lambda used to avoid polluting global namespace. + |