From 608b6d5269ab9ae751f3d68ab567379df9b07bea Mon Sep 17 00:00:00 2001 From: brunph Date: Sun, 7 Jun 2026 14:50:41 +0200 Subject: [PATCH] added more operations --- src/striga/x86/control.py | 38 ++++++++++++++++++++++++++++++++++++++ src/striga/x86/data.py | 11 +++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/striga/x86/control.py b/src/striga/x86/control.py index 5d58f03..c665bf0 100644 --- a/src/striga/x86/control.py +++ b/src/striga/x86/control.py @@ -393,6 +393,31 @@ def syscall(sem: Semantics): return [Successor(sem.insn.address, sem.const64(fallthrough))] +@semantic +def stc(sem: Semantics): + sem.flag_write("cf", sem.i1.constant(1)) + + +@semantic +def clc(sem: Semantics): + sem.flag_write("cf", sem.i1.constant(0)) + + +@semantic +def int_(sem: Semantics): + sem.ir.ret_void() + return [] + + +@semantic +def cmc(sem: Semantics): + sem.flag_write("cf", bool_not(sem, sem.flag_read("cf"))) + + +@semantic +def int3(sem: Semantics): + sem.ir.ret_void() + return [] @semantic def nop(sem: Semantics): pass @@ -401,3 +426,16 @@ def nop(sem: Semantics): @semantic def pause(sem: Semantics): pass +@semantic +def lfence(sem: Semantics): + pass + + +@semantic +def mfence(sem: Semantics): + pass + + +@semantic +def sfence(sem: Semantics): + pass diff --git a/src/striga/x86/data.py b/src/striga/x86/data.py index 99ab850..f008f03 100644 --- a/src/striga/x86/data.py +++ b/src/striga/x86/data.py @@ -148,6 +148,17 @@ def cqo(sem: Semantics): sem.reg_write("rdx", sem.ir.ashr(rax, sem.const64(63))) +@semantic +def bswap(sem: Semantics): + value = sem.op_read(0) + width = value.type.int_width + assert width in (32, 64) + + intrinsic = sem.module.get_intrinsic_declaration( + lookup_intrinsic_id(f"llvm.bswap.i{width}"), + [value.type], + ) + sem.op_write(0, sem.ir.call(intrinsic, [value])) @semantic def xchg(sem: Semantics): src = sem.op_read(1)