Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 //===- subzero/src/IceInstX8632.cpp - X86-32 instruction implementation ---===// | 1 //===- subzero/src/IceInstX8632.cpp - X86-32 instruction implementation ---===// |
| 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 InstX8632 and OperandX8632 classes, | 10 // This file implements the InstX8632 and OperandX8632 classes, |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 170 : InstX8632(Func, InstX8632::Mfence, 0, NULL) { | 170 : InstX8632(Func, InstX8632::Mfence, 0, NULL) { |
| 171 HasSideEffects = true; | 171 HasSideEffects = true; |
| 172 } | 172 } |
| 173 | 173 |
| 174 InstX8632Store::InstX8632Store(Cfg *Func, Operand *Value, OperandX8632 *Mem) | 174 InstX8632Store::InstX8632Store(Cfg *Func, Operand *Value, OperandX8632 *Mem) |
| 175 : InstX8632(Func, InstX8632::Store, 2, NULL) { | 175 : InstX8632(Func, InstX8632::Store, 2, NULL) { |
| 176 addSource(Value); | 176 addSource(Value); |
| 177 addSource(Mem); | 177 addSource(Mem); |
| 178 } | 178 } |
| 179 | 179 |
| 180 InstX8632Storep::InstX8632Storep(Cfg *Func, Operand *Value, OperandX8632 *Mem) | |
| 181 : InstX8632(Func, InstX8632::Storep, 2, NULL) { | |
| 182 addSource(Value); | |
| 183 addSource(Mem); | |
| 184 } | |
| 185 | |
| 180 InstX8632Mov::InstX8632Mov(Cfg *Func, Variable *Dest, Operand *Source) | 186 InstX8632Mov::InstX8632Mov(Cfg *Func, Variable *Dest, Operand *Source) |
| 181 : InstX8632(Func, InstX8632::Mov, 1, Dest) { | 187 : InstX8632(Func, InstX8632::Mov, 1, Dest) { |
| 182 addSource(Source); | 188 addSource(Source); |
| 183 } | 189 } |
| 184 | 190 |
| 185 InstX8632Movp::InstX8632Movp(Cfg *Func, Variable *Dest, Operand *Source) | 191 InstX8632Movp::InstX8632Movp(Cfg *Func, Variable *Dest, Operand *Source) |
| 186 : InstX8632(Func, InstX8632::Movp, 1, Dest) { | 192 : InstX8632(Func, InstX8632::Movp, 1, Dest) { |
| 187 addSource(Source); | 193 addSource(Source); |
| 188 } | 194 } |
| 189 | 195 |
| (...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 647 } | 653 } |
| 648 | 654 |
| 649 void InstX8632Store::dump(const Cfg *Func) const { | 655 void InstX8632Store::dump(const Cfg *Func) const { |
| 650 Ostream &Str = Func->getContext()->getStrDump(); | 656 Ostream &Str = Func->getContext()->getStrDump(); |
| 651 Str << "mov." << getSrc(0)->getType() << " "; | 657 Str << "mov." << getSrc(0)->getType() << " "; |
| 652 getSrc(1)->dump(Func); | 658 getSrc(1)->dump(Func); |
| 653 Str << ", "; | 659 Str << ", "; |
| 654 getSrc(0)->dump(Func); | 660 getSrc(0)->dump(Func); |
| 655 } | 661 } |
| 656 | 662 |
| 663 void InstX8632Storep::emit(const Cfg *Func) const { | |
| 664 Ostream &Str = Func->getContext()->getStrEmit(); | |
| 665 assert(getSrcSize() == 2); | |
| 666 Str << "\tmovups\t"; | |
| 667 getSrc(1)->emit(Func); | |
| 668 Str << ", "; | |
| 669 getSrc(0)->emit(Func); | |
| 670 Str << "\n"; | |
| 671 } | |
| 672 | |
| 673 void InstX8632Storep::dump(const Cfg *Func) const { | |
| 674 Ostream &Str = Func->getContext()->getStrDump(); | |
| 675 Str << "storeq." << getSrc(0)->getType() << " "; | |
|
Jim Stichnoth
2014/07/08 18:03:15
storeq? should it be storep?
wala
2014/07/08 22:38:57
Done.
| |
| 676 getSrc(1)->dump(Func); | |
| 677 Str << ", "; | |
| 678 getSrc(0)->dump(Func); | |
| 679 } | |
| 680 | |
| 657 void InstX8632StoreQ::emit(const Cfg *Func) const { | 681 void InstX8632StoreQ::emit(const Cfg *Func) const { |
| 658 Ostream &Str = Func->getContext()->getStrEmit(); | 682 Ostream &Str = Func->getContext()->getStrEmit(); |
| 659 assert(getSrcSize() == 2); | 683 assert(getSrcSize() == 2); |
| 660 assert(getSrc(1)->getType() == IceType_i64 || | 684 assert(getSrc(1)->getType() == IceType_i64 || |
| 661 getSrc(1)->getType() == IceType_f64); | 685 getSrc(1)->getType() == IceType_f64); |
| 662 Str << "\tmovq\t"; | 686 Str << "\tmovq\t"; |
| 663 getSrc(1)->emit(Func); | 687 getSrc(1)->emit(Func); |
| 664 Str << ", "; | 688 Str << ", "; |
| 665 getSrc(0)->emit(Func); | 689 getSrc(0)->emit(Func); |
| 666 Str << "\n"; | 690 Str << "\n"; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 722 // operands. | 746 // operands. |
| 723 Ostream &Str = Func->getContext()->getStrEmit(); | 747 Ostream &Str = Func->getContext()->getStrEmit(); |
| 724 assert(getSrcSize() == 1); | 748 assert(getSrcSize() == 1); |
| 725 Str << "\tmovups\t"; | 749 Str << "\tmovups\t"; |
| 726 getDest()->emit(Func); | 750 getDest()->emit(Func); |
| 727 Str << ", "; | 751 Str << ", "; |
| 728 getSrc(0)->emit(Func); | 752 getSrc(0)->emit(Func); |
| 729 Str << "\n"; | 753 Str << "\n"; |
| 730 } | 754 } |
| 731 | 755 |
| 756 void InstX8632Movp::dump(const Cfg *Func) const { | |
| 757 Ostream &Str = Func->getContext()->getStrDump(); | |
| 758 Str << "movups." << getDest()->getType() << " "; | |
| 759 dumpDest(Func); | |
| 760 Str << ", "; | |
| 761 dumpSources(Func); | |
| 762 } | |
| 763 | |
| 732 void InstX8632Movq::emit(const Cfg *Func) const { | 764 void InstX8632Movq::emit(const Cfg *Func) const { |
| 733 Ostream &Str = Func->getContext()->getStrEmit(); | 765 Ostream &Str = Func->getContext()->getStrEmit(); |
| 734 assert(getSrcSize() == 1); | 766 assert(getSrcSize() == 1); |
| 735 assert(getDest()->getType() == IceType_i64 || | 767 assert(getDest()->getType() == IceType_i64 || |
| 736 getDest()->getType() == IceType_f64); | 768 getDest()->getType() == IceType_f64); |
| 737 Str << "\tmovq\t"; | 769 Str << "\tmovq\t"; |
| 738 getDest()->emit(Func); | 770 getDest()->emit(Func); |
| 739 Str << ", "; | 771 Str << ", "; |
| 740 getSrc(0)->emit(Func); | 772 getSrc(0)->emit(Func); |
| 741 Str << "\n"; | 773 Str << "\n"; |
| 742 } | 774 } |
| 743 | 775 |
| 744 void InstX8632Movp::dump(const Cfg *Func) const { | |
| 745 Ostream &Str = Func->getContext()->getStrDump(); | |
| 746 Str << "movups." << getDest()->getType() << " "; | |
| 747 dumpDest(Func); | |
| 748 Str << ", "; | |
| 749 dumpSources(Func); | |
| 750 } | |
| 751 | |
| 752 void InstX8632Movq::dump(const Cfg *Func) const { | 776 void InstX8632Movq::dump(const Cfg *Func) const { |
| 753 Ostream &Str = Func->getContext()->getStrDump(); | 777 Ostream &Str = Func->getContext()->getStrDump(); |
| 754 Str << "movq." << getDest()->getType() << " "; | 778 Str << "movq." << getDest()->getType() << " "; |
| 755 dumpDest(Func); | 779 dumpDest(Func); |
| 756 Str << ", "; | 780 Str << ", "; |
| 757 dumpSources(Func); | 781 dumpSources(Func); |
| 758 } | 782 } |
| 759 | 783 |
| 760 void InstX8632Movsx::emit(const Cfg *Func) const { | 784 void InstX8632Movsx::emit(const Cfg *Func) const { |
| 761 Ostream &Str = Func->getContext()->getStrEmit(); | 785 Ostream &Str = Func->getContext()->getStrEmit(); |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1068 default: | 1092 default: |
| 1069 Str << "???"; | 1093 Str << "???"; |
| 1070 break; | 1094 break; |
| 1071 } | 1095 } |
| 1072 Str << "("; | 1096 Str << "("; |
| 1073 Var->dump(Func); | 1097 Var->dump(Func); |
| 1074 Str << ")"; | 1098 Str << ")"; |
| 1075 } | 1099 } |
| 1076 | 1100 |
| 1077 } // end of namespace Ice | 1101 } // end of namespace Ice |
| OLD | NEW |