From 7f6bb99e08f135fcf067ef71da9f11c872ab7993 Mon Sep 17 00:00:00 2001 From: mRnea Date: Tue, 30 Jul 2024 22:38:29 +0300 Subject: added bit shifts (<< >>), bitand (&), bitor (|), rot, over, swap ops --- assembly.lisp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'assembly.lisp') diff --git a/assembly.lisp b/assembly.lisp index 1ddd326..e4582de 100644 --- a/assembly.lisp +++ b/assembly.lisp @@ -147,6 +147,58 @@ (:write ("pop ~a" (aref call-regs i))) (finally (:write "syscall")))) +;;; (rbx rax -- rbx rax rbx) +(defop üst () + "pop rax" + "pop rbx" + "push rbx" + "push rax" + "push rbx") + +;;; (rcx rbx rax -- rbx rax rcx) +(defop rot () + "pop rax" + "pop rbx" + "pop rcx" + "push rbx" + "push rax" + "push rcx") + +;;; (rbx rax -- rax rbx) +(defop değiş () + "pop rax" + "pop rbx" + "push rax" + "push rbx") + +;;; (rbx rcx -- (:shl rbx cl)) +(defop << () + "pop rcx" + "pop rbx" + "shl rbx, cl" + "push rbx") + +;;; (rbx rcx -- (:shr rbx cl)) +(defop >> () + "pop rcx" + "pop rbx" + "shr rbx, cl" + "push rbx") + +;;; (rbx rcx -- (:or rbx cl)) +(defop "|" () + "pop rax" + "pop rbx" + "or rbx, rax" + "push rbx") + +;;; (rbx rcx -- (:and rbx cl)) +(defop & () + "pop rax" + "pop rbx" + "and rbx, rax" + "push rbx") + (defun gen-header (op str) (format str " ;; -- ~s --~%" op)) -- cgit v1.2.3