diff options
author | Zhi An Ng <zhin@google.com> | 2022-02-03 09:32:44 -0800 |
---|---|---|
committer | XNNPACK Team <xnnpack-github-robot@google.com> | 2022-02-03 09:33:59 -0800 |
commit | 4decc8e6162413339aa1da8979e9feae09cabc00 (patch) | |
tree | 245c5209b7c00f8c8264de4dabba6960c2fe41c8 | |
parent | 8ceeebe986c3b74736b201c398db3bb330832e6d (diff) | |
download | XNNPACK-4decc8e6162413339aa1da8979e9feae09cabc00.tar.gz |
Implement mov (x registers) for aarch64 assembler
PiperOrigin-RevId: 426166078
-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 bc336df77..5e062ef42 100644 --- a/src/jit/aarch64-assembler.cc +++ b/src/jit/aarch64-assembler.cc @@ -278,6 +278,10 @@ void Assembler::ldr(XRegister xt, MemOperand xn) { emit32(0xF9400000 | imm >> 3 << 10 | rn(xn.base) | xt.code); } +void Assembler::mov(XRegister xd, XRegister xn) { + emit32(0xAA0003E0 | rm(xn) | rd(xd)); +} + void Assembler::prfm(PrefetchOp prfop, MemOperand xn) { if (xn.offset < 0 || xn.offset > kImm12Max) { error_ = Error::kInvalidOperand; diff --git a/src/xnnpack/aarch64-assembler.h b/src/xnnpack/aarch64-assembler.h index e966fe478..c19585686 100644 --- a/src/xnnpack/aarch64-assembler.h +++ b/src/xnnpack/aarch64-assembler.h @@ -337,6 +337,7 @@ class Assembler : public AssemblerBase { void ldp(XRegister xt1, XRegister xt2, MemOperand xn); void ldp(XRegister xt1, XRegister xt2, MemOperand xn, int32_t imm); void ldr(XRegister xt, MemOperand xn); + void mov(XRegister xd, XRegister xn); void prfm(PrefetchOp prfop, MemOperand xn); void ret(); void stp(XRegister xt1, XRegister xt2, MemOperand xn); diff --git a/test/aarch64-assembler.cc b/test/aarch64-assembler.cc index 2add642f9..156210e7c 100644 --- a/test/aarch64-assembler.cc +++ b/test/aarch64-assembler.cc @@ -55,6 +55,8 @@ TEST(AArch64Assembler, BaseInstructionEncoding) { EXPECT_ERROR(Error::kInvalidOperand, a.ldr(x8, mem[sp, 32768])); EXPECT_ERROR(Error::kInvalidOperand, a.ldr(x8, MemOperand(sp, 16, AddressingMode::kPostIndex))); + CHECK_ENCODING(0xAA0303E9, a.mov(x9, x3)); + CHECK_ENCODING(0xF98000A0, a.prfm(kPLDL1KEEP, mem[x5])); CHECK_ENCODING(0xF98020A0, a.prfm(kPLDL1KEEP, mem[x5, 64])); EXPECT_ERROR(Error::kInvalidOperand, a.prfm(kPLDL1KEEP, mem[x5, -8])); |