diff options
| author | Xiaolin Zhao <zhaoxiaolin@loongson.cn> | 2024-06-05 10:52:08 +0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2024-08-03 01:57:52 +0000 |
| commit | b874005a84253e9c4313eb30889df418d607ed4d (patch) | |
| tree | 6b2359f1c2fabace9a32bd5d628ea466c7658542 /src/cmd/internal/obj | |
| parent | 2ffcfcef5597ae9d8f27f6d251785e1624c8c020 (diff) | |
| download | go-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.go | 8 | ||||
| -rw-r--r-- | src/cmd/internal/obj/loong64/anames.go | 4 | ||||
| -rw-r--r-- | src/cmd/internal/obj/loong64/asm.go | 12 |
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) |
