From: Xiaolin Zhao Date: Wed, 5 Jun 2024 02:52:08 +0000 (+0800) Subject: cmd/internal/obj/loong64: add support for instructions FCOPYSIGN.{S/D} and FCLASS... X-Git-Tag: go1.24rc1~1278 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b874005a84253e9c4313eb30889df418d607ed4d;p=gostls13.git 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 Auto-Submit: abner chenc Reviewed-by: Michael Knyszek Reviewed-by: abner chenc LUCI-TryBot-Result: Go LUCI --- diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index e16bd78fee..7aeb2920bd 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -278,3 +278,8 @@ lable2: FMAXF F4, F5 // a5900801 FMAXD F4, F5, F6 // a6100901 FMAXD F4, F5 // a5100901 + + FCOPYSGF F4, F5, F6 // a6901201 + FCOPYSGD F4, F5, F6 // a6101301 + FCLASSF F4, F5 // 85341401 + FCLASSD F4, F5 // 85381401 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)