]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/loong64: add support for {V,XV}SET{EQ,NE}Z.V series instructions
authorlimeidan <limeidan@loongson.cn>
Thu, 10 Apr 2025 01:59:21 +0000 (09:59 +0800)
committerabner chenc <chenguoqi@loongson.cn>
Tue, 15 Apr 2025 11:54:50 +0000 (04:54 -0700)
Change-Id: If3794dfde3ff461662c8a493ff51d0c779e81bca
Reviewed-on: https://go-review.googlesource.com/c/go/+/664795
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.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 b557625ff3fbfc567187eaf2cba888295e7d88d3..ad0ffa33d68c7ba0cb75b82465dac4894eac17e7 100644 (file)
@@ -937,3 +937,26 @@ lable2:
        XVSHUF4IV       $0, X1, X2      // 22009c77
        XVSHUF4IV       $8, X1, X2      // 22209c77
        XVSHUF4IV       $15, X1, X2     // 223c9c77
+
+       // [X]VSETEQZ.V, [X]VSETNEZ.V
+       VSETEQV         V1, FCC0        // 20989c72
+       VSETNEV         V1, FCC0        // 209c9c72
+       XVSETEQV        X1, FCC0        // 20989c76
+       XVSETNEV        X1, FCC0        // 209c9c76
+       // [X]VSETANYEQZ.{B/H/W/D} instructions
+       VSETANYEQB      V1, FCC0        // 20a09c72
+       VSETANYEQH      V1, FCC0        // 20a49c72
+       VSETANYEQW      V1, FCC0        // 20a89c72
+       VSETANYEQV      V1, FCC0        // 20ac9c72
+       VSETALLNEB      V1, FCC0        // 20b09c72
+       VSETALLNEH      V1, FCC0        // 20b49c72
+       VSETALLNEW      V1, FCC0        // 20b89c72
+       VSETALLNEV      V1, FCC0        // 20bc9c72
+       XVSETANYEQB     X1, FCC0        // 20a09c76
+       XVSETANYEQH     X1, FCC0        // 20a49c76
+       XVSETANYEQW     X1, FCC0        // 20a89c76
+       XVSETANYEQV     X1, FCC0        // 20ac9c76
+       XVSETALLNEB     X1, FCC0        // 20b09c76
+       XVSETALLNEH     X1, FCC0        // 20b49c76
+       XVSETALLNEW     X1, FCC0        // 20b89c76
+       XVSETALLNEV     X1, FCC0        // 20bc9c76
index a3e81ba5319cbbcd6d93b3c0dc9f9dba74db0f60..4bef470c86704a86648d3ea52e2753ea5170c062 100644 (file)
@@ -1019,6 +1019,27 @@ const (
        AXVSHUF4IW
        AXVSHUF4IV
 
+       AVSETEQV
+       AVSETNEV
+       AVSETANYEQB
+       AVSETANYEQH
+       AVSETANYEQW
+       AVSETANYEQV
+       AVSETALLNEB
+       AVSETALLNEH
+       AVSETALLNEW
+       AVSETALLNEV
+       AXVSETEQV
+       AXVSETNEV
+       AXVSETANYEQB
+       AXVSETANYEQH
+       AXVSETANYEQW
+       AXVSETANYEQV
+       AXVSETALLNEB
+       AXVSETALLNEH
+       AXVSETALLNEW
+       AXVSETALLNEV
+
        ALAST
 
        // aliases
index 8e656c844a166a13b1c14366b2c8bb07b372de52..d50c29a9f9d30691c900b1588946ea1ddfba7f16 100644 (file)
@@ -513,5 +513,25 @@ var Anames = []string{
        "XVSHUF4IH",
        "XVSHUF4IW",
        "XVSHUF4IV",
+       "VSETEQV",
+       "VSETNEV",
+       "VSETANYEQB",
+       "VSETANYEQH",
+       "VSETANYEQW",
+       "VSETANYEQV",
+       "VSETALLNEB",
+       "VSETALLNEH",
+       "VSETALLNEW",
+       "VSETALLNEV",
+       "XVSETEQV",
+       "XVSETNEV",
+       "XVSETANYEQB",
+       "XVSETANYEQH",
+       "XVSETANYEQW",
+       "XVSETANYEQV",
+       "XVSETALLNEB",
+       "XVSETALLNEH",
+       "XVSETALLNEW",
+       "XVSETALLNEV",
        "LAST",
 }
index 401cab11cc17dc0e9e936b387e007ee51723f103..1254695be8c806219444f7ceb3fe510d3679a8cc 100644 (file)
@@ -144,6 +144,8 @@ var optab = []Optab{
        {AMOVD, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0},
        {AVPCNTB, C_VREG, C_NONE, C_NONE, C_VREG, C_NONE, 9, 4, 0, 0},
        {AXVPCNTB, C_XREG, C_NONE, C_NONE, C_XREG, C_NONE, 9, 4, 0, 0},
+       {AVSETEQV, C_VREG, C_NONE, C_NONE, C_FCCREG, C_NONE, 9, 4, 0, 0},
+       {AXVSETEQV, C_XREG, C_NONE, C_NONE, C_FCCREG, C_NONE, 9, 4, 0, 0},
 
        {AFMADDF, C_FREG, C_FREG, C_NONE, C_FREG, C_NONE, 37, 4, 0, 0},
        {AFMADDF, C_FREG, C_FREG, C_FREG, C_FREG, C_NONE, 37, 4, 0, 0},
@@ -1812,6 +1814,29 @@ func buildop(ctxt *obj.Link) {
                        opset(AXVSRLV, r0)
                        opset(AXVSRAV, r0)
                        opset(AXVROTRV, r0)
+
+               case AVSETEQV:
+                       opset(AVSETNEV, r0)
+                       opset(AVSETANYEQB, r0)
+                       opset(AVSETANYEQH, r0)
+                       opset(AVSETANYEQW, r0)
+                       opset(AVSETANYEQV, r0)
+                       opset(AVSETALLNEB, r0)
+                       opset(AVSETALLNEH, r0)
+                       opset(AVSETALLNEW, r0)
+                       opset(AVSETALLNEV, r0)
+
+               case AXVSETEQV:
+                       opset(AXVSETNEV, r0)
+                       opset(AXVSETANYEQB, r0)
+                       opset(AXVSETANYEQH, r0)
+                       opset(AXVSETANYEQW, r0)
+                       opset(AXVSETANYEQV, r0)
+                       opset(AXVSETALLNEB, r0)
+                       opset(AXVSETALLNEH, r0)
+                       opset(AXVSETALLNEW, r0)
+                       opset(AXVSETALLNEV, r0)
+
                }
        }
 }
@@ -3555,6 +3580,46 @@ func (c *ctxt0) oprr(a obj.As) uint32 {
                return 0x1da70e << 10 // xvneg.w
        case AXVNEGV:
                return 0x1da70f << 10 // xvneg.d
+       case AVSETEQV:
+               return 0x1ca726<<10 | 0x0<<3 // vseteqz.v
+       case AVSETNEV:
+               return 0x1ca727<<10 | 0x0<<3 // vsetnez.v
+       case AVSETANYEQB:
+               return 0x1ca728<<10 | 0x0<<3 // vsetanyeqz.b
+       case AVSETANYEQH:
+               return 0x1ca729<<10 | 0x0<<3 // vsetanyeqz.h
+       case AVSETANYEQW:
+               return 0x1ca72a<<10 | 0x0<<3 // vsetanyeqz.w
+       case AVSETANYEQV:
+               return 0x1ca72b<<10 | 0x0<<3 // vsetanyeqz.d
+       case AVSETALLNEB:
+               return 0x1ca72c<<10 | 0x0<<3 // vsetallnez.b
+       case AVSETALLNEH:
+               return 0x1ca72d<<10 | 0x0<<3 // vsetallnez.h
+       case AVSETALLNEW:
+               return 0x1ca72e<<10 | 0x0<<3 // vsetallnez.w
+       case AVSETALLNEV:
+               return 0x1ca72f<<10 | 0x0<<3 // vsetallnez.d
+       case AXVSETEQV:
+               return 0x1da726<<10 | 0x0<<3 // xvseteqz.v
+       case AXVSETNEV:
+               return 0x1da727<<10 | 0x0<<3 // xvsetnez.v
+       case AXVSETANYEQB:
+               return 0x1da728<<10 | 0x0<<3 // xvsetanyeqz.b
+       case AXVSETANYEQH:
+               return 0x1da729<<10 | 0x0<<3 // xvsetanyeqz.h
+       case AXVSETANYEQW:
+               return 0x1da72a<<10 | 0x0<<3 // xvsetanyeqz.w
+       case AXVSETANYEQV:
+               return 0x1da72b<<10 | 0x0<<3 // xvsetanyeqz.d
+       case AXVSETALLNEB:
+               return 0x1da72c<<10 | 0x0<<3 // xvsetallnez.b
+       case AXVSETALLNEH:
+               return 0x1da72d<<10 | 0x0<<3 // xvsetallnez.h
+       case AXVSETALLNEW:
+               return 0x1da72e<<10 | 0x0<<3 // xvsetallnez.w
+       case AXVSETALLNEV:
+               return 0x1da72f<<10 | 0x0<<3 // xvsetallnez.d
        }
 
        c.ctxt.Diag("bad rr opcode %v", a)