OLD | NEW |
---|---|
1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===// | 1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file implements the TargetLoweringX8632 class, which | 10 // This file implements the TargetLoweringX8632 class, which |
(...skipping 1563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1574 _mov(Dest, T); | 1574 _mov(Dest, T); |
1575 break; | 1575 break; |
1576 case InstArithmetic::Mul: | 1576 case InstArithmetic::Mul: |
1577 // TODO: Optimize for llvm::isa<Constant>(Src1) | 1577 // TODO: Optimize for llvm::isa<Constant>(Src1) |
1578 // TODO: Strength-reduce multiplications by a constant, | 1578 // TODO: Strength-reduce multiplications by a constant, |
1579 // particularly -1 and powers of 2. Advanced: use lea to | 1579 // particularly -1 and powers of 2. Advanced: use lea to |
1580 // multiply by 3, 5, 9. | 1580 // multiply by 3, 5, 9. |
1581 // | 1581 // |
1582 // The 8-bit version of imul only allows the form "imul r/m8" | 1582 // The 8-bit version of imul only allows the form "imul r/m8" |
1583 // where T must be in eax. | 1583 // where T must be in eax. |
1584 if (isByteSizedArithType(Dest->getType())) | 1584 if (isByteSizedArithType(Dest->getType())) { |
1585 _mov(T, Src0, RegX8632::Reg_eax); | 1585 _mov(T, Src0, RegX8632::Reg_eax); |
1586 else | 1586 Src1 = legalize(Src1, Legal_Reg | Legal_Mem); |
Jim Stichnoth
2014/09/30 05:17:07
cool, thanks!
| |
1587 } else { | |
1587 _mov(T, Src0); | 1588 _mov(T, Src0); |
1589 } | |
1588 _imul(T, Src1); | 1590 _imul(T, Src1); |
1589 _mov(Dest, T); | 1591 _mov(Dest, T); |
1590 break; | 1592 break; |
1591 case InstArithmetic::Shl: | 1593 case InstArithmetic::Shl: |
1592 _mov(T, Src0); | 1594 _mov(T, Src0); |
1593 if (!llvm::isa<Constant>(Src1)) | 1595 if (!llvm::isa<Constant>(Src1)) |
1594 Src1 = legalizeToVar(Src1, RegX8632::Reg_ecx); | 1596 Src1 = legalizeToVar(Src1, RegX8632::Reg_ecx); |
1595 _shl(T, Src1); | 1597 _shl(T, Src1); |
1596 _mov(Dest, T); | 1598 _mov(Dest, T); |
1597 break; | 1599 break; |
(...skipping 2958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4556 Str << "\t.align\t" << Align << "\n"; | 4558 Str << "\t.align\t" << Align << "\n"; |
4557 Str << MangledName << ":\n"; | 4559 Str << MangledName << ":\n"; |
4558 for (SizeT i = 0; i < Size; ++i) { | 4560 for (SizeT i = 0; i < Size; ++i) { |
4559 Str << "\t.byte\t" << (((unsigned)Data[i]) & 0xff) << "\n"; | 4561 Str << "\t.byte\t" << (((unsigned)Data[i]) & 0xff) << "\n"; |
4560 } | 4562 } |
4561 Str << "\t.size\t" << MangledName << ", " << Size << "\n"; | 4563 Str << "\t.size\t" << MangledName << ", " << Size << "\n"; |
4562 } | 4564 } |
4563 } | 4565 } |
4564 | 4566 |
4565 } // end of namespace Ice | 4567 } // end of namespace Ice |
OLD | NEW |