diff options
Diffstat (limited to 'src/jsifier.js')
-rw-r--r-- | src/jsifier.js | 39 |
1 files changed, 11 insertions, 28 deletions
diff --git a/src/jsifier.js b/src/jsifier.js index 71533309..b830fc7c 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -497,16 +497,20 @@ function JSify(data, functionsOnly, givenFunctions) { func.JS = '\n'; + var paramIdents = func.params.map(function(param) { + return (param.intertype == 'varargs') ? null : toNiceIdent(param.ident); + }).filter(function(param) { return param != null; }) + if (CLOSURE_ANNOTATIONS) { func.JS += '/**\n'; - func.paramIdents.forEach(function(param) { + paramIdents.forEach(function(param) { func.JS += ' * @param {number} ' + param + '\n'; }); func.JS += ' * @return {number}\n' func.JS += ' */\n'; } - func.JS += 'function ' + func.ident + '(' + func.paramIdents.join(', ') + ') {\n'; + func.JS += 'function ' + func.ident + '(' + paramIdents.join(', ') + ') {\n'; if (PROFILE) { func.JS += ' if (PROFILING) { ' @@ -1046,37 +1050,16 @@ function JSify(data, functionsOnly, givenFunctions) { var hasVarArgs = isVarArgsFunctionType(type); var normalArgs = (hasVarArgs && !useJSArgs) ? countNormalArgs(type) : -1; - if (I64_MODE == 1 && ident in LLVM.INTRINSICS_32) { - // Some LLVM intrinsics use i64 where it is not needed, and would cause much overhead - params.forEach(function(param) { if (param.type == 'i64') param.type = 'i32' }); - } - params.forEach(function(param, i) { var val = finalizeParam(param); if (!hasVarArgs || useJSArgs || i < normalArgs) { - if (param.type == 'i64' && I64_MODE == 1) { - val = makeCopyI64(val); // Must copy [low, high] i64s, so they don't end up modified in the caller - } args.push(val); argsTypes.push(param.type); } else { - if (!(param.type == 'i64' && I64_MODE == 1)) { - varargs.push(val); - varargs = varargs.concat(zeros(Runtime.getNativeFieldSize(param.type)-1)); - varargsTypes.push(param.type); - varargsTypes = varargsTypes.concat(zeros(Runtime.getNativeFieldSize(param.type)-1)); - } else { - // i64 mode 1. Write one i32 with type i64, and one i32 with type i32 - varargs.push(val + '[0]'); - varargs = varargs.concat(zeros(Runtime.getNativeFieldSize('i32')-1)); - ignoreFunctionIndexizing.push(varargs.length); // We will have a value there, but no type (the type is i64, but we write two i32s) - varargs.push(val + '[1]'); - varargs = varargs.concat(zeros(Runtime.getNativeFieldSize('i32')-1)); - varargsTypes.push('i64'); - varargsTypes = varargsTypes.concat(zeros(Runtime.getNativeFieldSize('i32')-1)); - varargsTypes.push('i32'); - varargsTypes = varargsTypes.concat(zeros(Runtime.getNativeFieldSize('i32')-1)); - } + varargs.push(val); + varargs = varargs.concat(zeros(Runtime.getNativeFieldSize(param.type)-1)); + varargsTypes.push(param.type); + varargsTypes = varargsTypes.concat(zeros(Runtime.getNativeFieldSize(param.type)-1)); } }); @@ -1096,7 +1079,6 @@ function JSify(data, functionsOnly, givenFunctions) { varargs.map(function(arg, i) { var type = varargsTypes[i]; if (type == 0) return null; - if (I64_MODE == 1 && type == 'i64') type = 'i32'; // We have [i64, 0, 0, 0, i32, 0, 0, 0] in the layout at this point var ret = makeSetValue(getFastValue('tempInt', '+', offset), 0, arg, type, null, null, QUANTUM_SIZE, null, ','); offset += Runtime.getNativeFieldSize(type); return ret; @@ -1190,6 +1172,7 @@ function JSify(data, functionsOnly, givenFunctions) { print(postParts[0]); // Print out global variables and postsets TODO: batching + legalizedI64s = false; JSify(analyzer(intertyper(data.unparsedGlobalss[0].lines, true), true), true, Functions); data.unparsedGlobalss = null; |