aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xemcc2
-rw-r--r--emlink.py2
-rwxr-xr-xtests/runner.py12
-rw-r--r--tools/js-optimizer.js2
4 files changed, 15 insertions, 3 deletions
diff --git a/emcc b/emcc
index 4d67de7a..5a732a10 100755
--- a/emcc
+++ b/emcc
@@ -1597,7 +1597,7 @@ try:
if closure and shared.Settings.ASM_JS:
js_optimizer_queue += ['closure']
- js_optimizer_queue += ['last']
+ if not shared.Settings.SIDE_MODULE: js_optimizer_queue += ['last'] # side modules are not finalized until after relocation
flush_js_optimizer_queue()
diff --git a/emlink.py b/emlink.py
index a2c02fdb..fd9c45af 100644
--- a/emlink.py
+++ b/emlink.py
@@ -144,7 +144,7 @@ class AsmModule():
main.combine_tables()
# relocate
- temp = shared.Building.js_optimizer(self.filename, ['asm', 'relocate'], extra_info={
+ temp = shared.Building.js_optimizer(self.filename, ['asm', 'relocate', 'last'], extra_info={
'replacements': replacements,
'fBases': f_bases,
'hBase': main.staticbump
diff --git a/tests/runner.py b/tests/runner.py
index 7f772d07..0db58f4e 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -10638,6 +10638,18 @@ f.close()
int sidey() { return 11; }
''', 'other says 11.')
+ # finalization of float variables should pass asm.js validation
+ test('floats', '', '''
+ #include <stdio.h>
+ extern float sidey();
+ int main() {
+ printf("other says %.2f.", sidey()+1);
+ return 0;
+ }
+ ''', '''
+ float sidey() { return 11.5; }
+ ''', 'other says 12.50')
+
# memory initialization in both
test('multiple memory inits', '', r'''
#include <stdio.h>
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index f382496f..0e3a21f3 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -2899,7 +2899,7 @@ arguments_.slice(1).forEach(function(arg) {
passes[arg](ast);
});
if (asm && last) {
- asmLoopOptimizer(ast);
+ asmLoopOptimizer(ast); // TODO: move out of last, to make last faster when done later (as in side modules)
prepDotZero(ast);
}
var js = astToSrc(ast, minifyWhitespace), old;