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 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 assert(Eax->getRegNum() == TargetX8632::Reg_eax); | 175 assert(Eax->getRegNum() == TargetX8632::Reg_eax); |
176 assert(Ecx->getRegNum() == TargetX8632::Reg_ecx); | 176 assert(Ecx->getRegNum() == TargetX8632::Reg_ecx); |
177 assert(Ebx->getRegNum() == TargetX8632::Reg_ebx); | 177 assert(Ebx->getRegNum() == TargetX8632::Reg_ebx); |
178 addSource(Addr); | 178 addSource(Addr); |
179 addSource(Edx); | 179 addSource(Edx); |
180 addSource(Eax); | 180 addSource(Eax); |
181 addSource(Ecx); | 181 addSource(Ecx); |
182 addSource(Ebx); | 182 addSource(Ebx); |
183 } | 183 } |
184 | 184 |
185 InstX8632Cvt::InstX8632Cvt(Cfg *Func, Variable *Dest, Operand *Source) | 185 InstX8632Cvt::InstX8632Cvt(Cfg *Func, Variable *Dest, Operand *Source, |
186 : InstX8632(Func, InstX8632::Cvt, 1, Dest) { | 186 bool Trunc) |
| 187 : InstX8632(Func, InstX8632::Cvt, 1, Dest), Trunc(Trunc) { |
187 addSource(Source); | 188 addSource(Source); |
188 } | 189 } |
189 | 190 |
190 InstX8632Icmp::InstX8632Icmp(Cfg *Func, Operand *Src0, Operand *Src1) | 191 InstX8632Icmp::InstX8632Icmp(Cfg *Func, Operand *Src0, Operand *Src1) |
191 : InstX8632(Func, InstX8632::Icmp, 2, NULL) { | 192 : InstX8632(Func, InstX8632::Icmp, 2, NULL) { |
192 addSource(Src0); | 193 addSource(Src0); |
193 addSource(Src1); | 194 addSource(Src1); |
194 } | 195 } |
195 | 196 |
196 InstX8632Ucomiss::InstX8632Ucomiss(Cfg *Func, Operand *Src0, Operand *Src1) | 197 InstX8632Ucomiss::InstX8632Ucomiss(Cfg *Func, Operand *Src0, Operand *Src1) |
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
791 if (Locked) { | 792 if (Locked) { |
792 Str << "lock "; | 793 Str << "lock "; |
793 } | 794 } |
794 Str << "cmpxchg8b "; | 795 Str << "cmpxchg8b "; |
795 dumpSources(Func); | 796 dumpSources(Func); |
796 } | 797 } |
797 | 798 |
798 void InstX8632Cvt::emit(const Cfg *Func) const { | 799 void InstX8632Cvt::emit(const Cfg *Func) const { |
799 Ostream &Str = Func->getContext()->getStrEmit(); | 800 Ostream &Str = Func->getContext()->getStrEmit(); |
800 assert(getSrcSize() == 1); | 801 assert(getSrcSize() == 1); |
801 Str << "\tcvt" << TypeX8632Attributes[getSrc(0)->getType()].CvtString << "2" | 802 Str << "\tcvt"; |
| 803 if (Trunc) |
| 804 Str << "t"; |
| 805 Str << TypeX8632Attributes[getSrc(0)->getType()].CvtString << "2" |
802 << TypeX8632Attributes[getDest()->getType()].CvtString << "\t"; | 806 << TypeX8632Attributes[getDest()->getType()].CvtString << "\t"; |
803 getDest()->emit(Func); | 807 getDest()->emit(Func); |
804 Str << ", "; | 808 Str << ", "; |
805 getSrc(0)->emit(Func); | 809 getSrc(0)->emit(Func); |
806 Str << "\n"; | 810 Str << "\n"; |
807 } | 811 } |
808 | 812 |
809 void InstX8632Cvt::dump(const Cfg *Func) const { | 813 void InstX8632Cvt::dump(const Cfg *Func) const { |
810 Ostream &Str = Func->getContext()->getStrDump(); | 814 Ostream &Str = Func->getContext()->getStrDump(); |
811 dumpDest(Func); | 815 dumpDest(Func); |
812 Str << " = cvt" << TypeX8632Attributes[getSrc(0)->getType()].CvtString | 816 Str << " = cvt"; |
813 << "2" << TypeX8632Attributes[getDest()->getType()].CvtString << " "; | 817 if (Trunc) |
| 818 Str << "t"; |
| 819 Str << TypeX8632Attributes[getSrc(0)->getType()].CvtString << "2" |
| 820 << TypeX8632Attributes[getDest()->getType()].CvtString << " "; |
814 dumpSources(Func); | 821 dumpSources(Func); |
815 } | 822 } |
816 | 823 |
817 void InstX8632Icmp::emit(const Cfg *Func) const { | 824 void InstX8632Icmp::emit(const Cfg *Func) const { |
818 Ostream &Str = Func->getContext()->getStrEmit(); | 825 Ostream &Str = Func->getContext()->getStrEmit(); |
819 assert(getSrcSize() == 2); | 826 assert(getSrcSize() == 2); |
820 Str << "\tcmp\t"; | 827 Str << "\tcmp\t"; |
821 getSrc(0)->emit(Func); | 828 getSrc(0)->emit(Func); |
822 Str << ", "; | 829 Str << ", "; |
823 getSrc(1)->emit(Func); | 830 getSrc(1)->emit(Func); |
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1473 default: | 1480 default: |
1474 Str << "???"; | 1481 Str << "???"; |
1475 break; | 1482 break; |
1476 } | 1483 } |
1477 Str << "("; | 1484 Str << "("; |
1478 Var->dump(Func); | 1485 Var->dump(Func); |
1479 Str << ")"; | 1486 Str << ")"; |
1480 } | 1487 } |
1481 | 1488 |
1482 } // end of namespace Ice | 1489 } // end of namespace Ice |
OLD | NEW |