aboutsummaryrefslogtreecommitdiffstats
path: root/yjit/src/asm/arm64/arg/condition.rs
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2022-06-22 12:27:59 -0400
committerTakashi Kokubun <takashikkbn@gmail.com>2022-08-29 08:46:58 -0700
commitb272c57f27628ab114206c777d5b274713d31079 (patch)
tree4f490b317586ebbfc46d2142c4bde2fdb09f45e2 /yjit/src/asm/arm64/arg/condition.rs
parentd9163280782086b57119abc9478580a6b3efd2c3 (diff)
downloadruby-b272c57f27628ab114206c777d5b274713d31079.tar.gz
LSL, LSR, B.cond (https://github.com/Shopify/ruby/pull/303)
* LSL and LSR * B.cond * Move A64 files around to make more sense * offset -> byte_offset for bcond
Diffstat (limited to 'yjit/src/asm/arm64/arg/condition.rs')
-rw-r--r--yjit/src/asm/arm64/arg/condition.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/yjit/src/asm/arm64/arg/condition.rs b/yjit/src/asm/arm64/arg/condition.rs
new file mode 100644
index 0000000000..db269726d7
--- /dev/null
+++ b/yjit/src/asm/arm64/arg/condition.rs
@@ -0,0 +1,20 @@
+/// Various instructions in A64 can have condition codes attached. This enum
+/// includes all of the various kinds of conditions along with their respective
+/// encodings.
+pub enum Condition {
+ EQ = 0b0000, // equal to
+ NE = 0b0001, // not equal to
+ CS = 0b0010, // carry set (alias for HS)
+ CC = 0b0011, // carry clear (alias for LO)
+ MI = 0b0100, // minus, negative
+ PL = 0b0101, // positive or zero
+ VS = 0b0110, // signed overflow
+ VC = 0b0111, // no signed overflow
+ HI = 0b1000, // greater than (unsigned)
+ LS = 0b1001, // less than or equal to (unsigned)
+ GE = 0b1010, // greater than or equal to (signed)
+ LT = 0b1011, // less than (signed)
+ GT = 0b1100, // greater than (signed)
+ LE = 0b1101, // less than or equal to (signed)
+ AL = 0b1110, // always
+}