]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/loong64: add [X]VFCLASS.{S/D} instructions
authorXiaolin Zhao <zhaoxiaolin@loongson.cn>
Tue, 6 May 2025 03:14:31 +0000 (11:14 +0800)
committerabner chenc <chenguoqi@loongson.cn>
Mon, 12 May 2025 02:39:22 +0000 (19:39 -0700)
Go asm syntax:
 VFCLASS{F/D} VJ, VD
XVFCLASS{F/D} XJ, XD

Equivalent platform assembler syntax:
 vfclass.{s/d} vd, vj
xvfclass.{s/d} xd, xj

Change-Id: Iec373f393be315696d1fefc747a4a5882f993195
Reviewed-on: https://go-review.googlesource.com/c/go/+/670256
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Dustin Turner <dustin.turner44@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
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 3dfe89aab3fcc6f65904b8ee359b6f53f9004a87..494023ee657fe90dbc6a18ae5163561443ad0726 100644 (file)
@@ -1004,3 +1004,9 @@ lable2:
        XVMULD          X1, X2, X3      // 43043975
        XVDIVF          X1, X2, X3      // 43843a75
        XVDIVD          X1, X2, X3      // 43043b75
+
+       // [X]VFCLASS.{S/D} instructions
+       VFCLASSF        V1, V2          // 22d49c72
+       VFCLASSD        V1, V2          // 22d89c72
+       XVFCLASSF       X1, X2          // 22d49c76
+       XVFCLASSD       X1, X2          // 22d89c76
index c88c556bfe9b50c074a07e7d52206b4500c924ac..97a4d6c179c449d673c2d3cc87da7f9b822f82bb 100644 (file)
@@ -967,6 +967,11 @@ const (
        AXVDIVF
        AXVDIVD
 
+       AVFCLASSF
+       AVFCLASSD
+       AXVFCLASSF
+       AXVFCLASSD
+
        // LSX and LASX floating point conversion instructions
        AVFRINTRNEF
        AVFRINTRNED
index 533e5f41540bcf299734f70624377eb0e13dedf7..0c1a6ea0c6f20f8969620028e3c77774d4ff4adf 100644 (file)
@@ -465,6 +465,10 @@ var Anames = []string{
        "XVMULD",
        "XVDIVF",
        "XVDIVD",
+       "VFCLASSF",
+       "VFCLASSD",
+       "XVFCLASSF",
+       "XVFCLASSD",
        "VFRINTRNEF",
        "VFRINTRNED",
        "VFRINTRZF",
index dc9fafc0e2e43c79f011acdaa06bbb3303a04f1a..6723c67b3fc389edb02b0f6556340610276cfd1d 100644 (file)
@@ -1748,6 +1748,8 @@ func buildop(ctxt *obj.Link) {
                        opset(AVFRINTRMD, r0)
                        opset(AVFRINTF, r0)
                        opset(AVFRINTD, r0)
+                       opset(AVFCLASSF, r0)
+                       opset(AVFCLASSD, r0)
 
                case AXVPCNTB:
                        opset(AXVPCNTH, r0)
@@ -1773,6 +1775,8 @@ func buildop(ctxt *obj.Link) {
                        opset(AXVFRINTRMD, r0)
                        opset(AXVFRINTF, r0)
                        opset(AXVFRINTD, r0)
+                       opset(AXVFCLASSF, r0)
+                       opset(AXVFCLASSD, r0)
 
                case AVADDB:
                        opset(AVADDH, r0)
@@ -3691,6 +3695,14 @@ func (c *ctxt0) oprr(a obj.As) uint32 {
                return 0x1da74d << 10 // xvfrint.s
        case AXVFRINTD:
                return 0x1da74e << 10 // xvfrint.d
+       case AVFCLASSF:
+               return 0x1ca735 << 10 // vfclass.s
+       case AVFCLASSD:
+               return 0x1ca736 << 10 // vfclass.d
+       case AXVFCLASSF:
+               return 0x1da735 << 10 // xvfclass.s
+       case AXVFCLASSD:
+               return 0x1da736 << 10 // xvfclass.d
        case AVSETEQV:
                return 0x1ca726<<10 | 0x0<<3 // vseteqz.v
        case AVSETNEV: