diff options
author | Misha Brukman <brukman+llvm@gmail.com> | 2004-11-19 22:14:35 +0000 |
---|---|---|
committer | Misha Brukman <brukman+llvm@gmail.com> | 2004-11-19 22:14:35 +0000 |
commit | d159aafc26585073f244e7db63be148e434b4eaa (patch) | |
tree | 65b643c4b0ab0ef3a4a62e0192bd495252dba6ff /lib | |
parent | c29e6a4f16424ef5bd13793d1f48774413c8dcad (diff) | |
download | llvm-d159aafc26585073f244e7db63be148e434b4eaa.tar.gz llvm-d159aafc26585073f244e7db63be148e434b4eaa.tar.bz2 llvm-d159aafc26585073f244e7db63be148e434b4eaa.tar.xz |
Add protoypes for 64-bit long/ulong div, mul, and rem functions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18019 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/Sparc/SparcV8ISelSimple.cpp | 23 | ||||
-rw-r--r-- | lib/Target/SparcV8/SparcV8ISelSimple.cpp | 23 |
2 files changed, 46 insertions, 0 deletions
diff --git a/lib/Target/Sparc/SparcV8ISelSimple.cpp b/lib/Target/Sparc/SparcV8ISelSimple.cpp index 8c448fcad3..2786c13f67 100644 --- a/lib/Target/Sparc/SparcV8ISelSimple.cpp +++ b/lib/Target/Sparc/SparcV8ISelSimple.cpp @@ -36,6 +36,10 @@ namespace { MachineBasicBlock *BB; // The current MBB we are compiling int VarArgsOffset; // Offset from fp for start of varargs area + // External functions we may use in compiling the Module + Function *__div64Fn, *__mul64Fn, *__rem64Fn, + *__udiv64Fn, *__umul64Fn, *__urem64Fn; + std::map<Value*, unsigned> RegMap; // Mapping between Val's and SSA Regs // MBBMap - Mapping between LLVM BB -> Machine BB @@ -43,6 +47,25 @@ namespace { V8ISel(TargetMachine &tm) : TM(tm), F(0), BB(0) {} + bool doInitialization(Module &M) { + // Add external functions that we may call + Type *l = Type::LongTy; + Type *ul = Type::ULongTy; + // long __div64(long, long); + __div64Fn = M.getOrInsertFunction("__div64", l, l, l, 0); + // long __div64(long, long); + __mul64Fn = M.getOrInsertFunction("__mul64", l, l, l, 0); + // long __div64(long, long); + __rem64Fn = M.getOrInsertFunction("__rem64", l, l, l, 0); + // unsigned long __udiv64(unsigned long, unsigned long); + __udiv64Fn = M.getOrInsertFunction("__udiv64", ul, ul, ul, 0); + // unsigned long __umul64(unsigned long, unsigned long); + __umul64Fn = M.getOrInsertFunction("__umul64", ul, ul, ul, 0); + // unsigned long __urem64(unsigned long, unsigned long); + __urem64Fn = M.getOrInsertFunction("__urem64", ul, ul, ul, 0); + return true; + } + /// runOnFunction - Top level implementation of instruction selection for /// the entire function. /// diff --git a/lib/Target/SparcV8/SparcV8ISelSimple.cpp b/lib/Target/SparcV8/SparcV8ISelSimple.cpp index 8c448fcad3..2786c13f67 100644 --- a/lib/Target/SparcV8/SparcV8ISelSimple.cpp +++ b/lib/Target/SparcV8/SparcV8ISelSimple.cpp @@ -36,6 +36,10 @@ namespace { MachineBasicBlock *BB; // The current MBB we are compiling int VarArgsOffset; // Offset from fp for start of varargs area + // External functions we may use in compiling the Module + Function *__div64Fn, *__mul64Fn, *__rem64Fn, + *__udiv64Fn, *__umul64Fn, *__urem64Fn; + std::map<Value*, unsigned> RegMap; // Mapping between Val's and SSA Regs // MBBMap - Mapping between LLVM BB -> Machine BB @@ -43,6 +47,25 @@ namespace { V8ISel(TargetMachine &tm) : TM(tm), F(0), BB(0) {} + bool doInitialization(Module &M) { + // Add external functions that we may call + Type *l = Type::LongTy; + Type *ul = Type::ULongTy; + // long __div64(long, long); + __div64Fn = M.getOrInsertFunction("__div64", l, l, l, 0); + // long __div64(long, long); + __mul64Fn = M.getOrInsertFunction("__mul64", l, l, l, 0); + // long __div64(long, long); + __rem64Fn = M.getOrInsertFunction("__rem64", l, l, l, 0); + // unsigned long __udiv64(unsigned long, unsigned long); + __udiv64Fn = M.getOrInsertFunction("__udiv64", ul, ul, ul, 0); + // unsigned long __umul64(unsigned long, unsigned long); + __umul64Fn = M.getOrInsertFunction("__umul64", ul, ul, ul, 0); + // unsigned long __urem64(unsigned long, unsigned long); + __urem64Fn = M.getOrInsertFunction("__urem64", ul, ul, ul, 0); + return true; + } + /// runOnFunction - Top level implementation of instruction selection for /// the entire function. /// |