diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-11-01 18:39:33 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-11-01 18:39:33 -0700 |
commit | 140ea9e81feb09d8f2559995c73d49a39424ef5d (patch) | |
tree | 53f2baf7fc1fdc0b2689c3ff12a97a2e4e756668 /src | |
parent | 3d48329892cd517b2e709ef94a00df8214169ddd (diff) |
do not emit unnecessary coercions when calling a math builtin with a float
Diffstat (limited to 'src')
-rw-r--r-- | src/jsifier.js | 3 | ||||
-rw-r--r-- | src/parseTools.js | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/src/jsifier.js b/src/jsifier.js index d5b87a77..97317756 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -1503,7 +1503,8 @@ function JSify(data, functionsOnly, givenFunctions) { args = args.map(function(arg, i) { return indexizeFunctions(arg, argsTypes[i]) }); if (ASM_JS) { - var ffiCall = shortident in Functions.libraryFunctions || simpleIdent in Functions.libraryFunctions || byPointerForced || invoke || extCall || funcData.setjmpTable; + var ffiCall = (shortident in Functions.libraryFunctions || simpleIdent in Functions.libraryFunctions || byPointerForced || invoke || extCall || funcData.setjmpTable) && + !(simpleIdent in JS_MATH_BUILTINS); if (ffiCall) { args = args.map(function(arg, i) { return asmCoercion(arg, ensureValidFFIType(argsTypes[i])) }); } else { diff --git a/src/parseTools.js b/src/parseTools.js index 6179e285..34e064f0 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -629,6 +629,8 @@ function cleanSegment(segment) { var MATHOPS = set(['add', 'sub', 'sdiv', 'udiv', 'mul', 'icmp', 'zext', 'urem', 'srem', 'fadd', 'fsub', 'fmul', 'fdiv', 'fcmp', 'frem', 'uitofp', 'sitofp', 'fpext', 'fptrunc', 'fptoui', 'fptosi', 'trunc', 'sext', 'select', 'shl', 'shr', 'ashl', 'ashr', 'lshr', 'lshl', 'xor', 'or', 'and', 'ptrtoint', 'inttoptr']); +var JS_MATH_BUILTINS = set(['Math_sin', 'Math_cos', 'Math_tan', 'Math_asin', 'Math_acos', 'Math_atan', 'Math_ceil', 'Math_floor', 'Math_exp', 'Math_log', 'Math_sqrt']); + var PARSABLE_LLVM_FUNCTIONS = set('getelementptr', 'bitcast'); mergeInto(PARSABLE_LLVM_FUNCTIONS, MATHOPS); |