aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xemscripten.py2
-rw-r--r--src/postamble.js5
-rw-r--r--src/preamble.js13
-rw-r--r--src/settings.js2
4 files changed, 22 insertions, 0 deletions
diff --git a/emscripten.py b/emscripten.py
index 15beb4ee..10834314 100755
--- a/emscripten.py
+++ b/emscripten.py
@@ -223,6 +223,8 @@ def emscript(infile, settings, outfile, libraries=[]):
if DEBUG: t = time.time()
funcs_js = ''.join([output[0] for output in outputs])
+ if settings.get('ASM_JS'): # asm.js code must be indented
+ funcs_js = ' ' + funcs_js.replace('\n', '\n ')
for func_js, curr_forwarded_data in outputs:
# merge forwarded data
diff --git a/src/postamble.js b/src/postamble.js
index 144b5af9..25232879 100644
--- a/src/postamble.js
+++ b/src/postamble.js
@@ -1,4 +1,9 @@
+#if ASM_JS
+ return {};
+})({}, buffer);
+#endif
+
// === Auto-generated postamble setup entry stuff ===
Module.callMain = function callMain(args) {
diff --git a/src/preamble.js b/src/preamble.js
index 9342bf2b..a27c9890 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -889,3 +889,16 @@ Module["preloadedAudios"] = {}; // maps url to audio data
// === Body ===
+#if ASM_JS
+var asm = (function(env, buffer) {
+ 'use asm';
+ var HEAP8 = new env.Int8Array(buffer);
+ var HEAP16 = new env.Int16Array(buffer);
+ var HEAP32 = new env.Int32Array(buffer);
+ var HEAPU8 = new env.Uint8Array(buffer);
+ var HEAPU16 = new env.Uint16Array(buffer);
+ var HEAPU32 = new env.Uint32Array(buffer);
+ var HEAPF32 = new env.Float32Array(buffer);
+ var HEAPF64 = new env.Float64Array(buffer);
+#endif
+
diff --git a/src/settings.js b/src/settings.js
index 1d8805a8..1d115001 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -294,6 +294,8 @@ var HEADLESS = 0; // If 1, will include shim code that tries to 'fake' a browser
// very partial - it is hard to fake a whole browser! - so
// keep your expectations low for this to work.
+var ASM_JS = 0; // If 1, generate code in asm.js format
+
var NECESSARY_BLOCKADDRS = []; // List of (function, block) for all block addresses that are taken.
// Compiler debugging options