diff options
| author | Xiaolin Zhao <zhaoxiaolin@loongson.cn> | 2024-04-10 11:37:56 +0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2024-08-02 14:33:57 +0000 |
| commit | e7619216888cdd25e445d06bc424532a922fdf94 (patch) | |
| tree | eac27b3da2b399fd3d792e00d547753181e93159 /src/cmd/internal | |
| parent | 9abd11440c5fa027304d6cda051fc0a30b6b430b (diff) | |
| download | go-e7619216888cdd25e445d06bc424532a922fdf94.tar.xz | |
cmd/internal/obj/loong64: add support for instructions F{MAX/NIN}.{S/D}
Go asm syntax:
F{MAX/MIN}{F/D} FK, FJ, FD
Equivalent platform assembler syntax:
f{max/min}.{s/d} fd, fj, fk
Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html
Change-Id: Ib11fed1fe3700be5ebba33b5818661c4071b7b7c
Reviewed-on: https://go-review.googlesource.com/c/go/+/590676
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: abner chenc <chenguoqi@loongson.cn>
Diffstat (limited to 'src/cmd/internal')
| -rw-r--r-- | src/cmd/internal/obj/loong64/a.out.go | 6 | ||||
| -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, 22 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index cf5c74fde2..9309a3b09a 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -440,6 +440,12 @@ const ( ARDTIMED ACPUCFG + // 3.2.1.3 + AFMINF + AFMIND + AFMAXF + AFMAXD + ALAST // aliases diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go index 9bfc57e239..42d9ea4d18 100644 --- a/src/cmd/internal/obj/loong64/anames.go +++ b/src/cmd/internal/obj/loong64/anames.go @@ -179,5 +179,9 @@ var Anames = []string{ "RDTIMEHW", "RDTIMED", "CPUCFG", + "FMINF", + "FMIND", + "FMAXF", + "FMAXD", "LAST", } diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 8c9ff2096e..c0f9dee380 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1052,6 +1052,10 @@ func buildop(ctxt *obj.Link) { opset(ASUBF, r0) opset(ASUBD, r0) opset(AADDD, r0) + opset(AFMINF, r0) + opset(AFMIND, r0) + opset(AFMAXF, r0) + opset(AFMAXD, r0) case AAND: opset(AOR, r0) @@ -1872,6 +1876,14 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { return 0x0c2<<20 | 0x3<<15 // FCMP.SLT.D case ACMPGTF: return 0x0c1<<20 | 0x3<<15 // FCMP.SLT.S + case AFMINF: + return 0x215 << 15 // fmin.s + case AFMIND: + return 0x216 << 15 // fmin.d + case AFMAXF: + return 0x211 << 15 // fmax.s + case AFMAXD: + return 0x212 << 15 // fmax.d } if a < 0 { |
