aboutsummaryrefslogtreecommitdiff
path: root/src/jsifier.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/jsifier.js')
-rw-r--r--src/jsifier.js39
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;