aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorXiaolin Zhao <zhaoxiaolin@loongson.cn>2025-05-13 10:50:51 +0800
committerabner chenc <chenguoqi@loongson.cn>2025-05-14 02:30:13 -0700
commitc62099cfac6b0fd46efbdab7205bb17597096472 (patch)
treee4ea3f78529872357e8b6fb3a1e23bb58719380b /src/cmd
parenta1c3e2f008267b976e69866b599b113399ad4724 (diff)
downloadgo-c62099cfac6b0fd46efbdab7205bb17597096472.tar.xz
cmd/intarnal/obj: add new assembly format for VANDV and VANDB on loong64
In order to make it easier to write in assembly and to be consistent with the usage of general instructions, a new assembly format is added for the instructions VANDV and VANDB. It also works for instructions XVAND{V,B}, [X]V{OR,XOR,NOR,ANDN,ORN}V and [X]V{OR,XOR,NOR}B. Change-Id: Ia75d607ac918950e58840ec627aaf0be45d837fe Reviewed-on: https://go-review.googlesource.com/c/go/+/671316 Reviewed-by: Cherry Mui <cherryyz@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/asm/internal/asm/testdata/loong64enc1.s20
-rw-r--r--src/cmd/internal/obj/loong64/asm.go4
2 files changed, 24 insertions, 0 deletions
diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s
index 083670f512..d5e9b6c899 100644
--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s
+++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s
@@ -547,12 +547,22 @@ lable2:
VNORV V1, V2, V3 // 43842771
VANDNV V1, V2, V3 // 43042871
VORNV V1, V2, V3 // 43842871
+ VANDV V1, V2 // 42042671
+ VORV V1, V2 // 42842671
+ VXORV V1, V2 // 42042771
+ VNORV V1, V2 // 42842771
+ VANDNV V1, V2 // 42042871
+ VORNV V1, V2 // 42842871
// VANDB,VORB,VXORB,VNORB
VANDB $0, V2, V3 // 4300d073
VORB $64, V2, V3 // 4300d573
VXORB $128, V2, V3 // 4300da73
VNORB $255, V2, V3 // 43fcdf73
+ VANDB $0, V2 // 4200d073
+ VORB $64, V2 // 4200d573
+ VXORB $128, V2 // 4200da73
+ VNORB $255, V2 // 42fcdf73
// XVANDV,XVORV,XVXORV,XVNORV,XVANDNV,XVORNV
XVANDV X1, X2, X3 // 43042675
@@ -561,12 +571,22 @@ lable2:
XVNORV X1, X2, X3 // 43842775
XVANDNV X1, X2, X3 // 43042875
XVORNV X1, X2, X3 // 43842875
+ XVANDV X1, X2 // 42042675
+ XVORV X1, X2 // 42842675
+ XVXORV X1, X2 // 42042775
+ XVNORV X1, X2 // 42842775
+ XVANDNV X1, X2 // 42042875
+ XVORNV X1, X2 // 42842875
// XVANDB,XVORB,XVXORB,XVNORB
XVANDB $0, X2, X3 // 4300d077
XVORB $1, X2, X3 // 4304d477
XVXORB $127, X2, X3 // 43fcd977
XVNORB $255, X2, X3 // 43fcdf77
+ XVANDB $0, X2 // 4200d077
+ XVORB $1, X2 // 4204d477
+ XVXORB $127, X2 // 42fcd977
+ XVNORB $255, X2 // 42fcdf77
// MOVV C_DCON12_0, r
MOVV $0x7a90000000000000, R4 // MOVV $8831558869273542656, R4 // 04a41e03
diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go
index 2f5cf94707..c92c6b01b2 100644
--- a/src/cmd/internal/obj/loong64/asm.go
+++ b/src/cmd/internal/obj/loong64/asm.go
@@ -92,9 +92,13 @@ var optab = []Optab{
{AVSEQB, C_S5CON, C_VREG, C_NONE, C_VREG, C_NONE, 22, 4, 0, 0},
{AXVSEQB, C_S5CON, C_XREG, C_NONE, C_XREG, C_NONE, 22, 4, 0, 0},
{AVANDV, C_VREG, C_VREG, C_NONE, C_VREG, C_NONE, 2, 4, 0, 0},
+ {AVANDV, C_VREG, C_NONE, C_NONE, C_VREG, C_NONE, 2, 4, 0, 0},
{AXVANDV, C_XREG, C_XREG, C_NONE, C_XREG, C_NONE, 2, 4, 0, 0},
+ {AXVANDV, C_XREG, C_NONE, C_NONE, C_XREG, C_NONE, 2, 4, 0, 0},
{AVANDB, C_U8CON, C_VREG, C_NONE, C_VREG, C_NONE, 23, 4, 0, 0},
+ {AVANDB, C_U8CON, C_NONE, C_NONE, C_VREG, C_NONE, 23, 4, 0, 0},
{AXVANDB, C_U8CON, C_XREG, C_NONE, C_XREG, C_NONE, 23, 4, 0, 0},
+ {AXVANDB, C_U8CON, C_NONE, C_NONE, C_XREG, C_NONE, 23, 4, 0, 0},
{AVADDB, C_VREG, C_VREG, C_NONE, C_VREG, C_NONE, 2, 4, 0, 0},
{AVADDB, C_VREG, C_NONE, C_NONE, C_VREG, C_NONE, 2, 4, 0, 0},