]> Cypherpunks repositories - gostls13.git/commitdiff
test/codegen: add more combined store tests for arm64
authorBen Shi <powerman1st@163.com>
Tue, 10 Jul 2018 10:32:04 +0000 (10:32 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 2 Aug 2018 04:23:45 +0000 (04:23 +0000)
Some combined store optimization was already implemented
in go-1.11, but there is no corresponding test cases.

Change-Id: Iebdad186e92047942e53a74f2c20b390922e1e9c
Reviewed-on: https://go-review.googlesource.com/122915
Run-TryBot: Ben Shi <powerman1st@163.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
test/codegen/memcombine.go

index b849eef964c0e0c63e76ebceb2204ef7fd4c6339..0db366250f25bbcb187193409c071a35178b1988 100644 (file)
@@ -402,12 +402,66 @@ func store_be16_idx(b []byte, idx int) {
        binary.BigEndian.PutUint16(b[idx:], sink16)
 }
 
+func store_le_byte_2(b []byte, val uint16) {
+       _ = b[2]
+       // arm64:`MOVH\sR[0-9]+,\s1\(R[0-9]+\)`,-`MOVB`
+       b[1], b[2] = byte(val), byte(val>>8)
+}
+
+func store_le_byte_4(b []byte, val uint32) {
+       _ = b[4]
+       // arm64:`MOVW\sR[0-9]+,\s1\(R[0-9]+\)`,-`MOVB`,-`MOVH`
+       b[1], b[2], b[3], b[4] = byte(val), byte(val>>8), byte(val>>16), byte(val>>24)
+}
+
+func store_le_byte_8(b []byte, val uint64) {
+       _ = b[8]
+       // arm64:`MOVD\sR[0-9]+,\s1\(R[0-9]+\)`,-`MOVB`,-`MOVH`,-`MOVW`
+       b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8] = byte(val), byte(val>>8), byte(val>>16), byte(val>>24), byte(val>>32), byte(val>>40), byte(val>>48), byte(val>>56)
+}
+
+func store_be_byte_2(b []byte, val uint16) {
+       _ = b[2]
+       // arm64:`REV16W`,`MOVH\sR[0-9]+,\s1\(R[0-9]+\)`,-`MOVB`
+       b[1], b[2] = byte(val>>8), byte(val)
+}
+
+func store_be_byte_4(b []byte, val uint32) {
+       _ = b[4]
+       // arm64:`REVW`,`MOVW\sR[0-9]+,\s1\(R[0-9]+\)`,-`MOVB`,-`MOVH`,-`REV16W`
+       b[1], b[2], b[3], b[4] = byte(val>>24), byte(val>>16), byte(val>>8), byte(val)
+}
+
+func store_be_byte_8(b []byte, val uint64) {
+       _ = b[8]
+       // arm64:`REV`,`MOVD\sR[0-9]+,\s1\(R[0-9]+\)`,-`MOVB`,-`MOVH`,-`MOVW`,-`REV16W`,-`REVW`
+       b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8] = byte(val>>56), byte(val>>48), byte(val>>40), byte(val>>32), byte(val>>24), byte(val>>16), byte(val>>8), byte(val)
+}
+
+func store_le_byte_2_idx(b []byte, idx int, val uint16) {
+       _, _ = b[idx+0], b[idx+1]
+       // arm64:`MOVH\sR[0-9]+,\s\(R[0-9]+\)\(R[0-9]+\)`,-`MOVB`
+       b[idx+1], b[idx+0] = byte(val>>8), byte(val)
+}
+
+func store_le_byte_4_idx(b []byte, idx int, val uint32) {
+       _, _, _, _ = b[idx+0], b[idx+1], b[idx+2], b[idx+3]
+       // arm64:`MOVW\sR[0-9]+,\s\(R[0-9]+\)\(R[0-9]+\)`,-`MOVB`,-`MOVH`
+       b[idx+3], b[idx+2], b[idx+1], b[idx+0] = byte(val>>24), byte(val>>16), byte(val>>8), byte(val)
+}
+
 func store_be_byte_2_idx(b []byte, idx int, val uint16) {
        _, _ = b[idx+0], b[idx+1]
        // arm64:`REV16W`,`MOVH\sR[0-9]+,\s\(R[0-9]+\)\(R[0-9]+\)`,-`MOVB`
        b[idx+0], b[idx+1] = byte(val>>8), byte(val)
 }
 
+func store_be_byte_4_idx(b []byte, idx int, val uint32) {
+       _, _, _, _ = b[idx+0], b[idx+1], b[idx+2], b[idx+3]
+       // arm64:`REVW`,`MOVW\sR[0-9]+,\s\(R[0-9]+\)\(R[0-9]+\)`,-`MOVB`,-`MOVH`,-`REV16W`
+       b[idx+0], b[idx+1], b[idx+2], b[idx+3] = byte(val>>24), byte(val>>16), byte(val>>8), byte(val)
+}
+
 func store_be_byte_2_idx2(b []byte, idx int, val uint16) {
        _, _ = b[(idx<<1)+0], b[(idx<<1)+1]
        // arm64:`REV16W`,`MOVH\sR[0-9]+,\s\(R[0-9]+\)\(R[0-9]+<<1\)`,-`MOVB`