| // asmcheck |
| |
| // Copyright 2026 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package codegen |
| |
| // This file contains codegen tests for scaled index addressing |
| // with non-power-of-two slice strides (issue #80639). |
| |
| //go:noinline |
| func idx3(p []uint32, x int) uint32 { |
| // arm64: `MOVWU\s*\(R[0-9]+\)\(R[0-9]+<<2\)` |
| // amd64: `MOVL\s*\([A-Z0-9]+\)\([A-Z0-9]+\*4\)` |
| return p[3*x] |
| } |
| |
| //go:noinline |
| func idx7(p []uint32, x int) uint32 { |
| // arm64: `MOVWU\s*\(R[0-9]+\)\(R[0-9]+<<2\)` -`SUB\s*R[0-9]+<<2` |
| // amd64: `MOVL\s*\([A-Z0-9]+\)\([A-Z0-9]+\*4\)` |
| return p[7*x] |
| } |
| |
| //go:noinline |
| func idx11(p []uint32, x int) uint32 { |
| // arm64: `MOVWU\s*\(R[0-9]+\)\(R[0-9]+<<2\)` |
| // amd64: `MOVL\s*\([A-Z0-9]+\)\([A-Z0-9]+\*4\)` |
| return p[11*x] |
| } |
| |
| //go:noinline |
| func idx5_64(p []uint64, x int) uint64 { |
| // arm64: `MOVD\s*\(R[0-9]+\)\(R[0-9]+<<3\)` |
| // amd64: `MOVQ\s*\([A-Z0-9]+\)\([A-Z0-9]+\*8\)` |
| return p[5*x] |
| } |
| |
| //go:noinline |
| func idx7_16(p []uint16, x int) uint16 { |
| // arm64: `MOVHU\s*\(R[0-9]+\)\(R[0-9]+<<1\)` -`SUB\s*R[0-9]+<<1` |
| // amd64: `MOVW(L|Q)?ZX\s*\([A-Z0-9]+\)\([A-Z0-9]+\*2\)` |
| return p[7*x] |
| } |
| |
| //go:noinline |
| func store7(p []uint32, x int, v uint32) { |
| // arm64: `MOVW\s*R[0-9]+,\s*\(R[0-9]+\)\(R[0-9]+<<2\)` -`SUB\s*R[0-9]+<<2` |
| // amd64: `MOVL\s*[A-Z0-9]+,\s*\([A-Z0-9]+\)\([A-Z0-9]+\*4\)` |
| p[7*x] = v |
| } |
| |
| //go:noinline |
| func cse7(p []uint32, x int) uint32 { |
| // arm64: `MOVWU\s*\(R[0-9]+\)\(R[0-9]+<<2\)` -`SUB\s*R[0-9]+<<2` |
| // amd64: `MOVL\s*\([A-Z0-9]+\)\([A-Z0-9]+\*4\)` |
| return p[7*x] + p[7*x+1] |
| } |
| |
| //go:noinline |
| func genMath(x int) int { |
| // amd64: `IMUL3?Q\s*[$]28` -`SHLQ\s*[$]2` |
| // arm64: `SUB\s*R[0-9]+<<2` `LSL\s*[$]5` -`LSL\s*[$]2` |
| // riscv64: `(MUL|MADD)` -`SLLI\s*.*,\s*2` |
| return 4 * (7 * x) |
| } |
| |