• Michael Munday's avatar
    cmd/asm: add s390x branch-on-count instructions · 38c4a737
    Michael Munday authored
    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: default avatarCherry Zhang <cherryyz@google.com>
    38c4a737
ggen.go 2.86 KB