Merge SignExtendAlAh and SignExtendRaxRdx

This commit is contained in:
bjorn3
2020-09-08 13:14:14 +02:00
committed by Benjamin Bouvier
parent 3dcda164dc
commit 9428480230
4 changed files with 43 additions and 42 deletions

View File

@@ -716,20 +716,22 @@ pub(crate) fn emit(
}
}
Inst::SignExtendAlAh => {
sink.put1(0x66);
sink.put1(0x98);
}
Inst::SignExtendRaxRdx { size } => {
match size {
2 => sink.put1(0x66),
4 => {}
8 => sink.put1(0x48),
_ => unreachable!(),
Inst::SignExtendData { size } => match size {
1 => {
sink.put1(0x66);
sink.put1(0x98);
}
sink.put1(0x99);
}
2 => {
sink.put1(0x66);
sink.put1(0x99);
}
4 => sink.put1(0x99),
8 => {
sink.put1(0x48);
sink.put1(0x99);
}
_ => unreachable!(),
},
Inst::CheckedDivOrRemSeq {
kind,
@@ -825,10 +827,15 @@ pub(crate) fn emit(
sink.bind_label(do_op);
}
assert!(
*size > 1,
"CheckedDivOrRemSeq for i8 is not yet implemented"
);
// Fill in the high parts:
if kind.is_signed() {
// sign-extend the sign-bit of rax into rdx, for signed opcodes.
let inst = Inst::sign_extend_rax_to_rdx(*size);
let inst = Inst::sign_extend_data(*size);
inst.emit(sink, flags, state);
} else {
// zero for unsigned opcodes.