Lines Matching refs:x86

40 class AssemblerX86Test : public AssemblerTest<x86::X86Assembler,
41 x86::Address,
42 x86::Register,
43 x86::XmmRegister,
44 x86::Immediate> {
46 typedef AssemblerTest<x86::X86Assembler,
47 x86::Address,
48 x86::Register,
49 x86::XmmRegister,
50 x86::Immediate> Base;
54 return "x86";
68 addresses_singleton_.push_back(x86::Address(x86::EAX, x86::EBX, x86::TIMES_1, 2));
73 addresses_.push_back(x86::Address(x86::EDI, x86::EAX, x86::TIMES_1, 15));
74 addresses_.push_back(x86::Address(x86::EDI, x86::EBX, x86::TIMES_2, 16));
75 addresses_.push_back(x86::Address(x86::EDI, x86::ECX, x86::TIMES_4, 17));
76 addresses_.push_back(x86::Address(x86::EDI, x86::EDX, x86::TIMES_8, 18));
77 addresses_.push_back(x86::Address(x86::EAX, -1));
78 addresses_.push_back(x86::Address(x86::EBX, 0));
79 addresses_.push_back(x86::Address(x86::ESI, 1));
80 addresses_.push_back(x86::Address(x86::EDI, 987654321));
82 addresses_.push_back(x86::Address(x86::ESP, x86::EAX, x86::TIMES_1, 15));
83 addresses_.push_back(x86::Address(x86::ESP, x86::EBX, x86::TIMES_2, 16));
84 addresses_.push_back(x86::Address(x86::ESP, x86::ECX, x86::TIMES_4, 17));
85 addresses_.push_back(x86::Address(x86::ESP, x86::EDX, x86::TIMES_8, 18));
86 addresses_.push_back(x86::Address(x86::ESP, -1));
87 addresses_.push_back(x86::Address(x86::ESP, 0));
88 addresses_.push_back(x86::Address(x86::ESP, 1));
89 addresses_.push_back(x86::Address(x86::ESP, 987654321));
94 new x86::Register(x86::EAX),
95 new x86::Register(x86::EBX),
96 new x86::Register(x86::ECX),
97 new x86::Register(x86::EDX),
98 new x86::Register(x86::EBP),
99 new x86::Register(x86::ESP),
100 new x86::Register(x86::ESI),
101 new x86::Register(x86::EDI)
108 new x86::XmmRegister(x86::XMM0),
109 new x86::XmmRegister(x86::XMM1),
110 new x86::XmmRegister(x86::XMM2),
111 new x86::XmmRegister(x86::XMM3),
112 new x86::XmmRegister(x86::XMM4),
113 new x86::XmmRegister(x86::XMM5),
114 new x86::XmmRegister(x86::XMM6),
115 new x86::XmmRegister(x86::XMM7)
126 std::vector<x86::Address> GetAddresses() OVERRIDE {
130 std::vector<x86::Register*> GetRegisters() OVERRIDE {
134 std::vector<x86::XmmRegister*> GetFPRegisters() OVERRIDE {
138 x86::Immediate CreateImmediate(int64_t imm_value) OVERRIDE {
139 return x86::Immediate(imm_value);
142 std::vector<x86::Address> addresses_singleton_;
145 std::vector<x86::Address> addresses_;
146 std::vector<x86::Register*> registers_;
147 std::vector<x86::XmmRegister*> fp_registers_;
220 // Actual x86 instruction assembler tests.
225 std::vector<x86::Address> all_addresses;
226 for (x86::Register* base : GetRegisters()) {
228 all_addresses.push_back(x86::Address(*base, -1));
229 all_addresses.push_back(x86::Address(*base, 0));
230 all_addresses.push_back(x86::Address(*base, 1));
231 all_addresses.push_back(x86::Address(*base, 123456789));
232 for (x86::Register* index : GetRegisters()) {
233 if (*index == x86::ESP) {
238 all_addresses.push_back(x86::Address(*index, x86::TIMES_1, -1));
239 all_addresses.push_back(x86::Address(*index, x86::TIMES_2, 0));
240 all_addresses.push_back(x86::Address(*index, x86::TIMES_4, 1));
241 all_addresses.push_back(x86::Address(*index, x86::TIMES_8, 123456789));
244 all_addresses.push_back(x86::Address(*base, *index, x86::TIMES_1, -1));
245 all_addresses.push_back(x86::Address(*base, *index, x86::TIMES_2, 0));
246 all_addresses.push_back(x86::Address(*base, *index, x86::TIMES_4, 1));
247 all_addresses.push_back(x86::Address(*base, *index, x86::TIMES_8, 123456789));
250 DriverStr(RepeatA(&x86::X86Assembler::popl, all_addresses, "popl {mem}"), "popq");
254 DriverStr(RepeatRR(&x86::X86Assembler::movl, "movl %{reg2}, %{reg1}"), "movl");
258 DriverStr(RepeatRA(&x86::X86Assembler::movl, "movl {mem}, %{reg}"), "movl-load");
262 DriverStr(RepeatAI(&x86::X86Assembler::addw, /*imm_bytes*/ 2U, "addw ${imm}, {mem}"), "addw");
266 DriverStr(RepeatAR(&x86::X86Assembler::movl, "movl %{reg}, {mem}"), "movl-store");
270 DriverStr(RepeatAR(&x86::X86Assembler::movntl, "movntil %{reg}, {mem}"), "movntl");
274 GetAssembler()->LoadLongConstant(x86::XMM0, 51);
284 DriverStr(RepeatAR(&x86::X86Assembler::LockCmpxchgl,
289 DriverStr(RepeatA(&x86::X86Assembler::LockCmpxchg8b,
294 DriverStr(RepeatA(&x86::X86Assembler::filds, "fildl {mem}"), "fildd");
298 DriverStr(RepeatA(&x86::X86Assembler::fildl, "fildll {mem}"), "fildl");
302 DriverStr(RepeatA(&x86::X86Assembler::fistps, "fistpl {mem}"), "fistps");
306 DriverStr(RepeatA(&x86::X86Assembler::fistpl, "fistpll {mem}"), "fistpl");
352 DriverStr(RepeatRR(&x86::X86Assembler::bsfl, "bsfl %{reg2}, %{reg1}"), "bsfl");
356 DriverStr(RepeatRA(&x86::X86Assembler::bsfl, "bsfl {mem}, %{reg}"), "bsfl_address");
360 DriverStr(RepeatRR(&x86::X86Assembler::bsrl, "bsrl %{reg2}, %{reg1}"), "bsrl");
364 DriverStr(RepeatRA(&x86::X86Assembler::bsrl, "bsrl {mem}, %{reg}"), "bsrl_address");
368 DriverStr(RepeatRR(&x86::X86Assembler::popcntl, "popcntl %{reg2}, %{reg1}"), "popcntl");
372 DriverStr(RepeatRA(&x86::X86Assembler::popcntl, "popcntl {mem}, %{reg}"), "popcntl_address");
376 std::string rorl_fn(AssemblerX86Test::Base* assembler_test, x86::X86Assembler* assembler) {
378 std::vector<x86::Register*> registers = assembler_test->GetRegisters();
379 x86::Register shifter(x86::ECX);
392 DriverStr(RepeatRI(&x86::X86Assembler::rorl, /*imm_bytes*/ 1U, "rorl ${imm}, %{reg}"), "rorli");
396 std::string roll_fn(AssemblerX86Test::Base* assembler_test, x86::X86Assembler* assembler) {
398 std::vector<x86::Register*> registers = assembler_test->GetRegisters();
399 x86::Register shifter(x86::ECX);
412 DriverStr(RepeatRI(&x86::X86Assembler::roll, /*imm_bytes*/ 1U, "roll ${imm}, %{reg}"), "rolli");
416 DriverStr(RepeatFF(&x86::X86Assembler::cvtdq2ps, "cvtdq2ps %{reg2}, %{reg1}"), "cvtdq2ps");
420 DriverStr(RepeatFF(&x86::X86Assembler::cvtdq2pd, "cvtdq2pd %{reg2}, %{reg1}"), "cvtdq2pd");
424 DriverStr(RepeatFA(&x86::X86Assembler::comiss, "comiss {mem}, %{reg}"), "comiss");
428 DriverStr(RepeatFA(&x86::X86Assembler::ucomiss, "ucomiss {mem}, %{reg}"), "ucomiss");
432 DriverStr(RepeatFA(&x86::X86Assembler::comisd, "comisd {mem}, %{reg}"), "comisd");
436 DriverStr(RepeatFA(&x86::X86Assembler::ucomisd, "ucomisd {mem}, %{reg}"), "ucomisd");
440 DriverStr(RepeatFFI(&x86::X86Assembler::roundss, /*imm_bytes*/ 1U,
445 DriverStr(RepeatFFI(&x86::X86Assembler::roundsd, /*imm_bytes*/ 1U,
450 GetAssembler()->cmovl(x86::kEqual, x86::Register(x86::EAX), x86::Address(
451 x86::Register(x86::EDI), x86::Register(x86::EBX), x86::TIMES_4, 12));
452 GetAssembler()->cmovl(x86::kNotEqual, x86::Register(x86::EDI), x86::Address(
453 x86::Register(x86::ESI), x86::Register(x86::EBX), x86::TIMES_4, 12));
454 GetAssembler()->cmovl(x86::kEqual, x86::Register(x86::EDI), x86::Address(
455 x86::Register(x86::EDI), x86::Register(x86::EAX), x86::TIMES_4, 12));
464 DriverStr(RepeatAI(&x86::X86Assembler::testb, /*imm_bytes*/ 1U, "testb ${imm}, {mem}"), "testb");
468 DriverStr(RepeatAI(&x86::X86Assembler::testl, /*imm_bytes*/ 4U, "testl ${imm}, {mem}"), "testl");
472 DriverStr(RepeatFF(&x86::X86Assembler::movaps, "movaps %{reg2}, %{reg1}"), "movaps");
476 DriverStr(RepeatFA(&x86::X86Assembler::movaps, "movaps {mem}, %{reg}"), "movaps_load");
480 DriverStr(RepeatAF(&x86::X86Assembler::movaps, "movaps %{reg}, {mem}"), "movaps_store");
484 DriverStr(RepeatFA(&x86::X86Assembler::movups, "movups {mem}, %{reg}"), "movups_load");
488 DriverStr(RepeatAF(&x86::X86Assembler::movups, "movups %{reg}, {mem}"), "movups_store");
492 DriverStr(RepeatFF(&x86::X86Assembler::movapd, "movapd %{reg2}, %{reg1}"), "movapd");
496 DriverStr(RepeatFA(&x86::X86Assembler::movapd, "movapd {mem}, %{reg}"), "movapd_load");
500 DriverStr(RepeatAF(&x86::X86Assembler::movapd, "movapd %{reg}, {mem}"), "movapd_store");
504 DriverStr(RepeatFA(&x86::X86Assembler::movupd, "movupd {mem}, %{reg}"), "movupd_load");
508 DriverStr(RepeatAF(&x86::X86Assembler::movupd, "movupd %{reg}, {mem}"), "movupd_store");
512 DriverStr(RepeatFF(&x86::X86Assembler::movdqa, "movdqa %{reg2}, %{reg1}"), "movdqa");
516 DriverStr(RepeatFA(&x86::X86Assembler::movdqa, "movdqa {mem}, %{reg}"), "movdqa_load");
520 DriverStr(RepeatAF(&x86::X86Assembler::movdqa, "movdqa %{reg}, {mem}"), "movdqa_store");
524 DriverStr(RepeatFA(&x86::X86Assembler::movdqu, "movdqu {mem}, %{reg}"), "movdqu_load");
528 DriverStr(RepeatAF(&x86::X86Assembler::movdqu, "movdqu %{reg}, {mem}"), "movdqu_store");
532 DriverStr(RepeatFF(&x86::X86Assembler::addps, "addps %{reg2}, %{reg1}"), "addps");
536 DriverStr(RepeatFF(&x86::X86Assembler::addpd, "addpd %{reg2}, %{reg1}"), "addpd");
540 DriverStr(RepeatFF(&x86::X86Assembler::subps, "subps %{reg2}, %{reg1}"), "subps");
544 DriverStr(RepeatFF(&x86::X86Assembler::subpd, "subpd %{reg2}, %{reg1}"), "subpd");
548 DriverStr(RepeatFF(&x86::X86Assembler::mulps, "mulps %{reg2}, %{reg1}"), "mulps");
552 DriverStr(RepeatFF(&x86::X86Assembler::mulpd, "mulpd %{reg2}, %{reg1}"), "mulpd");
556 DriverStr(RepeatFF(&x86::X86Assembler::divps, "divps %{reg2}, %{reg1}"), "divps");
560 DriverStr(RepeatFF(&x86::X86Assembler::divpd, "divpd %{reg2}, %{reg1}"), "divpd");
564 DriverStr(RepeatFF(&x86::X86Assembler::paddb, "paddb %{reg2}, %{reg1}"), "paddb");
568 DriverStr(RepeatFF(&x86::X86Assembler::psubb, "psubb %{reg2}, %{reg1}"), "psubb");
572 DriverStr(RepeatFF(&x86::X86Assembler::paddw, "paddw %{reg2}, %{reg1}"), "paddw");
576 DriverStr(RepeatFF(&x86::X86Assembler::psubw, "psubw %{reg2}, %{reg1}"), "psubw");
580 DriverStr(RepeatFF(&x86::X86Assembler::pmullw, "pmullw %{reg2}, %{reg1}"), "pmullw");
584 DriverStr(RepeatFF(&x86::X86Assembler::paddd, "paddd %{reg2}, %{reg1}"), "paddd");
588 DriverStr(RepeatFF(&x86::X86Assembler::psubd, "psubd %{reg2}, %{reg1}"), "psubd");
592 DriverStr(RepeatFF(&x86::X86Assembler::pmulld, "pmulld %{reg2}, %{reg1}"), "pmulld");
596 DriverStr(RepeatFF(&x86::X86Assembler::paddq, "paddq %{reg2}, %{reg1}"), "paddq");
600 DriverStr(RepeatFF(&x86::X86Assembler::psubq, "psubq %{reg2}, %{reg1}"), "psubq");
604 DriverStr(RepeatFF(&x86::X86Assembler::xorpd, "xorpd %{reg2}, %{reg1}"), "xorpd");
608 DriverStr(RepeatFF(&x86::X86Assembler::xorps, "xorps %{reg2}, %{reg1}"), "xorps");
612 DriverStr(RepeatFF(&x86::X86Assembler::pxor, "pxor %{reg2}, %{reg1}"), "pxor");
616 DriverStr(RepeatFF(&x86::X86Assembler::andpd, "andpd %{reg2}, %{reg1}"), "andpd");
620 DriverStr(RepeatFF(&x86::X86Assembler::andps, "andps %{reg2}, %{reg1}"), "andps");
624 DriverStr(RepeatFF(&x86::X86Assembler::pand, "pand %{reg2}, %{reg1}"), "pand");
628 DriverStr(RepeatFF(&x86::X86Assembler::andnpd, "andnpd %{reg2}, %{reg1}"), "andnpd");
632 DriverStr(RepeatFF(&x86::X86Assembler::andnps, "andnps %{reg2}, %{reg1}"), "andnps");
636 DriverStr(RepeatFF(&x86::X86Assembler::pandn, "pandn %{reg2}, %{reg1}"), "pandn");
640 DriverStr(RepeatFF(&x86::X86Assembler::orpd, "orpd %{reg2}, %{reg1}"), "orpd");
644 DriverStr(RepeatFF(&x86::X86Assembler::orps, "orps %{reg2}, %{reg1}"), "orps");
648 DriverStr(RepeatFF(&x86::X86Assembler::por, "por %{reg2}, %{reg1}"), "por");
652 DriverStr(RepeatFF(&x86::X86Assembler::pavgb, "pavgb %{reg2}, %{reg1}"), "pavgb");
656 DriverStr(RepeatFF(&x86::X86Assembler::pavgw, "pavgw %{reg2}, %{reg1}"), "pavgw");
660 DriverStr(RepeatFF(&x86::X86Assembler::psadbw, "psadbw %{reg2}, %{reg1}"), "psadbw");
664 DriverStr(RepeatFF(&x86::X86Assembler::pmaddwd, "pmaddwd %{reg2}, %{reg1}"), "pmaddwd");
668 DriverStr(RepeatFF(&x86::X86Assembler::phaddw, "phaddw %{reg2}, %{reg1}"), "phaddw");
672 DriverStr(RepeatFF(&x86::X86Assembler::phaddd, "phaddd %{reg2}, %{reg1}"), "phaddd");
676 DriverStr(RepeatFF(&x86::X86Assembler::haddps, "haddps %{reg2}, %{reg1}"), "haddps");
680 DriverStr(RepeatFF(&x86::X86Assembler::haddpd, "haddpd %{reg2}, %{reg1}"), "haddpd");
684 DriverStr(RepeatFF(&x86::X86Assembler::phsubw, "phsubw %{reg2}, %{reg1}"), "phsubw");
688 DriverStr(RepeatFF(&x86::X86Assembler::phsubd, "phsubd %{reg2}, %{reg1}"), "phsubd");
692 DriverStr(RepeatFF(&x86::X86Assembler::hsubps, "hsubps %{reg2}, %{reg1}"), "hsubps");
696 DriverStr(RepeatFF(&x86::X86Assembler::hsubpd, "hsubpd %{reg2}, %{reg1}"), "hsubpd");
700 DriverStr(RepeatFF(&x86::X86Assembler::pminsb, "pminsb %{reg2}, %{reg1}"), "pminsb");
704 DriverStr(RepeatFF(&x86::X86Assembler::pmaxsb, "pmaxsb %{reg2}, %{reg1}"), "pmaxsb");
708 DriverStr(RepeatFF(&x86::X86Assembler::pminsw, "pminsw %{reg2}, %{reg1}"), "pminsw");
712 DriverStr(RepeatFF(&x86::X86Assembler::pmaxsw, "pmaxsw %{reg2}, %{reg1}"), "pmaxsw");
716 DriverStr(RepeatFF(&x86::X86Assembler::pminsd, "pminsd %{reg2}, %{reg1}"), "pminsd");
720 DriverStr(RepeatFF(&x86::X86Assembler::pmaxsd, "pmaxsd %{reg2}, %{reg1}"), "pmaxsd");
724 DriverStr(RepeatFF(&x86::X86Assembler::pminub, "pminub %{reg2}, %{reg1}"), "pminub");
728 DriverStr(RepeatFF(&x86::X86Assembler::pmaxub, "pmaxub %{reg2}, %{reg1}"), "pmaxub");
732 DriverStr(RepeatFF(&x86::X86Assembler::pminuw, "pminuw %{reg2}, %{reg1}"), "pminuw");
736 DriverStr(RepeatFF(&x86::X86Assembler::pmaxuw, "pmaxuw %{reg2}, %{reg1}"), "pmaxuw");
740 DriverStr(RepeatFF(&x86::X86Assembler::pminud, "pminud %{reg2}, %{reg1}"), "pminud");
744 DriverStr(RepeatFF(&x86::X86Assembler::pmaxud, "pmaxud %{reg2}, %{reg1}"), "pmaxud");
748 DriverStr(RepeatFF(&x86::X86Assembler::minps, "minps %{reg2}, %{reg1}"), "minps");
752 DriverStr(RepeatFF(&x86::X86Assembler::maxps, "maxps %{reg2}, %{reg1}"), "maxps");
756 DriverStr(RepeatFF(&x86::X86Assembler::minpd, "minpd %{reg2}, %{reg1}"), "minpd");
760 DriverStr(RepeatFF(&x86::X86Assembler::maxpd, "maxpd %{reg2}, %{reg1}"), "maxpd");
764 DriverStr(RepeatFF(&x86::X86Assembler::pcmpeqb, "pcmpeqb %{reg2}, %{reg1}"), "cmpeqb");
768 DriverStr(RepeatFF(&x86::X86Assembler::pcmpeqw, "pcmpeqw %{reg2}, %{reg1}"), "cmpeqw");
772 DriverStr(RepeatFF(&x86::X86Assembler::pcmpeqd, "pcmpeqd %{reg2}, %{reg1}"), "cmpeqd");
776 DriverStr(RepeatFF(&x86::X86Assembler::pcmpeqq, "pcmpeqq %{reg2}, %{reg1}"), "cmpeqq");
780 DriverStr(RepeatFF(&x86::X86Assembler::pcmpgtb, "pcmpgtb %{reg2}, %{reg1}"), "cmpgtb");
784 DriverStr(RepeatFF(&x86::X86Assembler::pcmpgtw, "pcmpgtw %{reg2}, %{reg1}"), "cmpgtw");
788 DriverStr(RepeatFF(&x86::X86Assembler::pcmpgtd, "pcmpgtd %{reg2}, %{reg1}"), "cmpgtd");
792 DriverStr(RepeatFF(&x86::X86Assembler::pcmpgtq, "pcmpgtq %{reg2}, %{reg1}"), "cmpgtq");
796 DriverStr(RepeatFFI(&x86::X86Assembler::shufps, 1, "shufps ${imm}, %{reg2}, %{reg1}"), "shufps");
800 DriverStr(RepeatFFI(&x86::X86Assembler::shufpd, 1, "shufpd ${imm}, %{reg2}, %{reg1}"), "shufpd");
804 DriverStr(RepeatFFI(&x86::X86Assembler::pshufd, 1, "pshufd ${imm}, %{reg2}, %{reg1}"), "pshufd");
808 DriverStr(RepeatFF(&x86::X86Assembler::punpcklbw, "punpcklbw %{reg2}, %{reg1}"), "punpcklbw");
812 DriverStr(RepeatFF(&x86::X86Assembler::punpcklwd, "punpcklwd %{reg2}, %{reg1}"), "punpcklwd");
816 DriverStr(RepeatFF(&x86::X86Assembler::punpckldq, "punpckldq %{reg2}, %{reg1}"), "punpckldq");
820 DriverStr(RepeatFF(&x86::X86Assembler::punpcklqdq, "punpcklqdq %{reg2}, %{reg1}"), "punpcklqdq");
824 DriverStr(RepeatFF(&x86::X86Assembler::punpckhbw, "punpckhbw %{reg2}, %{reg1}"), "punpckhbw");
828 DriverStr(RepeatFF(&x86::X86Assembler::punpckhwd, "punpckhwd %{reg2}, %{reg1}"), "punpckhwd");
832 DriverStr(RepeatFF(&x86::X86Assembler::punpckhdq, "punpckhdq %{reg2}, %{reg1}"), "punpckhdq");
836 DriverStr(RepeatFF(&x86::X86Assembler::punpckhqdq, "punpckhqdq %{reg2}, %{reg1}"), "punpckhqdq");
840 GetAssembler()->psllw(x86::XMM0, CreateImmediate(16));
845 GetAssembler()->pslld(x86::XMM0, CreateImmediate(16));
850 GetAssembler()->psllq(x86::XMM0, CreateImmediate(16));
855 GetAssembler()->psraw(x86::XMM0, CreateImmediate(16));
860 GetAssembler()->psrad(x86::XMM0, CreateImmediate(16));
865 GetAssembler()->psrlw(x86::XMM0, CreateImmediate(16));
870 GetAssembler()->psrld(x86::XMM0, CreateImmediate(16));
875 GetAssembler()->psrlq(x86::XMM0, CreateImmediate(16));
880 GetAssembler()->psrldq(x86::XMM0, CreateImmediate(16));
885 x86::NearLabel target;
887 GetAssembler()->addl(x86::EDI, x86::Address(x86::ESP, 4));
898 x86::NearLabel start, target;
900 GetAssembler()->j(x86::kEqual, &target);
903 GetAssembler()->addl(x86::EDI, x86::Address(x86::ESP, 4));
905 GetAssembler()->j(x86::kNotEqual, &start);
918 DriverStr(RepeatAI(&x86::X86Assembler::cmpb,
924 DriverStr(RepeatAI(&x86::X86Assembler::cmpw, /*imm_bytes*/ 2U, "cmpw ${imm}, {mem}"), "cmpw");