]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal: allow ADDE to work with memory location on s390x
authorRuixin(Peter) Bao <ruixin.bao@ibm.com>
Tue, 21 Apr 2020 20:56:22 +0000 (16:56 -0400)
committerMichael Munday <mike.munday@ibm.com>
Wed, 22 Apr 2020 11:37:03 +0000 (11:37 +0000)
Originally on s390x, ADDE does not work when adding numbers from a memory location.
For example: ADDE (R3), R4 will result in a failure.

Since ADDC, ADD and ADDW already supports adding from memory location,
let's support that for ADDE as well.

Change-Id: I7cbe112ea154733a621b948c6a21bbee63fb0c62
Reviewed-on: https://go-review.googlesource.com/c/go/+/229304
Reviewed-by: Michael Munday <mike.munday@ibm.com>
Run-TryBot: Michael Munday <mike.munday@ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/asm/internal/asm/testdata/s390x.s
src/cmd/internal/obj/s390x/asmz.go

index 1ae614ae172feb01a7b5affb65d9a2ca82cf563f..03b84cfa62d2f7917279af9e3e89717f447b6b78 100644 (file)
@@ -89,6 +89,7 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16-
        ADDW    R1, R2, R3            // b9f81032
        ADDW    $8192, R1             // a71a2000
        ADDW    $8192, R1, R2         // ec21200000d8
+       ADDE    R1, R2                // b9880021
        SUB     R3, R4                // b9090043
        SUB     R3, R4, R5            // b9e93054
        SUB     $8192, R3             // a73be000
@@ -183,6 +184,9 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16-
        ADDW    4095(R7), R8          // 5a807fff
        ADDW    -1(R1), R2            // e3201fffff5a
        ADDW    4096(R3), R4          // e3403000015a
+       ADDE    4096(R3), R4          // e34030000188
+       ADDE    4096(R3)(R2*1), R4    // e34230000188
+       ADDE    524288(R3)(R4*1), R5  // c0a10008000041aa4000e35a30000088
        MULLD   (R1)(R2*1), R3        // e3321000000c
        MULLW   (R3)(R4*1), R5        // 71543000
        MULLW   4096(R3), R4          // e34030000151
index dca9d990e0ea91b808ea34f2eb22c3dcc181faa2..30c0738c33dcdc3e4b5b90d189750205c2e00f19 100644 (file)
@@ -906,10 +906,10 @@ func buildop(ctxt *obj.Link) {
                case AADD:
                        opset(AADDC, r)
                        opset(AADDW, r)
+                       opset(AADDE, r)
                        opset(AMULLD, r)
                        opset(AMULLW, r)
                case ADIVW:
-                       opset(AADDE, r)
                        opset(ADIVD, r)
                        opset(ADIVDU, r)
                        opset(ADIVWU, r)
@@ -3040,6 +3040,8 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
                        opxy = op_AG
                case AADDC:
                        opxy = op_ALG
+               case AADDE:
+                       opxy = op_ALCG
                case AADDW:
                        opx = op_A
                        opxy = op_AY