aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/insn.rs
diff options
context:
space:
mode:
authorJohannes Stoelp <johannes.stoelp@gmail.com>2024-03-18 22:58:34 +0100
committerJohannes Stoelp <johannes.stoelp@gmail.com>2024-03-18 22:58:34 +0100
commitf0b70fe1774a0da0cd6148fb28b933d6dfb122f8 (patch)
tree8b263f1cb3f1bc1861824366ec00c3ceee04bae2 /src/insn.rs
parentd65d1327459a5f3866c8803fb1d9fbdb2de96f75 (diff)
downloadjuicebox-asm-f0b70fe1774a0da0cd6148fb28b933d6dfb122f8.tar.gz
juicebox-asm-f0b70fe1774a0da0cd6148fb28b933d6dfb122f8.zip
asm: add cmovnz/cmovz instructions
Diffstat (limited to 'src/insn.rs')
-rw-r--r--src/insn.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/insn.rs b/src/insn.rs
index 60004d2..c02206c 100644
--- a/src/insn.rs
+++ b/src/insn.rs
@@ -2,6 +2,8 @@
mod add;
mod call;
+mod cmovnz;
+mod cmovz;
mod cmp;
mod dec;
mod jmp;
@@ -26,6 +28,20 @@ pub trait Call<T> {
fn call(&mut self, op1: T);
}
+pub trait Cmovnz<T, U> {
+ /// Emit a (conditional) move if not zero instruction.
+ ///
+ /// Move is only commited if (ZF=0).
+ fn cmovnz(&mut self, op1: T, op2: U);
+}
+
+pub trait Cmovz<T, U> {
+ /// Emit a (conditional) move if zero instruction.
+ ///
+ /// Move is only commited if (ZF=1).
+ fn cmovz(&mut self, op1: T, op2: U);
+}
+
/// Trait for [`cmp`](https://www.felixcloutier.com/x86/cmp) instruction kinds.
pub trait Cmp<T, U> {
/// Emit a compare instruction.