cmd/internal/obj/loong64: add [X]VFRINT[{RNE/RZ/RP/RM}].{S/D} instructions

Go asm syntax:
	 VFRINT[{RNE/RZ/RP/RM}]{F/D}	VJ, VD
	XVFRINT[{RNE/RZ/RP/RM}]{F/D}	XJ, XD

Equivalent platform assembler syntax:
	 vfrint[{rne/rz/rp/rm}].{s/d}	vd, vj
	xvfrint[{rne/rz/rp/rm}].{s/d}	xd, xj

Change-Id: I4ed8782289ae3329d675239f799d5f75b1adc4ad
Reviewed-on: https://go-review.googlesource.com/c/go/+/670235
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
This commit is contained in:
Xiaolin Zhao 2025-05-06 10:10:30 +08:00 committed by abner chenc
parent ec7d955abf
commit d13da63929
4 changed files with 124 additions and 0 deletions

View file

@ -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: