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" diff --git a/lib/Target/JSBackend/CallHandlers.h b/lib/Target/JSBackend/CallHandlers.h index 73e01c858c4..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 @@ -903,10 +905,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 +919,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 +2154,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 +2174,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); } 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; }