Files
golang.go/test/codegen/multiply.go
Keith Randall 1582ad4105 test/codegen: fix some unbalanced quotes
Change-Id: I081da8c79f0264118e079af21ff58c511ae37e6c
Reviewed-on: https://go-review.googlesource.com/c/go/+/760682
Reviewed-by: Junyang Shao <shaojunyang@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Joel Sing <joel@sing.id.au>
Reviewed-by: Keith Randall <khr@google.com>
Auto-Submit: Keith Randall <khr@google.com>
2026-03-31 11:01:20 -07:00

373 lines
8.8 KiB
Go

// asmcheck
// Copyright 2024 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 related to strength
// reduction of integer multiply.
func m0(x int64) int64 {
// amd64: "XORL"
// arm64: "MOVD ZR"
// loong64: "MOVV R0"
return x * 0
}
func m2(x int64) int64 {
// amd64: "ADDQ"
// arm64: "ADD"
// loong64: "ADDVU"
return x * 2
}
func m3(x int64) int64 {
// amd64: "LEAQ .*[*]2"
// arm64: "ADD R[0-9]+<<1,"
// loong64: "ALSLV [$]1,"
return x * 3
}
func m4(x int64) int64 {
// amd64: "SHLQ [$]2,"
// arm64: "LSL [$]2,"
// loong64: "SLLV [$]2,"
return x * 4
}
func m5(x int64) int64 {
// amd64: "LEAQ .*[*]4"
// arm64: "ADD R[0-9]+<<2,"
// loong64: "ALSLV [$]2,"
return x * 5
}
func m6(x int64) int64 {
// amd64: "LEAQ .*[*]1" "LEAQ .*[*]2"
// arm64: "ADD R[0-9]+," "ADD R[0-9]+<<1,"
// loong64: "ADDVU" "ADDVU" "ADDVU"
return x * 6
}
func m7(x int64) int64 {
// amd64: "LEAQ .*[*]2"
// arm64: "LSL [$]3," "SUB R[0-9]+,"
// loong64: "ALSLV [$]1," "ALSLV [$]1,"
return x * 7
}
func m8(x int64) int64 {
// amd64: "SHLQ [$]3,"
// arm64: "LSL [$]3,"
// loong64: "SLLV [$]3,"
return x * 8
}
func m9(x int64) int64 {
// amd64: "LEAQ .*[*]8"
// arm64: "ADD R[0-9]+<<3,"
// loong64: "ALSLV [$]3,"
return x * 9
}
func m10(x int64) int64 {
// amd64: "LEAQ .*[*]1" "LEAQ .*[*]4"
// arm64: "ADD R[0-9]+," "ADD R[0-9]+<<2,"
// loong64: "ADDVU" "ALSLV [$]2,"
return x * 10
}
func m11(x int64) int64 {
// amd64: "LEAQ .*[*]4" "LEAQ .*[*]2"
// arm64: "MOVD [$]11," "MUL"
// loong64: "ALSLV [$]2," "ALSLV [$]1,"
return x * 11
}
func m12(x int64) int64 {
// amd64: "LEAQ .*[*]2" "SHLQ [$]2,"
// arm64: "LSL [$]2," "ADD R[0-9]+<<1,"
// loong64: "SLLV" "ALSLV [$]1,"
return x * 12
}
func m13(x int64) int64 {
// amd64: "LEAQ .*[*]2" "LEAQ .*[*]4"
// arm64: "MOVD [$]13," "MUL"
// loong64: "ALSLV [$]1," "ALSLV [$]2,"
return x * 13
}
func m14(x int64) int64 {
// amd64: "IMUL3Q [$]14,"
// arm64: "LSL [$]4," "SUB R[0-9]+<<1,"
// loong64: "ADDVU" "ALSLV [$]1" "ALSLV [$]2"
return x * 14
}
func m15(x int64) int64 {
// amd64: "LEAQ .*[*]2" "LEAQ .*[*]4"
// arm64: "LSL [$]4," "SUB R[0-9]+,"
// loong64: "ALSLV [$]1," "ALSLV [$]2,"
return x * 15
}
func m16(x int64) int64 {
// amd64: "SHLQ [$]4,"
// arm64: "LSL [$]4,"
// loong64: "SLLV [$]4,"
return x * 16
}
func m17(x int64) int64 {
// amd64: "LEAQ .*[*]1" "LEAQ .*[*]8"
// arm64: "ADD R[0-9]+<<4,"
// loong64: "ALSLV [$]"
return x * 17
}
func m18(x int64) int64 {
// amd64: "LEAQ .*[*]1" "LEAQ .*[*]8"
// arm64: "ADD R[0-9]+," "ADD R[0-9]+<<3,"
// loong64: "ADDVU" "ALSLV [$]3,"
return x * 18
}
func m19(x int64) int64 {
// amd64: "LEAQ .*[*]8" "LEAQ .*[*]2"
// arm64: "MOVD [$]19," "MUL"
// loong64: "ALSLV [$]3," "ALSLV [$]1,"
return x * 19
}
func m20(x int64) int64 {
// amd64: "LEAQ .*[*]4" "SHLQ [$]2,"
// arm64: "LSL [$]2," "ADD R[0-9]+<<2,"
// loong64: "SLLV [$]2," "ALSLV [$]2,"
return x * 20
}
func m21(x int64) int64 {
// amd64: "LEAQ .*[*]4" "LEAQ .*[*]4"
// arm64: "MOVD [$]21," "MUL"
// loong64: "ALSLV [$]2," "ALSLV [$]2,"
return x * 21
}
func m22(x int64) int64 {
// amd64: "IMUL3Q [$]22,"
// arm64: "MOVD [$]22," "MUL"
// loong64: "ADDVU" "ALSLV [$]2," "ALSLV [$]2,"
return x * 22
}
func m23(x int64) int64 {
// amd64: "IMUL3Q [$]23,"
// arm64: "MOVD [$]23," "MUL"
// loong64: "ALSLV [$]1," "SUBVU" "ALSLV [$]3,"
return x * 23
}
func m24(x int64) int64 {
// amd64: "LEAQ .*[*]2" "SHLQ [$]3,"
// arm64: "LSL [$]3," "ADD R[0-9]+<<1,"
// loong64: "SLLV [$]3" "ALSLV [$]1,"
return x * 24
}
func m25(x int64) int64 {
// amd64: "LEAQ .*[*]4" "LEAQ .*[*]4"
// arm64: "MOVD [$]25," "MUL"
// loong64: "ALSLV [$]2," "ALSLV [$]2,"
return x * 25
}
func m26(x int64) int64 {
// amd64: "IMUL3Q [$]26,"
// arm64: "MOVD [$]26," "MUL"
// loong64: "ADDVU" "ALSLV [$]1," "ALSLV [$]3,"
return x * 26
}
func m27(x int64) int64 {
// amd64: "LEAQ .*[*]2" "LEAQ .*[*]8"
// arm64: "MOVD [$]27," "MUL"
// loong64: "ALSLV [$]1," "ALSLV [$]3,"
return x * 27
}
func m28(x int64) int64 {
// amd64: "IMUL3Q [$]28,"
// arm64: "LSL [$]5," "SUB R[0-9]+<<2,"
// loong64: "ALSLV [$]1," "SLLV [$]2," "ALSLV [$]3,"
return x * 28
}
func m29(x int64) int64 {
// amd64: "IMUL3Q [$]29,"
// arm64: "MOVD [$]29," "MUL"
// loong64: "ALSLV [$]1," "SLLV [$]5," "SUBVU"
return x * 29
}
func m30(x int64) int64 {
// amd64: "IMUL3Q [$]30,"
// arm64: "LSL [$]5," "SUB R[0-9]+<<1,"
// loong64: "ADDVU" "SLLV [$]5," "SUBVU"
return x * 30
}
func m31(x int64) int64 {
// amd64: "SHLQ [$]5," "SUBQ"
// arm64: "LSL [$]5," "SUB R[0-9]+,"
// loong64: "SLLV [$]5," "SUBVU"
return x * 31
}
func m32(x int64) int64 {
// amd64: "SHLQ [$]5,"
// arm64: "LSL [$]5,"
// loong64: "SLLV [$]5,"
return x * 32
}
func m33(x int64) int64 {
// amd64: "SHLQ [$]2," "LEAQ .*[*]8"
// arm64: "ADD R[0-9]+<<5,"
// loong64: "ADDVU" "ALSLV [$]4,"
return x * 33
}
func m34(x int64) int64 {
// amd64: "SHLQ [$]5," "LEAQ .*[*]2"
// arm64: "ADD R[0-9]+," "ADD R[0-9]+<<4,"
// loong64: "ADDVU" "ALSLV [$]4,"
return x * 34
}
func m35(x int64) int64 {
// amd64: "IMUL3Q [$]35,"
// arm64: "MOVD [$]35," "MUL"
// loong64: "ALSLV [$]4," "ALSLV [$]1,"
return x * 35
}
func m36(x int64) int64 {
// amd64: "LEAQ .*[*]8" "SHLQ [$]2,"
// arm64: "LSL [$]2," "ADD R[0-9]+<<3,"
// loong64: "SLLV [$]2," "ALSLV [$]3,"
return x * 36
}
func m37(x int64) int64 {
// amd64: "LEAQ .*[*]8" "LEAQ .*[*]4"
// arm64: "MOVD [$]37," "MUL"
// loong64: "ALSLV [$]3," "ALSLV [$]2,"
return x * 37
}
func m38(x int64) int64 {
// amd64: "IMUL3Q [$]38,"
// arm64: "MOVD [$]38," "MUL"
// loong64: "ALSLV [$]3," "ALSLV [$]2,"
return x * 38
}
func m39(x int64) int64 {
// amd64: "IMUL3Q [$]39,"
// arm64: "MOVD [$]39," "MUL"
// loong64: "ALSLV [$]2," "SUBVU" "ALSLV [$]3,"
return x * 39
}
func m40(x int64) int64 {
// amd64: "LEAQ .*[*]4" "SHLQ [$]3,"
// arm64: "LSL [$]3," "ADD R[0-9]+<<2,"
// loong64: "SLLV [$]3," "ALSLV [$]2,"
return x * 40
}
func mn1(x int64) int64 {
// amd64: "NEGQ "
// arm64: "NEG R[0-9]+,"
// loong64: "SUBVU R[0-9], R0,"
return x * -1
}
func mn2(x int64) int64 {
// amd64: "NEGQ" "ADDQ"
// arm64: "NEG R[0-9]+<<1,"
// loong64: "ADDVU" "SUBVU R[0-9], R0,"
return x * -2
}
func mn3(x int64) int64 {
// amd64: "NEGQ" "LEAQ .*[*]2"
// arm64: "SUB R[0-9]+<<2,"
// loong64: "SUBVU" "ALSLV [$]1,"
return x * -3
}
func mn4(x int64) int64 {
// amd64: "NEGQ" "SHLQ [$]2,"
// arm64: "NEG R[0-9]+<<2,"
// loong64: "SLLV [$]2," "SUBVU R[0-9], R0,"
return x * -4
}
func mn5(x int64) int64 {
// amd64: "NEGQ" "LEAQ .*[*]4"
// arm64: "NEG R[0-9]+," "ADD R[0-9]+<<2,"
// loong64: "SUBVU" "ALSLV [$]2,"
return x * -5
}
func mn6(x int64) int64 {
// amd64: "IMUL3Q [$]-6,"
// arm64: "ADD R[0-9]+," "SUB R[0-9]+<<2,"
// loong64: "ADDVU" "SUBVU" "ALSLV [$]3,"
return x * -6
}
func mn7(x int64) int64 {
// amd64: "NEGQ" "LEAQ .*[*]8"
// arm64: "SUB R[0-9]+<<3,"
// loong64: "SUBVU" "ALSLV [$]3,"
return x * -7
}
func mn8(x int64) int64 {
// amd64: "NEGQ" "SHLQ [$]3,"
// arm64: "NEG R[0-9]+<<3,"
// loong64: "SLLV [$]3" "SUBVU R[0-9], R0,"
return x * -8
}
func mn9(x int64) int64 {
// amd64: "NEGQ" "LEAQ .*[*]8"
// arm64: "NEG R[0-9]+," "ADD R[0-9]+<<3,"
// loong64: "SUBVU" "ALSLV [$]3,"
return x * -9
}
func mn10(x int64) int64 {
// amd64: "IMUL3Q [$]-10,"
// arm64: "MOVD [$]-10," "MUL"
// loong64: "ADDVU" "ALSLV [$]3" "SUBVU"
return x * -10
}
func mn11(x int64) int64 {
// amd64: "IMUL3Q [$]-11,"
// arm64: "MOVD [$]-11," "MUL"
// loong64: "ALSLV [$]2," "SUBVU" "ALSLV [$]4,"
return x * -11
}
func mn12(x int64) int64 {
// amd64: "IMUL3Q [$]-12,"
// arm64: "LSL [$]2," "SUB R[0-9]+<<2,"
// loong64: "SUBVU" "SLLV [$]2," "ALSLV [$]4,"
return x * -12
}
func mn13(x int64) int64 {
// amd64: "IMUL3Q [$]-13,"
// arm64: "MOVD [$]-13," "MUL"
// loong64: "ALSLV [$]4," "SLLV [$]2, " "SUBVU"
return x * -13
}
func mn14(x int64) int64 {
// amd64: "IMUL3Q [$]-14,"
// arm64: "ADD R[0-9]+," "SUB R[0-9]+<<3,"
// loong64: "ADDVU" "SUBVU" "ALSLV [$]4,"
return x * -14
}
func mn15(x int64) int64 {
// amd64: "SHLQ [$]4," "SUBQ"
// arm64: "SUB R[0-9]+<<4,"
// loong64: "SUBVU" "ALSLV [$]4,"
return x * -15
}
func mn16(x int64) int64 {
// amd64: "NEGQ" "SHLQ [$]4,"
// arm64: "NEG R[0-9]+<<4,"
// loong64: "SLLV [$]4," "SUBVU R[0-9], R0,"
return x * -16
}
func mn17(x int64) int64 {
// amd64: "IMUL3Q [$]-17,"
// arm64: "NEG R[0-9]+," "ADD R[0-9]+<<4,"
// loong64: "SUBVU" "ALSLV [$]4,"
return x * -17
}
func mn18(x int64) int64 {
// amd64: "IMUL3Q [$]-18,"
// arm64: "MOVD [$]-18," "MUL"
// loong64: "ADDVU" "ALSLV [$]4," "SUBVU"
return x * -18
}
func mn19(x int64) int64 {
// amd64: "IMUL3Q [$]-19,"
// arm64: "MOVD [$]-19," "MUL"
// loong64: "ALSLV [$]1," "ALSLV [$]4," "SUBVU"
return x * -19
}
func mn20(x int64) int64 {
// amd64: "IMUL3Q [$]-20,"
// arm64: "MOVD [$]-20," "MUL"
// loong64: "SLLV [$]2," "ALSLV [$]4," "SUBVU"
return x * -20
}