aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorXiaolin Zhao <zhaoxiaolin@loongson.cn>2024-06-05 10:52:08 +0800
committerGopher Robot <gobot@golang.org>2024-08-03 01:57:52 +0000
commitb874005a84253e9c4313eb30889df418d607ed4d (patch)
tree6b2359f1c2fabace9a32bd5d628ea466c7658542 /src/cmd/internal/obj
parent2ffcfcef5597ae9d8f27f6d251785e1624c8c020 (diff)
downloadgo-b874005a84253e9c4313eb30889df418d607ed4d.tar.xz
cmd/internal/obj/loong64: add support for instructions FCOPYSIGN.{S/D} and FCLASS.{S/D}
Go asm syntax: FCOPYSG{F/D} FK, FJ, FD FCLASSF{F/D} FJ, FD Equivalent platform assembler syntax: fcopysign.{s/d} fd, fj, fk fclass.{s/d} fd, fj Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html Change-Id: Ied34b71c9d0b34456ac5782a59d29d2d0229e326 Reviewed-on: https://go-review.googlesource.com/c/go/+/590675 Reviewed-by: Cherry Mui <cherryyz@google.com> Auto-Submit: abner chenc <chenguoqi@loongson.cn> Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: abner chenc <chenguoqi@loongson.cn> 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.go8
-rw-r--r--src/cmd/internal/obj/loong64/anames.go4
-rw-r--r--src/cmd/internal/obj/loong64/asm.go12
3 files changed, 24 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go
index e48160eaa2..878f148f15 100644
--- a/src/cmd/internal/obj/loong64/a.out.go
+++ b/src/cmd/internal/obj/loong64/a.out.go
@@ -446,6 +446,14 @@ const (
AFMAXF
AFMAXD
+ // 3.2.1.7
+ AFCOPYSGF
+ AFCOPYSGD
+
+ // 3.2.1.8
+ AFCLASSF
+ AFCLASSD
+
ALAST
// aliases
diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go
index 42d9ea4d18..aac8ac92b8 100644
--- a/src/cmd/internal/obj/loong64/anames.go
+++ b/src/cmd/internal/obj/loong64/anames.go
@@ -183,5 +183,9 @@ var Anames = []string{
"FMIND",
"FMAXF",
"FMAXD",
+ "FCOPYSGF",
+ "FCOPYSGD",
+ "FCLASSF",
+ "FCLASSD",
"LAST",
}
diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go
index c0f9dee380..6ac02df988 100644
--- a/src/cmd/internal/obj/loong64/asm.go
+++ b/src/cmd/internal/obj/loong64/asm.go
@@ -1028,6 +1028,8 @@ func buildop(ctxt *obj.Link) {
opset(ATRUNCFW, r0)
opset(ASQRTF, r0)
opset(ASQRTD, r0)
+ opset(AFCLASSF, r0)
+ opset(AFCLASSD, r0)
case AMOVVF:
opset(AMOVVD, r0)
@@ -1056,6 +1058,8 @@ func buildop(ctxt *obj.Link) {
opset(AFMIND, r0)
opset(AFMAXF, r0)
opset(AFMAXD, r0)
+ opset(AFCOPYSGF, r0)
+ opset(AFCOPYSGD, r0)
case AAND:
opset(AOR, r0)
@@ -1884,6 +1888,10 @@ func (c *ctxt0) oprrr(a obj.As) uint32 {
return 0x211 << 15 // fmax.s
case AFMAXD:
return 0x212 << 15 // fmax.d
+ case AFCOPYSGF:
+ return 0x225 << 15 // fcopysign.s
+ case AFCOPYSGD:
+ return 0x226 << 15 // fcopysign.d
}
if a < 0 {
@@ -1952,6 +1960,10 @@ func (c *ctxt0) oprr(a obj.As) uint32 {
return 0x4511 << 10
case ASQRTD:
return 0x4512 << 10
+ case AFCLASSF:
+ return 0x450d << 10 // fclass.s
+ case AFCLASSD:
+ return 0x450e << 10 // fclass.d
}
c.ctxt.Diag("bad rr opcode %v", a)