summaryrefslogtreecommitdiff
path: root/assembly.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'assembly.lisp')
-rw-r--r--assembly.lisp52
1 files changed, 52 insertions, 0 deletions
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))