From 82539ad8d59729fb45b0bb0edda8f2bddb719eb1 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 15:15:26 +0200 Subject: Adding upstream version 1.17.13. Signed-off-by: Daniel Baumann --- test/strength.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/strength.go (limited to 'test/strength.go') diff --git a/test/strength.go b/test/strength.go new file mode 100644 index 0000000..823d05a --- /dev/null +++ b/test/strength.go @@ -0,0 +1,45 @@ +// runoutput + +// Copyright 2016 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. + +// Generate test of strength reduction for multiplications +// with constants. Especially useful for amd64/386. + +package main + +import "fmt" + +func testMul(fact, bits int) string { + n := fmt.Sprintf("testMul_%d_%d", fact, bits) + fmt.Printf("func %s(s int%d) {\n", n, bits) + + want := 0 + for i := 0; i < 200; i++ { + fmt.Printf(` if want, got := int%d(%d), s*%d; want != got { + failed = true + fmt.Printf("got %d * %%d == %%d, wanted %d\n", s, got) + } +`, bits, want, i, i, want) + want += fact + } + + fmt.Printf("}\n") + return fmt.Sprintf("%s(%d)", n, fact) +} + +func main() { + fmt.Printf("package main\n") + fmt.Printf("import \"fmt\"\n") + fmt.Printf("var failed = false\n") + + f1 := testMul(17, 32) + f2 := testMul(131, 64) + + fmt.Printf("func main() {\n") + fmt.Println(f1) + fmt.Println(f2) + fmt.Printf("if failed {\n panic(\"multiplication failed\")\n}\n") + fmt.Printf("}\n") +} -- cgit v1.2.3