LLVMReactor: Bind double variants of trig / exp functions

These are used instead of the *f float forms on x86.
We should probably investigate why, but having LLVM attempting, failing and crashing to resolve functions under any circumstances is Not Good.

Bug: b/126873455
Change-Id: Ic31866ebea7deba2dc29a9a4fb54a457b13e622a
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/33214
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 90dea9e..343bf3c 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -588,6 +588,7 @@
 			func_.emplace("printf", reinterpret_cast<void*>(printf));
 			func_.emplace("puts", reinterpret_cast<void*>(puts));
 			func_.emplace("fmodf", reinterpret_cast<void*>(fmodf));
+
 			func_.emplace("sinf", reinterpret_cast<void*>(sinf));
 			func_.emplace("cosf", reinterpret_cast<void*>(cosf));
 			func_.emplace("asinf", reinterpret_cast<void*>(asinf));
@@ -605,6 +606,25 @@
 			func_.emplace("logf", reinterpret_cast<void*>(logf));
 			func_.emplace("exp2f", reinterpret_cast<void*>(exp2f));
 			func_.emplace("log2f", reinterpret_cast<void*>(log2f));
+
+			func_.emplace("sin", reinterpret_cast<void*>(static_cast<double(*)(double)>(sin)));
+			func_.emplace("cos", reinterpret_cast<void*>(static_cast<double(*)(double)>(cos)));
+			func_.emplace("asin", reinterpret_cast<void*>(static_cast<double(*)(double)>(asin)));
+			func_.emplace("acos", reinterpret_cast<void*>(static_cast<double(*)(double)>(acos)));
+			func_.emplace("atan", reinterpret_cast<void*>(static_cast<double(*)(double)>(atan)));
+			func_.emplace("sinh", reinterpret_cast<void*>(static_cast<double(*)(double)>(sinh)));
+			func_.emplace("cosh", reinterpret_cast<void*>(static_cast<double(*)(double)>(cosh)));
+			func_.emplace("tanh", reinterpret_cast<void*>(static_cast<double(*)(double)>(tanh)));
+			func_.emplace("asinh", reinterpret_cast<void*>(static_cast<double(*)(double)>(asinh)));
+			func_.emplace("acosh", reinterpret_cast<void*>(static_cast<double(*)(double)>(acosh)));
+			func_.emplace("atanh", reinterpret_cast<void*>(static_cast<double(*)(double)>(atanh)));
+			func_.emplace("atan2", reinterpret_cast<void*>(static_cast<double(*)(double,double)>(atan2)));
+			func_.emplace("pow", reinterpret_cast<void*>(static_cast<double(*)(double,double)>(pow)));
+			func_.emplace("exp", reinterpret_cast<void*>(static_cast<double(*)(double)>(exp)));
+			func_.emplace("log", reinterpret_cast<void*>(static_cast<double(*)(double)>(log)));
+			func_.emplace("exp2", reinterpret_cast<void*>(static_cast<double(*)(double)>(exp2)));
+			func_.emplace("log2", reinterpret_cast<void*>(static_cast<double(*)(double)>(log2)));
+
 			func_.emplace("atomic_load", reinterpret_cast<void*>(Atomic::load));
 			func_.emplace("atomic_store", reinterpret_cast<void*>(Atomic::store));