diff options
author | Chris Lattner <sabre@nondot.org> | 2001-10-27 08:28:11 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2001-10-27 08:28:11 +0000 |
commit | c25931673092b1dae646aeeac1d18f75d9640ec7 (patch) | |
tree | 1ceb094a137e6c7f064f3d46c5a208f828ecd712 /lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp | |
parent | 204eec3f57aedd703fb73db78ac2b4087caf9f07 (diff) |
* 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
Diffstat (limited to 'lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp')
-rw-r--r-- | lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp index 973cca6842..662abc2291 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 @@ GenericValue lle_Vi_exit(MethodType *M, const vector<GenericValue> &Args) { 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" |