Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missing empty bin #19

Merged
merged 9 commits into from
Jul 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions plugins/arm/semantics/aarch64-arithmetic.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@

(defun SMADDLrrr (rd rn rm ra) (set$ rd (cast-signed 64 (+ ra (* (cast-signed 64 rn) (cast-signed 64 rm))))))

(defun UMSUBLrrr (rd rn rm ra) (set$ rd (cast-low 64 (- ra (* (cast-signed 64 rn) (cast-signed 64 rm))))))

(defun SMSUBLrrr (rd rn rm ra) (set$ rd (cast-signed 64 (- ra (* (cast-signed 64 rn) (cast-signed 64 rm))))))

(defun UMULHrr (rd rn rm)
"multiplies rn and rm together and stores the high 64 bits of the resulting
128-bit value to the register rd"
Expand Down
31 changes: 31 additions & 0 deletions plugins/arm/semantics/aarch64-data-movement.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,37 @@
"(LDURBBi wt base simm) loads a byte from the address calculated from a base register and signed immediate offset and stores it in the 32 bit destination register. NOTE: does not HaveMTE2Ext(), SetTagCheckedInstruction(), CheckSPAlignment()"
(setw wt (load-byte (+ base simm))))

;; LDURH

(defun LDURHHi (rt rn simm)
(setw rt (cast-unsigned 32 (load-dbyte (+ rn simm)))))

;; LDURSB

(defun LDURSBWi (rt rn simm)
"LDURSBWi loads a byte from the address (rn + simm) and sign-extends it to write it to rt"
(setw rt (cast-signed 32 (load-byte (+ rn simm)))))

(defun LDURSBXi (rt rn simm)
"LDURSBXi loads a byte from the address (rn + simm) and sign-extends it to write it to rt"
(set$ rt (cast-signed 64 (load-byte (+ rn simm)))))

;; LDURSH

(defun LDURSHWi (rt rn simm)
"LDURSBWi loads a halfword from the address (rn + simm) and sign-extends it to write it to rt"
(setw rt (cast-signed 32 (load-dbyte (+ rn simm)))))

(defun LDURSHXi (rt rn simm)
"LDURSBXi loads a halfword from the address (rn + simm) and sign-extends it to write it to rt"
(set$ rt (cast-signed 64 (load-dbyte (+ rn simm)))))

;; LDURSW

(defun LDURSWi (rt rn simm)
"LDURSBXi loads a word from the address (rn + simm) and sign-extends it to write it to rt"
(set$ rt (cast-signed 64 (load-hword (+ rn simm)))))

;; LDUR

(defmacro LDUR*i (rt base simm setf mem-load)
Expand Down
8 changes: 8 additions & 0 deletions plugins/arm/semantics/aarch64-helper.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@

(defun word () (word-width))

(defun _reverse-bits (bits i)
(if (> i 0)
(concat (_reverse-bits bits (- i 1)) (select i bits))
(select i bits)))

(defun reverse-bits (bits)
(_reverse-bits bits (- (word-width bits) 1)))

(defun shift-encoded (rm off)
"(shift-encoded rm off) decodes the 8-bit shift value
into its type and offset, and shifts rm accordingly."
Expand Down
3 changes: 3 additions & 0 deletions plugins/arm/semantics/aarch64-logical.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,6 @@

(defun RORVXr (rd rn rm) (SHIFT*r set$ rotate-right 64 rd rn rm))
(defun RORVWr (rd rn rm) (SHIFT*r setw rotate-right 32 rd rn rm))

(defun RBITXr (rd rn) (set$ rd (reverse-bits rn)))
(defun RBITWr (rd rn) (setw rd (reverse-bits rn)))
2 changes: 1 addition & 1 deletion plugins/arm/semantics/aarch64-special.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@
(intrinsic 'undefined-instruction))

(defun BRK (option)
(intrinsic (symbol-concat 'software-breakpoint- (bitvec-to-symbol option '0x))))
(intrinsic 'software-breakpoint option))