Go asm syntax:
ANDN/ORN RK, RJ, RD
or ANDN/ORN RK, RD
Equivalent platform assembler syntax:
andn/orn rd, rj, rk
or andn/orn rd, rd, rk
Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html
Change-Id: I6d240ecae8f9443811ca450aed3574f13f0f4a81
Reviewed-on: https://go-review.googlesource.com/c/go/+/610475
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Commit-Queue: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: abner chenc <chenguoqi@loongson.cn>
BREAK // 00002a00
UNDEF // 00002a00
+ ANDN R4, R5, R6 // a6901600
+ ANDN R4, R5 // a5901600
+ ORN R4, R5, R6 // a6101600
+ ORN R4, R5 // a5101600
+
// mul
MUL R4, R5 // a5101c00
MUL R4, R5, R6 // a6101c00
AMOVVF
AMOVVD
+ // 2.2.1.8
+ AORN
+ AANDN
+
// 2.2.7. Atomic Memory Access Instructions
AAMSWAPB
AAMSWAPH
"MOVDV",
"MOVVF",
"MOVVD",
+ "ORN",
+ "ANDN",
"AMSWAPB",
"AMSWAPH",
"AMSWAPW",
case AAND:
opset(AOR, r0)
opset(AXOR, r0)
+ opset(AORN, r0)
+ opset(AANDN, r0)
case ABEQ:
opset(ABNE, r0)
return 0x2a << 15
case AXOR:
return 0x2b << 15
+ case AORN:
+ return 0x2c << 15 // orn
+ case AANDN:
+ return 0x2d << 15 // andn
case ASUB:
return 0x22 << 15
case ASUBU, ANEGW: