]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: add support for loong64 CRC32 instructions
authorXiaolin Zhao <zhaoxiaolin@loongson.cn>
Thu, 31 Oct 2024 07:11:05 +0000 (15:11 +0800)
committerabner chenc <chenguoqi@loongson.cn>
Fri, 1 Nov 2024 01:55:14 +0000 (01:55 +0000)
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>

src/cmd/asm/internal/asm/testdata/loong64enc1.s
src/cmd/internal/obj/loong64/a.out.go
src/cmd/internal/obj/loong64/anames.go
src/cmd/internal/obj/loong64/asm.go

index fd3cdcb75347dc7a2d14f2a6b948143d7d82668c..2239fe0c687a937d75ab115ab643bc782ad0743d 100644 (file)
@@ -208,6 +208,16 @@ lable2:
        MASKEQZ R4, R5, R6              // a6101300
        MASKNEZ R4, R5, R6              // a6901300
 
+       // CRC32
+       CRCWBW  R4, R5, R6              // a6102400
+       CRCWHW  R4, R5, R6              // a6902400
+       CRCWWW  R4, R5, R6              // a6102500
+       CRCWVW  R4, R5, R6              // a6902500
+       CRCCWBW R4, R5, R6              // a6102600
+       CRCCWHW R4, R5, R6              // a6902600
+       CRCCWWW R4, R5, R6              // a6102700
+       CRCCWVW R4, R5, R6              // a6902700
+
        MOVFD   F4, F5                  // 85241901
        MOVDF   F4, F5                  // 85181901
        MOVWF   F4, F5                  // 85101d01
index 6653b7fe988ac1ff7b8d88a919e7f43b102b0e4c..9470f9418c7737bda75855447fe25bba597311ca 100644 (file)
@@ -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
index 2cbf305196f49c3fc0d80bab0d82abee611ab71f..28566d15041192d4a032a1982e6dfbc55665b53c 100644 (file)
@@ -199,6 +199,14 @@ var Anames = []string{
        "BSTRINSV",
        "BSTRPICKW",
        "BSTRPICKV",
+       "CRCWBW",
+       "CRCWHW",
+       "CRCWWW",
+       "CRCWVW",
+       "CRCCWBW",
+       "CRCCWHW",
+       "CRCCWWW",
+       "CRCCWVW",
        "RDTIMELW",
        "RDTIMEHW",
        "RDTIMED",
index 985c054ececb6b00e277693385961ecb1703bed6..3f3a352ee11fe557c257743d38263f9daba199c1 100644 (file)
@@ -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: