aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-11-10 18:24:42 -0800
committerAlon Zakai <alonzakai@gmail.com>2011-11-10 18:24:42 -0800
commita60f49c7d3af87b0a4d4791575925aeaba5afd96 (patch)
treef46eaec10c3d08834f72b44a54e4a6af32289ff4 /src
parent65cdc27b1c839ae7fa5490669b02e378d2343985 (diff)
do not use i64s in llvm intrinsics that don't need it
Diffstat (limited to 'src')
-rw-r--r--src/jsifier.js5
-rw-r--r--src/modules.js1
2 files changed, 6 insertions, 0 deletions
diff --git a/src/jsifier.js b/src/jsifier.js
index a12bf883..10e09f1c 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -844,6 +844,11 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
var ignoreFunctionIndexizing = [];
var useJSArgs = (shortident + '__jsargs') in LibraryManager.library;
+ 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 (!func || !func.hasVarArgs || i < func.numParams-1 || useJSArgs) {
diff --git a/src/modules.js b/src/modules.js
index 75cf1ad2..2b4e5e4d 100644
--- a/src/modules.js
+++ b/src/modules.js
@@ -12,6 +12,7 @@ var LLVM = {
ACCESS_OPTIONS: set('volatile', 'atomic'),
INVOKE_MODIFIERS: set('alignstack', 'alwaysinline', 'inlinehint', 'naked', 'noimplicitfloat', 'noinline', 'alwaysinline attribute.', 'noredzone', 'noreturn', 'nounwind', 'optsize', 'readnone', 'readonly', 'ssp', 'sspreq'),
SHIFTS: set('ashr', 'lshr', 'shl'),
+ INTRINSICS_32: set('_llvm_memcpy_p0i8_p0i8_i64'), // intrinsics that need args converted to i32 in I64_MODE 1
};
LLVM.GLOBAL_MODIFIERS = set(keys(LLVM.LINKAGES).concat(['constant', 'global', 'hidden']));