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 | |
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
-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. + |