aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFraser Adams <fraser.adams@blueyonder.co.uk>2014-04-24 08:32:52 +0100
committerFraser Adams <fraser.adams@blueyonder.co.uk>2014-04-24 08:32:52 +0100
commit55ba58508e65f70aed38ec57b78b46a83ecf9433 (patch)
tree63797861ed54fe983ddfbb7febd074a3fe7b4177
parent90940429ead09459cc29e8dda86b3d47a7dd20a0 (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.c6
-rw-r--r--tests/return64bit/testbind.js18
-rw-r--r--tests/return64bit/testbindend.js2
-rw-r--r--tests/return64bit/testbindstart.js3
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.
+