[llvm-commits] CVS: llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp

Chris Lattner lattner at cs.uiuc.edu
Sat Dec 17 14:30:12 PST 2005



Changes in directory llvm/lib/Target/SparcV8:

SparcV8ISelDAGToDAG.cpp updated: 1.7 -> 1.8
---
Log message:

implement MULHU/MULHS for 64-bit multiplies


---
Diffs of the changes:  (+11 -0)

 SparcV8ISelDAGToDAG.cpp |   11 +++++++++++
 1 files changed, 11 insertions(+)


Index: llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp
diff -u llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.7 llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.8
--- llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.7	Sat Dec 17 15:25:27 2005
+++ llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp	Sat Dec 17 16:30:00 2005
@@ -278,6 +278,17 @@
   
   switch (N->getOpcode()) {
   default: break;
+  case ISD::MULHU:
+  case ISD::MULHS: {
+    SDOperand MulLHS = Select(N->getOperand(0));
+    SDOperand MulRHS = Select(N->getOperand(1));
+    unsigned Opcode = N->getOpcode() == ISD::MULHU ? V8::UMULrr : V8::SMULrr;
+    SDOperand Mul = CurDAG->getTargetNode(Opcode, MVT::i32, MVT::Flag,
+                                          MulLHS, MulRHS);
+    // The high part is in the Y register.
+    return CurDAG->SelectNodeTo(N, V8::RDY, MVT::i32, Mul.getValue(1));
+  }
+    
   case ISD::RET: {
     if (N->getNumOperands() == 2) {
       SDOperand Chain = Select(N->getOperand(0));     // Token chain.






More information about the llvm-commits mailing list