• Cherry Zhang's avatar
    [dev.ssa] cmd/compile: decompose 64-bit integer on ARM · 8756d925
    Cherry Zhang authored
    Introduce dec64 rules to (generically) decompose 64-bit integer on
    32-bit architectures. 64-bit integer is composed/decomposed with
    Int64Make/Hi/Lo ops, as for complex types.
    
    The idea of dealing with Add64 is the following:
    
    (Add64 (Int64Make xh xl) (Int64Make yh yl))
    ->
    (Int64Make
    	(Add32withcarry xh yh (Select0 (Add32carry xl yl)))
    	(Select1 (Add32carry xl yl)))
    
    where Add32carry returns a tuple (flags,uint32). Select0 and Select1
    read the first and the second component of the tuple, respectively.
    The two Add32carry will be CSE'd.
    
    Similarly for multiplication, Mul32uhilo returns a tuple (hi, lo).
    
    Also add support of KeepAlive, to fix build after merge.
    
    Tests addressed_ssa.go, array_ssa.go, break_ssa.go, chan_ssa.go,
    cmp_ssa.go, ctl_ssa.go, map_ssa.go, and string_ssa.go in
    cmd/compile/internal/gc/testdata passed.
    
    Progress on SSA for ARM. Still not complete.
    
    Updates #15365.
    
    Change-Id: I7867c76785a456312de5d8398a6b3f7ca5a4f7ec
    Reviewed-on: https://go-review.googlesource.com/23213Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    8756d925
rulegen.go 18.4 KB