Add protoypes for 64-bit long/ulong div, mul, and rem functions
authorMisha Brukman <brukman+llvm@gmail.com>
Fri, 19 Nov 2004 22:14:35 +0000 (22:14 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Fri, 19 Nov 2004 22:14:35 +0000 (22:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18019 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Sparc/SparcV8ISelSimple.cpp
lib/Target/SparcV8/SparcV8ISelSimple.cpp

index 8c448fcad38ac7274b06bb68d8a42e6e1c0995fc..2786c13f67af0338bb82b0da335bbded3f2f89b0 100644 (file)
@@ -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.
     ///
index 8c448fcad38ac7274b06bb68d8a42e6e1c0995fc..2786c13f67af0338bb82b0da335bbded3f2f89b0 100644 (file)
@@ -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.
     ///