cmd/internal/obj/ppc64: add double-decimal arithmetic instructions

Assembler support provided for the instructions DADD, DSUB, DMUL, and DDIV.

Change-Id: Ic12ba02ce453cb1ca275334ca1924fb2009da767
Reviewed-on: https://go-review.googlesource.com/c/go/+/620856
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Paul Murphy <murp@ibm.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
This commit is contained in:
Jayanth Krishnamurthy 2024-09-11 09:58:04 -05:00 committed by Paul Murphy
parent f505d6c581
commit b03b1acfb0
4 changed files with 29 additions and 0 deletions

View File

@ -681,9 +681,13 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0
FMOVDCC F1, F2 // fc400891
FADDS F1, F2 // ec42082a
FADDS F1, F2, F3 // ec62082a
DADD F1, F2 // ec420804
DADD F1, F2, F3 // ec620804
FADDSCC F1, F2, F3 // ec62082b
FSUB F1, F2 // fc420828
FSUB F1, F2, F3 // fc620828
DSUB F1, F2 // ec420c04
DSUB F1, F2, F3 // ec620c04
FSUBCC F1, F2, F3 // fc620829
FSUBS F1, F2 // ec420828
FSUBS F1, F2, F3 // ec620828
@ -691,12 +695,16 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0
FSUBSCC F1, F2, F3 // ec620829
FMUL F1, F2 // fc420072
FMUL F1, F2, F3 // fc620072
DMUL F1, F2 // ec420044
DMUL F1, F2, F3 // ec620044
FMULCC F1, F2, F3 // fc620073
FMULS F1, F2 // ec420072
FMULS F1, F2, F3 // ec620072
FMULSCC F1, F2, F3 // ec620073
FDIV F1, F2 // fc420824
FDIV F1, F2, F3 // fc620824
DDIV F1, F2 // ec420c44
DDIV F1, F2, F3 // ec620c44
FDIVCC F1, F2, F3 // fc620825
FDIVS F1, F2 // ec420824
FDIVS F1, F2, F3 // ec620824

View File

@ -504,6 +504,8 @@ const (
ACROR
ACRORN
ACRXOR
ADADD
ADDIV
ADIVW
ADIVWCC
ADIVWVCC
@ -512,6 +514,8 @@ const (
ADIVWUCC
ADIVWUVCC
ADIVWUV
ADMUL
ADSUB
AMODUD
AMODUW
AMODSD

View File

@ -57,6 +57,8 @@ var Anames = []string{
"CROR",
"CRORN",
"CRXOR",
"DADD",
"DDIV",
"DIVW",
"DIVWCC",
"DIVWVCC",
@ -65,6 +67,8 @@ var Anames = []string{
"DIVWUCC",
"DIVWUVCC",
"DIVWUV",
"DMUL",
"DSUB",
"MODUD",
"MODUW",
"MODSD",

View File

@ -1871,6 +1871,9 @@ func buildop(ctxt *obj.Link) {
opset(AFSUBS, r0)
opset(AFSUBCC, r0)
opset(AFSUBSCC, r0)
opset(ADADD, r0)
opset(ADDIV, r0)
opset(ADSUB, r0)
case AFMADD:
opset(AFMADDCC, r0)
@ -1895,6 +1898,7 @@ func buildop(ctxt *obj.Link) {
opset(AFMULS, r0)
opset(AFMULCC, r0)
opset(AFMULSCC, r0)
opset(ADMUL, r0)
case AFCMPO:
opset(AFCMPU, r0)
@ -3935,6 +3939,15 @@ func (c *ctxt9) oprrr(a obj.As) uint32 {
case ACRXOR:
return OPVCC(19, 193, 0, 0)
case ADADD:
return OPVCC(59, 2, 0, 0)
case ADDIV:
return OPVCC(59, 546, 0, 0)
case ADMUL:
return OPVCC(59, 34, 0, 0)
case ADSUB:
return OPVCC(59, 514, 0, 0)
case ADCBF:
return OPVCC(31, 86, 0, 0)
case ADCBI: