From 41b988f2eb5772af879904a5d809f0cd74b16e2e Mon Sep 17 00:00:00 2001 From: Christopher Serr Date: Mon, 7 Nov 2016 19:16:22 +0100 Subject: [PATCH 1/4] Support llvm_(ceil|floor)_f32, llvm_cos_f(32|f64) (#157) --- lib/Target/JSBackend/CallHandlers.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/Target/JSBackend/CallHandlers.h b/lib/Target/JSBackend/CallHandlers.h index 73e01c858c4..4cea6d69066 100644 --- a/lib/Target/JSBackend/CallHandlers.h +++ b/lib/Target/JSBackend/CallHandlers.h @@ -903,10 +903,12 @@ DEF_BUILTIN_HANDLER(llvm_fabs_f64, Math_abs); DEF_BUILTIN_HANDLER(ceil, Math_ceil); DEF_BUILTIN_HANDLER(ceilf, Math_ceil); DEF_BUILTIN_HANDLER(ceill, Math_ceil); +DEF_BUILTIN_HANDLER(llvm_ceil_f32, Math_ceil); DEF_BUILTIN_HANDLER(llvm_ceil_f64, Math_ceil); DEF_BUILTIN_HANDLER(floor, Math_floor); DEF_BUILTIN_HANDLER(floorf, Math_floor); DEF_BUILTIN_HANDLER(floorl, Math_floor); +DEF_BUILTIN_HANDLER(llvm_floor_f32, Math_floor); DEF_BUILTIN_HANDLER(llvm_floor_f64, Math_floor); DEF_MAYBE_BUILTIN_HANDLER(pow, Math_pow); DEF_MAYBE_BUILTIN_HANDLER(powf, Math_pow); @@ -915,6 +917,8 @@ DEF_BUILTIN_HANDLER(llvm_sqrt_f32, Math_sqrt); DEF_BUILTIN_HANDLER(llvm_sqrt_f64, Math_sqrt); DEF_BUILTIN_HANDLER(llvm_pow_f32, Math_pow); // XXX these will be slow in wasm, but need to link in libc before getting here, or stop DEF_BUILTIN_HANDLER(llvm_pow_f64, Math_pow); // LLVM from creating these intrinsics +DEF_MAYBE_BUILTIN_HANDLER(llvm_cos_f32, Math_cos); +DEF_MAYBE_BUILTIN_HANDLER(llvm_cos_f64, Math_cos); DEF_MAYBE_BUILTIN_HANDLER(llvm_sin_f32, Math_sin); DEF_MAYBE_BUILTIN_HANDLER(llvm_sin_f64, Math_sin); @@ -2148,10 +2152,12 @@ void setupCallHandlers() { SETUP_CALL_HANDLER(ceil); SETUP_CALL_HANDLER(ceilf); SETUP_CALL_HANDLER(ceill); + SETUP_CALL_HANDLER(llvm_ceil_f32); SETUP_CALL_HANDLER(llvm_ceil_f64); SETUP_CALL_HANDLER(floor); SETUP_CALL_HANDLER(floorf); SETUP_CALL_HANDLER(floorl); + SETUP_CALL_HANDLER(llvm_floor_f32); SETUP_CALL_HANDLER(llvm_floor_f64); SETUP_CALL_HANDLER(pow); SETUP_CALL_HANDLER(powf); @@ -2166,6 +2172,8 @@ void setupCallHandlers() { SETUP_CALL_HANDLER(llvm_log_f64); SETUP_CALL_HANDLER(llvm_exp_f32); SETUP_CALL_HANDLER(llvm_exp_f64); + SETUP_CALL_HANDLER(llvm_cos_f32); + SETUP_CALL_HANDLER(llvm_cos_f64); SETUP_CALL_HANDLER(llvm_sin_f32); SETUP_CALL_HANDLER(llvm_sin_f64); } From dfcb07a871addf339ffac17e606e16e97e8c5f71 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 10 Nov 2016 16:55:54 -0800 Subject: [PATCH 2/4] show an error on i64 inputs to EM_ASM (#158) --- lib/Target/JSBackend/NaCl/ExpandI64.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/Target/JSBackend/NaCl/ExpandI64.cpp b/lib/Target/JSBackend/NaCl/ExpandI64.cpp index b403bc9b875..ff6ad62a79e 100644 --- a/lib/Target/JSBackend/NaCl/ExpandI64.cpp +++ b/lib/Target/JSBackend/NaCl/ExpandI64.cpp @@ -733,6 +733,10 @@ bool ExpandI64::splitInst(Instruction *I) { CallInst *CI = cast(I); Function *F = CI->getCalledFunction(); if (F) { + // EM_ASMs should not have i64s as arguments + if (F->getName().startswith("emscripten_asm_const")) { + report_fatal_error("EM_ASM should not receive i64s as inputs, they are not valid in JS"); + } assert(okToRemainIllegal(F)); return false; } From f3dfdd1fbcc84a70d89ad58b7cfdf0efb2e63fb2 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 28 Nov 2016 15:03:08 -0800 Subject: [PATCH 3/4] Add a declare for testSetjmp and longjmp when needed, do not depend on library.js (#160) --- lib/Target/JSBackend/CallHandlers.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/Target/JSBackend/CallHandlers.h b/lib/Target/JSBackend/CallHandlers.h index 4cea6d69066..75725ddb29c 100644 --- a/lib/Target/JSBackend/CallHandlers.h +++ b/lib/Target/JSBackend/CallHandlers.h @@ -227,6 +227,8 @@ DEF_CALL_HANDLER(emscripten_check_longjmp, { std::string Threw = getValueAsStr(CI->getOperand(0)); std::string Target = getJSName(CI); std::string Assign = getAssign(CI); + Declares.insert("testSetjmp"); + Declares.insert("longjmp"); return "if (((" + Threw + "|0) != 0) & ((threwValue|0) != 0)) { " + Assign + "_testSetjmp(HEAP32[" + Threw + ">>2]|0, _setjmpTable|0, _setjmpTableSize|0)|0; " + "if ((" + Target + "|0) == 0) { _longjmp(" + Threw + "|0, threwValue|0); } " + // rethrow From 881bd352731d21c7117ad7e2ece347aacae83965 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 23 Dec 2016 15:47:53 -0800 Subject: [PATCH 4/4] 1.37.0 --- emscripten-version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emscripten-version.txt b/emscripten-version.txt index eaece033767..a9eeadaa597 100644 --- a/emscripten-version.txt +++ b/emscripten-version.txt @@ -1 +1 @@ -"1.36.14" +"1.37.0"