* Make pointer values work better by treating them uniformly as 64 bit values.
  This causes code that is generated by gcc to work better.
* Implement mul & div
* Export malloc, free, and pow
* add strtol, atoi, and atol to the runtime library


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@988 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
index 973cca6..662abc2 100644
--- a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
+++ b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
@@ -14,6 +14,7 @@
 #include <map>
 #include <dlfcn.h>
 #include <link.h>
+#include <math.h>
 
 typedef GenericValue (*ExFunc)(MethodType *, const vector<GenericValue> &);
 static map<const Method *, ExFunc> Functions;
@@ -170,4 +171,25 @@
   return GenericValue();
 }
 
+// void *malloc(uint)
+GenericValue lle_PI_malloc(MethodType *M, const vector<GenericValue> &Args) {
+  GenericValue GV;
+  GV.LongVal = (uint64_t)malloc(Args[0].UIntVal);
+  return GV;
+}
+
+// void free(void *)
+GenericValue lle_VP_free(MethodType *M, const vector<GenericValue> &Args) {
+  free((void*)Args[0].LongVal);
+  return GenericValue();
+}
+
+// double pow(double, double)
+GenericValue lle_DDD_pow(MethodType *M, const vector<GenericValue> &Args) {
+  GenericValue GV;
+  GV.DoubleVal = pow(GV.DoubleVal, GV.DoubleVal);
+  return GV;
+}
+
+
 } // End extern "C"