Home | History | Annotate | Download | only in x86_64

Lines Matching refs:x86_64

112   x86_64::Immediate imm(value);
117 x86_64::Immediate imm2(value);
124 bool operator()(const x86_64::CpuRegister& a, const x86_64::CpuRegister& b) const {
129 class AssemblerX86_64Test : public AssemblerTest<x86_64::X86_64Assembler, x86_64::CpuRegister,
130 x86_64::XmmRegister, x86_64::Immediate> {
132 typedef AssemblerTest<x86_64::X86_64Assembler, x86_64::CpuRegister,
133 x86_64::XmmRegister, x86_64::Immediate> Base;
138 return "x86_64";
147 registers_.push_back(new x86_64::CpuRegister(x86_64::RAX));
148 registers_.push_back(new x86_64::CpuRegister(x86_64::RBX));
149 registers_.push_back(new x86_64::CpuRegister(x86_64::RCX));
150 registers_.push_back(new x86_64::CpuRegister(x86_64::RDX));
151 registers_.push_back(new x86_64::CpuRegister(x86_64::RBP));
152 registers_.push_back(new x86_64::CpuRegister(x86_64::RSP));
153 registers_.push_back(new x86_64::CpuRegister(x86_64::RSI));
154 registers_.push_back(new x86_64::CpuRegister(x86_64::RDI));
155 registers_.push_back(new x86_64::CpuRegister(x86_64::R8));
156 registers_.push_back(new x86_64::CpuRegister(x86_64::R9));
157 registers_.push_back(new x86_64::CpuRegister(x86_64::R10));
158 registers_.push_back(new x86_64::CpuRegister(x86_64::R11));
159 registers_.push_back(new x86_64::CpuRegister(x86_64::R12));
160 registers_.push_back(new x86_64::CpuRegister(x86_64::R13));
161 registers_.push_back(new x86_64::CpuRegister(x86_64::R14));
162 registers_.push_back(new x86_64::CpuRegister(x86_64::R15));
164 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RAX), "eax");
165 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RBX), "ebx");
166 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RCX), "ecx");
167 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RDX), "edx");
168 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RBP), "ebp");
169 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RSP), "esp");
170 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RSI), "esi");
171 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RDI), "edi");
172 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::R8), "r8d");
173 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::R9), "r9d");
174 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::R10), "r10d");
175 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::R11), "r11d");
176 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::R12), "r12d");
177 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::R13), "r13d");
178 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::R14), "r14d");
179 secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::R15), "r15d");
181 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::RAX), "ax");
182 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::RBX), "bx");
183 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::RCX), "cx");
184 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::RDX), "dx");
185 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::RBP), "bp");
186 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::RSP), "sp");
187 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::RSI), "si");
188 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::RDI), "di");
189 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::R8), "r8w");
190 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::R9), "r9w");
191 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::R10), "r10w");
192 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::R11), "r11w");
193 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::R12), "r12w");
194 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::R13), "r13w");
195 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::R14), "r14w");
196 tertiary_register_names_.emplace(x86_64::CpuRegister(x86_64::R15), "r15w");
198 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::RAX), "al");
199 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::RBX), "bl");
200 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::RCX), "cl");
201 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::RDX), "dl");
202 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::RBP), "bpl");
203 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::RSP), "spl");
204 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::RSI), "sil");
205 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::RDI), "dil");
206 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R8), "r8b");
207 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R9), "r9b");
208 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R10), "r10b");
209 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R11), "r11b");
210 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R12), "r12b");
211 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R13), "r13b");
212 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R14), "r14b");
213 quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R15), "r15b");
215 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM0));
216 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM1));
217 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM2));
218 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM3));
219 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM4));
220 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM5));
221 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM6));
222 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM7));
223 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM8));
224 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM9));
225 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM10));
226 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM11));
227 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM12));
228 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM13));
229 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM14));
230 fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM15));
240 std::vector<x86_64::CpuRegister*> GetRegisters() OVERRIDE {
244 std::vector<x86_64::XmmRegister*> GetFPRegisters() OVERRIDE {
248 x86_64::Immediate CreateImmediate(int64_t imm_value) OVERRIDE {
249 return x86_64::Immediate(imm_value);
252 std::string GetSecondaryRegisterName(const x86_64::CpuRegister& reg) OVERRIDE {
257 std::string GetTertiaryRegisterName(const x86_64::CpuRegister& reg) OVERRIDE {
262 std::string GetQuaternaryRegisterName(const x86_64::CpuRegister& reg) OVERRIDE {
268 std::vector<x86_64::CpuRegister*> registers_;
269 std::map<x86_64::CpuRegister, std::string, X86_64CpuRegisterCompare> secondary_register_names_;
270 std::map<x86_64::CpuRegister, std::string, X86_64CpuRegisterCompare> tertiary_register_names_;
271 std::map<x86_64::CpuRegister, std::string, X86_64CpuRegisterCompare> quaternary_register_names_;
273 std::vector<x86_64::XmmRegister*> fp_registers_;
283 DriverStr(RepeatR(&x86_64::X86_64Assembler::pushq, "pushq %{reg}"), "pushq");
287 DriverStr(RepeatI(&x86_64::X86_64Assembler::pushq, 4U, "pushq ${imm}"), "pushqi");
291 DriverStr(RepeatRR(&x86_64::X86_64Assembler::movq, "movq %{reg2}, %{reg1}"), "movq");
295 DriverStr(RepeatRI(&x86_64::X86_64Assembler::movq, 8U, "movq ${imm}, %{reg}"), "movqi");
299 DriverStr(Repeatrr(&x86_64::X86_64Assembler::movl, "mov %{reg2}, %{reg1}"), "movl");
303 DriverStr(Repeatri(&x86_64::X86_64Assembler::movl, 4U, "mov ${imm}, %{reg}"), "movli");
307 DriverStr(RepeatRR(&x86_64::X86_64Assembler::addq, "addq %{reg2}, %{reg1}"), "addq");
311 DriverStr(RepeatRI(&x86_64::X86_64Assembler::addq, 4U, "addq ${imm}, %{reg}"), "addqi");
315 DriverStr(Repeatrr(&x86_64::X86_64Assembler::addl, "add %{reg2}, %{reg1}"), "addl");
319 DriverStr(Repeatri(&x86_64::X86_64Assembler::addl, 4U, "add ${imm}, %{reg}"), "addli");
323 DriverStr(RepeatR(&x86_64::X86_64Assembler::imulq, "imulq %{reg}"), "imulq");
327 DriverStr(RepeatRR(&x86_64::X86_64Assembler::imulq, "imulq %{reg2}, %{reg1}"), "imulq");
331 DriverStr(RepeatRI(&x86_64::X86_64Assembler::imulq, 4U, "imulq ${imm}, %{reg}, %{reg}"),
336 DriverStr(Repeatrr(&x86_64::X86_64Assembler::imull, "imul %{reg2}, %{reg1}"), "imull");
340 DriverStr(Repeatri(&x86_64::X86_64Assembler::imull, 4U, "imull ${imm}, %{reg}, %{reg}"),
345 DriverStr(Repeatr(&x86_64::X86_64Assembler::mull, "mull %{reg}"), "mull");
349 DriverStr(RepeatRR(&x86_64::X86_64Assembler::subq, "subq %{reg2}, %{reg1}"), "subq");
353 DriverStr(RepeatRI(&x86_64::X86_64Assembler::subq, 4U, "subq ${imm}, %{reg}"), "subqi");
357 DriverStr(Repeatrr(&x86_64::X86_64Assembler::subl, "sub %{reg2}, %{reg1}"), "subl");
361 DriverStr(Repeatri(&x86_64::X86_64Assembler::subl, 4U, "sub ${imm}, %{reg}"), "subli");
365 std::string shll_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
368 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
370 x86_64::CpuRegister shifter(x86_64::RCX);
384 DriverStr(Repeatri(&x86_64::X86_64Assembler::shll, 1U, "shll ${imm}, %{reg}"), "shlli");
388 std::string shlq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
391 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
393 x86_64::CpuRegister shifter(x86_64::RCX);
407 DriverStr(RepeatRI(&x86_64::X86_64Assembler::shlq, 1U, "shlq ${imm}, %{reg}"), "shlqi");
411 std::string shrl_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
414 std::vector<x86_64
416 x86_64::CpuRegister shifter(x86_64::RCX);
430 DriverStr(Repeatri(&x86_64::X86_64Assembler::shrl, 1U, "shrl ${imm}, %{reg}"), "shrli");
434 std::string shrq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
437 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
439 x86_64::CpuRegister shifter(x86_64::RCX);
453 DriverStr(RepeatRI(&x86_64::X86_64Assembler::shrq, 1U, "shrq ${imm}, %{reg}"), "shrqi");
457 std::string sarl_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
460 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
462 x86_64::CpuRegister shifter(x86_64::RCX);
476 DriverStr(Repeatri(&x86_64::X86_64Assembler::sarl, 1U, "sarl ${imm}, %{reg}"), "sarli");
480 std::string sarq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
483 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
485 x86_64::CpuRegister shifter(x86_64::RCX);
499 DriverStr(RepeatRI(&x86_64::X86_64Assembler::sarq, 1U, "sarq ${imm}, %{reg}"), "sarqi");
503 std::string rorl_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
506 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
508 x86_64::CpuRegister shifter(x86_64::RCX);
522 DriverStr(Repeatri(&x86_64::X86_64Assembler::rorl, 1U, "rorl ${imm}, %{reg}"), "rorli");
526 std::string roll_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
529 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
531 x86_64::CpuRegister shifter(x86_64::RCX);
545 DriverStr(Repeatri(&x86_64::X86_64Assembler::roll, 1U, "roll ${imm}, %{reg}"), "rolli");
549 std::string rorq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
552 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
554 x86_64::CpuRegister shifter(x86_64::RCX);
568 DriverStr(RepeatRI(&x86_64::X86_64Assembler::rorq, 1U, "rorq ${imm}, %{reg}"), "rorqi");
572 std::string rolq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
575 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
577 x86_64::CpuRegister shifter(x86_64::RCX);
591 DriverStr(RepeatRI(&x86_64::X86_64Assembler::rolq, 1U, "rolq ${imm}, %{reg}"), "rolqi");
595 DriverStr(RepeatRR(&x86_64::X86_64Assembler::cmpq, "cmpq %{reg2}, %{reg1}"), "cmpq");
599 DriverStr(RepeatRI(&x86_64::X86_64Assembler::cmpq, 4U /* cmpq only supports 32b imm */,
604 DriverStr(Repeatrr(&x86_64::X86_64Assembler::cmpl, "cmp %{reg2}, %{reg1}"), "cmpl");
608 DriverStr(Repeatri(&x86_64::X86_64Assembler::cmpl, 4U, "cmpl ${imm}, %{reg}"), "cmpli");
614 DriverStr(Repeatrr(&x86_64::X86_64Assembler::testl, "testl %{reg1}, %{reg2}"), "testl");
618 DriverStr(RepeatR(&x86_64::X86_64Assembler::negq, "negq %{reg}"), "negq");
622 DriverStr(Repeatr(&x86_64::X86_64Assembler::negl, "negl %{reg}"), "negl");
626 DriverStr(RepeatR(&x86_64::X86_64Assembler::notq, "notq %{reg}"), "notq");
630 DriverStr(Repeatr(&x86_64::X86_64Assembler::notl, "notl %{reg}"), "notl");
634 DriverStr(RepeatRR(&x86_64::X86_64Assembler::andq, "andq %{reg2}, %{reg1}"), "andq");
638 DriverStr(RepeatRI(&x86_64::X86_64Assembler::andq, 4U /* andq only supports 32b imm */,
643 DriverStr(Repeatrr(&x86_64::X86_64Assembler::andl, "andl %{reg2}, %{reg1}"), "andl");
647 DriverStr(Repeatri(&x86_64::X86_64Assembler::andl, 4U, "andl ${imm}, %{reg}"), "andli");
651 DriverStr(RepeatRR(&x86_64::X86_64Assembler::orq, "orq %{reg2}, %{reg1}"), "orq");
655 DriverStr(Repeatrr(&x86_64::X86_64Assembler::orl, "orl %{reg2}, %{reg1}"), "orl");
659 DriverStr(Repeatri(&x86_64::X86_64Assembler::orl, 4U, "orl ${imm}, %{reg}"), "orli");
663 DriverStr(RepeatRR(&x86_64::X86_64Assembler::xorq, "xorq %{reg2}, %{reg1}"), "xorq");
667 DriverStr(RepeatRI(&x86_64::X86_64Assembler::xorq, 4U, "xorq ${imm}, %{reg}"), "xorqi");
671 DriverStr(Repeatrr(&x86_64::X86_64Assembler::xorl, "xor %{reg2}, %{reg1}"), "xorl");
675 DriverStr(Repeatri(&x86_64::X86_64Assembler::xorl, 4U, "xor ${imm}, %{reg}"), "xorli");
679 DriverStr(RepeatRR(&x86_64::X86_64Assembler::xchgq, "xchgq %{reg2}, %{reg1}"), "xchgq");
685 // DriverStr(Repeatrr(&x86_64::X86_64Assembler::xchgl, "xchgl %{reg2}, %{reg1}"), "xchgl");
689 GetAssembler()->LockCmpxchgl(x86_64::Address(
690 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12),
691 x86_64::CpuRegister(x86_64::RSI));
692 GetAssembler()->LockCmpxchgl(x86_64::Address(
693 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12),
694 x86_64::CpuRegister(x86_64::RSI));
695 GetAssembler()->LockCmpxchgl(x86_64::Address(
696 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12),
697 x86_64::CpuRegister(x86_64::R8));
698 GetAssembler()->LockCmpxchgl(x86_64::Address(
699 x86_64::CpuRegister(x86_64::R13), 0), x86_64::CpuRegister(x86_64::RSI));
700 GetAssembler()->LockCmpxchgl(x86_64::Address(
701 x86_64::CpuRegister(x86_64::R13), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_1, 0),
702 x86_64::CpuRegister(x86_64::RSI));
714 GetAssembler()->LockCmpxchgq(x86_64::Address(
715 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12),
716 x86_64::CpuRegister(x86_64::RSI));
717 GetAssembler()->LockCmpxchgq(x86_64::Address(
718 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12),
719 x86_64::CpuRegister(x86_64::RSI));
720 GetAssembler()->LockCmpxchgq(x86_64::Address(
721 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12),
722 x86_64::CpuRegister(x86_64::R8));
723 GetAssembler()->LockCmpxchgq(x86_64::Address(
724 x86_64::CpuRegister(x86_64::R13), 0), x86_64::CpuRegister(x86_64::RSI));
725 GetAssembler()->LockCmpxchgq(x86_64::Address(
726 x86_64::CpuRegister(x86_64::R13), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_1, 0),
727 x86_64::CpuRegister(x86_64::RSI));
739 GetAssembler()->movl(x86_64::CpuRegister(x86_64::RAX), x86_64::Address(
740 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
741 GetAssembler()->movl(x86_64::CpuRegister(x86_64::RAX), x86_64::Address(
742 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
743 GetAssembler()->movl(x86_64::CpuRegister(x86_64::R8), x86_64::Address(
744 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
745 GetAssembler()->movl(x86_64::CpuRegister(x86_64::RAX), x86_64::Address(
746 x86_64::CpuRegister(x86_64::R13), 0));
747 GetAssembler()->movl(x86_64::CpuRegister(x86_64::RAX), x86_64::Address(
748 x86_64::CpuRegister(x86_64::R13), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_1, 0));
760 GetAssembler()->movw(x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
761 x86_64::CpuRegister(x86_64::R9));
762 GetAssembler()->movw(x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
763 x86_64::Immediate(0));
764 GetAssembler()->movw(x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0),
765 x86_64::Immediate(0));
766 GetAssembler()->movw(x86_64::Address(x86_64::CpuRegister(x86_64::R14), 0),
767 x86_64::Immediate(0));
777 GetAssembler()->cmpw(x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
778 x86_64::Immediate(0));
779 GetAssembler()->cmpw(x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0),
780 x86_64::Immediate(0));
781 GetAssembler()->cmpw(x86_64::Address(x86_64::CpuRegister(x86_64::R14), 0),
782 x86_64::Immediate(0));
791 GetAssembler()->movq(x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
792 x86_64::Immediate(-5));
798 GetAssembler()->movntl(x86_64::Address(
799 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12), x86_64::CpuRegister(x86_64::RAX));
800 GetAssembler()->movntl(x86_64::Address(
801 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12), x86_64::CpuRegister(x86_64::RAX));
802 GetAssembler()->movntl(x86_64::Address(
803 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12), x86_64::CpuRegister(x86_64::RAX));
804 GetAssembler()->movntl(x86_64::Address(x86_64::CpuRegister(x86_64::R13), 0), x86_64::CpuRegister(x86_64::RAX));
805 GetAssembler()->movntl(x86_64::Address(
806 x86_64::CpuRegister(x86_64::R13), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_1, 0), x86_64::CpuRegister(x86_64::R9));
818 GetAssembler()->movntq(x86_64::Address(
819 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12), x86_64::CpuRegister(x86_64::RAX));
820 GetAssembler()->movntq(x86_64::Address(
821 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12), x86_64::CpuRegister(x86_64::RAX));
822 GetAssembler()->movntq(x86_64::Address(
823 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12), x86_64::CpuRegister(x86_64::RAX));
824 GetAssembler()->movntq(x86_64::Address(x86_64::CpuRegister(x86_64::R13), 0), x86_64::CpuRegister(x86_64::RAX));
825 GetAssembler()->movntq(x86_64::Address(
826 x86_64::CpuRegister(x86_64::R13), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_1, 0), x86_64::CpuRegister(x86_64::R9));
838 GetAssembler()->cvtsi2ss(x86_64::XmmRegister(x86_64::XMM0),
839 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
841 GetAssembler()->cvtsi2ss(x86_64::XmmRegister(x86_64::XMM0),
842 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
850 GetAssembler()->cvtsi2sd(x86_64::XmmRegister(x86_64::XMM0),
851 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
853 GetAssembler()->cvtsi2sd(x86_64::XmmRegister(x86_64::XMM0),
854 x86_64x86_64::CpuRegister(x86_64::RAX), 0),
862 GetAssembler()->cmpq(x86_64::CpuRegister(x86_64::R12),
863 x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0));
869 GetAssembler()->movsxd(x86_64::CpuRegister(x86_64::R12),
870 x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0));
876 GetAssembler()->testq(x86_64::CpuRegister(x86_64::R12),
877 x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0));
883 GetAssembler()->addq(x86_64::CpuRegister(x86_64::R12),
884 x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0));
890 GetAssembler()->subq(x86_64::CpuRegister(x86_64::R12),
891 x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0));
897 GetAssembler()->cvtss2sd(x86_64::XmmRegister(x86_64::XMM0),
898 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0));
904 GetAssembler()->cvtsd2ss(x86_64::XmmRegister(x86_64::XMM0),
905 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0));
911 GetAssembler()->comiss(x86_64::XmmRegister(x86_64::XMM14),
912 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0));
918 GetAssembler()->comisd(x86_64::XmmRegister(x86_64::XMM0),
919 x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0));
925 GetAssembler()->ucomiss(x86_64::XmmRegister(x86_64::XMM0),
926 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0));
932 GetAssembler()->ucomisd(x86_64::XmmRegister(x86_64::XMM0),
933 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0));
939 GetAssembler()->andq(x86_64::CpuRegister(x86_64::R9),
940 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0));
946 GetAssembler()->orq(x86_64::CpuRegister(x86_64::R9),
947 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0));
953 GetAssembler()->xorq(x86_64::CpuRegister(x86_64::R9),
954 x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0));
978 DriverStr(RepeatRr(&x86_64::X86_64Assembler::movsxd, "movsxd %{reg2}, %{reg1}"), "movsxd");
986 DriverStr(RepeatFF(&x86_64::X86_64Assembler::movaps, "movaps %{reg2}, %{reg1}"), "movaps");
990 GetAssembler()->movaps(x86_64::XmmRegister(x86_64::XMM0), x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
991 GetAssembler()->movaps(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 2), x86_64::XmmRegister(x86_64::XMM1));
999 GetAssembler()->movups(x86_64::XmmRegister(x86_64::XMM0), x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
1000 GetAssembler()->movups(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 2), x86_64::XmmRegister(x86_64::XMM1));
1008 DriverStr(RepeatFF(&x86_64::X86_64Assembler::movss, "movss %{reg2}, %{reg1}"), "movss");
1012 DriverStr(RepeatFF(&x86_64::X86_64Assembler::movapd, "movapd %{reg2}, %{reg1}"), "movapd");
1016 GetAssembler()->movapd(x86_64::XmmRegister(x86_64::XMM0), x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
1017 GetAssembler()->movapd(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 2), x86_64::XmmRegister(x86_64::XMM1));
1025 GetAssembler()->movupd(x86_64::XmmRegister(x86_64::XMM0), x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
1026 GetAssembler()->movupd(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 2), x86_64::XmmRegister(x86_64::XMM1));
1034 DriverStr(RepeatFF(&x86_64::X86_64Assembler::movsd, "movsd %{reg2}, %{reg1}"), "movsd");
1038 DriverStr(RepeatFF(&x86_64::X86_64Assembler::movdqa, "movdqa %{reg2}, %{reg1}"), "movapd");
1042 GetAssembler()->movdqa(x86_64::XmmRegister(x86_64::XMM0), x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
1043 GetAssembler()->movdqa(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 2), x86_64::XmmRegister(x86_64::XMM1));
1051 GetAssembler()->movdqu(x86_64::XmmRegister(x86_64::XMM0), x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
1052 GetAssembler()->movdqu(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 2), x86_64::XmmRegister(x86_64::XMM1));
1060 DriverStr(RepeatFR(&x86_64::X86_64Assembler::movd, "movd %{reg2}, %{reg1}"), "movd.1");
1064 DriverStr(RepeatRF(&x86_64::X86_64Assembler::movd, "movd %{reg2}, %{reg1}"), "movd.2");
1068 DriverStr(RepeatFF(&x86_64::X86_64Assembler::addss, "addss %{reg2}, %{reg1}"), "addss");
1072 DriverStr(RepeatFF(&x86_64::X86_64Assembler::addsd, "addsd %{reg2}, %{reg1}"), "addsd");
1076 DriverStr(RepeatFF(&x86_64::X86_64Assembler::addps, "addps %{reg2}, %{reg1}"), "addps");
1080 DriverStr(RepeatFF(&x86_64::X86_64Assembler::addpd, "addpd %{reg2}, %{reg1}"), "addpd");
1084 DriverStr(RepeatFF(&x86_64::X86_64Assembler::subss, "subss %{reg2}, %{reg1}"), "subss");
1088 DriverStr(RepeatFF(&x86_64::X86_64Assembler::subsd, "subsd %{reg2}, %{reg1}"), "subsd");
1092 DriverStr(RepeatFF(&x86_64::X86_64Assembler::subps, "subps %{reg2}, %{reg1}"), "subps");
1096 DriverStr(RepeatFF(&x86_64::X86_64Assembler::subpd, "subpd %{reg2}, %{reg1}"), "subpd");
1100 DriverStr(RepeatFF(&x86_64::X86_64Assembler::mulss, "mulss %{reg2}, %{reg1}"), "mulss");
1104 DriverStr(RepeatFF(&x86_64::X86_64Assembler::mulsd, "mulsd %{reg2}, %{reg1}"), "mulsd");
1108 DriverStr(RepeatFF(&x86_64::X86_64Assembler::mulps, "mulps %{reg2}, %{reg1}"), "mulps");
1112 DriverStr(RepeatFF(&x86_64::X86_64Assembler::mulpd, "mulpd %{reg2}, %{reg1}"), "mulpd");
1116 DriverStr(RepeatFF(&x86_64::X86_64Assembler::divss, "divss %{reg2}, %{reg1}"), "divss");
1120 DriverStr(RepeatFF(&x86_64::X86_64Assembler::divsd, "divsd %{reg2}, %{reg1}"), "divsd");
1124 DriverStr(RepeatFF(&x86_64::X86_64Assembler::divps, "divps %{reg2}, %{reg1}"), "divps");
1128 DriverStr(RepeatFF(&x86_64::X86_64Assembler::divpd, "divpd %{reg2}, %{reg1}"), "divpd");
1132 DriverStr(RepeatFF(&x86_64::X86_64Assembler::paddb, "paddb %{reg2}, %{reg1}"), "paddb");
1136 DriverStr(RepeatFF(&x86_64::X86_64Assembler::psubb, "psubb %{reg2}, %{reg1}"), "psubb");
1140 DriverStr(RepeatFF(&x86_64::X86_64Assembler::paddw, "paddw %{reg2}, %{reg1}"), "paddw");
1144 DriverStr(RepeatFF(&x86_64::X86_64Assembler::psubw, "psubw %{reg2}, %{reg1}"), "psubw");
1148 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pmullw, "pmullw %{reg2}, %{reg1}"), "pmullw");
1152 DriverStr(RepeatFF(&x86_64::X86_64Assembler::paddd, "paddd %{reg2}, %{reg1}"), "paddd");
1156 DriverStr(RepeatFF(&x86_64::X86_64Assembler::psubd, "psubd %{reg2}, %{reg1}"), "psubd");
1160 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pmulld, "pmulld %{reg2}, %{reg1}"), "pmulld");
1164 DriverStr(RepeatFF(&x86_64::X86_64Assembler::paddq, "paddq %{reg2}, %{reg1}"), "paddq");
1168 DriverStr(RepeatFF(&x86_64::X86_64Assembler::psubq, "psubq %{reg2}, %{reg1}"), "psubq");
1172 DriverStr(RepeatFr(&x86_64::X86_64Assembler::cvtsi2ss, "cvtsi2ss %{reg2}, %{reg1}"), "cvtsi2ss");
1176 DriverStr(RepeatFr(&x86_64::X86_64Assembler::cvtsi2sd, "cvtsi2sd %{reg2}, %{reg1}"), "cvtsi2sd");
1181 DriverStr(RepeatrF(&x86_64::X86_64Assembler::cvtss2si, "cvtss2si %{reg2}, %{reg1}"), "cvtss2si");
1186 DriverStr(RepeatFF(&x86_64::X86_64Assembler::cvtss2sd, "cvtss2sd %{reg2}, %{reg1}"), "cvtss2sd");
1191 DriverStr(RepeatrF(&x86_64::X86_64Assembler::cvtsd2si, "cvtsd2si %{reg2}, %{reg1}"), "cvtsd2si");
1195 DriverStr(RepeatrF(&x86_64::X86_64Assembler::cvttss2si, "cvttss2si %{reg2}, %{reg1}"),
1200 DriverStr(RepeatrF(&x86_64::X86_64Assembler::cvttsd2si, "cvttsd2si %{reg2}, %{reg1}"),
1205 DriverStr(RepeatFF(&x86_64::X86_64Assembler::cvtsd2ss, "cvtsd2ss %{reg2}, %{reg1}"), "cvtsd2ss");
1209 DriverStr(RepeatFF(&x86_64::X86_64Assembler::cvtdq2ps, "cvtdq2ps %{reg2}, %{reg1}"), "cvtdq2ps");
1213 DriverStr(RepeatFF(&x86_64::X86_64Assembler::cvtdq2pd, "cvtdq2pd %{reg2}, %{reg1}"), "cvtdq2pd");
1217 DriverStr(RepeatFF(&x86_64::X86_64Assembler::comiss, "comiss %{reg2}, %{reg1}"), "comiss");
1221 DriverStr(RepeatFF(&x86_64::X86_64Assembler::comisd, "comisd %{reg2}, %{reg1}"), "comisd");
1225 DriverStr(RepeatFF(&x86_64::X86_64Assembler::ucomiss, "ucomiss %{reg2}, %{reg1}"), "ucomiss");
1229 DriverStr(RepeatFF(&x86_64::X86_64Assembler::ucomisd, "ucomisd %{reg2}, %{reg1}"), "ucomisd");
1233 DriverStr(RepeatFF(&x86_64::X86_64Assembler::sqrtss, "sqrtss %{reg2}, %{reg1}"), "sqrtss");
1237 DriverStr(RepeatFF(&x86_64::X86_64Assembler::sqrtsd, "sqrtsd %{reg2}, %{reg1}"), "sqrtsd");
1241 DriverStr(RepeatFFI(&x86_64::X86_64Assembler::roundss, 1, "roundss ${imm}, %{reg2}, %{reg1}"), "roundss");
1245 DriverStr(RepeatFFI(&x86_64::X86_64Assembler::roundsd, 1, "roundsd ${imm}, %{reg2}, %{reg1}"), "roundsd");
1249 DriverStr(RepeatFF(&x86_64::X86_64Assembler::xorps, "xorps %{reg2}, %{reg1}"), "xorps");
1253 DriverStr(RepeatFF(&x86_64::X86_64Assembler::xorpd, "xorpd %{reg2}, %{reg1}"), "xorpd");
1257 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pxor, "pxor %{reg2}, %{reg1}"), "pxor");
1261 DriverStr(RepeatFF(&x86_64::X86_64Assembler::andps, "andps %{reg2}, %{reg1}"), "andps");
1265 DriverStr(RepeatFF(&x86_64::X86_64Assembler::andpd, "andpd %{reg2}, %{reg1}"), "andpd");
1269 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pand, "pand %{reg2}, %{reg1}"), "pand");
1273 DriverStr(RepeatFF(&x86_64::X86_64Assembler::andnpd, "andnpd %{reg2}, %{reg1}"), "andnpd");
1277 DriverStr(RepeatFF(&x86_64::X86_64Assembler::andnps, "andnps %{reg2}, %{reg1}"), "andnps");
1281 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pandn, "pandn %{reg2}, %{reg1}"), "pandn");
1285 DriverStr(RepeatFF(&x86_64::X86_64Assembler::orps, "orps %{reg2}, %{reg1}"), "orps");
1289 DriverStr(RepeatFF(&x86_64::X86_64Assembler::orpd, "orpd %{reg2}, %{reg1}"), "orpd");
1293 DriverStr(RepeatFF(&x86_64::X86_64Assembler::por, "por %{reg2}, %{reg1}"), "por");
1297 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pavgb, "pavgb %{reg2}, %{reg1}"), "pavgb");
1301 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pavgw, "pavgw %{reg2}, %{reg1}"), "pavgw");
1305 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pcmpeqb, "pcmpeqb %{reg2}, %{reg1}"), "pcmpeqb");
1309 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pcmpeqw, "pcmpeqw %{reg2}, %{reg1}"), "pcmpeqw");
1313 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pcmpeqd, "pcmpeqd %{reg2}, %{reg1}"), "pcmpeqd");
1317 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pcmpeqq, "pcmpeqq %{reg2}, %{reg1}"), "pcmpeqq");
1321 x86_64::X86_64Assembler::pcmpgtb, "pcmpgtb %{reg2}, %{reg1}"), "pcmpgtb");
1325 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pcmpgtw, "pcmpgtw %{reg2}, %{reg1}"), "pcmpgtw");
1329 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pcmpgtd, "pcmpgtd %{reg2}, %{reg1}"), "pcmpgtd");
1333 DriverStr(RepeatFF(&x86_64::X86_64Assembler::pcmpgtq, "pcmpgtq %{reg2}, %{reg1}"), "pcmpgtq");
1337 DriverStr(RepeatFFI(&x86_64::X86_64Assembler::shufps, 1, "shufps ${imm}, %{reg2}, %{reg1}"), "shufps");
1341 DriverStr(RepeatFFI(&x86_64::X86_64Assembler::shufpd, 1, "shufpd ${imm}, %{reg2}, %{reg1}"), "shufpd");
1345 DriverStr(RepeatFFI(&x86_64::X86_64Assembler::pshufd, 1, "pshufd ${imm}, %{reg2}, %{reg1}"), "pshufd");
1349 DriverStr(RepeatFF(&x86_64::X86_64Assembler::punpcklbw, "punpcklbw %{reg2}, %{reg1}"), "punpcklbw");
1353 DriverStr(RepeatFF(&x86_64::X86_64Assembler::punpcklwd, "punpcklwd %{reg2}, %{reg1}"), "punpcklwd");
1357 DriverStr(RepeatFF(&x86_64::X86_64Assembler::punpckldq, "punpckldq %{reg2}, %{reg1}"), "punpckldq");
1361 DriverStr(RepeatFF(&x86_64::X86_64Assembler::punpcklqdq, "punpcklqdq %{reg2}, %{reg1}"), "punpcklqdq");
1365 GetAssembler()->psllw(x86_64::XmmRegister(x86_64::XMM0), x86_64::Immediate(1));
1366 GetAssembler()->psllw(x86_64::XmmRegister(x86_64::XMM15), x86_64::Immediate(2));
1372 GetAssembler()->pslld(x86_64::XmmRegister(x86_64::XMM0), x86_64::Immediate(1));
1373 GetAssembler()->pslld(x86_64::XmmRegister(x86_64::XMM15), x86_64::Immediate(2));
1379 GetAssembler()->psllq(x86_64::XmmRegister(x86_64::XMM0), x86_64::Immediate(1));
1380 GetAssembler()->psllq(x86_64::XmmRegister(x86_64::XMM15), x86_64::Immediate(2));
1386 GetAssembler()->psraw(x86_64::XmmRegister(x86_64::XMM0), x86_64::Immediate(1));
1387 GetAssembler()->psraw(x86_64::XmmRegister(x86_64::XMM15), x86_64::Immediate(2));
1393 GetAssembler()->psrad(x86_64::XmmRegister(x86_64::XMM0), x86_64::Immediate(1));
1394 GetAssembler()->psrad(x86_64::XmmRegister(x86_64::XMM15), x86_64::Immediate(2));
1400 GetAssembler()->psrlw(x86_64::XmmRegister(x86_64::XMM0), x86_64::Immediate(1));
1401 GetAssembler()->psrlw(x86_64::XmmRegister(x86_64::XMM15), x86_64::Immediate(2));
1407 GetAssembler()->psrld(x86_64::XmmRegister(x86_64::XMM0), x86_64::Immediate(1));
1408 GetAssembler()->psrld(x86_64::XmmRegister(x86_64::XMM15), x86_64::Immediate(2));
1414 GetAssembler()->psrlq(x86_64::XmmRegister(x86_64::XMM0), x86_64::Immediate(1));
1415 GetAssembler()->psrlq(x86_64::XmmRegister(x86_64::XMM15), x86_64::Immediate(2));
1421 GetAssembler()->ucomiss(x86_64::XmmRegister(x86_64::XMM0), x86_64::Address(
1422 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1423 GetAssembler()->ucomiss(x86_64::XmmRegister(x86_64::XMM1), x86_64::Address(
1424 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1425 GetAssembler()->ucomiss(x86_64::XmmRegister(x86_64::XMM2), x86_64::Address(
1426 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1427 GetAssembler()->ucomiss(x86_64::XmmRegister(x86_64::XMM3), x86_64::Address(
1428 x86_64::CpuRegister(x86_64::R13), 0));
1429 GetAssembler()->ucomiss(x86_64::XmmRegister(x86_64::XMM4), x86_64::Address(
1430 x86_64::CpuRegister(x86_64::R13), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_1, 0));
1442 GetAssembler()->ucomisd(x86_64::XmmRegister(x86_64::XMM0), x86_64::Address(
1443 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1444 GetAssembler()->ucomisd(x86_64::XmmRegister(x86_64::XMM1), x86_64::Address(
1445 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1446 GetAssembler()->ucomisd(x86_64::XmmRegister(x86_64::XMM2), x86_64::Address(
1447 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1448 GetAssembler()->ucomisd(x86_64::XmmRegister(x86_64::XMM3), x86_64::Address(
1449 x86_64::CpuRegister(x86_64::R13), 0));
1450 GetAssembler()->ucomisd(x86_64::XmmRegister(x86_64::XMM4), x86_64::Address(
1451 x86_64::CpuRegister(x86_64::R13), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_1, 0));
1465 x86_64::X86_64Assembler* assembler) {
1488 GetAssembler()->filds(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
1489 GetAssembler()->fildl(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 12));
1497 GetAssembler()->fistps(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 16));
1498 GetAssembler()->fistpl(x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 24));
1510 DriverStr(RepeatR(&x86_64::X86_64Assembler::call, "call *%{reg}"), "call");
1514 DriverStr(RepeatR(&x86_64::X86_64Assembler::jmp, "jmp *%{reg}"), "jmp");
1518 DriverStr(RepeatI(&x86_64::X86_64Assembler::enter, 2U /* 16b immediate */, "enter ${imm}, $0",
1523 DriverStr(RepeatI(&x86_64::X86_64Assembler::ret, 2U /* 16b immediate */, "ret ${imm}",
1528 x86_64::X86_64Assembler* assembler) {
1549 DriverStr(Repeatr(&x86_64::X86_64Assembler::bswapl, "bswap %{reg}"), "bswapl");
1553 DriverStr(RepeatR(&x86_64::X86_64Assembler::bswapq, "bswap %{reg}"), "bswapq");
1557 DriverStr(Repeatrr(&x86_64::X86_64Assembler::bsfl, "bsfl %{reg2}, %{reg1}"), "bsfl");
1561 GetAssembler()->bsfl(x86_64::CpuRegister(x86_64::R10), x86_64::Address(
1562 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1563 GetAssembler()->bsfl(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1564 x86_64::CpuRegister(x86_64::R10), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1565 GetAssembler()->bsfl(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1566 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1576 DriverStr(RepeatRR(&x86_64::X86_64Assembler::bsfq, "bsfq %{reg2}, %{reg1}"), "bsfq");
1580 GetAssembler()->bsfq(x86_64::CpuRegister(x86_64::R10), x86_64::Address(
1581 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1582 GetAssembler()->bsfq(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1583 x86_64::CpuRegister(x86_64::R10), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1584 GetAssembler()->bsfq(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1585 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1595 DriverStr(Repeatrr(&x86_64::X86_64Assembler::bsrl, "bsrl %{reg2}, %{reg1}"), "bsrl");
1599 GetAssembler()->bsrl(x86_64::CpuRegister(x86_64::R10), x86_64::Address(
1600 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1601 GetAssembler()->bsrl(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1602 x86_64::CpuRegister(x86_64::R10), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1603 GetAssembler()->bsrl(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1604 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1614 DriverStr(RepeatRR(&x86_64::X86_64Assembler::bsrq, "bsrq %{reg2}, %{reg1}"), "bsrq");
1618 GetAssembler()->bsrq(x86_64::CpuRegister(x86_64::R10), x86_64::Address(
1619 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1620 GetAssembler()->bsrq(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1621 x86_64::CpuRegister(x86_64::R10), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1622 GetAssembler()->bsrq(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1623 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1633 DriverStr(Repeatrr(&x86_64::X86_64Assembler::popcntl, "popcntl %{reg2}, %{reg1}"), "popcntl");
1637 GetAssembler()->popcntl(x86_64::CpuRegister(x86_64::R10), x86_64::Address(
1638 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1639 GetAssembler()->popcntl(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1640 x86_64::CpuRegister(x86_64::R10), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1641 GetAssembler()->popcntl(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1642 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1652 DriverStr(RepeatRR(&x86_64::X86_64Assembler::popcntq, "popcntq %{reg2}, %{reg1}"), "popcntq");
1656 GetAssembler()->popcntq(x86_64::CpuRegister(x86_64::R10), x86_64::Address(
1657 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1658 GetAssembler()->popcntq(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1659 x86_64::CpuRegister(x86_64::R10), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12));
1660 GetAssembler()->popcntq(x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1661 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12));
1671 GetAssembler()->cmov(x86_64::kEqual, x86_64::CpuRegister(x86_64::R10), x86_64::Address(
1672 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12), false);
1673 GetAssembler()->cmov(x86_64::kNotEqual, x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1674 x86_64::CpuRegister(x86_64::R10), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12), false);
1675 GetAssembler()->cmov(x86_64::kEqual, x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1676 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12), false);
1686 GetAssembler()->cmov(x86_64::kEqual, x86_64::CpuRegister(x86_64::R10), x86_64::Address(
1687 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12), true);
1688 GetAssembler()->cmov(x86_64::kNotEqual, x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1689 x86_64::CpuRegister(x86_64::R10), x86_64::CpuRegister(x86_64::RBX), x86_64::TIMES_4, 12), true);
1690 GetAssembler()->cmov(x86_64::kEqual, x86_64::CpuRegister(x86_64::RDI), x86_64::Address(
1691 x86_64::CpuRegister(x86_64::RDI), x86_64::CpuRegister(x86_64::R9), x86_64::TIMES_4, 12), true);
1706 x86_64::NearLabel target;
1708 GetAssembler()->addl(x86_64::CpuRegister(x86_64::RDI),
1709 x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
1721 x86_64::NearLabel start, target;
1723 GetAssembler()->j(x86_64::kEqual, &target);
1726 GetAssembler()->addl(x86_64::CpuRegister(x86_64::RDI),
1727 x86_64::Address(x86_64::CpuRegister(x86_64::RSP), 4));
1729 GetAssembler()->j(x86_64::kNotEqual, &start);
1743 x86_64::X86_64Assembler* assembler) {
1765 std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
1770 assembler->setcc(static_cast<x86_64::Condition>(i), *reg);
1783 DriverStr(Repeatrb(&x86_64::X86_64Assembler::movzxb, "movzbl %{reg2}, %{reg1}"), "movzxb");
1787 DriverStr(Repeatrb(&x86_64::X86_64Assembler::movsxb, "movsbl %{reg2}, %{reg1}"), "movsxb");
1815 GetAssembler()->cmpb(x86_64::Address(x86_64::CpuRegister(x86_64::RDI), 128),
1816 x86_64::Immediate(0));
1823 x86_64::Address(x86_64::CpuRegister(x86_64::RDI),
1824 x86_64::CpuRegister(x86_64::RBX),
1825 x86_64::TIMES_4,
1827 x86_64::Immediate(1));
1829 x86_64::Address(x86_64::CpuRegister(x86_64::RSP), FrameOffset(7)),
1830 x86_64::Immediate(-128));
1832 x86_64::Address(x86_64::CpuRegister(x86_64::RBX), MemberOffset(130)),
1833 x86_64::Immediate(127));
1844 x86_64::Address(x86_64::CpuRegister(x86_64::RDI),
1845 x86_64::CpuRegister(x86_64::RBX),
1846 x86_64::TIMES_4,
1848 x86_64::Immediate(1));
1850 x86_64::Address(x86_64::CpuRegister(x86_64::RSP), FrameOffset(7)),
1851 x86_64::Immediate(-100000));
1853 x86_64::Address(x86_64::CpuRegister(x86_64::RBX), MemberOffset(130)),
1854 x86_64::Immediate(77777777));
1863 class JNIMacroAssemblerX86_64Test : public JNIMacroAssemblerTest<x86_64::X86_64JNIMacroAssembler> {
1865 using Base = JNIMacroAssemblerTest<x86_64::X86_64JNIMacroAssembler>;
1870 return "x86_64";
1880 static x86_64::X86_64ManagedRegister ManagedFromCpu(x86_64::Register r) {
1881 return x86_64::X86_64ManagedRegister::FromCpuRegister(r);
1884 static x86_64::X86_64ManagedRegister ManagedFromFpu(x86_64::FloatRegister r) {
1885 return x86_64::X86_64ManagedRegister::FromXmmRegister(r);
1889 x86_64::X86_64JNIMacroAssembler* assembler) {
1894 ManagedFromCpu(x86_64::R10),
1895 ManagedFromCpu(x86_64::RSI)
1901 ManagedRegisterSpill spill(ManagedFromCpu(x86_64::RAX), 8, 0);
1903 ManagedRegisterSpill spill2(ManagedFromCpu(x86_64::RBX), 8, 8);
1905 ManagedRegisterSpill spill3(ManagedFromFpu(x86_64::XMM1), 8, 16);
1908 x86_64::X86_64ManagedRegister method_reg = ManagedFromCpu(x86_64::RDI);
1936 x86_64::X86_64JNIMacroAssembler* assembler) {
1941 ManagedFromCpu(x86_64::R10),
1942 ManagedFromCpu(x86_64::RSI)
1968 x86_64::X86_64JNIMacroAssembler* assembler) {
1988 x86_64::X86_64JNIMacroAssembler* assembler) {