diff options
author | Zhi An Ng <zhin@google.com> | 2022-02-03 09:09:59 -0800 |
---|---|---|
committer | XNNPACK Team <xnnpack-github-robot@google.com> | 2022-02-03 09:11:16 -0800 |
commit | 9e51ad645e438dadee87d997a4a6756be1cc7bfe (patch) | |
tree | bb92fa693104084aa3f179fd325bd34c29526524 | |
parent | 1d5c616f65d1206bd9823fea53daa174650577da (diff) | |
download | XNNPACK-9e51ad645e438dadee87d997a4a6756be1cc7bfe.tar.gz |
Implement cmp (x registers) for aarch64 assembler
PiperOrigin-RevId: 426161081
-rw-r--r-- | src/jit/aarch64-assembler.cc | 4 | ||||
-rw-r--r-- | src/xnnpack/aarch64-assembler.h | 1 | ||||
-rw-r--r-- | test/aarch64-assembler.cc | 2 |
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])); |