machinst x64: expand encoding names a bit;

This avoids one, two, and three letter structures names, which makes the
code easier to read (while a bit more verbose).
This commit is contained in:
Benjamin Bouvier
2020-06-11 15:09:45 +02:00
parent ef5de04d32
commit b2a0718404
6 changed files with 607 additions and 369 deletions

View File

@@ -882,184 +882,274 @@ fn test_x64_emit() {
//
// Alu_RMI_R
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Add, RMI::reg(r15), w_rdx),
Inst::alu_rmi_r(true, AluRmiROpcode::Add, RegMemImm::reg(r15), w_rdx),
"4C01FA",
"addq %r15, %rdx",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::reg(rcx), w_r8),
Inst::alu_rmi_r(false, AluRmiROpcode::Add, RegMemImm::reg(rcx), w_r8),
"4101C8",
"addl %ecx, %r8d",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::reg(rcx), w_rsi),
Inst::alu_rmi_r(false, AluRmiROpcode::Add, RegMemImm::reg(rcx), w_rsi),
"01CE",
"addl %ecx, %esi",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Add, RMI::mem(Addr::imm_reg(99, rdi)), w_rdx),
Inst::alu_rmi_r(
true,
AluRmiROpcode::Add,
RegMemImm::mem(Addr::imm_reg(99, rdi)),
w_rdx,
),
"48035763",
"addq 99(%rdi), %rdx",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::mem(Addr::imm_reg(99, rdi)), w_r8),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Add,
RegMemImm::mem(Addr::imm_reg(99, rdi)),
w_r8,
),
"44034763",
"addl 99(%rdi), %r8d",
));
insns.push((
Inst::alu_rmi_r(
false,
RMI_R_Op::Add,
RMI::mem(Addr::imm_reg(99, rdi)),
AluRmiROpcode::Add,
RegMemImm::mem(Addr::imm_reg(99, rdi)),
w_rsi,
),
"037763",
"addl 99(%rdi), %esi",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Add, RMI::imm(-127i32 as u32), w_rdx),
Inst::alu_rmi_r(
true,
AluRmiROpcode::Add,
RegMemImm::imm(-127i32 as u32),
w_rdx,
),
"4883C281",
"addq $-127, %rdx",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Add, RMI::imm(-129i32 as u32), w_rdx),
Inst::alu_rmi_r(
true,
AluRmiROpcode::Add,
RegMemImm::imm(-129i32 as u32),
w_rdx,
),
"4881C27FFFFFFF",
"addq $-129, %rdx",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Add, RMI::imm(76543210), w_rdx),
Inst::alu_rmi_r(true, AluRmiROpcode::Add, RegMemImm::imm(76543210), w_rdx),
"4881C2EAF48F04",
"addq $76543210, %rdx",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::imm(-127i32 as u32), w_r8),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Add,
RegMemImm::imm(-127i32 as u32),
w_r8,
),
"4183C081",
"addl $-127, %r8d",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::imm(-129i32 as u32), w_r8),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Add,
RegMemImm::imm(-129i32 as u32),
w_r8,
),
"4181C07FFFFFFF",
"addl $-129, %r8d",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::imm(-76543210i32 as u32), w_r8),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Add,
RegMemImm::imm(-76543210i32 as u32),
w_r8,
),
"4181C0160B70FB",
"addl $-76543210, %r8d",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::imm(-127i32 as u32), w_rsi),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Add,
RegMemImm::imm(-127i32 as u32),
w_rsi,
),
"83C681",
"addl $-127, %esi",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::imm(-129i32 as u32), w_rsi),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Add,
RegMemImm::imm(-129i32 as u32),
w_rsi,
),
"81C67FFFFFFF",
"addl $-129, %esi",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Add, RMI::imm(76543210), w_rsi),
Inst::alu_rmi_r(false, AluRmiROpcode::Add, RegMemImm::imm(76543210), w_rsi),
"81C6EAF48F04",
"addl $76543210, %esi",
));
// This is pretty feeble
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Sub, RMI::reg(r15), w_rdx),
Inst::alu_rmi_r(true, AluRmiROpcode::Sub, RegMemImm::reg(r15), w_rdx),
"4C29FA",
"subq %r15, %rdx",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::And, RMI::reg(r15), w_rdx),
Inst::alu_rmi_r(true, AluRmiROpcode::And, RegMemImm::reg(r15), w_rdx),
"4C21FA",
"andq %r15, %rdx",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Or, RMI::reg(r15), w_rdx),
Inst::alu_rmi_r(true, AluRmiROpcode::Or, RegMemImm::reg(r15), w_rdx),
"4C09FA",
"orq %r15, %rdx",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Xor, RMI::reg(r15), w_rdx),
Inst::alu_rmi_r(true, AluRmiROpcode::Xor, RegMemImm::reg(r15), w_rdx),
"4C31FA",
"xorq %r15, %rdx",
));
// Test all mul cases, though
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Mul, RMI::reg(r15), w_rdx),
Inst::alu_rmi_r(true, AluRmiROpcode::Mul, RegMemImm::reg(r15), w_rdx),
"490FAFD7",
"imulq %r15, %rdx",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::reg(rcx), w_r8),
Inst::alu_rmi_r(false, AluRmiROpcode::Mul, RegMemImm::reg(rcx), w_r8),
"440FAFC1",
"imull %ecx, %r8d",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::reg(rcx), w_rsi),
Inst::alu_rmi_r(false, AluRmiROpcode::Mul, RegMemImm::reg(rcx), w_rsi),
"0FAFF1",
"imull %ecx, %esi",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Mul, RMI::mem(Addr::imm_reg(99, rdi)), w_rdx),
Inst::alu_rmi_r(
true,
AluRmiROpcode::Mul,
RegMemImm::mem(Addr::imm_reg(99, rdi)),
w_rdx,
),
"480FAF5763",
"imulq 99(%rdi), %rdx",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::mem(Addr::imm_reg(99, rdi)), w_r8),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Mul,
RegMemImm::mem(Addr::imm_reg(99, rdi)),
w_r8,
),
"440FAF4763",
"imull 99(%rdi), %r8d",
));
insns.push((
Inst::alu_rmi_r(
false,
RMI_R_Op::Mul,
RMI::mem(Addr::imm_reg(99, rdi)),
AluRmiROpcode::Mul,
RegMemImm::mem(Addr::imm_reg(99, rdi)),
w_rsi,
),
"0FAF7763",
"imull 99(%rdi), %esi",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Mul, RMI::imm(-127i32 as u32), w_rdx),
Inst::alu_rmi_r(
true,
AluRmiROpcode::Mul,
RegMemImm::imm(-127i32 as u32),
w_rdx,
),
"486BD281",
"imulq $-127, %rdx",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Mul, RMI::imm(-129i32 as u32), w_rdx),
Inst::alu_rmi_r(
true,
AluRmiROpcode::Mul,
RegMemImm::imm(-129i32 as u32),
w_rdx,
),
"4869D27FFFFFFF",
"imulq $-129, %rdx",
));
insns.push((
Inst::alu_rmi_r(true, RMI_R_Op::Mul, RMI::imm(76543210), w_rdx),
Inst::alu_rmi_r(true, AluRmiROpcode::Mul, RegMemImm::imm(76543210), w_rdx),
"4869D2EAF48F04",
"imulq $76543210, %rdx",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::imm(-127i32 as u32), w_r8),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Mul,
RegMemImm::imm(-127i32 as u32),
w_r8,
),
"456BC081",
"imull $-127, %r8d",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::imm(-129i32 as u32), w_r8),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Mul,
RegMemImm::imm(-129i32 as u32),
w_r8,
),
"4569C07FFFFFFF",
"imull $-129, %r8d",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::imm(-76543210i32 as u32), w_r8),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Mul,
RegMemImm::imm(-76543210i32 as u32),
w_r8,
),
"4569C0160B70FB",
"imull $-76543210, %r8d",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::imm(-127i32 as u32), w_rsi),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Mul,
RegMemImm::imm(-127i32 as u32),
w_rsi,
),
"6BF681",
"imull $-127, %esi",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::imm(-129i32 as u32), w_rsi),
Inst::alu_rmi_r(
false,
AluRmiROpcode::Mul,
RegMemImm::imm(-129i32 as u32),
w_rsi,
),
"69F67FFFFFFF",
"imull $-129, %esi",
));
insns.push((
Inst::alu_rmi_r(false, RMI_R_Op::Mul, RMI::imm(76543210), w_rsi),
Inst::alu_rmi_r(false, AluRmiROpcode::Mul, RegMemImm::imm(76543210), w_rsi),
"69F6EAF48F04",
"imull $76543210, %esi",
));
@@ -1837,314 +1927,318 @@ fn test_x64_emit() {
// ========================================================
// CmpRMIR
insns.push((
Inst::cmp_rmi_r(8, RMI::reg(r15), rdx),
Inst::cmp_rmi_r(8, RegMemImm::reg(r15), rdx),
"4C39FA",
"cmpq %r15, %rdx",
));
insns.push((
Inst::cmp_rmi_r(8, RMI::reg(rcx), r8),
Inst::cmp_rmi_r(8, RegMemImm::reg(rcx), r8),
"4939C8",
"cmpq %rcx, %r8",
));
insns.push((
Inst::cmp_rmi_r(8, RMI::reg(rcx), rsi),
Inst::cmp_rmi_r(8, RegMemImm::reg(rcx), rsi),
"4839CE",
"cmpq %rcx, %rsi",
));
insns.push((
Inst::cmp_rmi_r(8, RMI::mem(Addr::imm_reg(99, rdi)), rdx),
Inst::cmp_rmi_r(8, RegMemImm::mem(Addr::imm_reg(99, rdi)), rdx),
"483B5763",
"cmpq 99(%rdi), %rdx",
));
insns.push((
Inst::cmp_rmi_r(8, RMI::mem(Addr::imm_reg(99, rdi)), r8),
Inst::cmp_rmi_r(8, RegMemImm::mem(Addr::imm_reg(99, rdi)), r8),
"4C3B4763",
"cmpq 99(%rdi), %r8",
));
insns.push((
Inst::cmp_rmi_r(8, RMI::mem(Addr::imm_reg(99, rdi)), rsi),
Inst::cmp_rmi_r(8, RegMemImm::mem(Addr::imm_reg(99, rdi)), rsi),
"483B7763",
"cmpq 99(%rdi), %rsi",
));
insns.push((
Inst::cmp_rmi_r(8, RMI::imm(76543210), rdx),
Inst::cmp_rmi_r(8, RegMemImm::imm(76543210), rdx),
"4881FAEAF48F04",
"cmpq $76543210, %rdx",
));
insns.push((
Inst::cmp_rmi_r(8, RMI::imm(-76543210i32 as u32), r8),
Inst::cmp_rmi_r(8, RegMemImm::imm(-76543210i32 as u32), r8),
"4981F8160B70FB",
"cmpq $-76543210, %r8",
));
insns.push((
Inst::cmp_rmi_r(8, RMI::imm(76543210), rsi),
Inst::cmp_rmi_r(8, RegMemImm::imm(76543210), rsi),
"4881FEEAF48F04",
"cmpq $76543210, %rsi",
));
//
insns.push((
Inst::cmp_rmi_r(4, RMI::reg(r15), rdx),
Inst::cmp_rmi_r(4, RegMemImm::reg(r15), rdx),
"4439FA",
"cmpl %r15d, %edx",
));
insns.push((
Inst::cmp_rmi_r(4, RMI::reg(rcx), r8),
Inst::cmp_rmi_r(4, RegMemImm::reg(rcx), r8),
"4139C8",
"cmpl %ecx, %r8d",
));
insns.push((
Inst::cmp_rmi_r(4, RMI::reg(rcx), rsi),
Inst::cmp_rmi_r(4, RegMemImm::reg(rcx), rsi),
"39CE",
"cmpl %ecx, %esi",
));
insns.push((
Inst::cmp_rmi_r(4, RMI::mem(Addr::imm_reg(99, rdi)), rdx),
Inst::cmp_rmi_r(4, RegMemImm::mem(Addr::imm_reg(99, rdi)), rdx),
"3B5763",
"cmpl 99(%rdi), %edx",
));
insns.push((
Inst::cmp_rmi_r(4, RMI::mem(Addr::imm_reg(99, rdi)), r8),
Inst::cmp_rmi_r(4, RegMemImm::mem(Addr::imm_reg(99, rdi)), r8),
"443B4763",
"cmpl 99(%rdi), %r8d",
));
insns.push((
Inst::cmp_rmi_r(4, RMI::mem(Addr::imm_reg(99, rdi)), rsi),
Inst::cmp_rmi_r(4, RegMemImm::mem(Addr::imm_reg(99, rdi)), rsi),
"3B7763",
"cmpl 99(%rdi), %esi",
));
insns.push((
Inst::cmp_rmi_r(4, RMI::imm(76543210), rdx),
Inst::cmp_rmi_r(4, RegMemImm::imm(76543210), rdx),
"81FAEAF48F04",
"cmpl $76543210, %edx",
));
insns.push((
Inst::cmp_rmi_r(4, RMI::imm(-76543210i32 as u32), r8),
Inst::cmp_rmi_r(4, RegMemImm::imm(-76543210i32 as u32), r8),
"4181F8160B70FB",
"cmpl $-76543210, %r8d",
));
insns.push((
Inst::cmp_rmi_r(4, RMI::imm(76543210), rsi),
Inst::cmp_rmi_r(4, RegMemImm::imm(76543210), rsi),
"81FEEAF48F04",
"cmpl $76543210, %esi",
));
//
insns.push((
Inst::cmp_rmi_r(2, RMI::reg(r15), rdx),
Inst::cmp_rmi_r(2, RegMemImm::reg(r15), rdx),
"664439FA",
"cmpw %r15w, %dx",
));
insns.push((
Inst::cmp_rmi_r(2, RMI::reg(rcx), r8),
Inst::cmp_rmi_r(2, RegMemImm::reg(rcx), r8),
"664139C8",
"cmpw %cx, %r8w",
));
insns.push((
Inst::cmp_rmi_r(2, RMI::reg(rcx), rsi),
Inst::cmp_rmi_r(2, RegMemImm::reg(rcx), rsi),
"6639CE",
"cmpw %cx, %si",
));
insns.push((
Inst::cmp_rmi_r(2, RMI::mem(Addr::imm_reg(99, rdi)), rdx),
Inst::cmp_rmi_r(2, RegMemImm::mem(Addr::imm_reg(99, rdi)), rdx),
"663B5763",
"cmpw 99(%rdi), %dx",
));
insns.push((
Inst::cmp_rmi_r(2, RMI::mem(Addr::imm_reg(99, rdi)), r8),
Inst::cmp_rmi_r(2, RegMemImm::mem(Addr::imm_reg(99, rdi)), r8),
"66443B4763",
"cmpw 99(%rdi), %r8w",
));
insns.push((
Inst::cmp_rmi_r(2, RMI::mem(Addr::imm_reg(99, rdi)), rsi),
Inst::cmp_rmi_r(2, RegMemImm::mem(Addr::imm_reg(99, rdi)), rsi),
"663B7763",
"cmpw 99(%rdi), %si",
));
insns.push((
Inst::cmp_rmi_r(2, RMI::imm(23210), rdx),
Inst::cmp_rmi_r(2, RegMemImm::imm(23210), rdx),
"6681FAAA5A",
"cmpw $23210, %dx",
));
insns.push((
Inst::cmp_rmi_r(2, RMI::imm(-7654i32 as u32), r8),
Inst::cmp_rmi_r(2, RegMemImm::imm(-7654i32 as u32), r8),
"664181F81AE2",
"cmpw $-7654, %r8w",
));
insns.push((
Inst::cmp_rmi_r(2, RMI::imm(7654), rsi),
Inst::cmp_rmi_r(2, RegMemImm::imm(7654), rsi),
"6681FEE61D",
"cmpw $7654, %si",
));
//
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r15), rdx),
Inst::cmp_rmi_r(1, RegMemImm::reg(r15), rdx),
"4438FA",
"cmpb %r15b, %dl",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rcx), r8),
Inst::cmp_rmi_r(1, RegMemImm::reg(rcx), r8),
"4138C8",
"cmpb %cl, %r8b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rcx), rsi),
Inst::cmp_rmi_r(1, RegMemImm::reg(rcx), rsi),
"4038CE",
"cmpb %cl, %sil",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::mem(Addr::imm_reg(99, rdi)), rdx),
Inst::cmp_rmi_r(1, RegMemImm::mem(Addr::imm_reg(99, rdi)), rdx),
"3A5763",
"cmpb 99(%rdi), %dl",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::mem(Addr::imm_reg(99, rdi)), r8),
Inst::cmp_rmi_r(1, RegMemImm::mem(Addr::imm_reg(99, rdi)), r8),
"443A4763",
"cmpb 99(%rdi), %r8b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::mem(Addr::imm_reg(99, rdi)), rsi),
Inst::cmp_rmi_r(1, RegMemImm::mem(Addr::imm_reg(99, rdi)), rsi),
"403A7763",
"cmpb 99(%rdi), %sil",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::imm(70), rdx),
Inst::cmp_rmi_r(1, RegMemImm::imm(70), rdx),
"80FA46",
"cmpb $70, %dl",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::imm(-76i32 as u32), r8),
Inst::cmp_rmi_r(1, RegMemImm::imm(-76i32 as u32), r8),
"4180F8B4",
"cmpb $-76, %r8b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::imm(76), rsi),
Inst::cmp_rmi_r(1, RegMemImm::imm(76), rsi),
"4080FE4C",
"cmpb $76, %sil",
));
// Extra byte-cases (paranoia!) for cmp_rmi_r for first operand = R
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rax), rbx),
Inst::cmp_rmi_r(1, RegMemImm::reg(rax), rbx),
"38C3",
"cmpb %al, %bl",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rbx), rax),
Inst::cmp_rmi_r(1, RegMemImm::reg(rbx), rax),
"38D8",
"cmpb %bl, %al",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rcx), rdx),
Inst::cmp_rmi_r(1, RegMemImm::reg(rcx), rdx),
"38CA",
"cmpb %cl, %dl",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rcx), rsi),
Inst::cmp_rmi_r(1, RegMemImm::reg(rcx), rsi),
"4038CE",
"cmpb %cl, %sil",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rcx), r10),
Inst::cmp_rmi_r(1, RegMemImm::reg(rcx), r10),
"4138CA",
"cmpb %cl, %r10b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rcx), r14),
Inst::cmp_rmi_r(1, RegMemImm::reg(rcx), r14),
"4138CE",
"cmpb %cl, %r14b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rbp), rdx),
Inst::cmp_rmi_r(1, RegMemImm::reg(rbp), rdx),
"4038EA",
"cmpb %bpl, %dl",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rbp), rsi),
Inst::cmp_rmi_r(1, RegMemImm::reg(rbp), rsi),
"4038EE",
"cmpb %bpl, %sil",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rbp), r10),
Inst::cmp_rmi_r(1, RegMemImm::reg(rbp), r10),
"4138EA",
"cmpb %bpl, %r10b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(rbp), r14),
Inst::cmp_rmi_r(1, RegMemImm::reg(rbp), r14),
"4138EE",
"cmpb %bpl, %r14b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r9), rdx),
Inst::cmp_rmi_r(1, RegMemImm::reg(r9), rdx),
"4438CA",
"cmpb %r9b, %dl",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r9), rsi),
Inst::cmp_rmi_r(1, RegMemImm::reg(r9), rsi),
"4438CE",
"cmpb %r9b, %sil",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r9), r10),
Inst::cmp_rmi_r(1, RegMemImm::reg(r9), r10),
"4538CA",
"cmpb %r9b, %r10b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r9), r14),
Inst::cmp_rmi_r(1, RegMemImm::reg(r9), r14),
"4538CE",
"cmpb %r9b, %r14b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r13), rdx),
Inst::cmp_rmi_r(1, RegMemImm::reg(r13), rdx),
"4438EA",
"cmpb %r13b, %dl",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r13), rsi),
Inst::cmp_rmi_r(1, RegMemImm::reg(r13), rsi),
"4438EE",
"cmpb %r13b, %sil",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r13), r10),
Inst::cmp_rmi_r(1, RegMemImm::reg(r13), r10),
"4538EA",
"cmpb %r13b, %r10b",
));
insns.push((
Inst::cmp_rmi_r(1, RMI::reg(r13), r14),
Inst::cmp_rmi_r(1, RegMemImm::reg(r13), r14),
"4538EE",
"cmpb %r13b, %r14b",
));
// ========================================================
// Push64
insns.push((Inst::push64(RMI::reg(rdi)), "57", "pushq %rdi"));
insns.push((Inst::push64(RMI::reg(r8)), "4150", "pushq %r8"));
insns.push((Inst::push64(RegMemImm::reg(rdi)), "57", "pushq %rdi"));
insns.push((Inst::push64(RegMemImm::reg(r8)), "4150", "pushq %r8"));
insns.push((
Inst::push64(RMI::mem(Addr::imm_reg_reg_shift(321, rsi, rcx, 3))),
Inst::push64(RegMemImm::mem(Addr::imm_reg_reg_shift(321, rsi, rcx, 3))),
"FFB4CE41010000",
"pushq 321(%rsi,%rcx,8)",
));
insns.push((
Inst::push64(RMI::mem(Addr::imm_reg_reg_shift(321, r9, rbx, 2))),
Inst::push64(RegMemImm::mem(Addr::imm_reg_reg_shift(321, r9, rbx, 2))),
"41FFB49941010000",
"pushq 321(%r9,%rbx,4)",
));
insns.push((Inst::push64(RMI::imm(0)), "6A00", "pushq $0"));
insns.push((Inst::push64(RMI::imm(127)), "6A7F", "pushq $127"));
insns.push((Inst::push64(RMI::imm(128)), "6880000000", "pushq $128"));
insns.push((Inst::push64(RegMemImm::imm(0)), "6A00", "pushq $0"));
insns.push((Inst::push64(RegMemImm::imm(127)), "6A7F", "pushq $127"));
insns.push((
Inst::push64(RMI::imm(0x31415927)),
Inst::push64(RegMemImm::imm(128)),
"6880000000",
"pushq $128",
));
insns.push((
Inst::push64(RegMemImm::imm(0x31415927)),
"6827594131",
"pushq $826366247",
));
insns.push((
Inst::push64(RMI::imm(-128i32 as u32)),
Inst::push64(RegMemImm::imm(-128i32 as u32)),
"6A80",
"pushq $-128",
));
insns.push((
Inst::push64(RMI::imm(-129i32 as u32)),
Inst::push64(RegMemImm::imm(-129i32 as u32)),
"687FFFFFFF",
"pushq $-129",
));
insns.push((
Inst::push64(RMI::imm(-0x75c4e8a1i32 as u32)),
Inst::push64(RegMemImm::imm(-0x75c4e8a1i32 as u32)),
"685F173B8A",
"pushq $-1975838881",
));
@@ -2161,15 +2255,23 @@ fn test_x64_emit() {
// ========================================================
// CallUnknown
insns.push((Inst::call_unknown(RM::reg(rbp)), "FFD5", "call *%rbp"));
insns.push((Inst::call_unknown(RM::reg(r11)), "41FFD3", "call *%r11"));
insns.push((
Inst::call_unknown(RM::mem(Addr::imm_reg_reg_shift(321, rsi, rcx, 3))),
Inst::call_unknown(RegMem::reg(rbp)),
"FFD5",
"call *%rbp",
));
insns.push((
Inst::call_unknown(RegMem::reg(r11)),
"41FFD3",
"call *%r11",
));
insns.push((
Inst::call_unknown(RegMem::mem(Addr::imm_reg_reg_shift(321, rsi, rcx, 3))),
"FF94CE41010000",
"call *321(%rsi,%rcx,8)",
));
insns.push((
Inst::call_unknown(RM::mem(Addr::imm_reg_reg_shift(321, r10, rdx, 2))),
Inst::call_unknown(RegMem::mem(Addr::imm_reg_reg_shift(321, r10, rdx, 2))),
"41FF949241010000",
"call *321(%r10,%rdx,4)",
));
@@ -2192,15 +2294,19 @@ fn test_x64_emit() {
// ========================================================
// JmpUnknown
insns.push((Inst::jmp_unknown(RM::reg(rbp)), "FFE5", "jmp *%rbp"));
insns.push((Inst::jmp_unknown(RM::reg(r11)), "41FFE3", "jmp *%r11"));
insns.push((Inst::jmp_unknown(RegMem::reg(rbp)), "FFE5", "jmp *%rbp"));
insns.push((
Inst::jmp_unknown(RM::mem(Addr::imm_reg_reg_shift(321, rsi, rcx, 3))),
Inst::jmp_unknown(RegMem::reg(r11)),
"41FFE3",
"jmp *%r11",
));
insns.push((
Inst::jmp_unknown(RegMem::mem(Addr::imm_reg_reg_shift(321, rsi, rcx, 3))),
"FFA4CE41010000",
"jmp *321(%rsi,%rcx,8)",
));
insns.push((
Inst::jmp_unknown(RM::mem(Addr::imm_reg_reg_shift(321, r10, rdx, 2))),
Inst::jmp_unknown(RegMem::mem(Addr::imm_reg_reg_shift(321, r10, rdx, 2))),
"41FFA49241010000",
"jmp *321(%r10,%rdx,4)",
));
@@ -2209,32 +2315,32 @@ fn test_x64_emit() {
// XMM_RM_R
insns.push((
Inst::xmm_rm_r(SSE_Op::SSE_Addss, RM::reg(xmm1), w_xmm0),
Inst::xmm_rm_r(SseOpcode::Addss, RegMem::reg(xmm1), w_xmm0),
"F30F58C1",
"addss %xmm1, %xmm0",
));
insns.push((
Inst::xmm_rm_r(SSE_Op::SSE_Subss, RM::reg(xmm0), w_xmm1),
Inst::xmm_rm_r(SseOpcode::Subss, RegMem::reg(xmm0), w_xmm1),
"F30F5CC8",
"subss %xmm0, %xmm1",
));
insns.push((
Inst::xmm_rm_r(SSE_Op::SSE_Addss, RM::reg(xmm11), w_xmm13),
Inst::xmm_rm_r(SseOpcode::Addss, RegMem::reg(xmm11), w_xmm13),
"F3450F58EB",
"addss %xmm11, %xmm13",
));
insns.push((
Inst::xmm_rm_r(SSE_Op::SSE_Subss, RM::reg(xmm12), w_xmm1),
Inst::xmm_rm_r(SseOpcode::Subss, RegMem::reg(xmm12), w_xmm1),
"F3410F5CCC",
"subss %xmm12, %xmm1",
));
insns.push((
Inst::xmm_rm_r(
SSE_Op::SSE_Addss,
RM::mem(Addr::imm_reg_reg_shift(123, r10, rdx, 2)),
SseOpcode::Addss,
RegMem::mem(Addr::imm_reg_reg_shift(123, r10, rdx, 2)),
w_xmm0,
),
"F3410F5844927B",
@@ -2243,8 +2349,8 @@ fn test_x64_emit() {
insns.push((
Inst::xmm_rm_r(
SSE_Op::SSE_Subss,
RM::mem(Addr::imm_reg_reg_shift(321, r10, rax, 3)),
SseOpcode::Subss,
RegMem::mem(Addr::imm_reg_reg_shift(321, r10, rax, 3)),
w_xmm10,
),
"F3450F5C94C241010000",
@@ -2255,13 +2361,13 @@ fn test_x64_emit() {
// XMM_R_R
insns.push((
Inst::xmm_r_r(SSE_Op::SSE_Movss, xmm3, w_xmm2),
Inst::xmm_r_r(SseOpcode::Movss, xmm3, w_xmm2),
"F30F10D3",
"movss %xmm3, %xmm2",
));
insns.push((
Inst::xmm_r_r(SSE_Op::SSE2_Movsd, xmm4, w_xmm3),
Inst::xmm_r_r(SseOpcode::Movsd, xmm4, w_xmm3),
"F20F10DC",
"movsd %xmm4, %xmm3",
));