aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorXiaolin Zhao <zhaoxiaolin@loongson.cn>2024-10-31 15:11:05 +0800
committerabner chenc <chenguoqi@loongson.cn>2024-11-01 01:55:14 +0000
commit7240c6cb970bd395e7005988b4ce6af73a8e59c0 (patch)
treebaa12e9ff069476a820d81322e0d4db562d7a924 /src/cmd/internal/obj
parent3f694f73d0581b2f95054b4c5652a25b5d8e5116 (diff)
downloadgo-7240c6cb970bd395e7005988b4ce6af73a8e59c0.tar.xz
cmd/asm: add support for loong64 CRC32 instructions
This patch is a copy of CL 478595. Co-authored-by: WANG Xuerui <git@xen0n.name> Change-Id: Ifb6e8183c83a5dfe5dec84e173a74d5de62692a0 Reviewed-on: https://go-review.googlesource.com/c/go/+/623875 Reviewed-by: Carlos Amedee <carlos@golang.org> Reviewed-by: abner chenc <chenguoqi@loongson.cn> Reviewed-by: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/loong64/a.out.go10
-rw-r--r--src/cmd/internal/obj/loong64/anames.go8
-rw-r--r--src/cmd/internal/obj/loong64/asm.go25
3 files changed, 42 insertions, 1 deletions
diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go
index 6653b7fe98..9470f9418c 100644
--- a/src/cmd/internal/obj/loong64/a.out.go
+++ b/src/cmd/internal/obj/loong64/a.out.go
@@ -477,6 +477,16 @@ const (
ABSTRPICKW
ABSTRPICKV
+ // 2.2.9. CRC Check Instructions
+ ACRCWBW
+ ACRCWHW
+ ACRCWWW
+ ACRCWVW
+ ACRCCWBW
+ ACRCCWHW
+ ACRCCWWW
+ ACRCCWVW
+
// 2.2.10. Other Miscellaneous Instructions
ARDTIMELW
ARDTIMEHW
diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go
index 2cbf305196..28566d1504 100644
--- a/src/cmd/internal/obj/loong64/anames.go
+++ b/src/cmd/internal/obj/loong64/anames.go
@@ -199,6 +199,14 @@ var Anames = []string{
"BSTRINSV",
"BSTRPICKW",
"BSTRPICKV",
+ "CRCWBW",
+ "CRCWHW",
+ "CRCWWW",
+ "CRCWVW",
+ "CRCCWBW",
+ "CRCCWHW",
+ "CRCCWWW",
+ "CRCCWVW",
"RDTIMELW",
"RDTIMEHW",
"RDTIMED",
diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go
index 985c054ece..3f3a352ee1 100644
--- a/src/cmd/internal/obj/loong64/asm.go
+++ b/src/cmd/internal/obj/loong64/asm.go
@@ -1234,6 +1234,14 @@ func buildop(ctxt *obj.Link) {
case AMASKEQZ:
opset(AMASKNEZ, r0)
+ opset(ACRCWBW, r0)
+ opset(ACRCWHW, r0)
+ opset(ACRCWWW, r0)
+ opset(ACRCWVW, r0)
+ opset(ACRCCWBW, r0)
+ opset(ACRCCWHW, r0)
+ opset(ACRCCWWW, r0)
+ opset(ACRCCWVW, r0)
case ANOOP:
opset(obj.AUNDEF, r0)
@@ -1949,7 +1957,22 @@ func (c *ctxt0) oprrr(a obj.As) uint32 {
return 0x45 << 15 // mod.d
case AREMVU:
return 0x47 << 15 // mod.du
-
+ case ACRCWBW:
+ return 0x48 << 15 // crc.w.b.w
+ case ACRCWHW:
+ return 0x49 << 15 // crc.w.h.w
+ case ACRCWWW:
+ return 0x4a << 15 // crc.w.w.w
+ case ACRCWVW:
+ return 0x4b << 15 // crc.w.d.w
+ case ACRCCWBW:
+ return 0x4c << 15 // crcc.w.b.w
+ case ACRCCWHW:
+ return 0x4d << 15 // crcc.w.h.w
+ case ACRCCWWW:
+ return 0x4e << 15 // crcc.w.w.w
+ case ACRCCWVW:
+ return 0x4f << 15 // crcc.w.d.w
case AJMP:
return 0x13 << 26 // jirl r0, rj, 0
case AJAL: