diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2006-09-19 16:41:40 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2006-09-19 16:41:40 +0000 |
commit | 4d4c0217587d6cd76da9690aca0be49f5508db7a (patch) | |
tree | a7eee13165fe29f50e0c3dcb3ceea64a6199271a /lib/Target/ARM/ARMMul.cpp | |
parent | 71f3b94fa846114a2ce45645ef262e230737e65e (diff) |
fix header
add comments
untabify
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30486 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMMul.cpp')
-rw-r--r-- | lib/Target/ARM/ARMMul.cpp | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/lib/Target/ARM/ARMMul.cpp b/lib/Target/ARM/ARMMul.cpp index b984e7dc5c..185fb96783 100644 --- a/lib/Target/ARM/ARMMul.cpp +++ b/lib/Target/ARM/ARMMul.cpp @@ -1,4 +1,4 @@ -//===-- ARMTargetMachine.cpp - Define TargetMachine for ARM ---------------===// +//===-- ARMMul.cpp - Define TargetMachine for A5CRM -----------------------===// // // The LLVM Compiler Infrastructure // @@ -8,6 +8,7 @@ // //===----------------------------------------------------------------------===// // +// Modify the ARM multiplication instructions so that Rd and Rm are distinct // //===----------------------------------------------------------------------===// @@ -39,25 +40,27 @@ bool FixMul::runOnMachineFunction(MachineFunction &MF) { MachineInstr *MI = I; if (MI->getOpcode() == ARM::MUL) { - MachineOperand &RdOp = MI->getOperand(0); - MachineOperand &RmOp = MI->getOperand(1); - MachineOperand &RsOp = MI->getOperand(2); + MachineOperand &RdOp = MI->getOperand(0); + MachineOperand &RmOp = MI->getOperand(1); + MachineOperand &RsOp = MI->getOperand(2); - unsigned Rd = RdOp.getReg(); - unsigned Rm = RmOp.getReg(); - unsigned Rs = RsOp.getReg(); + unsigned Rd = RdOp.getReg(); + unsigned Rm = RmOp.getReg(); + unsigned Rs = RsOp.getReg(); - if(Rd == Rm) { - Changed = true; - if (Rd != Rs) { - RmOp.setReg(Rs); - RsOp.setReg(Rm); - } else { - BuildMI(MBB, I, ARM::MOV, 3, ARM::R12).addReg(Rm).addImm(0) - .addImm(ARMShift::LSL); - RmOp.setReg(ARM::R12); - } - } + if(Rd == Rm) { + Changed = true; + if (Rd != Rs) { + //Rd and Rm must be distinct, but Rd can be equal to Rs. + //Swap Rs and Rm + RmOp.setReg(Rs); + RsOp.setReg(Rm); + } else { + BuildMI(MBB, I, ARM::MOV, 3, ARM::R12).addReg(Rm).addImm(0) + .addImm(ARMShift::LSL); + RmOp.setReg(ARM::R12); + } + } } } } |