mirror of
https://github.com/golang/go
synced 2024-11-12 07:40:23 -07:00
test/codegen: add codegen tests for div
Change-Id: I6ce8981e85fd55ade6078b0946e54a9215d9deca Reviewed-on: https://go-review.googlesource.com/100575 Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
b8d26225c1
commit
858042b8fd
@ -9,6 +9,10 @@ package codegen
|
||||
// This file contains codegen tests related to arithmetic
|
||||
// simplifications/optimizations.
|
||||
|
||||
// -------------------- //
|
||||
// Multiplication //
|
||||
// -------------------- //
|
||||
|
||||
func Pow2Muls(n1, n2 int) (int, int) {
|
||||
// amd64:"SHLQ\t[$]5",-"IMULQ"
|
||||
// 386:"SHLL\t[$]5",-"IMULL"
|
||||
@ -25,9 +29,7 @@ func Pow2Muls(n1, n2 int) (int, int) {
|
||||
return a, b
|
||||
}
|
||||
|
||||
// ------------------ //
|
||||
// MULs merging //
|
||||
// ------------------ //
|
||||
// Multiplications merging tests
|
||||
|
||||
func MergeMuls1(n int) int {
|
||||
// amd64:"IMUL3Q\t[$]46"
|
||||
@ -58,3 +60,61 @@ func MergeMuls5(a, n int) int {
|
||||
// 386:"ADDL\t[$]-19",-"IMULL\t[$]19"
|
||||
return a*n - 19*n // (a-19)n
|
||||
}
|
||||
|
||||
// -------------- //
|
||||
// Division //
|
||||
// -------------- //
|
||||
|
||||
func Pow2Divs(n1 uint, n2 int) (uint, int) {
|
||||
// 386:"SHRL\t[$]5",-"DIVL"
|
||||
// amd64:"SHRQ\t[$]5",-"DIVQ"
|
||||
// arm:"SRL\t[$]5",-".*udiv"
|
||||
// arm64:"LSR\t[$]5",-"UDIV"
|
||||
a := n1 / 32 // unsigned
|
||||
|
||||
// amd64:"SARQ\t[$]6",-"IDIVQ"
|
||||
// 386:"SARL\t[$]6",-"IDIVL"
|
||||
// arm:"SRA\t[$]6",-".*udiv"
|
||||
// arm64:"ASR\t[$]6",-"SDIV"
|
||||
b := n2 / 64 // signed
|
||||
|
||||
return a, b
|
||||
}
|
||||
|
||||
// Check that constant divisions get turned into MULs
|
||||
func ConstDivs(n1 uint, n2 int) (uint, int) {
|
||||
// amd64:"MOVQ\t[$]-1085102592571150095","MULQ",-"DIVQ"
|
||||
a := n1 / 17 // unsigned
|
||||
|
||||
// amd64:"MOVQ\t[$]-1085102592571150095","IMULQ",-"IDIVQ"
|
||||
b := n2 / 17 // signed
|
||||
|
||||
return a, b
|
||||
}
|
||||
|
||||
func Pow2Mods(n1 uint, n2 int) (uint, int) {
|
||||
// 386:"ANDL\t[$]31",-"DIVL"
|
||||
// amd64:"ANDQ\t[$]31",-"DIVQ"
|
||||
// arm:"AND\t[$]31",-".*udiv"
|
||||
// arm64:"AND\t[$]31",-"UDIV"
|
||||
a := n1 % 32 // unsigned
|
||||
|
||||
// 386:-"IDIVL"
|
||||
// amd64:-"IDIVQ"
|
||||
// arm:-".*udiv"
|
||||
// arm64:-"REM"
|
||||
b := n2 % 64 // signed
|
||||
|
||||
return a, b
|
||||
}
|
||||
|
||||
// Check that constant modulo divs get turned into MULs
|
||||
func ConstMods(n1 uint, n2 int) (uint, int) {
|
||||
// amd64:"MOVQ\t[$]-1085102592571150095","MULQ",-"DIVQ"
|
||||
a := n1 % 17 // unsigned
|
||||
|
||||
// amd64:"MOVQ\t[$]-1085102592571150095","IMULQ",-"IDIVQ"
|
||||
b := n2 % 17 // signed
|
||||
|
||||
return a, b
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user