]> Cypherpunks repositories - gostls13.git/commit
cmd/asm: add s390x branch-on-count instructions
authorMichael Munday <mike.munday@ibm.com>
Thu, 15 Aug 2019 20:53:37 +0000 (21:53 +0100)
committerMichael Munday <mike.munday@ibm.com>
Wed, 9 Oct 2019 15:04:59 +0000 (15:04 +0000)
commit38c4a7370670e6b73cbae192c7d3079c90203832
tree0ed95e4710b6cb9d1f0d40a28b62b8d81eb4dd20
parentff86ce13b69f427248203493d669a730988f882c
cmd/asm: add s390x branch-on-count instructions

The branch-on-count instructions on s390x decrement the input
register and then compare its value to 0. If not equal the branch
is taken.

These instructions are useful for implementing loops with a set
number of iterations (which might be in a register).

For example, this for loop:

for i := 0; i < n; i++ {
... // i is not used or modified in the loop
}

Could be implemented using this assembly:

MOVD  Rn, Ri
loop:
...
BRCTG Ri, loop

Note that i will count down from n in the assembly whereas in the
original for loop it counted up to n which is why we can't use i
in the loop.

These instructions will only be used in hand-written codegen and
assembly for now since SSA blocks cannot currently modify values.
We could look into this in the future though.

Change-Id: Iaab93b8aa2699513b825439b8ea20d8fe2ea1ee6
Reviewed-on: https://go-review.googlesource.com/c/go/+/199977
Run-TryBot: Michael Munday <mike.munday@ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/asm/internal/arch/s390x.go
src/cmd/asm/internal/asm/testdata/s390x.s
src/cmd/compile/internal/s390x/ggen.go
src/cmd/internal/obj/s390x/a.out.go
src/cmd/internal/obj/s390x/anames.go
src/cmd/internal/obj/s390x/asmz.go