mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 08:34:33 +00:00
refactor set_reg64_help args
This commit is contained in:
parent
eec8ad7112
commit
fe4e574cf9
1 changed files with 9 additions and 9 deletions
|
@ -1493,7 +1493,7 @@ fn neg_reg64(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg) {
|
||||||
|
|
||||||
// helper function for `set*` instructions
|
// helper function for `set*` instructions
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn set_reg64_help(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg, value: u8) {
|
fn set_reg64_help(op_code: u8, buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg) {
|
||||||
// XOR needs 3 bytes, actual SETE instruction need 3 or 4 bytes
|
// XOR needs 3 bytes, actual SETE instruction need 3 or 4 bytes
|
||||||
buf.reserve(7);
|
buf.reserve(7);
|
||||||
|
|
||||||
|
@ -1501,10 +1501,10 @@ fn set_reg64_help(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg, value: u8) {
|
||||||
let reg_mod = reg as u8 % 8;
|
let reg_mod = reg as u8 % 8;
|
||||||
use X86_64GeneralReg::*;
|
use X86_64GeneralReg::*;
|
||||||
match reg {
|
match reg {
|
||||||
RAX | RCX | RDX | RBX => buf.extend(&[0x0F, value, 0xC0 + reg_mod]),
|
RAX | RCX | RDX | RBX => buf.extend(&[0x0F, op_code, 0xC0 + reg_mod]),
|
||||||
RSP | RBP | RSI | RDI => buf.extend(&[REX, 0x0F, value, 0xC0 + reg_mod]),
|
RSP | RBP | RSI | RDI => buf.extend(&[REX, 0x0F, op_code, 0xC0 + reg_mod]),
|
||||||
R8 | R9 | R10 | R11 | R12 | R13 | R14 | R15 => {
|
R8 | R9 | R10 | R11 | R12 | R13 | R14 | R15 => {
|
||||||
buf.extend(&[REX + 1, 0x0F, value, 0xC0 + reg_mod])
|
buf.extend(&[REX + 1, 0x0F, op_code, 0xC0 + reg_mod])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1516,19 +1516,19 @@ fn set_reg64_help(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg, value: u8) {
|
||||||
/// `SETE r/m64` -> Set Byte on Condition - zero/equal (ZF=1)
|
/// `SETE r/m64` -> Set Byte on Condition - zero/equal (ZF=1)
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn sete_reg64(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg) {
|
fn sete_reg64(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg) {
|
||||||
set_reg64_help(buf, reg, 0x94);
|
set_reg64_help(0x94, buf, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// `SETNE r/m64` -> Set byte if not equal (ZF=0).
|
/// `SETNE r/m64` -> Set byte if not equal (ZF=0).
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn setne_reg64(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg) {
|
fn setne_reg64(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg) {
|
||||||
set_reg64_help(buf, reg, 0x95);
|
set_reg64_help(0x95, buf, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// `SETL r/m64` -> Set byte if less (SF≠ OF).
|
/// `SETL r/m64` -> Set byte if less (SF≠ OF).
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn setl_reg64(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg) {
|
fn setl_reg64(buf: &mut Vec<'_, u8>, reg: X86_64GeneralReg) {
|
||||||
set_reg64_help(buf, reg, 0x9c);
|
set_reg64_help(0x9c, buf, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// `RET` -> Near return to calling procedure.
|
/// `RET` -> Near return to calling procedure.
|
||||||
|
@ -2100,7 +2100,7 @@ mod tests {
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
set_reg64_help(&mut buf, reg, 0x94); // sete_reg64
|
set_reg64_help(0x94, &mut buf, reg); // sete_reg64
|
||||||
assert_eq!(expected, &buf[..]);
|
assert_eq!(expected, &buf[..]);
|
||||||
|
|
||||||
// tests for 8 bytes in the output buffer
|
// tests for 8 bytes in the output buffer
|
||||||
|
@ -2125,7 +2125,7 @@ mod tests {
|
||||||
),
|
),
|
||||||
] {
|
] {
|
||||||
buf.clear();
|
buf.clear();
|
||||||
set_reg64_help(&mut buf, *reg, 0x94); // sete_reg64
|
set_reg64_help(0x94, &mut buf, *reg); // sete_reg64
|
||||||
assert_eq!(expected, &buf[..]);
|
assert_eq!(expected, &buf[..]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue