]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/arm64: provide and use an oprrrr function
authorJoel Sing <joel@sing.id.au>
Sat, 7 Jan 2023 17:08:29 +0000 (04:08 +1100)
committerJoel Sing <joel@sing.id.au>
Tue, 25 Mar 2025 11:12:09 +0000 (04:12 -0700)
Provide a four register version of oprrr, which takes an additional 'ra'
register. Use this instead of oprrr where appropriate.

Change-Id: I8882957a83c2b08e407f37a37c61864cd920bbc9
Reviewed-on: https://go-review.googlesource.com/c/go/+/471519
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/cmd/internal/obj/arm64/asm7.go

index 6209aee38676c21fa20e0a83593db9d236fc2eeb..213c4e13b03ce231bd6a1726d1144b42377233a7 100644 (file)
@@ -3782,8 +3782,7 @@ func (c *ctxt7) asmout(p *obj.Prog, out []uint32) (count int) {
                                ra = REGZERO
                        }
                }
-               o1 = c.oprrr(p, p.As, rt, r, rf)
-               o1 |= uint32(ra&31) << 10
+               o1 = c.oprrrr(p, p.As, rt, r, rf, ra)
 
        case 16: /* XremY R[,R],R -> XdivY; XmsubY */
                rt, r, rf := p.To.Reg, p.Reg, p.From.Reg
@@ -3791,9 +3790,8 @@ func (c *ctxt7) asmout(p *obj.Prog, out []uint32) (count int) {
                        r = rt
                }
                o1 = c.oprrr(p, p.As, REGTMP, r, rf)
-               o2 = c.oprrr(p, AMSUBW, rt, REGTMP, rf)
+               o2 = c.oprrrr(p, AMSUBW, rt, REGTMP, rf, r)
                o2 |= o1 & (1 << 31) /* same size */
-               o2 |= uint32(r&31) << 10
 
        case 17: /* op Rm,[Rn],Rd; default Rn=ZR */
                rt, r, rf := p.To.Reg, p.Reg, p.From.Reg
@@ -5763,9 +5761,7 @@ func (c *ctxt7) asmout(p *obj.Prog, out []uint32) (count int) {
                        break
                }
 
-               o1 = c.oprrr(p, p.As, p.To.Reg, p.GetFrom3().Reg, p.Reg)
-               ra := int(p.From.Reg)
-               o1 |= uint32(ra&31) << 10
+               o1 = c.oprrrr(p, p.As, p.To.Reg, p.GetFrom3().Reg, p.Reg, p.From.Reg)
 
        case 104: /* vxar $imm4, Vm.<T>, Vn.<T>, Vd.<T> */
                af := ((p.GetFrom3().Reg) >> 5) & 15
@@ -6576,6 +6572,10 @@ func (c *ctxt7) oprrr(p *obj.Prog, a obj.As, rd, rn, rm int16) uint32 {
        return op
 }
 
+func (c *ctxt7) oprrrr(p *obj.Prog, a obj.As, rd, rn, rm, ra int16) uint32 {
+       return c.oprrr(p, a, rd, rn, rm) | uint32(ra&0x1f)<<10
+}
+
 /*
  * imm -> Rd
  * imm op Rn -> Rd