diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index cfda9ba0b44306480c554aa4dbd32830f64770b7..a901da9b69d721bd57d83d6fa3ac1c3505514f85 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -964,3 +964,25 @@ lable2: XVSETALLNEH X1, FCC0 // 20b49c76 XVSETALLNEW X1, FCC0 // 20b89c76 XVSETALLNEV X1, FCC0 // 20bc9c76 + + // [X]VFRINT[{RNE/RZ/RP/RM}].{S/D} instructions + VFRINTRNEF V1, V2 // 22749d72 + VFRINTRNED V1, V2 // 22789d72 + VFRINTRZF V1, V2 // 22649d72 + VFRINTRZD V1, V2 // 22689d72 + VFRINTRPF V1, V2 // 22549d72 + VFRINTRPD V1, V2 // 22589d72 + VFRINTRMF V1, V2 // 22449d72 + VFRINTRMD V1, V2 // 22489d72 + VFRINTF V1, V2 // 22349d72 + VFRINTD V1, V2 // 22389d72 + XVFRINTRNEF X1, X2 // 22749d76 + XVFRINTRNED X1, X2 // 22789d76 + XVFRINTRZF X1, X2 // 22649d76 + XVFRINTRZD X1, X2 // 22689d76 + XVFRINTRPF X1, X2 // 22549d76 + XVFRINTRPD X1, X2 // 22589d76 + XVFRINTRMF X1, X2 // 22449d76 + XVFRINTRMD X1, X2 // 22489d76 + XVFRINTF X1, X2 // 22349d76 + XVFRINTD X1, X2 // 22389d76 diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 4bef470c86704a86648d3ea52e2753ea5170c062..5e8210d5ddcdf0bec0e78547ff8553f6d9f13626 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -950,6 +950,28 @@ const ( AXVFRSQRTF AXVFRSQRTD + // LSX and LASX floating point conversion instructions + AVFRINTRNEF + AVFRINTRNED + AVFRINTRZF + AVFRINTRZD + AVFRINTRPF + AVFRINTRPD + AVFRINTRMF + AVFRINTRMD + AVFRINTF + AVFRINTD + AXVFRINTRNEF + AXVFRINTRNED + AXVFRINTRZF + AXVFRINTRZD + AXVFRINTRPF + AXVFRINTRPD + AXVFRINTRMF + AXVFRINTRMD + AXVFRINTF + AXVFRINTD + // LSX and LASX integer neg instructions AVNEGB AVNEGH diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go index d50c29a9f9d30691c900b1588946ea1ddfba7f16..86110c217d21d163149a00e8beaf62e633c492eb 100644 --- a/src/cmd/internal/obj/loong64/anames.go +++ b/src/cmd/internal/obj/loong64/anames.go @@ -449,6 +449,26 @@ var Anames = []string{ "XVFRECIPD", "XVFRSQRTF", "XVFRSQRTD", + "VFRINTRNEF", + "VFRINTRNED", + "VFRINTRZF", + "VFRINTRZD", + "VFRINTRPF", + "VFRINTRPD", + "VFRINTRMF", + "VFRINTRMD", + "VFRINTF", + "VFRINTD", + "XVFRINTRNEF", + "XVFRINTRNED", + "XVFRINTRZF", + "XVFRINTRZD", + "XVFRINTRPF", + "XVFRINTRPD", + "XVFRINTRMF", + "XVFRINTRMD", + "XVFRINTF", + "XVFRINTD", "VNEGB", "VNEGH", "VNEGW", diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 7fdba0c6c2837950d203ee801ecc2b0346741066..1b46aa68a1f1b9245a364f335f29c3ba24fb61d7 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1722,6 +1722,16 @@ func buildop(ctxt *obj.Link) { opset(AVNEGH, r0) opset(AVNEGW, r0) opset(AVNEGV, r0) + opset(AVFRINTRNEF, r0) + opset(AVFRINTRNED, r0) + opset(AVFRINTRZF, r0) + opset(AVFRINTRZD, r0) + opset(AVFRINTRPF, r0) + opset(AVFRINTRPD, r0) + opset(AVFRINTRMF, r0) + opset(AVFRINTRMD, r0) + opset(AVFRINTF, r0) + opset(AVFRINTD, r0) case AXVPCNTB: opset(AXVPCNTH, r0) @@ -1737,6 +1747,16 @@ func buildop(ctxt *obj.Link) { opset(AXVNEGH, r0) opset(AXVNEGW, r0) opset(AXVNEGV, r0) + opset(AXVFRINTRNEF, r0) + opset(AXVFRINTRNED, r0) + opset(AXVFRINTRZF, r0) + opset(AXVFRINTRZD, r0) + opset(AXVFRINTRPF, r0) + opset(AXVFRINTRPD, r0) + opset(AXVFRINTRMF, r0) + opset(AXVFRINTRMD, r0) + opset(AXVFRINTF, r0) + opset(AXVFRINTD, r0) case AVADDB: opset(AVADDH, r0) @@ -3583,6 +3603,46 @@ func (c *ctxt0) oprr(a obj.As) uint32 { return 0x1da70e << 10 // xvneg.w case AXVNEGV: return 0x1da70f << 10 // xvneg.d + case AVFRINTRNEF: + return 0x1ca75d << 10 // vfrintrne.s + case AVFRINTRNED: + return 0x1ca75e << 10 // vfrintrne.d + case AVFRINTRZF: + return 0x1ca759 << 10 // vfrintrz.s + case AVFRINTRZD: + return 0x1ca75a << 10 // vfrintrz.d + case AVFRINTRPF: + return 0x1ca755 << 10 // vfrintrp.s + case AVFRINTRPD: + return 0x1ca756 << 10 // vfrintrp.d + case AVFRINTRMF: + return 0x1ca751 << 10 // vfrintrm.s + case AVFRINTRMD: + return 0x1ca752 << 10 // vfrintrm.d + case AVFRINTF: + return 0x1ca74d << 10 // vfrint.s + case AVFRINTD: + return 0x1ca74e << 10 // vfrint.d + case AXVFRINTRNEF: + return 0x1da75d << 10 // xvfrintrne.s + case AXVFRINTRNED: + return 0x1da75e << 10 // xvfrintrne.d + case AXVFRINTRZF: + return 0x1da759 << 10 // xvfrintrz.s + case AXVFRINTRZD: + return 0x1da75a << 10 // xvfrintrz.d + case AXVFRINTRPF: + return 0x1da755 << 10 // xvfrintrp.s + case AXVFRINTRPD: + return 0x1da756 << 10 // xvfrintrp.d + case AXVFRINTRMF: + return 0x1da751 << 10 // xvfrintrm.s + case AXVFRINTRMD: + return 0x1da752 << 10 // xvfrintrm.d + case AXVFRINTF: + return 0x1da74d << 10 // xvfrint.s + case AXVFRINTD: + return 0x1da74e << 10 // xvfrint.d case AVSETEQV: return 0x1ca726<<10 | 0x0<<3 // vseteqz.v case AVSETNEV: