diff options
| author | Michael Munday <munday@ca.ibm.com> | 2016-09-12 12:13:34 -0400 |
|---|---|---|
| committer | Michael Munday <munday@ca.ibm.com> | 2016-09-12 17:12:59 +0000 |
| commit | 43bdfa9337c136f4e19122914c082f34045d9509 (patch) | |
| tree | ace38d1fb3a94f1d1f017ec6abd8d4fccce263f5 /src/cmd/asm | |
| parent | dfc56a4cd313c9c5de37f4fadb14912286edc42f (diff) | |
| download | go-43bdfa9337c136f4e19122914c082f34045d9509.tar.xz | |
cmd/asm, cmd/internal/obj/s390x: add new s390x instructions for SSA
This commit adds the following instructions to support the new SSA
backend for s390x:
32-bit operations:
ADDW
SUBW
NEGW
FNEGS
Conditional moves:
MOVDEQ
MOVDGE
MOVDGT
MOVDLE
MOVDLT
MOVDNE
Unordered branches (for floating point comparisons):
BLEU
BLTU
Modulo operations:
MODW
MODWU
MODD
MODDU
The modulo operations might be removed in a future commit because
I'd like to change DIV to produce a tuple once the old backend is
removed.
This commit also removes uses of REGZERO from the assembler. They
aren't necessary and R0 will be used as a GPR by SSA.
Change-Id: I05756c1cbb74bf4a35fc492f8f0cd34b50763dc9
Reviewed-on: https://go-review.googlesource.com/29075
Run-TryBot: Michael Munday <munday@ca.ibm.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd/asm')
| -rw-r--r-- | src/cmd/asm/internal/asm/testdata/s390x.s | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/src/cmd/asm/internal/asm/testdata/s390x.s b/src/cmd/asm/internal/asm/testdata/s390x.s index 4060f08780..6b6e2236d4 100644 --- a/src/cmd/asm/internal/asm/testdata/s390x.s +++ b/src/cmd/asm/internal/asm/testdata/s390x.s @@ -13,6 +13,13 @@ TEXT main·foo(SB),7,$16-0 // TEXT main.foo(SB), 7, $16-0 MOVDBR R1, R2 // b90f0021 MOVWBR R3, R4 // b91f0043 + MOVDEQ R0, R1 // b9e28010 + MOVDGE R2, R3 // b9e2a032 + MOVDGT R4, R5 // b9e22054 + MOVDLE R6, R7 // b9e2c076 + MOVDLT R8, R9 // b9e24098 + MOVDNE R10, R11 // b9e270ba + MOVD (R15), R1 // e310f0000004 MOVW (R15), R2 // e320f0000014 MOVH (R15), R3 // e330f0000015 @@ -50,6 +57,10 @@ TEXT main·foo(SB),7,$16-0 // TEXT main.foo(SB), 7, $16-0 ADDC R1, R2 // b9ea1022 ADDC $1, R1, R2 // b9040021c22a00000001 ADDC R1, R2, R3 // b9ea1032 + ADDW R1, R2 // 1a21 + ADDW R1, R2, R3 // b9f81032 + ADDW $8192, R1 // c21900002000 + ADDW $8192, R1, R2 // ec21200000d8 SUB R3, R4 // b9090043 SUB R3, R4, R5 // b9e93054 SUB $8192, R3 // c238ffffe000 @@ -57,6 +68,10 @@ TEXT main·foo(SB),7,$16-0 // TEXT main.foo(SB), 7, $16-0 SUBC R1, R2 // b90b0021 SUBC $1, R1, R2 // b9040021c22affffffff SUBC R2, R3, R4 // b9eb2043 + SUBW R3, R4 // 1b43 + SUBW R3, R4, R5 // b9f93054 + SUBW $8192, R1 // c21500002000 + SUBW $8192, R1, R2 // 1821c22500002000 MULLW R6, R7 // b91c0076 MULLW R6, R7, R8 // b9040087b91c0086 MULLW $8192, R6 // a76d2000 @@ -73,10 +88,22 @@ TEXT main·foo(SB),7,$16-0 // TEXT main.foo(SB), 7, $16-0 DIVD R1, R2, R3 // b90400b2b90d00a1b904003b DIVW R4, R5 // b90400b5b91d00a4b904005b DIVW R4, R5, R6 // b90400b5b91d00a4b904006b - DIVDU R7, R8 // b90400a0b90400b8b98700a7b904008b - DIVDU R7, R8, R9 // b90400a0b90400b8b98700a7b904009b - DIVWU R1, R2 // b90400a0b90400b2b99700a1b904002b - DIVWU R1, R2, R3 // b90400a0b90400b2b99700a1b904003b + DIVDU R7, R8 // a7a90000b90400b8b98700a7b904008b + DIVDU R7, R8, R9 // a7a90000b90400b8b98700a7b904009b + DIVWU R1, R2 // a7a90000b90400b2b99700a1b904002b + DIVWU R1, R2, R3 // a7a90000b90400b2b99700a1b904003b + MODD R1, R2 // b90400b2b90d00a1b904002a + MODD R1, R2, R3 // b90400b2b90d00a1b904003a + MODW R4, R5 // b90400b5b91d00a4b904005a + MODW R4, R5, R6 // b90400b5b91d00a4b904006a + MODDU R7, R8 // a7a90000b90400b8b98700a7b904008a + MODDU R7, R8, R9 // a7a90000b90400b8b98700a7b904009a + MODWU R1, R2 // a7a90000b90400b2b99700a1b904002a + MODWU R1, R2, R3 // a7a90000b90400b2b99700a1b904003a + NEG R1 // b9030011 + NEG R1, R2 // b9030021 + NEGW R1 // b9130011 + NEGW R1, R2 // b9130021 LAA R1, R2, 524287(R3) // eb213fff7ff8 LAAG R4, R5, -524288(R6) // eb54600080e8 |
