Skip to content

Commit f9800a9

Browse files
benshi001bradfitz
authored andcommitted
test/codegen: add more test cases for arm64
More test cases of combined load for arm64. Change-Id: I7a9f4dcec6930f161cbded1f47dbf7fcef1db4f1 Reviewed-on: https://go-review.googlesource.com/122582 Run-TryBot: Ben Shi <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Cherry Zhang <[email protected]>
1 parent 25c3bb3 commit f9800a9

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

test/codegen/memcombine.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,51 +116,101 @@ func load_le_byte2_uint16(s []byte) uint16 {
116116
return uint16(s[0]) | uint16(s[1])<<8
117117
}
118118

119+
func load_le_byte2_uint16_inv(s []byte) uint16 {
120+
// arm64:`MOVHU\t\(R[0-9]+\)`,-`ORR`,-`MOVB`
121+
return uint16(s[1])<<8 | uint16(s[0])
122+
}
123+
119124
func load_le_byte4_uint32(s []byte) uint32 {
120125
// arm64:`MOVWU\t\(R[0-9]+\)`,-`ORR`,-`MOV[BH]`
121126
return uint32(s[0]) | uint32(s[1])<<8 | uint32(s[2])<<16 | uint32(s[3])<<24
122127
}
123128

129+
func load_le_byte4_uint32_inv(s []byte) uint32 {
130+
// arm64:`MOVWU\t\(R[0-9]+\)`,-`ORR`,-`MOV[BH]`
131+
return uint32(s[3])<<24 | uint32(s[2])<<16 | uint32(s[1])<<8 | uint32(s[0])
132+
}
133+
124134
func load_le_byte8_uint64(s []byte) uint64 {
125135
// arm64:`MOVD\t\(R[0-9]+\)`,-`ORR`,-`MOV[BHW]`
126136
return uint64(s[0]) | uint64(s[1])<<8 | uint64(s[2])<<16 | uint64(s[3])<<24 | uint64(s[4])<<32 | uint64(s[5])<<40 | uint64(s[6])<<48 | uint64(s[7])<<56
127137
}
128138

139+
func load_le_byte8_uint64_inv(s []byte) uint64 {
140+
// arm64:`MOVD\t\(R[0-9]+\)`,-`ORR`,-`MOV[BHW]`
141+
return uint64(s[7])<<56 | uint64(s[6])<<48 | uint64(s[5])<<40 | uint64(s[4])<<32 | uint64(s[3])<<24 | uint64(s[2])<<16 | uint64(s[1])<<8 | uint64(s[0])
142+
}
143+
129144
func load_be_byte2_uint16(s []byte) uint16 {
130145
// arm64:`MOVHU\t\(R[0-9]+\)`,`REV16W`,-`ORR`,-`MOVB`
131146
return uint16(s[0])<<8 | uint16(s[1])
132147
}
133148

149+
func load_be_byte2_uint16_inv(s []byte) uint16 {
150+
// arm64:`MOVHU\t\(R[0-9]+\)`,`REV16W`,-`ORR`,-`MOVB`
151+
return uint16(s[1]) | uint16(s[0])<<8
152+
}
153+
134154
func load_be_byte4_uint32(s []byte) uint32 {
135155
// arm64:`MOVWU\t\(R[0-9]+\)`,`REVW`,-`ORR`,-`REV16W`,-`MOV[BH]`
136156
return uint32(s[0])<<24 | uint32(s[1])<<16 | uint32(s[2])<<8 | uint32(s[3])
137157
}
138158

159+
func load_be_byte4_uint32_inv(s []byte) uint32 {
160+
// arm64:`MOVWU\t\(R[0-9]+\)`,`REVW`,-`ORR`,-`REV16W`,-`MOV[BH]`
161+
return uint32(s[3]) | uint32(s[2])<<8 | uint32(s[1])<<16 | uint32(s[0])<<24
162+
}
163+
139164
func load_be_byte8_uint64(s []byte) uint64 {
140165
// arm64:`MOVD\t\(R[0-9]+\)`,`REV`,-`ORR`,-`REVW`,-`REV16W`,-`MOV[BHW]`
141166
return uint64(s[0])<<56 | uint64(s[1])<<48 | uint64(s[2])<<40 | uint64(s[3])<<32 | uint64(s[4])<<24 | uint64(s[5])<<16 | uint64(s[6])<<8 | uint64(s[7])
142167
}
143168

169+
func load_be_byte8_uint64_inv(s []byte) uint64 {
170+
// arm64:`MOVD\t\(R[0-9]+\)`,`REV`,-`ORR`,-`REVW`,-`REV16W`,-`MOV[BHW]`
171+
return uint64(s[7]) | uint64(s[6])<<8 | uint64(s[5])<<16 | uint64(s[4])<<24 | uint64(s[3])<<32 | uint64(s[2])<<40 | uint64(s[1])<<48 | uint64(s[0])<<56
172+
}
173+
144174
func load_le_byte2_uint16_idx(s []byte, idx int) uint16 {
145175
// arm64:`MOVHU\s\(R[0-9]+\)\(R[0-9]+\)`,-`ORR`,-`MOVB`
146176
return uint16(s[idx]) | uint16(s[idx+1])<<8
147177
}
148178

179+
func load_le_byte2_uint16_idx_inv(s []byte, idx int) uint16 {
180+
// arm64:`MOVHU\s\(R[0-9]+\)\(R[0-9]+\)`,-`ORR`,-`MOVB`
181+
return uint16(s[idx+1])<<8 | uint16(s[idx])
182+
}
183+
149184
func load_le_byte4_uint32_idx(s []byte, idx int) uint32 {
150185
// arm64:`MOVWU\s\(R[0-9]+\)\(R[0-9]+\)`,-`ORR`,-`MOV[BH]`
151186
return uint32(s[idx]) | uint32(s[idx+1])<<8 | uint32(s[idx+2])<<16 | uint32(s[idx+3])<<24
152187
}
153188

189+
func load_le_byte4_uint32_idx_inv(s []byte, idx int) uint32 {
190+
// arm64:`MOVWU\s\(R[0-9]+\)\(R[0-9]+\)`,-`ORR`,-`MOV[BH]`
191+
return uint32(s[idx+3])<<24 | uint32(s[idx+2])<<16 | uint32(s[idx+1])<<8 | uint32(s[idx])
192+
}
193+
154194
func load_le_byte8_uint64_idx(s []byte, idx int) uint64 {
155195
// arm64:`MOVD\s\(R[0-9]+\)\(R[0-9]+\)`,-`ORR`,-`MOV[BHW]`
156196
return uint64(s[idx]) | uint64(s[idx+1])<<8 | uint64(s[idx+2])<<16 | uint64(s[idx+3])<<24 | uint64(s[idx+4])<<32 | uint64(s[idx+5])<<40 | uint64(s[idx+6])<<48 | uint64(s[idx+7])<<56
157197
}
158198

199+
func load_le_byte8_uint64_idx_inv(s []byte, idx int) uint64 {
200+
// arm64:`MOVD\s\(R[0-9]+\)\(R[0-9]+\)`,-`ORR`,-`MOV[BHW]`
201+
return uint64(s[idx+7])<<56 | uint64(s[idx+6])<<48 | uint64(s[idx+5])<<40 | uint64(s[idx+4])<<32 | uint64(s[idx+3])<<24 | uint64(s[idx+2])<<16 | uint64(s[idx+1])<<8 | uint64(s[idx])
202+
}
203+
159204
func load_be_byte2_uint16_idx(s []byte, idx int) uint16 {
160205
// arm64:`MOVHU\s\(R[0-9]+\)\(R[0-9]+\)`,`REV16W`,-`ORR`,-`MOVB`
161206
return uint16(s[idx])<<8 | uint16(s[idx+1])
162207
}
163208

209+
func load_be_byte2_uint16_idx_inv(s []byte, idx int) uint16 {
210+
// arm64:`MOVHU\s\(R[0-9]+\)\(R[0-9]+\)`,`REV16W`,-`ORR`,-`MOVB`
211+
return uint16(s[idx+1]) | uint16(s[idx])<<8
212+
}
213+
164214
func load_be_byte4_uint32_idx(s []byte, idx int) uint32 {
165215
// arm64:`MOVWU\s\(R[0-9]+\)\(R[0-9]+\)`,`REVW`,-`ORR`,-`MOV[BH]`,-`REV16W`
166216
return uint32(s[idx])<<24 | uint32(s[idx+1])<<16 | uint32(s[idx+2])<<8 | uint32(s[idx+3])
@@ -176,21 +226,41 @@ func load_le_byte2_uint16_idx2(s []byte, idx int) uint16 {
176226
return uint16(s[idx<<1]) | uint16(s[(idx<<1)+1])<<8
177227
}
178228

229+
func load_le_byte2_uint16_idx2_inv(s []byte, idx int) uint16 {
230+
// arm64:`MOVHU\s\(R[0-9]+\)\(R[0-9]+<<1\)`,-`ORR`,-`MOVB`
231+
return uint16(s[(idx<<1)+1])<<8 | uint16(s[idx<<1])
232+
}
233+
179234
func load_le_byte4_uint32_idx4(s []byte, idx int) uint32 {
180235
// arm64:`MOVWU\s\(R[0-9]+\)\(R[0-9]+<<2\)`,-`ORR`,-`MOV[BH]`
181236
return uint32(s[idx<<2]) | uint32(s[(idx<<2)+1])<<8 | uint32(s[(idx<<2)+2])<<16 | uint32(s[(idx<<2)+3])<<24
182237
}
183238

239+
func load_le_byte4_uint32_idx4_inv(s []byte, idx int) uint32 {
240+
// arm64:`MOVWU\s\(R[0-9]+\)\(R[0-9]+<<2\)`,-`ORR`,-`MOV[BH]`
241+
return uint32(s[(idx<<2)+3])<<24 | uint32(s[(idx<<2)+2])<<16 | uint32(s[(idx<<2)+1])<<8 | uint32(s[idx<<2])
242+
}
243+
184244
func load_le_byte8_uint64_idx8(s []byte, idx int) uint64 {
185245
// arm64:`MOVD\s\(R[0-9]+\)\(R[0-9]+<<3\)`,-`ORR`,-`MOV[BHW]`
186246
return uint64(s[idx<<3]) | uint64(s[(idx<<3)+1])<<8 | uint64(s[(idx<<3)+2])<<16 | uint64(s[(idx<<3)+3])<<24 | uint64(s[(idx<<3)+4])<<32 | uint64(s[(idx<<3)+5])<<40 | uint64(s[(idx<<3)+6])<<48 | uint64(s[(idx<<3)+7])<<56
187247
}
188248

249+
func load_le_byte8_uint64_idx8_inv(s []byte, idx int) uint64 {
250+
// arm64:`MOVD\s\(R[0-9]+\)\(R[0-9]+<<3\)`,-`ORR`,-`MOV[BHW]`
251+
return uint64(s[(idx<<3)+7])<<56 | uint64(s[(idx<<3)+6])<<48 | uint64(s[(idx<<3)+5])<<40 | uint64(s[(idx<<3)+4])<<32 | uint64(s[(idx<<3)+3])<<24 | uint64(s[(idx<<3)+2])<<16 | uint64(s[(idx<<3)+1])<<8 | uint64(s[idx<<3])
252+
}
253+
189254
func load_be_byte2_uint16_idx2(s []byte, idx int) uint16 {
190255
// arm64:`MOVHU\s\(R[0-9]+\)\(R[0-9]+<<1\)`,`REV16W`,-`ORR`,-`MOVB`
191256
return uint16(s[idx<<1])<<8 | uint16(s[(idx<<1)+1])
192257
}
193258

259+
func load_be_byte2_uint16_idx2_inv(s []byte, idx int) uint16 {
260+
// arm64:`MOVHU\s\(R[0-9]+\)\(R[0-9]+<<1\)`,`REV16W`,-`ORR`,-`MOVB`
261+
return uint16(s[(idx<<1)+1]) | uint16(s[idx<<1])<<8
262+
}
263+
194264
func load_be_byte4_uint32_idx4(s []byte, idx int) uint32 {
195265
// arm64:`MOVWU\s\(R[0-9]+\)\(R[0-9]+<<2\)`,`REVW`,-`ORR`,-`MOV[BH]`,-`REV16W`
196266
return uint32(s[idx<<2])<<24 | uint32(s[(idx<<2)+1])<<16 | uint32(s[(idx<<2)+2])<<8 | uint32(s[(idx<<2)+3])

0 commit comments

Comments
 (0)