Skip to content

Instantly share code, notes, and snippets.

@ivg
Created September 13, 2021 21:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ivg/7ceb427a4bc7b5dd80f4ee467ba963d8 to your computer and use it in GitHub Desktop.
Save ivg/7ceb427a4bc7b5dd80f4ee467ba963d8 to your computer and use it in GitHub Desktop.
the semantics of the stm thumb2 instruction
(declare (context (target arm)))
(in-package thumb)
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8 r9 r10))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8 r9))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5)
(stmdb_upd dst base r1 r2 r3 r4 r5))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4)
(stmdb_upd dst base r1 r2 r3 r4))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3)
(stmdb_upd dst base r1 r2 r3))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2)
(stmdb_upd dst base r1 r2))
(defun t2STMDB_UPD (dst base _pred _?
r1)
(stmdb_upd dst base r1))
(defmacro stmdb_upd (dst base regs)
(let ((len (length regs))
(stride (sizeof word-width))
(ptr (- base (* len stride))))
(store-registers ptr stride 0 regs)
(set$ dst ptr)))
(defmacro store-registers (base stride off reg)
(store-word (+ base (* stride off)) reg))
(defmacro store-registers (base stride off reg regs)
(prog
(store-registers base stride off reg)
(store-registers base stride (+ off 1) regs)))
(defmacro length (r) 1)
(defmacro length (_ rs) (+ 1 (length rs)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment