aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhi An Ng <zhin@google.com>2022-02-03 09:09:59 -0800
committerXNNPACK Team <xnnpack-github-robot@google.com>2022-02-03 09:11:16 -0800
commit9e51ad645e438dadee87d997a4a6756be1cc7bfe (patch)
treebb92fa693104084aa3f179fd325bd34c29526524
parent1d5c616f65d1206bd9823fea53daa174650577da (diff)
downloadXNNPACK-9e51ad645e438dadee87d997a4a6756be1cc7bfe.tar.gz
Implement cmp (x registers) for aarch64 assembler
PiperOrigin-RevId: 426161081
-rw-r--r--src/jit/aarch64-assembler.cc4
-rw-r--r--src/xnnpack/aarch64-assembler.h1
-rw-r--r--test/aarch64-assembler.cc2
3 files changed, 7 insertions, 0 deletions
diff --git a/src/jit/aarch64-assembler.cc b/src/jit/aarch64-assembler.cc
index 62eb81c84..b2bf11ea5 100644
--- a/src/jit/aarch64-assembler.cc
+++ b/src/jit/aarch64-assembler.cc
@@ -241,6 +241,10 @@ void Assembler::cmp(XRegister xn, uint16_t imm12) {
emit32(0xF100001F | imm12 << 10 | rn(xn));
}
+void Assembler::cmp(XRegister xn, XRegister xm) {
+ emit32(0xEB00001F | rm(xm) | rn(xn));
+}
+
void Assembler::csel(XRegister xd, XRegister xn, XRegister xm, Condition c) {
emit32(0x9A800000 | rm(xm) | c << 12 | rn(xn) | rd(xd));
}
diff --git a/src/xnnpack/aarch64-assembler.h b/src/xnnpack/aarch64-assembler.h
index 745d27d76..084746db2 100644
--- a/src/xnnpack/aarch64-assembler.h
+++ b/src/xnnpack/aarch64-assembler.h
@@ -332,6 +332,7 @@ class Assembler : public AssemblerBase {
void b_lo(Label& l) { return b(kLO, l); }
void b_ne(Label& l) { return b(kNE, l); }
void cmp(XRegister xn, uint16_t imm12);
+ void cmp(XRegister xn, XRegister xm);
void csel(XRegister xd, XRegister xn, XRegister xm, Condition c);
void ldp(XRegister xt1, XRegister xt2, MemOperand xn);
void ldp(XRegister xt1, XRegister xt2, MemOperand xn, int32_t imm);
diff --git a/test/aarch64-assembler.cc b/test/aarch64-assembler.cc
index ceb1282a0..cfd7444c3 100644
--- a/test/aarch64-assembler.cc
+++ b/test/aarch64-assembler.cc
@@ -34,6 +34,8 @@ TEST(AArch64Assembler, BaseInstructionEncoding) {
CHECK_ENCODING(0xF100081F, a.cmp(x0, 2));
EXPECT_ERROR(Error::kInvalidOperand, a.cmp(x0, 4096));
+ CHECK_ENCODING(0xEB0C02DF, a.cmp(x22, x12));
+
CHECK_ENCODING(0x9A8F322E, a.csel(x14, x17, x15, kLO));
CHECK_ENCODING(0xA9403FEE, a.ldp(x14, x15, mem[sp]));